From daca40850c81634dab677cdecac95af5e925ff54 Mon Sep 17 00:00:00 2001 From: Mitch-Budibase Date: Fri, 24 Dec 2021 10:38:03 +0000 Subject: [PATCH] New Tests and Changes based on updated test environment -Changes made to reflect the new layouts of the test env --e.g. Changes to the app grid, changes to UI screens -Updated commands --New commands added & some updated -New tests --Revert App --AutoScreensUI --Change app icon and colour --Data source testing In particular to data source testing -I have a file for mySQL, PostgreSQL, Oracle, and REST. --enabled better regression testing for each Other changes made for: -QueryLevelTransformers tests -Table tests -Renaming applications -Automations -Multi-option datastype New env file added too --- packages/builder/cypress.env.json | 10 + packages/builder/cypress.json | 4 +- .../addMultiOptionDatatype.spec.js | 2 +- .../cypress/integration/autoScreensUI.spec.js | 47 ++ .../changeAppIconAndColour.spec.js | 39 ++ .../integration/createAutomation.spec.js | 3 +- .../cypress/integration/createTable.spec.js | 4 +- ...addAndConfigureExternalDataSources.spec.js | 53 -- .../datasources/datasourceWizard.spec.js | 20 +- .../incorrectExternalDatasourceConfig.spec.js | 29 - .../integration/datasources/mySql.spec.js | 190 ++++++ .../integration/datasources/oracle.spec.js | 179 ++++++ .../datasources/postgreSql.spec.js | 248 ++++++++ .../integration/datasources/rest.spec.js | 40 ++ .../queryLevelTransformers.spec.js | 65 +- .../integration/renameAnApplication.spec.js | 15 +- .../cypress/integration/revertApp.spec.js | 62 ++ packages/builder/cypress/support/commands.js | 184 +++--- .../support/queryLevelTransformerFunction.js | 16 +- .../queryLevelTransformerFunctionWithData.js | 51 +- packages/builder/package.json | 2 +- packages/builder/yarn.lock | 570 ++++-------------- 22 files changed, 1164 insertions(+), 669 deletions(-) create mode 100644 packages/builder/cypress.env.json create mode 100644 packages/builder/cypress/integration/autoScreensUI.spec.js create mode 100644 packages/builder/cypress/integration/changeAppIconAndColour.spec.js delete mode 100644 packages/builder/cypress/integration/datasources/addAndConfigureExternalDataSources.spec.js delete mode 100644 packages/builder/cypress/integration/datasources/incorrectExternalDatasourceConfig.spec.js create mode 100644 packages/builder/cypress/integration/datasources/mySql.spec.js create mode 100644 packages/builder/cypress/integration/datasources/oracle.spec.js create mode 100644 packages/builder/cypress/integration/datasources/postgreSql.spec.js create mode 100644 packages/builder/cypress/integration/datasources/rest.spec.js create mode 100644 packages/builder/cypress/integration/revertApp.spec.js diff --git a/packages/builder/cypress.env.json b/packages/builder/cypress.env.json new file mode 100644 index 0000000000..b5bed186f3 --- /dev/null +++ b/packages/builder/cypress.env.json @@ -0,0 +1,10 @@ +{ +"HOST_IP": "", +"oracle": { + "HOST": "54.216.41.156", + "PORT": "1521", + "DATABASE": "xepdb1", + "USER": "hr", + "PASSWORD": "budiverse9k" + } +} \ No newline at end of file diff --git a/packages/builder/cypress.json b/packages/builder/cypress.json index 647fcd04b6..246d6d78d6 100644 --- a/packages/builder/cypress.json +++ b/packages/builder/cypress.json @@ -5,7 +5,7 @@ "env": { "PORT": "10001", "JWT_SECRET": "test", - "HOST_IP": "", - "TEST_ENV" : true + "HOST_IP": "52.49.184.138", + "TEST_ENV" : false } } diff --git a/packages/builder/cypress/integration/addMultiOptionDatatype.spec.js b/packages/builder/cypress/integration/addMultiOptionDatatype.spec.js index bc2619c53d..d302f0bec0 100644 --- a/packages/builder/cypress/integration/addMultiOptionDatatype.spec.js +++ b/packages/builder/cypress/integration/addMultiOptionDatatype.spec.js @@ -14,7 +14,7 @@ context("Add Multi-Option Datatype", () => { cy.navigateToFrontend() cy.wait(500) // Add data provider - cy.get(`[data-cy="category-Data Provider"]`).click() + cy.addComponent("Data", "Data Provider") cy.get('[data-cy="dataSource-prop-control"]').click() cy.get(".dropdown").contains("Multi Data").click() cy.wait(500) diff --git a/packages/builder/cypress/integration/autoScreensUI.spec.js b/packages/builder/cypress/integration/autoScreensUI.spec.js new file mode 100644 index 0000000000..4708d9bf30 --- /dev/null +++ b/packages/builder/cypress/integration/autoScreensUI.spec.js @@ -0,0 +1,47 @@ +context("Auto Screens UI", () => { + before(() => { + cy.login() + cy.createTestApp() + }) + + it("should generate internal table screens", () => { + // Create autogenerated screens from the internal table + cy.createAutogeneratedScreens(["Cypress Tests"]) + // Confirm screens have been auto generated + cy.get(".nav-items-container").contains("cypress-tests").click() + cy.get(".nav-items-container").should('contain', 'cypress-tests/:id') + .and('contain', 'cypress-tests/new/row') + }) + + it("should generate multiple internal table screens at once", () => { + // Create a second internal table + const initialTable = "Cypress Tests" + const secondTable = "Table Two" + cy.createTable(secondTable) + // Create autogenerated screens from the internal tables + cy.createAutogeneratedScreens([initialTable, secondTable]) + // Confirm screens have been auto generated + cy.get(".nav-items-container").contains("cypress-tests").click() + // Previously generated tables are suffixed with numbers - as expected + cy.get(".nav-items-container").should('contain', 'cypress-tests-2/:id') + .and('contain', 'cypress-tests-2/new/row') + cy.get(".nav-items-container").contains("table-two").click() + cy.get(".nav-items-container").should('contain', 'table-two/:id') + .and('contain', 'table-two/new/row') + }) + + if (Cypress.env("TEST_ENV")) { + it("should generate data source screens", () => { + // Using MySQL data source for testing this + const datasource = "MySQL" + // Select & configure MySQL data source + cy.selectExternalDatasource(datasource) + cy.addDatasourceConfig(datasource) + // Create autogenerated screens from a MySQL table - MySQL contains books table + cy.createAutogeneratedScreens(["books"]) + cy.get(".nav-items-container").contains("books").click() + cy.get(".nav-items-container").should('contain', 'books/:id') + .and('contain', 'books/new/row') + }) + } +}) \ No newline at end of file diff --git a/packages/builder/cypress/integration/changeAppIconAndColour.spec.js b/packages/builder/cypress/integration/changeAppIconAndColour.spec.js new file mode 100644 index 0000000000..83c4794d55 --- /dev/null +++ b/packages/builder/cypress/integration/changeAppIconAndColour.spec.js @@ -0,0 +1,39 @@ +context("Change Application Icon and Colour", () => { + before(() => { + cy.login() + }) + + it("should change the icon and colour for an application", () => { + // Search for test application + cy.searchForApplication("Cypress Tests") + cy.get(".appTable") + .within(() => { + cy.get(".spectrum-Icon").eq(1).click() + }) + cy.get(".spectrum-Menu").contains("Edit icon").click() + // Select random icon + cy.get(".grid").within(() => { + cy.get(".icon-item").eq(Math.floor(Math.random() * 23) + 1).click() + }) + // Select random colour + cy.get(".fill").click() + cy.get(".colors").within(() => { + cy.get(".color").eq(Math.floor(Math.random() * 33) + 1).click() + }) + cy.intercept('**/applications/**').as('iconChange') + cy.get(".spectrum-Button").contains("Save").click({ force: true }) + cy.wait("@iconChange") + cy.get("@iconChange").its('response.statusCode') + .should('eq', 200) + cy.wait(1000) + // Confirm icon has changed from default + // Confirm colour has been applied - There is no default colour + cy.get(".appTable") + .within(() => { + cy.get('[aria-label]').eq(0).children() + .should('have.attr', 'xlink:href').and('not.contain', '#spectrum-icon-18-Apps') + cy.get(".title").children().children() + .should('have.attr', 'style').and('contains', 'color') + }) + }) +}) \ No newline at end of file diff --git a/packages/builder/cypress/integration/createAutomation.spec.js b/packages/builder/cypress/integration/createAutomation.spec.js index 0620a15e25..37cf73bcdd 100644 --- a/packages/builder/cypress/integration/createAutomation.spec.js +++ b/packages/builder/cypress/integration/createAutomation.spec.js @@ -24,7 +24,8 @@ context("Create a automation", () => { cy.contains("dog").click() // Create action - cy.contains("Add Action").click() + cy.get('[aria-label="AddCircle"]').eq(1).click() + //cy.contains("Add Action").click() cy.get(".modal-inner-wrapper").within(() => { cy.wait(1000) cy.contains("Create Row").trigger('mouseover').click().click() diff --git a/packages/builder/cypress/integration/createTable.spec.js b/packages/builder/cypress/integration/createTable.spec.js index 93428caf0c..55dceebab2 100644 --- a/packages/builder/cypress/integration/createTable.spec.js +++ b/packages/builder/cypress/integration/createTable.spec.js @@ -78,10 +78,11 @@ context("Create a Table", () => { }) it("deletes a column", () => { + const columnName = "nameupdated" cy.get(".title").click() cy.get(".spectrum-Table-editIcon > use").click() cy.contains("Delete").click() - cy.wait(50) + cy.get('[data-cy="delete-column-confirm"]').type(columnName) cy.contains("Delete Column").click() cy.contains("nameupdated").should("not.exist") }) @@ -95,6 +96,7 @@ context("Create a Table", () => { cy.get(".actions .spectrum-Icon").click({ force: true }) }) cy.get(".spectrum-Menu > :nth-child(2)").click() + cy.get('[data-cy="delete-table-confirm"]').type("dog") cy.contains("Delete Table").click() cy.contains("dog").should("not.exist") }) diff --git a/packages/builder/cypress/integration/datasources/addAndConfigureExternalDataSources.spec.js b/packages/builder/cypress/integration/datasources/addAndConfigureExternalDataSources.spec.js deleted file mode 100644 index 149c55b02f..0000000000 --- a/packages/builder/cypress/integration/datasources/addAndConfigureExternalDataSources.spec.js +++ /dev/null @@ -1,53 +0,0 @@ -context("Add and Configure External Data Sources", () => { - before(() => { - cy.login() - cy.createTestApp() - }) - - // PostgreSQL/MySQL tests currently only run in TEST environment - if (Cypress.env("TEST_ENV")) { - it("should add and configure a PostgreSQL data source", () => { - // Select PostgreSQL datasource and add config - const datasource = "PostgreSQL" - cy.selectExternalDatasource(datasource) - cy.addSqlDatasourceConfig(datasource) - - // Confirm fetch tables was successful - cy.get(".query-list").then(() => { - cy.get(".query-list-item").should('exist') - }) - }) - - it("should add and configure a MySQL data source", () => { - // Select MySQL datasource and add config - const datasource = "MySQL" - cy.selectExternalDatasource(datasource) - cy.addSqlDatasourceConfig(datasource) - - // Confirm fetch tables was successful - cy.get(".query-list").then(() => { - cy.get(".query-list-item").should('exist') - }) - }) - } - - it("should add and configure a REST data source", () => { - // Select REST datasource and add config - const datasource = "REST" - const restUrl = "https://api.openbrewerydb.org/breweries" - cy.selectExternalDatasource(datasource) - cy.addRestDatasourceConfig(restUrl) - - // Following config - Click Add Query, then Run Query - cy.get(".spectrum-Button").contains("Add Query").click({ force: true }) - cy.wait(500) - cy.get(".viewer-controls").within(() => { - cy.get(".spectrum-Button").contains("Run Query").click({ force: true }) - }) - // Get the results from running query - cy.get(".viewer").within(() => { - cy.get(".preview").should( - 'not.have.value', 'Please run your query to fetch some data.') - }) - }) -}) diff --git a/packages/builder/cypress/integration/datasources/datasourceWizard.spec.js b/packages/builder/cypress/integration/datasources/datasourceWizard.spec.js index e5c88f26ee..612a8b939a 100644 --- a/packages/builder/cypress/integration/datasources/datasourceWizard.spec.js +++ b/packages/builder/cypress/integration/datasources/datasourceWizard.spec.js @@ -6,9 +6,9 @@ context("Datasource Wizard", () => { it("should navigate in and out of a datasource via wizard", () => { // Select PostgreSQL and add config (without fetch) - const datasource = "PostgreSQL" + const datasource = "Oracle" cy.selectExternalDatasource(datasource) - cy.addSqlDatasourceConfig(datasource, true) + cy.addDatasourceConfig(datasource, true) // Navigate back within datasource wizard cy.get(".spectrum-Dialog-grid").within(() => { @@ -22,18 +22,16 @@ context("Datasource Wizard", () => { cy.get(".spectrum-Button").contains("Continue").click({ force: true }) }) - // Immediately fetch tables after selection + // Fetch tables after selection // Previously entered config should not have been saved - // Config is back to default values - Modal will not close (incorrect config) + // Config is back to default values + // Modal will close and provide 500 error + cy.intercept('**/datasources').as('datasourceConnection') cy.get(".spectrum-Dialog-grid").within(() => { cy.get(".spectrum-Button").contains("Fetch tables from database").click({ force: true }) }) - cy.wait(2000) - cy.get(".spectrum-Dialog-grid").should('be.visible') - - // Close the modal - cy.get(".spectrum-Dialog-grid").within(() => { - cy.get(".close-icon").click() - }) + cy.wait("@datasourceConnection") + cy.get("@datasourceConnection").its('response.body') + .should('have.property', 'status', 500) }) }) diff --git a/packages/builder/cypress/integration/datasources/incorrectExternalDatasourceConfig.spec.js b/packages/builder/cypress/integration/datasources/incorrectExternalDatasourceConfig.spec.js deleted file mode 100644 index 3cc02af566..0000000000 --- a/packages/builder/cypress/integration/datasources/incorrectExternalDatasourceConfig.spec.js +++ /dev/null @@ -1,29 +0,0 @@ -context("Incorrect Datasource Configuration", () => { - before(() => { - cy.login() - cy.createTestApp() - }) - - it("should add incorrect config for PostgreSQL", () => { - // This test tries to fetch immediately after selecting the datasource - // No config is entered (default values used) - // Select PostgreSQL datasource - cy.selectExternalDatasource("PostgreSQL") - - // Attempt to fetch tables without applying config - cy.get(".spectrum-Dialog-grid").within(() => { - cy.get(".spectrum-Button").contains( - "Fetch tables from database").click({ force: true }) - }) - - // Wait 2 seconds then assert Modal has not closed - // Modal will not close if config is incorrect - cy.wait(2000) - cy.get(".spectrum-Dialog-grid").should('be.visible') - - // Close the modal - cy.get(".spectrum-Dialog-grid").within(() => { - cy.get(".close-icon").click() - }) - }) - }) diff --git a/packages/builder/cypress/integration/datasources/mySql.spec.js b/packages/builder/cypress/integration/datasources/mySql.spec.js new file mode 100644 index 0000000000..17d6bf169e --- /dev/null +++ b/packages/builder/cypress/integration/datasources/mySql.spec.js @@ -0,0 +1,190 @@ +context("MySQL Datasource Testing", () => { + if (Cypress.env("TEST_ENV")) { + + before(() => { + cy.login() + cy.createTestApp() + }) + const datasource = "MySQL" + const queryName = "Cypress Test Query" + const queryRename = "CT Query Rename" + + it("Should add MySQL data source without configuration", () => { + // Select MySQL data source + cy.selectExternalDatasource(datasource) + // Attempt to fetch tables without applying configuration + cy.intercept('**/datasources').as('datasource') + cy.get(".spectrum-Button") + .contains("Fetch tables from database") + .click({ force: true }) + // Intercept Request after button click & apply assertions + cy.wait("@datasource") + cy.get("@datasource").its('response.body') + .should('have.property', 'message', 'connect ECONNREFUSED 127.0.0.1:3306') + cy.get("@datasource").its('response.body') + .should('have.property', 'status', 500) + }) + + it("should add MySQL data source and fetch tables", () => { + // Add & configure MySQL data source + cy.selectExternalDatasource(datasource) + cy.intercept('**/datasources').as('datasource') + cy.addDatasourceConfig(datasource) + // Check response from datasource after adding configuration + cy.wait("@datasource") + cy.get("@datasource").its('response.statusCode') + .should('eq', 200) + // Confirm fetch tables was successful + cy.get(".spectrum-Table-body").eq(0) + .find('tr') + .its('length') + .should('be.gt', 0) + }) + + it("should check table fetching error", () => { + // MySQL test data source contains tables without primary keys + cy.get(".spectrum-InLineAlert") + .should('contain', 'Error fetching tables') + .and('contain', 'No primary key constraint found') + }) + + it("should define a One relationship type", () => { + // Select relationship type & configure + cy.get(".spectrum-Button").contains("Define relationship").click({ force: true }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Picker").eq(0).click() + cy.get(".spectrum-Popover").contains("One").click() + cy.get(".spectrum-Picker").eq(1).click() + cy.get(".spectrum-Popover").contains("REGIONS").click() + cy.get(".spectrum-Picker").eq(2).click() + cy.get(".spectrum-Popover").contains("REGION_ID").click() + cy.get(".spectrum-Picker").eq(3).click() + cy.get(".spectrum-Popover").contains("COUNTRIES").click() + cy.get(".spectrum-Picker").eq(4).click() + cy.get(".spectrum-Popover").contains("REGION_ID").click() + // Save relationship & reload page + cy.get(".spectrum-Button").contains("Save").click({ force: true }) + cy.reload() + }) + // Confirm table length & column name + cy.get(".spectrum-Table-body").eq(1) + .find('tr') + .its('length') + .should('eq', 1) + cy.get(".spectrum-Table-cell").should('contain', "COUNTRIES to REGIONS") + }) + + it("should define a Many relationship type", () => { + // Select relationship type & configure + cy.get(".spectrum-Button").contains("Define relationship").click({ force: true }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Picker").eq(0).click() + cy.get(".spectrum-Popover").contains("Many").click() + cy.get(".spectrum-Picker").eq(1).click() + cy.get(".spectrum-Popover").contains("LOCATIONS").click() + cy.get(".spectrum-Picker").eq(2).click() + cy.get(".spectrum-Popover").contains("REGIONS").click() + cy.get(".spectrum-Picker").eq(3).click() + cy.get(".spectrum-Popover").contains("COUNTRIES").click() + cy.get(".spectrum-Picker").eq(4).click() + cy.get(".spectrum-Popover").contains("COUNTRY_ID").click() + cy.get(".spectrum-Picker").eq(5).click() + cy.get(".spectrum-Popover").contains("REGION_ID").click() + // Save relationship & reload page + cy.get(".spectrum-Button").contains("Save").click({ force: true }) + cy.reload() + cy.wait(1000) + }) + // Confirm table length & relationship name + cy.get(".spectrum-Table-body").eq(1) + .find('tr') + .its('length') + .should('eq', 2) + cy.get(".spectrum-Table-cell") + .should('contain', "LOCATIONS through COUNTRIES → REGIONS") + }) + + it("should delete relationships", () => { + // Delete both relationships + cy.get(".spectrum-Table-body") + .eq(1).find('tr').its('length') + .then((len) => { + for (let i = 0; i < len; i++) { + cy.get(".spectrum-Table-body").eq(1).within(() => { + cy.get(".spectrum-Table-row").eq(0).click() + cy.wait(500) + }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Button").contains("Delete").click({ force: true }) + }) + cy.reload() + } + // Table has placeholder tr when empty + cy.get(".spectrum-Table-body") + .eq(1) + .find('tr') + .should('have.length', 1) + }) + }) + + it("should add a query", () => { + // Add query + cy.get(".spectrum-Button").contains("Add query").click({ force: true }) + cy.get(".spectrum-Form-item").eq(0).within(() => { + cy.get("input").type(queryName) + }) + // Insert Query within Fields section + cy.get(".CodeMirror textarea").eq(0) + .type("SELECT * FROM books", { force: true }) + // Intercept query execution + cy.intercept('**/queries/preview').as('query') + cy.get(".spectrum-Button").contains("Run Query").click({ force: true }) + cy.wait(500) + cy.wait("@query") + // Assert against Status Code & Body + cy.get("@query").its('response.statusCode') + .should('eq', 200) + cy.get("@query").its('response.body') + .should('not.be.empty') + // Save query + cy.get(".spectrum-Button").contains("Save Query").click({ force: true }) + cy.get(".nav-item").should('contain', queryName) + }) + + it("should duplicate a query", () => { + // Get last nav item - The query + cy.get(".nav-item").last().within(() => { + cy.get(".icon").eq(1).click({ force: true }) + }) + // Select and confirm duplication + cy.get(".spectrum-Menu").contains("Duplicate").click() + cy.get(".nav-item").should('contain', queryName + ' (1)') + }) + + it("should edit a query name", () => { + // Rename query + cy.get(".spectrum-Form-item").eq(0).within(() => { + cy.get("input").clear().type(queryRename) + }) + // Save query + cy.get(".spectrum-Button").contains("Save Query").click({ force: true }) + cy.get(".nav-item").should('contain', queryRename) + }) + + it("should delete a query", () => { + // Get last nav item - The query + for (let i = 0; i < 2; i++) { + cy.get(".nav-item").last().within(() => { + cy.get(".icon").eq(1).click({ force: true }) + }) + // Select Delete + cy.get(".spectrum-Menu").contains("Delete").click() + cy.get(".spectrum-Button").contains("Delete Query").click({ force: true }) + cy.wait(1000) + } + // Confirm deletion + cy.get(".nav-item").should('not.contain', queryName) + cy.get(".nav-item").should('not.contain', queryRename) + }) + } +}) diff --git a/packages/builder/cypress/integration/datasources/oracle.spec.js b/packages/builder/cypress/integration/datasources/oracle.spec.js new file mode 100644 index 0000000000..5786ec0699 --- /dev/null +++ b/packages/builder/cypress/integration/datasources/oracle.spec.js @@ -0,0 +1,179 @@ +context("Oracle Datasource Testing", () => { + before(() => { + cy.login() + cy.createTestApp() + }) + const datasource = "Oracle" + const queryName = "Cypress Test Query" + const queryRename = "CT Query Rename" + + it("Should add Oracle data source without configuration", () => { + // Select Oracle data source + cy.selectExternalDatasource(datasource) + // Attempt to fetch tables without applying configuration + cy.intercept('**/datasources').as('datasource') + cy.get(".spectrum-Button") + .contains("Fetch tables from database") + .click({ force: true }) + // Intercept Request after button click & apply assertions + cy.wait("@datasource") + cy.get("@datasource").its('response.body') + .should('have.property', 'message', 'NJS-007: invalid value for "user" in parameter 1') + cy.get("@datasource").its('response.body') + .should('have.property', 'status', 500) + }) + + it("should add Oracle data source and fetch tables", () => { + // Add & configure Oracle data source + cy.selectExternalDatasource(datasource) + cy.intercept('**/datasources').as('datasource') + cy.addDatasourceConfig(datasource) + // Check response from datasource after adding configuration + cy.wait("@datasource") + cy.get("@datasource").its('response.statusCode') + .should('eq', 200) + // Confirm fetch tables was successful + cy.get(".spectrum-Table-body").eq(0) + .find('tr') + .its('length') + .should('be.gt', 0) + }) + + it("should define a One relationship type", () => { + // Select relationship type & configure + cy.get(".spectrum-Button").contains("Define relationship").click({ force: true }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Picker").eq(0).click() + cy.get(".spectrum-Popover").contains("One").click() + cy.get(".spectrum-Picker").eq(1).click() + cy.get(".spectrum-Popover").contains("REGIONS").click() + cy.get(".spectrum-Picker").eq(2).click() + cy.get(".spectrum-Popover").contains("REGION_ID").click() + cy.get(".spectrum-Picker").eq(3).click() + cy.get(".spectrum-Popover").contains("COUNTRIES").click() + cy.get(".spectrum-Picker").eq(4).click() + cy.get(".spectrum-Popover").contains("REGION_ID").click() + // Save relationship & reload page + cy.get(".spectrum-Button").contains("Save").click({ force: true }) + cy.reload() + }) + // Confirm table length & column name + cy.get(".spectrum-Table-body").eq(1) + .find('tr') + .its('length') + .should('eq', 1) + cy.get(".spectrum-Table-cell").should('contain', "COUNTRIES to REGIONS") + }) + + it("should define a Many relationship type", () => { + // Select relationship type & configure + cy.get(".spectrum-Button").contains("Define relationship").click({ force: true }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Picker").eq(0).click() + cy.get(".spectrum-Popover").contains("Many").click() + cy.get(".spectrum-Picker").eq(1).click() + cy.get(".spectrum-Popover").contains("LOCATIONS").click() + cy.get(".spectrum-Picker").eq(2).click() + cy.get(".spectrum-Popover").contains("REGIONS").click() + cy.get(".spectrum-Picker").eq(3).click() + cy.get(".spectrum-Popover").contains("COUNTRIES").click() + cy.get(".spectrum-Picker").eq(4).click() + cy.get(".spectrum-Popover").contains("COUNTRY_ID").click() + cy.get(".spectrum-Picker").eq(5).click() + cy.get(".spectrum-Popover").contains("REGION_ID").click() + // Save relationship & reload page + cy.get(".spectrum-Button").contains("Save").click({ force: true }) + cy.reload() + }) + // Confirm table length & relationship name + cy.get(".spectrum-Table-body").eq(1) + .find('tr') + .its('length') + .should('eq', 2) + cy.get(".spectrum-Table-cell") + .should('contain', "LOCATIONS through COUNTRIES → REGIONS") + }) + + it("should delete relationships", () => { + // Delete both relationships + cy.get(".spectrum-Table-body") + .eq(1).find('tr').its('length') + .then((len) => { + for (let i = 0; i < len; i++) { + cy.get(".spectrum-Table-body").eq(1).within(() => { + cy.get(".spectrum-Table-row").eq(0).click() + cy.wait(500) + }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Button").contains("Delete").click({ force: true }) + }) + cy.reload() + } + // Table has placeholder tr when empty + cy.get(".spectrum-Table-body") + .eq(1) + .find('tr') + .should('have.length', 1) + }) + }) + + it("should add a query", () => { + // Add query + cy.get(".spectrum-Button").contains("Add query").click({ force: true }) + cy.get(".spectrum-Form-item").eq(0).within(() => { + cy.get("input").type(queryName) + }) + // Insert Query within Fields section + cy.get(".CodeMirror textarea").eq(0) + .type("SELECT * FROM JOBS", { force: true }) + // Intercept query execution + cy.intercept('**/queries/preview').as('query') + cy.get(".spectrum-Button").contains("Run Query").click({ force: true }) + cy.wait(500) + cy.wait("@query") + // Assert against Status Code & Body + cy.get("@query").its('response.statusCode') + .should('eq', 200) + cy.get("@query").its('response.body') + .should('not.be.empty') + // Save query + cy.get(".spectrum-Button").contains("Save Query").click({ force: true }) + cy.get(".nav-item").should('contain', queryName) + }) + + it("should duplicate a query", () => { + // Get last nav item - The query + cy.get(".nav-item").last().within(() => { + cy.get(".icon").eq(1).click({ force: true }) + }) + // Select and confirm duplication + cy.get(".spectrum-Menu").contains("Duplicate").click() + cy.get(".nav-item").should('contain', queryName + ' (1)') + }) + + it("should edit a query name", () => { + // Rename query + cy.get(".spectrum-Form-item").eq(0).within(() => { + cy.get("input").clear().type(queryRename) + }) + // Save query + cy.get(".spectrum-Button").contains("Save Query").click({ force: true }) + cy.get(".nav-item").should('contain', queryRename) + }) + + it("should delete a query", () => { + // Get last nav item - The query + for (let i = 0; i < 2; i++) { + cy.get(".nav-item").last().within(() => { + cy.get(".icon").eq(1).click({ force: true }) + }) + // Select Delete + cy.get(".spectrum-Menu").contains("Delete").click() + cy.get(".spectrum-Button").contains("Delete Query").click({ force: true }) + cy.wait(1000) + } + // Confirm deletion + cy.get(".nav-item").should('not.contain', queryName) + cy.get(".nav-item").should('not.contain', queryRename) + }) +}) diff --git a/packages/builder/cypress/integration/datasources/postgreSql.spec.js b/packages/builder/cypress/integration/datasources/postgreSql.spec.js new file mode 100644 index 0000000000..b1dc929c33 --- /dev/null +++ b/packages/builder/cypress/integration/datasources/postgreSql.spec.js @@ -0,0 +1,248 @@ +context("PostgreSQL Datasource Testing", () => { + if (Cypress.env("TEST_ENV")) { + + before(() => { + cy.login() + cy.createTestApp() + }) + const datasource = "PostgreSQL" + const queryName = "Cypress Test Query" + const queryRename = "CT Query Rename" + + it("Should add PostgreSQL data source without configuration", () => { + // Select PostgreSQL data source + cy.selectExternalDatasource(datasource) + // Attempt to fetch tables without applying configuration + cy.intercept('**/datasources').as('datasource') + cy.get(".spectrum-Button") + .contains("Fetch tables from database") + .click({ force: true }) + // Intercept Request after button click & apply assertions + cy.wait("@datasource") + cy.get("@datasource").its('response.body') + .should('have.property', 'message', 'connect ECONNREFUSED 127.0.0.1:5432') + cy.get("@datasource").its('response.body') + .should('have.property', 'status', 500) + }) + + it("should add PostgreSQL data source and fetch tables", () => { + // Add & configure PostgreSQL data source + cy.selectExternalDatasource(datasource) + cy.intercept('**/datasources').as('datasource') + cy.addDatasourceConfig(datasource) + // Check response from datasource after adding configuration + cy.wait("@datasource") + cy.get("@datasource").its('response.statusCode') + .should('eq', 200) + // Confirm fetch tables was successful + cy.get(".spectrum-Table-body").eq(0) + .find('tr') + .its('length') + .should('be.gt', 0) + }) + + it("should define a One relationship type", () => { + // Select relationship type & configure + cy.get(".spectrum-Button").contains("Define relationship").click({ force: true }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Picker").eq(0).click() + cy.get(".spectrum-Popover").contains("One").click() + cy.get(".spectrum-Picker").eq(1).click() + cy.get(".spectrum-Popover").contains("REGIONS").click() + cy.get(".spectrum-Picker").eq(2).click() + cy.get(".spectrum-Popover").contains("REGION_ID").click() + cy.get(".spectrum-Picker").eq(3).click() + cy.get(".spectrum-Popover").contains("COUNTRIES").click() + cy.get(".spectrum-Picker").eq(4).click() + cy.get(".spectrum-Popover").contains("REGION_ID").click() + // Save relationship & reload page + cy.get(".spectrum-Button").contains("Save").click({ force: true }) + cy.reload() + }) + // Confirm table length & column name + cy.get(".spectrum-Table-body").eq(1) + .find('tr') + .its('length') + .should('eq', 1) + cy.get(".spectrum-Table-cell").should('contain', "COUNTRIES to REGIONS") + }) + + it("should define a Many relationship type", () => { + // Select relationship type & configure + cy.get(".spectrum-Button").contains("Define relationship").click({ force: true }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Picker").eq(0).click() + cy.get(".spectrum-Popover").contains("Many").click() + cy.get(".spectrum-Picker").eq(1).click() + cy.get(".spectrum-Popover").contains("LOCATIONS").click() + cy.get(".spectrum-Picker").eq(2).click() + cy.get(".spectrum-Popover").contains("REGIONS").click() + cy.get(".spectrum-Picker").eq(3).click() + cy.get(".spectrum-Popover").contains("COUNTRIES").click() + cy.get(".spectrum-Picker").eq(4).click() + cy.get(".spectrum-Popover").contains("COUNTRY_ID").click() + cy.get(".spectrum-Picker").eq(5).click() + cy.get(".spectrum-Popover").contains("REGION_ID").click() + // Save relationship & reload page + cy.get(".spectrum-Button").contains("Save").click({ force: true }) + cy.reload() + }) + // Confirm table length & relationship name + cy.get(".spectrum-Table-body").eq(1) + .find('tr') + .its('length') + .should('eq', 2) + cy.get(".spectrum-Table-cell") + .should('contain', "LOCATIONS through COUNTRIES → REGIONS") + }) + + it("should add a query", () => { + // Add query + cy.get(".spectrum-Button").contains("Add query").click({ force: true }) + cy.get(".spectrum-Form-item").eq(0).within(() => { + cy.get("input").type(queryName) + }) + // Insert Query within Fields section + cy.get(".CodeMirror textarea").eq(0) + .type("SELECT * FROM books", { force: true }) + // Intercept query execution + cy.intercept('**/queries/preview').as('query') + cy.get(".spectrum-Button").contains("Run Query").click({ force: true }) + cy.wait(500) + cy.wait("@query") + // Assert against Status Code & Body + cy.get("@query").its('response.statusCode') + .should('eq', 200) + cy.get("@query").its('response.body') + .should('not.be.empty') + // Save query + cy.get(".spectrum-Button").contains("Save Query").click({ force: true }) + cy.get(".hierarchy-items-container").should('contain', queryName) + }) + + it("should switch to schema with no tables", () => { + // Switch Schema - To one without any tables + cy.get(".hierarchy-items-container").contains(datasource).click() + switchSchema("randomText") + + // No tables displayed - No rows found message received + cy.get(".spectrum-Table-body").eq(1).should('contain', 'No rows found') + + // Define relationship button should not be visible + cy.get(".spectrum-Button").should('not.contain', 'Define relationship') + // Relationship table should be empty + cy.get(".spectrum-Table-body").eq(2).should('contain', 'No rows found') + + // Query table should not exist + cy.get(".container").find(".spectrum-Table").should('have.length', 2) + }) + + it("should switch schemas", () => { + // Switch schema - To one with tables + switchSchema("1") + + // Confirm tables exist + cy.get(".spectrum-Table-body").eq(0).should('not.contain', 'No rows found') + cy.get(".spectrum-Table-body").eq(0).find('tr').its('length').should('be.gt', 0) + + // Relationship table should be empty & query table should not exist + cy.get(".spectrum-Table-body").eq(2).should('contain', 'No rows found') + cy.get(".container").find(".spectrum-Table").should('have.length', 2) + + // Switch back to public schema + switchSchema("public") + + // Confirm tables exist - again + cy.get(".spectrum-Table-body").eq(1).should('not.contain', 'No rows found') + cy.get(".spectrum-Table-body").eq(1).find('tr').should('be.gt', 0) + + // Confirm specific table visible within left nav bar + cy.get(".hierarchy-items-container").should('contain', 'REGIONS') + }) + + it("should duplicate a query", () => { + // Get last nav item - The query + cy.get(".nav-item").last().within(() => { + cy.get(".icon").eq(1).click({ force: true }) + }) + // Select and confirm duplication + cy.get(".spectrum-Menu").contains("Duplicate").click() + cy.get(".nav-item").should('contain', queryName + ' (1)') + }) + + it("should edit a query name", () => { + // Ensure correct schema is selected + switchSchema("public") + + // Access query + cy.get(".hierarchy-items-container").contains(queryName + ' (1)').click() + + // Rename query + cy.get(".spectrum-Form-item").eq(0).within(() => { + cy.get("input").clear().type(queryRename) + }) + + // Run and Save query + cy.get(".spectrum-Button").contains("Run Query").click({ force: true }) + cy.wait(500) + cy.get(".spectrum-Button").contains("Save Query").click({ force: true }) + cy.get(".nav-item").should('contain', queryRename) + }) + + it("should delete a query", () => { + // Get last nav item - The query + for (let i = 0; i < 2; i++) { + cy.get(".nav-item").last().within(() => { + cy.get(".icon").eq(1).click({ force: true }) + }) + // Select Delete + cy.get(".spectrum-Menu").contains("Delete").click() + cy.get(".spectrum-Button").contains("Delete Query").click({ force: true }) + cy.wait(1000) + } + // Confirm deletion + cy.get(".nav-item").should('not.contain', queryName) + cy.get(".nav-item").should('not.contain', queryRename) + }) + + it("should delete relationships", () => { + cy.get(".hierarchy-items-container").contains(datasource).click() + cy.reload() + // Delete both relationships + cy.get(".spectrum-Table-body") + .eq(1).find('tr').its('length') + .then((len) => { + for (let i = 0; i < len; i++) { + cy.get(".spectrum-Table-body").eq(1).within(() => { + cy.get(".spectrum-Table-row").eq(0).click() + cy.wait(500) + }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Button").contains("Delete").click({ force: true }) + }) + cy.reload() + } + // Table has placeholder tr when empty + cy.get(".spectrum-Table-body") + .eq(1) + .find('tr') + .should('have.length', 1) + }) + }) + + const switchSchema = (schema) => { + // Edit configuration - Change Schema + cy.get(".spectrum-Textfield").eq(6).within(() => { + cy.get('input').clear().type(schema) + }) + // Save configuration & fetch + cy.get(".spectrum-Button").contains("Save").click({ force: true }) + cy.get(".spectrum-Button").contains("Fetch tables").click({ force: true }) + // Click fetch tables again within modal + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Button").contains("Fetch tables").click({ force: true }) + }) + cy.reload() + } + } +}) diff --git a/packages/builder/cypress/integration/datasources/rest.spec.js b/packages/builder/cypress/integration/datasources/rest.spec.js new file mode 100644 index 0000000000..846c356afd --- /dev/null +++ b/packages/builder/cypress/integration/datasources/rest.spec.js @@ -0,0 +1,40 @@ +context("REST Datasource Testing", () => { + before(() => { + cy.login() + cy.createTestApp() + }) + + const datasource = "REST" + const restUrl = "https://api.openbrewerydb.org/breweries" + + it("Should add REST data source with incorrect API", () => { + // Select REST data source + cy.selectExternalDatasource(datasource) + // Enter incorrect api & attempt to send query + cy.wait(500) + cy.get(".spectrum-Button").contains("Add query").click({ force: true }) + cy.intercept('**/preview').as('queryError') + cy.get("input").clear().type("random text") + cy.get(".spectrum-Button").contains("Send").click({ force: true }) + // Intercept Request after button click & apply assertions + cy.wait("@queryError") + cy.get("@queryError").its('response.body') + .should('have.property', 'message', 'request to http://random/%20text? failed, reason: getaddrinfo ENOTFOUND random') + cy.get("@queryError").its('response.body') + .should('have.property', 'status', 400) + }) + + it("should add and configure a REST datasource", () => { + // Select REST datasource and create query + cy.selectExternalDatasource(datasource) + cy.wait(500) + // createRestQuery confirms query creation + cy.createRestQuery("GET", restUrl) + // Confirm status code response within REST datasource + cy.get(".spectrum-FieldLabel") + .contains("Status") + .children() + .should('contain', 200) + }) + +}) \ No newline at end of file diff --git a/packages/builder/cypress/integration/queryLevelTransformers.spec.js b/packages/builder/cypress/integration/queryLevelTransformers.spec.js index 23accece79..526328c1be 100644 --- a/packages/builder/cypress/integration/queryLevelTransformers.spec.js +++ b/packages/builder/cypress/integration/queryLevelTransformers.spec.js @@ -9,24 +9,24 @@ context("Query Level Transformers", () => { const datasource = "REST" const restUrl = "https://api.openbrewerydb.org/breweries" cy.selectExternalDatasource(datasource) - cy.addRestDatasourceConfig(restUrl) - // Add Query - cy.get(".spectrum-Button").contains("Add Query").click({ force: true }) - cy.wait(500) - + cy.createRestQuery("GET", restUrl) + cy.get(".spectrum-Tabs-itemLabel").contains("Transformer").click() // Get Transformer Function from file cy.readFile("cypress/support/queryLevelTransformerFunction.js").then((transformerFunction) => { - console.log(transformerFunction[1]) cy.get(".CodeMirror textarea") // Highlight current text and overwrite with file contents .type(Cypress.platform === 'darwin' ? '{cmd}a' : '{ctrl}a', { force: true }) .type(transformerFunction, { parseSpecialCharSequences: false }) }) - // Run Query - cy.get(".spectrum-Button").contains("Run Query").click({ force: true }) - cy.wait(500) - // Confirm JSON results - cy.get(".preview").should('have.text', '{\n "state": "Indiana",\n "count": 1\n}') + // Send Query + cy.intercept('**/queries/preview').as('query') + cy.get(".spectrum-Button").contains("Send").click({ force: true }) + cy.wait("@query") + // Assert against Status Code, body, & body rows + cy.get("@query").its('response.statusCode') + .should('eq', 200) + cy.get("@query").its('response.body').should('not.be.empty') + cy.get("@query").its('response.body.rows').should('not.be.empty') }) it("should add data to the previous query", () => { @@ -34,25 +34,46 @@ context("Query Level Transformers", () => { const datasource = "REST" const restUrl = "https://api.openbrewerydb.org/breweries" cy.selectExternalDatasource(datasource) - cy.addRestDatasourceConfig(restUrl) - // Add Query - cy.get(".spectrum-Button").contains("Add Query").click({ force: true }) - cy.wait(500) + cy.createRestQuery("GET", restUrl) + cy.get(".spectrum-Tabs-itemLabel").contains("Transformer").click() // Get Transformer Function with Data from file cy.readFile("cypress/support/queryLevelTransformerFunctionWithData.js").then((transformerFunction) => { - console.log(transformerFunction[1]) + //console.log(transformerFunction[1]) cy.get(".CodeMirror textarea") // Highlight current text and overwrite with file contents .type(Cypress.platform === 'darwin' ? '{cmd}a' : '{ctrl}a', { force: true }) .type(transformerFunction, { parseSpecialCharSequences: false }) }) - // Run Query - cy.get(".spectrum-Button").contains("Run Query").click({ force: true }) + // Send Query + cy.intercept('**/queries/preview').as('query') + cy.get(".spectrum-Button").contains("Send").click({ force: true }) + cy.wait("@query") + // Assert against Status Code, body, & body rows + cy.get("@query").its('response.statusCode') + .should('eq', 200) + cy.get("@query").its('response.body').should('not.be.empty') + cy.get("@query").its('response.body.rows').should('not.be.empty') + }) + + it("should run an invalid query within the transformer section", () => { + // Add REST datasource - contains API for breweries + const datasource = "REST" + const restUrl = "https://api.openbrewerydb.org/breweries" + cy.selectExternalDatasource(datasource) + cy.createRestQuery("GET", restUrl) + cy.get(".spectrum-Tabs-itemLabel").contains("Transformer").click() + // Clear the code box and add "test" + cy.get(".CodeMirror textarea") + .type(Cypress.platform === 'darwin' ? '{cmd}a' : '{ctrl}a', { force: true }) + .type("test") + // Run Query and intercept + cy.intercept('**/preview').as('queryError') + cy.get(".spectrum-Button").contains("Send").click({ force: true }) + cy.wait("@queryError") cy.wait(500) - // Confirm JSON results - cy.get(".preview").should( - 'have.text', - '{\n "state": "Indiana",\n "count": 1,\n "flag": "http://flags.ox3.in/svg/us/${stateCode}.svg"\n}') + // Assert against message and status for the query error + cy.get("@queryError").its('response.body').should('have.property', 'message', "test is not defined") + cy.get("@queryError").its('response.body').should('have.property', 'status', 400) }) it("should run an invalid query via POST request", () => { diff --git a/packages/builder/cypress/integration/renameAnApplication.spec.js b/packages/builder/cypress/integration/renameAnApplication.spec.js index 968d00c349..f71bfaec57 100644 --- a/packages/builder/cypress/integration/renameAnApplication.spec.js +++ b/packages/builder/cypress/integration/renameAnApplication.spec.js @@ -13,7 +13,7 @@ it("should rename an unpublished application", () => { cy.reload() cy.wait(1000) cy.searchForApplication(appRename) - cy.get(".appGrid").find(".wrapper").should("have.length", 1) + cy.get(".appTable").find(".title").should("have.length", 1) // Set app name back to Cypress Tests cy.reload() cy.wait(1000) @@ -36,7 +36,7 @@ xit("Should rename a published application", () => { cy.get(".home-logo").click() renameApp(appName, appRename, true) cy.searchForApplication(appRename) - cy.get(".appGrid").find(".wrapper").should("have.length", 1) + cy.get(".appTable").find(".wrapper").should("have.length", 1) }) it("Should try to rename an application to have no name", () => { @@ -46,10 +46,10 @@ it("Should try to rename an application to have no name", () => { cy.wait(500) // Close modal and confirm name has not been changed cy.get(".spectrum-Dialog-grid").contains("Cancel").click() - cy.reload() + cy.reload() cy.wait(1000) cy.searchForApplication(appName) - cy.get(".appGrid").find(".wrapper").should("have.length", 1) + cy.get(".appTable").find(".title").should("have.length", 1) }) xit("Should create two applications with the same name", () => { @@ -78,7 +78,7 @@ it("should validate application names", () => { cy.reload() cy.wait(1000) cy.searchForApplication(numberName) - cy.get(".appGrid").find(".wrapper").should("have.length", 1) + cy.get(".appTable").find(".title").should("have.length", 1) cy.reload() cy.wait(1000) renameApp(numberName, specialCharName) @@ -95,7 +95,10 @@ it("should validate application names", () => { .its("body") .then(val => { if (val.length > 0) { - cy.get(".title > :nth-child(3) > .spectrum-Icon").click() + cy.get(".appTable") + .within(() => { + cy.get(".spectrum-Icon").eq(1).click() + }) // Check for when an app is published if (published == true){ // Should not have Edit as option, will unpublish app diff --git a/packages/builder/cypress/integration/revertApp.spec.js b/packages/builder/cypress/integration/revertApp.spec.js new file mode 100644 index 0000000000..2824ce5f3b --- /dev/null +++ b/packages/builder/cypress/integration/revertApp.spec.js @@ -0,0 +1,62 @@ +context("Revert apps", () => { + before(() => { + cy.login() + cy.createTestApp() + }) + + it("should try to revert an unpublished app", () => { + // Click revert icon + cy.get(".toprightnav").within(() => { + cy.get(".spectrum-Icon").eq(1).click() + }) + cy.get(".spectrum-Dialog-grid").within(() => { + // Enter app name before revert + cy.get("input").type("Cypress Tests") + cy.intercept('**/revert').as('revertApp') + // Click Revert + cy.get(".spectrum-Button").contains("Revert").click({ force: true }) + // Intercept Request after button click & apply assertions + cy.wait("@revertApp") + cy.get("@revertApp").its('response.body').should('have.property', 'message', "App has not yet been deployed") + cy.get("@revertApp").its('response.body').should('have.property', 'status', 400) + }) + }) + + it("should revert a published app", () => { + // Add initial component - Paragraph + cy.addComponent("Elements", "Paragraph") + // Publish app + cy.get(".spectrum-Button").contains("Publish").click({ force: true }) + cy.get(".spectrum-ButtonGroup").within(() => { + cy.get(".spectrum-Button").contains("Publish").click({ force: true }) + }) + // Add second component - Button + cy.addComponent("Elements", "Button") + // Click Revert + cy.get(".toprightnav").within(() => { + cy.get(".spectrum-Icon").eq(1).click() + }) + cy.get(".spectrum-Dialog-grid").within(() => { + // Click Revert + cy.get(".spectrum-Button").contains("Revert").click({ force: true }) + cy.wait(1000) + }) + // Confirm Paragraph component is still visible + cy.get(".root").contains("New Paragraph") + // Confirm Button component is not visible + cy.get(".root").should("not.have.text", "New Button") + }) + + it("should enter incorrect app name when reverting", () => { + // Click Revert + cy.get(".toprightnav").within(() => { + cy.get(".spectrum-Icon").eq(1).click() + }) + // Enter incorrect app name + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get("input").type("Cypress Tests") + // Revert button within modal should be disabled + cy.get(".spectrum-Button").eq(1).should('be.disabled') + }) + }) +}) \ No newline at end of file diff --git a/packages/builder/cypress/support/commands.js b/packages/builder/cypress/support/commands.js index 88a2965d0e..6bdebe6766 100644 --- a/packages/builder/cypress/support/commands.js +++ b/packages/builder/cypress/support/commands.js @@ -59,20 +59,21 @@ Cypress.Commands.add("deleteApp", name => { .then(val => { if (val.length > 0) { cy.searchForApplication(name) - cy.get(".appGrid") - .children() - .within(() => { - cy.get(".title") - .children() - .within(() => { - cy.get(".spectrum-Icon").click() - }) - }) - cy.get(".spectrum-Menu").contains("Delete").click() - cy.get(".spectrum-Dialog-grid").within(() => { - cy.get("input").type(name) + cy.get(".appTable").within(() => { + cy.get(".spectrum-Icon").eq(1).click() + }) + cy.get(".spectrum-Menu").then($menu => { + if ($menu.text().includes("Unpublish")) { + cy.get(".spectrum-Menu").contains("Unpublish").click() + cy.get(".spectrum-Dialog-grid").contains("Unpublish app").click() + } else { + cy.get(".spectrum-Menu").contains("Delete").click() + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get("input").type(name) + }) + cy.get(".spectrum-Button--warning").click() + } }) - cy.get(".spectrum-Button--warning").click() } else { return } @@ -110,6 +111,7 @@ Cypress.Commands.add("createTestApp", () => { const appName = "Cypress Tests" cy.deleteApp(appName) cy.createApp(appName, "This app is used for Cypress testing.") + cy.createScreen("home", "home") }) Cypress.Commands.add("createTestTableWithData", () => { @@ -120,6 +122,7 @@ Cypress.Commands.add("createTestTableWithData", () => { Cypress.Commands.add("createTable", (tableName, initialTable) => { if (!initialTable) { + cy.navigateToDataSection() cy.get(".add-button").click() } cy.wait(7000) @@ -235,7 +238,7 @@ Cypress.Commands.add("navigateToFrontend", () => { cy.wait(1000) cy.contains("Design").click() cy.get(".spectrum-Search").type("/") - cy.get(".nav-item").contains("Home").click() + cy.get(".nav-item").contains("home").click() }) Cypress.Commands.add("navigateToDataSection", () => { @@ -245,11 +248,39 @@ Cypress.Commands.add("navigateToDataSection", () => { }) Cypress.Commands.add("createScreen", (screenName, route) => { + cy.contains("Design").click() cy.get("[aria-label=AddCircle]").click() cy.get(".spectrum-Modal").within(() => { - cy.get("input").first().type(screenName) - cy.get("input").eq(1).type(route) - cy.get(".spectrum-Button--cta").click() + cy.get(".item").contains("Blank").click() + cy.get(".spectrum-Button").contains("Add Screens").click({ force: true }) + cy.wait(500) + }) + cy.get(".spectrum-Dialog-grid").within(() => { + cy.get(".spectrum-Form-itemField").eq(0).type(screenName) + cy.get(".spectrum-Form-itemField").eq(1).type(route) + cy.get(".spectrum-Button").contains("Continue").click({ force: true }) + cy.wait(1000) + }) +}) + +Cypress.Commands.add("createAutogeneratedScreens", screenNames => { + // Screen name must already exist within data source + cy.contains("Design").click() + cy.get("[aria-label=AddCircle]").click() + for (let i = 0; i < screenNames.length; i++) { + cy.get(".item").contains(screenNames[i]).click() + } + cy.get(".spectrum-Button").contains("Add Screens").click({ force: true }) + cy.wait(2000) +}) + +Cypress.Commands.add("addRow", values => { + cy.contains("Create row").click() + cy.get(".spectrum-Modal").within(() => { + for (let i = 0; i < values.length; i++) { + cy.get("input").eq(i).type(values[i]).blur() + } + cy.get(".spectrum-ButtonGroup").contains("Create").click() }) }) @@ -295,7 +326,7 @@ Cypress.Commands.add("searchForApplication", appName => { }) }) // Confirms app exists after search - cy.get(".appGrid").contains(appName) + cy.get(".appTable").contains(appName) }) Cypress.Commands.add("selectExternalDatasource", datasourceName => { @@ -312,72 +343,88 @@ Cypress.Commands.add("selectExternalDatasource", datasourceName => { }) }) -Cypress.Commands.add("addSqlDatasourceConfig", (sqlType, noFetch) => { +Cypress.Commands.add("addDatasourceConfig", (datasource, noFetch) => { // addExternalDatasource should be called prior to this - // Adds the config for specified SQL datasource & fetches tables + // Adds the config for specified datasource & fetches tables + // Currently supports MySQL, PostgreSQL, Oracle // Host IP Address cy.wait(500) cy.get(".spectrum-Dialog-grid").within(() => { cy.get(".form-row") - .contains("Host") - .parent() - .children() + .eq(0) .within(() => { cy.get(".spectrum-Textfield").within(() => { - cy.get("input").clear().type(Cypress.env("HOST_IP")) + cy.log(datasource) + if (datasource == "Oracle") { + cy.get("input").clear().type(Cypress.env("oracle").HOST) + } else { + cy.get("input").clear().type(Cypress.env("HOST_IP")) + } }) }) }) // Database Name cy.get(".spectrum-Dialog-grid").within(() => { - cy.get(".form-row") - .contains("Database") - .parent() - .children() - .within(() => { - cy.get(".spectrum-Textfield").within(() => { - if (sqlType == "PostgreSQL") { + if (datasource == "MySQL") { + cy.get(".form-row") + .eq(4) + .within(() => { + cy.get("input").clear().type("mysql") + }) + } else { + cy.get(".form-row") + .eq(2) + .within(() => { + if (datasource == "PostgreSQL") { cy.get("input").clear().type("test") } - if (sqlType == "MySQL") { - cy.get("input").clear().type("mysql") + if (datasource == "Oracle") { + cy.get("input").clear().type(Cypress.env("oracle").DATABASE) } }) - }) + } }) // User cy.get(".spectrum-Dialog-grid").within(() => { - cy.get(".form-row") - .contains("User") - .parent() - .children() - .within(() => { - cy.get(".spectrum-Textfield").within(() => { - if (sqlType == "PostgreSQL") { + if (datasource == "MySQL") { + cy.get(".form-row") + .eq(2) + .within(() => { + cy.get("input").clear().type("root") + }) + } else { + cy.get(".form-row") + .eq(3) + .within(() => { + if (datasource == "PostgreSQL") { cy.get("input").clear().type("admin") } - if (sqlType == "MySQL") { - cy.get("input").clear().type("root") + if (datasource == "Oracle") { + cy.get("input").clear().type(Cypress.env("oracle").USER) } }) - }) + } }) // Password cy.get(".spectrum-Dialog-grid").within(() => { - cy.get(".form-row") - .contains("Password") - .parent() - .children() - .within(() => { - cy.get(".spectrum-Textfield").within(() => { - if (sqlType == "PostgreSQL") { + if (datasource == "MySQL") { + cy.get(".form-row") + .eq(3) + .within(() => { + cy.get("input").clear().type("abdc321d-4d21-4fc7-8d20-f40ab9fe6db0") + }) + } else { + cy.get(".form-row") + .eq(4) + .within(() => { + if (datasource == "PostgreSQL") { cy.get("input").clear().type("8cb2b6f4-4b33-4e86-b790-74eee608a4e9") } - if (sqlType == "MySQL") { - cy.get("input").clear().type("abdc321d-4d21-4fc7-8d20-f40ab9fe6db0") + if (datasource == "Oracle") { + cy.get("input").clear().type(Cypress.env("oracle").PASSWORD) } }) - }) + } }) // Click to fetch tables if (!noFetch) { @@ -390,19 +437,20 @@ Cypress.Commands.add("addSqlDatasourceConfig", (sqlType, noFetch) => { } }) -Cypress.Commands.add("addRestDatasourceConfig", restUrl => { +Cypress.Commands.add("createRestQuery", (method, restUrl) => { // addExternalDatasource should be called prior to this - // Configures REST datasource - cy.get(".spectrum-Dialog-grid").within(() => { - cy.get(".spectrum-Textfield").within(() => { - cy.get("input").clear().type(restUrl) - }) - }) - // Click Save and continue to query - cy.get(".spectrum-Dialog-grid").within(() => { - cy.get(".spectrum-Button") - .contains("Save and continue to query") - .click({ force: true }) - cy.wait(500) - }) + // Configures REST datasource & sends query + cy.wait(500) + cy.get(".spectrum-Button").contains("Add query").click({ force: true }) + // Select Method & add Rest URL + cy.get(".spectrum-Picker-label").eq(1).click() + cy.get(".spectrum-Menu").contains(method).click() + cy.get("input").clear().type(restUrl) + // Send query + cy.get(".spectrum-Button").contains("Send").click({ force: true }) + cy.wait(500) + cy.get(".spectrum-Button").contains("Save query").click({ force: true }) + cy.get(".hierarchy-items-container") + .should("contain", method) + .and("contain", restUrl) }) diff --git a/packages/builder/cypress/support/queryLevelTransformerFunction.js b/packages/builder/cypress/support/queryLevelTransformerFunction.js index 7a38a2bae1..f77433fc4f 100644 --- a/packages/builder/cypress/support/queryLevelTransformerFunction.js +++ b/packages/builder/cypress/support/queryLevelTransformerFunction.js @@ -1,11 +1,13 @@ const breweries = data const totals = {} -for (let brewery of breweries) - {const state = brewery.state - if (totals[state] == null) - {totals[state] = 1} - else - {totals[state]++}} +for (let brewery of breweries) { + const state = brewery.state + if (totals[state] == null) { + totals[state] = 1 + } else { + totals[state]++ + } +} const entries = Object.entries(totals) -return entries.map(([state, count]) => ({state, count})) \ No newline at end of file +return entries.map(([state, count]) => ({ state, count })) diff --git a/packages/builder/cypress/support/queryLevelTransformerFunctionWithData.js b/packages/builder/cypress/support/queryLevelTransformerFunctionWithData.js index 29c240e9ef..3ca9f9c6fd 100644 --- a/packages/builder/cypress/support/queryLevelTransformerFunctionWithData.js +++ b/packages/builder/cypress/support/queryLevelTransformerFunctionWithData.js @@ -1,27 +1,30 @@ const breweries = data const totals = {} -for (let brewery of breweries) - {const state = brewery.state - if (totals[state] == null) - {totals[state] = 1 - } else - {totals[state]++ - }} -const stateCodes = -{"texas":"tx", -"colorado":"co", -"florida":"fl", -"iwoa":"ia", -"louisiana":"la", -"california":"ca", -"pennsylvania":"pa", -"georgia":"ga", -"new hampshire":"nh", -"virginia":"va", -"michigan":"mi", -"maryland":"md", -"ohio":"oh"} +for (let brewery of breweries) { + const state = brewery.state + if (totals[state] == null) { + totals[state] = 1 + } else { + totals[state]++ + } +} +const stateCodes = { + texas: "tx", + colorado: "co", + florida: "fl", + iwoa: "ia", + louisiana: "la", + california: "ca", + pennsylvania: "pa", + georgia: "ga", + "new hampshire": "nh", + virginia: "va", + michigan: "mi", + maryland: "md", + ohio: "oh", +} const entries = Object.entries(totals) -return entries.map(([state, count]) => -{const stateCode = stateCodes[state.toLowerCase()] - return {state, count, flag: 'http://flags.ox3.in/svg/us/${stateCode}.svg'}}) \ No newline at end of file +return entries.map(([state, count]) => { + const stateCode = stateCodes[state.toLowerCase()] + return { state, count, flag: "http://flags.ox3.in/svg/us/${stateCode}.svg" } +}) diff --git a/packages/builder/package.json b/packages/builder/package.json index 1b60e35b99..c90fdd462c 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -95,7 +95,7 @@ "@testing-library/jest-dom": "^5.11.10", "@testing-library/svelte": "^3.0.0", "babel-jest": "^26.6.3", - "cypress": "9.0.0", + "cypress": "9.2.0", "cypress-terminal-report": "^1.4.1", "identity-obj-proxy": "^3.0.0", "jest": "^26.6.3", diff --git a/packages/builder/yarn.lock b/packages/builder/yarn.lock index f0cdb5a81f..476554abd1 100644 --- a/packages/builder/yarn.lock +++ b/packages/builder/yarn.lock @@ -920,7 +920,7 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@budibase/bbui@^0.9.139", "@budibase/bbui@^0.9.185-alpha.9", "@budibase/bbui@^0.9.187": +"@budibase/bbui@^0.9.139": version "0.9.187" resolved "https://registry.yarnpkg.com/@budibase/bbui/-/bbui-0.9.187.tgz#84f0a37301cfa41f50eaa335243ac08923d9e34f" integrity sha512-Qy24x99NloRAoG78NMdzoJuX3Gbf+eZdHeYTAeUchljB4o2W2L/Ous8qYBzqigYtVcChjzteSTAZ2jCLq458Vg== @@ -969,14 +969,64 @@ svelte-flatpickr "^3.2.3" svelte-portal "^1.0.0" -"@budibase/client@^0.9.185-alpha.9": - version "0.9.187" - resolved "https://registry.yarnpkg.com/@budibase/client/-/client-0.9.187.tgz#8ab8a8edc81e65dc5bac15bcbc5058666d0a2c64" - integrity sha512-eSNikZWkYxqy0d0zGBY6m8lDlVMNDhr7DFlqyFZOha03Abu1lS+YGKRJUb0TSkx7y4Qmb4hmvU0wj074ToxPJQ== +"@budibase/bbui@^0.9.185-alpha.10", "@budibase/bbui@^0.9.190": + version "0.9.190" + resolved "https://registry.yarnpkg.com/@budibase/bbui/-/bbui-0.9.190.tgz#e1ec400ac90f556bfbc80fc23a04506f1585ea81" + integrity sha512-eQg5JzN6BT4zmn1erO+iJlfYltCFODmxk11FAApKj4Pe0qZrkSDs9yZRDhwt6PPIZt+Vver8K8J/L29AmX7AIw== dependencies: - "@budibase/bbui" "^0.9.187" + "@adobe/spectrum-css-workflow-icons" "^1.2.1" + "@spectrum-css/actionbutton" "^1.0.1" + "@spectrum-css/actiongroup" "^1.0.1" + "@spectrum-css/avatar" "^3.0.2" + "@spectrum-css/button" "^3.0.1" + "@spectrum-css/buttongroup" "^3.0.2" + "@spectrum-css/checkbox" "^3.0.2" + "@spectrum-css/dialog" "^3.0.1" + "@spectrum-css/divider" "^1.0.3" + "@spectrum-css/dropzone" "^3.0.2" + "@spectrum-css/fieldgroup" "^3.0.2" + "@spectrum-css/fieldlabel" "^3.0.1" + "@spectrum-css/icon" "^3.0.1" + "@spectrum-css/illustratedmessage" "^3.0.2" + "@spectrum-css/inlinealert" "^2.0.1" + "@spectrum-css/inputgroup" "^3.0.2" + "@spectrum-css/label" "^2.0.10" + "@spectrum-css/link" "^3.1.1" + "@spectrum-css/menu" "^3.0.1" + "@spectrum-css/modal" "^3.0.1" + "@spectrum-css/pagination" "^3.0.3" + "@spectrum-css/picker" "^1.0.1" + "@spectrum-css/popover" "^3.0.1" + "@spectrum-css/progressbar" "^1.0.2" + "@spectrum-css/progresscircle" "^1.0.2" + "@spectrum-css/radio" "^3.0.2" + "@spectrum-css/search" "^3.0.2" + "@spectrum-css/sidenav" "^3.0.2" + "@spectrum-css/statuslight" "^3.0.2" + "@spectrum-css/stepper" "^3.0.3" + "@spectrum-css/switch" "^1.0.2" + "@spectrum-css/table" "^3.0.1" + "@spectrum-css/tabs" "^3.0.1" + "@spectrum-css/tags" "^3.0.2" + "@spectrum-css/textfield" "^3.0.1" + "@spectrum-css/toast" "^3.0.1" + "@spectrum-css/tooltip" "^3.0.3" + "@spectrum-css/treeview" "^3.0.2" + "@spectrum-css/typography" "^3.0.1" + "@spectrum-css/underlay" "^2.0.9" + "@spectrum-css/vars" "^3.0.1" + dayjs "^1.10.4" + svelte-flatpickr "^3.2.3" + svelte-portal "^1.0.0" + +"@budibase/client@^0.9.185-alpha.10": + version "0.9.190" + resolved "https://registry.yarnpkg.com/@budibase/client/-/client-0.9.190.tgz#3a2ad06f5a0fcfe815ad59a2a03215960d67d875" + integrity sha512-DKl8aZAoXueyUyzmWPDKJeKAFtS5vMbv7pko8SdA3jDu53mJUhEUxPjhqkyvD+qYoHbxj9kBWLVq1lSppMiWtw== + dependencies: + "@budibase/bbui" "^0.9.190" "@budibase/standard-components" "^0.9.139" - "@budibase/string-templates" "^0.9.187" + "@budibase/string-templates" "^0.9.190" regexparam "^1.3.0" shortid "^2.2.15" svelte-spa-router "^3.0.5" @@ -1031,10 +1081,10 @@ svelte-apexcharts "^1.0.2" svelte-flatpickr "^3.1.0" -"@budibase/string-templates@^0.9.185-alpha.9", "@budibase/string-templates@^0.9.187": - version "0.9.187" - resolved "https://registry.yarnpkg.com/@budibase/string-templates/-/string-templates-0.9.187.tgz#e6c7b3b3e9c93014731b0b4e01f482fad6d2b12f" - integrity sha512-230yCwmKv6gG0Bi5xUteAKJN7BgYpwepJFEqmF8TrxDaV+qJO55H9br918FbTQ9W9g9Vv0HKU0xNdSfLTrlqhQ== +"@budibase/string-templates@^0.9.185-alpha.10", "@budibase/string-templates@^0.9.190": + version "0.9.190" + resolved "https://registry.yarnpkg.com/@budibase/string-templates/-/string-templates-0.9.190.tgz#47973461cf2b465db59568242b6524cebba0d535" + integrity sha512-OwwIwR2Z3N23Z1rQmT0+Wh+jbljJNYSu5jqQabEYCrzWvknqPUUqmMFS8PMRbUSPFI32aO2DXER/Q4OMH07nrQ== dependencies: "@budibase/handlebars-helpers" "^0.11.7" dayjs "^1.10.4" @@ -1051,20 +1101,10 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@cypress/listr-verbose-renderer@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" - integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - -"@cypress/request@^2.88.5": - version "2.88.7" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.7.tgz#386d960ab845a96953723348088525d5a75aaac4" - integrity sha512-FTULIP2rnDJvZDT9t6B4nSfYR40ue19tVmv3wUcY05R9/FPCoMl1nAPJkzWzBCo7ltVn5ThQTbxiMoGBN7k0ig== +"@cypress/request@^2.88.10": + version "2.88.10" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce" + integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -1073,8 +1113,7 @@ extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" + http-signature "~1.3.6" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" @@ -1532,6 +1571,11 @@ resolved "https://registry.yarnpkg.com/@spectrum-css/illustratedmessage/-/illustratedmessage-3.0.8.tgz#69ef0c935bcc5027f233a78de5aeb0064bf033cb" integrity sha512-HvC4dywDi11GdrXQDCvKQ0vFlrXLTyJuc9UKf7meQLCGoJbGYDBwe+tHXNK1c6gPMD9BoL6pPMP1K/vRzR4EBQ== +"@spectrum-css/inlinealert@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@spectrum-css/inlinealert/-/inlinealert-2.0.6.tgz#4c5e923a1f56a96cc1adb30ef1f06ae04f2c6376" + integrity sha512-OpvvoWP02wWyCnF4IgG8SOPkXymovkC9cGtgMS1FdDubnG3tJZB/JeKTsRR9C9Vt3WBaOmISRdSKlZ4lC9CFzA== + "@spectrum-css/inputgroup@^3.0.2": version "3.0.8" resolved "https://registry.yarnpkg.com/@spectrum-css/inputgroup/-/inputgroup-3.0.8.tgz#fc23afc8a73c24d17249c9d2337e8b42085b298b" @@ -1564,106 +1608,6 @@ dependencies: "@spectrum-css/vars" "^4.3.0" -"@spectrum-css/pagination@^3.0.3": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@spectrum-css/pagination/-/pagination-3.0.9.tgz#272f344ba0c38eae020a9a1a04c8a6d95fab29a2" - integrity sha512-u3AEHAzXBFp6yvQij8nfrLdmwxE8N1eJdJlvaPNA4epKv/+qQEFDZ/2/RJAcA24sRBbDNWwN7TxcNayS+cQ1ag== - -"@spectrum-css/picker@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@spectrum-css/picker/-/picker-1.1.3.tgz#0dbe04801e04ebead9630e66f6864bf2458d38ea" - integrity sha512-Ln4FyYhiE+2G7pJIlD0W8vqCqc1fi3j4m4YwdJzNdjG3gnwScolBwm8LRXNOnMFGcnedB0xtxYAxg54gDZi6bA== - -"@spectrum-css/popover@^3.0.1": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@spectrum-css/popover/-/popover-3.0.9.tgz#256b396d939cacb8d3a285980bbe7c54c2b35606" - integrity sha512-7JcjWkhIgPRhMCAvS2sELIDjgdFgEZn7PrKgudmpgvlFk19AlWvO/55RIWSvwQnX5xHQG29S8Vi1LZ9X/oBAiQ== - -"@spectrum-css/progressbar@^1.0.2": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@spectrum-css/progressbar/-/progressbar-1.0.9.tgz#3988c9a74fad9639c9756c7cd8248ae2deecbe73" - integrity sha512-1mT8PT2pjUbxY/fj5/a/FQFiSswju3dYo0RwVFVweD6SLsJl7VUbjskBYObnF6pOlq/pBIfvfWFZIaIEJVWSLA== - -"@spectrum-css/progresscircle@^1.0.2": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@spectrum-css/progresscircle/-/progresscircle-1.0.8.tgz#f254e225829c011bb79d2c303beac58bbea51efd" - integrity sha512-5/uSO/T1Vggb5soAlYiaUdP9uaNuqEgRhpiHjyFg9EFQIfgbDFIq68aV91GNQzmZNOJgFORvv0cSpvn9z/HCWA== - -"@spectrum-css/radio@^3.0.2": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@spectrum-css/radio/-/radio-3.0.9.tgz#915752e96e83b647bd19e3c8419ff328b23048f3" - integrity sha512-eZmwC6o/H8Zu/rcbSIVpQLC/B4XRqdltH1GRBcjPcTue5Q0yeCeUZLKdSfsNimEE+8Kz8C334I1d1vxmNGcnAg== - -"@spectrum-css/search@^3.0.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@spectrum-css/search/-/search-3.1.2.tgz#8d43f35f884f7c190e7694c8d26a3f2cfed01ef0" - integrity sha512-8cMK1QB07dbReZ/ECyTyoT2dELZ7hK1b3jEDiWSeLBbXcKirR1OI24sZEnewQY/XWFd/62Z1YdNaaA8S6UuXWQ== - -"@spectrum-css/sidenav@^3.0.2": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@spectrum-css/sidenav/-/sidenav-3.0.9.tgz#494d62fd0c83a32362db8c62f75b673d60974b1f" - integrity sha512-WkuCtbiwWgPelJZSGgS9zJwC6/EZPrOZR+RqAdEeIRbjkLOYmdFJl1PCCUpRTHFBaondceIceFI1smZLRofxNg== - -"@spectrum-css/statuslight@^3.0.2": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@spectrum-css/statuslight/-/statuslight-3.0.8.tgz#3b0ea80712573679870a85d469850230e794a0f7" - integrity sha512-zMTHs8lk+I7fLdi9waEEbsCmJ1FxeHcjQ0yltWxuRmGk2vl4MQdQIuHIMI63iblqEaiwnJRjXJoKnWlNvndTJQ== - -"@spectrum-css/stepper@^3.0.3": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@spectrum-css/stepper/-/stepper-3.0.9.tgz#6b2df8fbfb181224b95246fb4cd12de9ff67802a" - integrity sha512-w0Ksfd8BTgMgt1lD+ng6/51Hj6J7oJ1d+KbT+HX9bjVNXJN84VrYU1P63vSG3V0p8bbtVOGNPjRFJb98nP2CWg== - -"@spectrum-css/switch@^1.0.2": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@spectrum-css/switch/-/switch-1.0.8.tgz#449841596a9093f9205ba835353cbd5f7932e3e7" - integrity sha512-tV5sX+C9hMMIxWMLZnAbXbRDIfOb3BBj9CB52o3ocEExBLv7o6SlekiZLVmYCCDrOJVrztRV3fwqLoPV3VMMuw== - -"@spectrum-css/table@^3.0.1": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@spectrum-css/table/-/table-3.0.3.tgz#7f7f19905ef3275cbf907ce3a5818e63c30b2caf" - integrity sha512-nxwzVjLPsXoY/v4sdxOVYLcC+cEbGgJyLcLclT5LT9MGSbngFeUMJzzVR4EvehzuN4dH7hrATG7Mbuq29Mf0Hg== - -"@spectrum-css/tabs@^3.0.1": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@spectrum-css/tabs/-/tabs-3.1.5.tgz#cc82e69c1fc721902345178231fb95d05938b983" - integrity sha512-UtfW8bA1quYnJM6v/lp6AVYGnQFkiUix2FHAf/4VHVrk4mh7ydtLiXS0IR3Kx+t/S8FWdSdSQHDZ8tHbY1ZLZg== - -"@spectrum-css/tags@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@spectrum-css/tags/-/tags-3.0.3.tgz#fc76d2735cdc442de91b7eb3bee49a928c0767ac" - integrity sha512-SL8vPxVDfWcY5VdIuyl0TImEXcOU1I7yCyXkk7MudMwfnYs81FaIyY32hFV9OHj0Tz/36UzRzc7AVMSuRQ53pw== - -"@spectrum-css/textfield@^3.0.1": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@spectrum-css/textfield/-/textfield-3.1.0.tgz#4268bf200e589d5bcfc88d9734c36dacc3a9e62b" - integrity sha512-QMDkq/q2Is0YI3s6jxYyURQ7JlSCduEYX9kh2YDedxJBqwZ1IMDBBH9Pr2iYm4dbN6dLAe1ZgDlcD/BAMnnQEA== - -"@spectrum-css/toast@^3.0.1": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@spectrum-css/toast/-/toast-3.0.3.tgz#97c1527384707600832ecda35643ed304615250f" - integrity sha512-CjLeaMs+cjUXojCCRtbj0YkD2BoZW16kjj2o5omkEpUTjA34IJ8xJ1a+CCtDILWekhXvN0MBN4sbumcnwcnx8w== - -"@spectrum-css/tooltip@^3.0.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@spectrum-css/tooltip/-/tooltip-3.1.3.tgz#88d1f5b2141ea729fe9e4a99de1ea6ce8b028cfb" - integrity sha512-BIOCE1gM74MzVPgSleI/5nGOl1SiNDD15by48FY1fD/PaeeCamzFhRBkOaj48Htc+n+WimhsJnbxEfjPw9+8Sg== - -"@spectrum-css/treeview@^3.0.2": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@spectrum-css/treeview/-/treeview-3.0.3.tgz#aeda5175158b9f8d7529cb2b394428eb2a428046" - integrity sha512-D5gGzZC/KtRArdx86Mesc9+99W9nTbUOeyYGqoJoAfJSOttoT6Tk5CrDvlCmAqjKf5rajemAkGri1ChqvUIwkw== - -"@spectrum-css/typography@^3.0.1", "@spectrum-css/typography@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@spectrum-css/typography/-/typography-3.0.2.tgz#ea3ca0a60e18064527819d48c8c4364cab4fcd38" - integrity sha512-5ZOLmQe0edzsDMyhghUd4hBb5uxGsFrxzf+WasfcUw9klSfTsRZ09n1BsaaWbgrLjlMQ+EEHS46v5VNo0Ms2CA== - -"@spectrum-css/underlay@^2.0.9": - version "2.0.17" - resolved "https://registry.yarnpkg.com/@spectrum-css/underlay/-/underlay-2.0.17.tgz#a1a9b71d4714563ed016906be90e68f9b8809302" - integrity sha512-Afqhc7k8HBqMZ8jkpvl1MqeWRzwrXcdFFkMHiTNPNaJrCYNETyVRlQvvZMNftXOxrzbg+49Ux6FUCFLINnwGwQ== - "@spectrum-css/pagination@^3.0.3": version "3.0.8" resolved "https://registry.yarnpkg.com/@spectrum-css/pagination/-/pagination-3.0.8.tgz#4ffcc93c55221196ac9283759df0a1233c2f9cde" @@ -1949,7 +1893,7 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== -"@types/sinonjs__fake-timers@^6.0.1": +"@types/sinonjs__fake-timers@^6.0.2": version "6.0.4" resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.4.tgz#0ecc1b9259b76598ef01942f547904ce61a6a77d" integrity sha512-IFQTJARgMUBF+xVd2b+hIgXWrZEjND3vJtRCvIelcFB5SIXfjV4bOHbHJ0eXKh+0COrBRc8MqteKAz/j88rE0A== @@ -2040,16 +1984,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.12.3: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -2062,16 +1996,6 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2096,11 +2020,6 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -any-observable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" - integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -2129,7 +2048,7 @@ apexcharts@^3.19.2, apexcharts@^3.22.1: svg.resize.js "^1.4.3" svg.select.js "^3.0.1" -arch@^2.1.2: +arch@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== @@ -2371,7 +2290,7 @@ blob-util@^2.0.2: resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== -bluebird@3.7.2, bluebird@^3.7.2: +bluebird@3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -2717,13 +2636,6 @@ concat-with-sourcemaps@*: dependencies: source-map "^0.6.1" -concat-with-sourcemaps@*: - version "1.1.0" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" - integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== - dependencies: - source-map "^0.6.1" - configent@^2.1.4: version "2.2.0" resolved "https://registry.yarnpkg.com/configent/-/configent-2.2.0.tgz#2de230fc43f22c47cfd99016aa6962d6f9546994" @@ -2825,19 +2737,19 @@ cypress-terminal-report@^1.4.1: chalk "^3.0.0" methods "^1.1.2" -cypress@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.0.0.tgz#8c496f7f350e611604cc2f77b663fb81d0c235d2" - integrity sha512-/93SWBZTw7BjFZ+I9S8SqkFYZx7VhedDjTtRBmXO0VzTeDbmxgK/snMJm/VFjrqk/caWbI+XY4Qr80myDMQvYg== +cypress@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.2.0.tgz#727c20b4662167890db81d5f6ba615231835b17d" + integrity sha512-Jn26Tprhfzh/a66Sdj9SoaYlnNX6Mjfmj5PHu2a7l3YHXhrgmavM368wjCmgrxC6KHTOv9SpMQGhAJn+upDViA== dependencies: - "@cypress/request" "^2.88.7" + "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" "@types/node" "^14.14.31" "@types/sinonjs__fake-timers" "^6.0.2" "@types/sizzle" "^2.3.2" arch "^2.2.0" blob-util "^2.0.2" - bluebird "^3.7.2" + bluebird "3.7.2" cachedir "^2.3.0" chalk "^4.1.0" check-more-types "^2.24.0" @@ -2900,18 +2812,6 @@ dayjs@^1.10.4, dayjs@^1.10.5: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== -date.js@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/date.js/-/date.js-0.3.3.tgz#ef1e92332f507a638795dbb985e951882e50bbda" - integrity sha512-HgigOS3h3k6HnW011nAb43c5xx5rBXk8P2v/WIT9Zv4koIaVXiH2BURguI78VVp+5Qc076T7OR378JViCnZtBw== - dependencies: - debug "~3.1.0" - -dayjs@^1.10.4, dayjs@^1.10.5: - version "1.10.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== - debug@4, debug@4.3.2, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" @@ -2940,13 +2840,6 @@ debug@~3.1.0: dependencies: ms "2.0.0" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -3092,6 +2985,13 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + ent@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" @@ -3287,7 +3187,7 @@ event-stream@=3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -eventemitter2@^6.4.2: +eventemitter2@^6.4.3: version "6.4.5" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== @@ -3297,21 +3197,6 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== -execa@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - execa@4.1.0, execa@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -3327,6 +3212,21 @@ execa@4.1.0, execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3432,11 +3332,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - fast-glob@^3.0.3: version "3.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" @@ -3766,19 +3661,6 @@ handlebars@^4.7.6, handlebars@^4.7.7: optionalDependencies: uglify-js "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - harmony-reflect@^1.4.6: version "1.6.2" resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" @@ -3885,39 +3767,6 @@ highlight.js@^9.12.0: resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== -helper-date@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/helper-date/-/helper-date-1.0.1.tgz#12fedea3ad8e44a7ca4c4efb0ff4104a5120cffb" - integrity sha512-wU3VOwwTJvGr/w5rZr3cprPHO+hIhlblTJHD6aFBrKLuNbf4lAmkawd2iK3c6NbJEvY7HAmDpqjOFSI5/+Ey2w== - dependencies: - date.js "^0.3.1" - handlebars-utils "^1.0.4" - moment "^2.18.1" - -helper-markdown@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/helper-markdown/-/helper-markdown-1.0.0.tgz#ee7e9fc554675007d37eb90f7853b13ce74f3e10" - integrity sha512-AnDqMS4ejkQK0MXze7pA9TM3pu01ZY+XXsES6gEE0RmCGk5/NIfvTn0NmItfyDOjRAzyo9z6X7YHbHX4PzIvOA== - dependencies: - handlebars-utils "^1.0.2" - highlight.js "^9.12.0" - remarkable "^1.7.1" - -helper-md@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/helper-md/-/helper-md-0.2.2.tgz#c1f59d7e55bbae23362fd8a0e971607aec69d41f" - integrity sha1-wfWdflW7riM2L9ig6XFgeuxp1B8= - dependencies: - ent "^2.2.0" - extend-shallow "^2.0.1" - fs-exists-sync "^0.1.0" - remarkable "^1.6.2" - -highlight.js@^9.12.0: - version "9.18.5" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" - integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -3952,14 +3801,14 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= +http-signature@~1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== dependencies: assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + jsprim "^2.0.2" + sshpk "^1.14.1" https-proxy-agent@^5.0.0: version "5.0.0" @@ -4123,13 +3972,6 @@ is-even@^1.0.0: dependencies: is-odd "^0.1.2" -is-even@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-even/-/is-even-1.0.0.tgz#76b5055fbad8d294a86b6a949015e1c97b717c06" - integrity sha1-drUFX7rY0pSoa2qUkBXhyXtxfAY= - dependencies: - is-odd "^0.1.2" - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -4179,13 +4021,6 @@ is-number@^2.0.2: dependencies: kind-of "^3.0.2" -is-number@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -4205,14 +4040,7 @@ is-odd@^0.1.2: dependencies: is-number "^3.0.0" -is-odd@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-0.1.2.tgz#bc573b5ce371ef2aad6e6f49799b72bef13978a7" - integrity sha1-vFc7XONx7yqtbm9JeZtyvvE5eKc= - dependencies: - is-number "^3.0.0" - -is-path-inside@^3.0.1: +is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -4241,13 +4069,6 @@ is-self-closing@^1.0.1: dependencies: self-closing-tags "^1.0.1" -is-self-closing@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-self-closing/-/is-self-closing-1.0.1.tgz#5f406b527c7b12610176320338af0fa3896416e4" - integrity sha512-E+60FomW7Blv5GXTlYee2KDrnG6srxF7Xt1SjrhWUGUEsTFIqY/nq2y3DaftCsgUMdh89V07IVfhY9KIJhLezg== - dependencies: - self-closing-tags "^1.0.1" - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -4829,15 +4650,10 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stringify-safe@~5.0.1: version "5.0.1" @@ -4867,14 +4683,14 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.1.0, kind-of@^3.2.0: @@ -4990,7 +4806,7 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5154,14 +4970,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.4: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -moment@^2.18.1, moment@^2.27.0: +moment@^2.18.1: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== @@ -5358,18 +5167,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -5623,7 +5420,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -5667,7 +5464,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@^2.2.2, readable-stream@~2.3.6: +readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -5898,14 +5695,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.3.3: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.1.0: +rxjs@^7.1.0, rxjs@^7.4.0: version "7.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== @@ -6206,7 +5996,7 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: +sshpk@^1.14.1: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== @@ -6280,20 +6070,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -6328,11 +6104,6 @@ striptags@^3.1.1: resolved "https://registry.yarnpkg.com/striptags/-/striptags-3.2.0.tgz#cc74a137db2de8b0b9a370006334161f7dd67052" integrity sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw== -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6473,61 +6244,6 @@ svg.select.js@^3.0.1: dependencies: svg.js "^2.6.5" -svg.draggable.js@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz#c514a2f1405efb6f0263e7958f5b68fce50603ba" - integrity sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw== - dependencies: - svg.js "^2.0.1" - -svg.easing.js@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/svg.easing.js/-/svg.easing.js-2.0.0.tgz#8aa9946b0a8e27857a5c40a10eba4091e5691f12" - integrity sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI= - dependencies: - svg.js ">=2.3.x" - -svg.filter.js@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/svg.filter.js/-/svg.filter.js-2.0.2.tgz#91008e151389dd9230779fcbe6e2c9a362d1c203" - integrity sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM= - dependencies: - svg.js "^2.2.5" - -svg.js@>=2.3.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.7.1.tgz#eb977ed4737001eab859949b4a398ee1bb79948d" - integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA== - -svg.pathmorphing.js@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz#c25718a1cc7c36e852ecabc380e758ac09bb2b65" - integrity sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww== - dependencies: - svg.js "^2.4.0" - -svg.resize.js@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/svg.resize.js/-/svg.resize.js-1.4.3.tgz#885abd248e0cd205b36b973c4b578b9a36f23332" - integrity sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw== - dependencies: - svg.js "^2.6.5" - svg.select.js "^2.1.2" - -svg.select.js@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-2.1.2.tgz#e41ce13b1acff43a7441f9f8be87a2319c87be73" - integrity sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ== - dependencies: - svg.js "^2.2.5" - -svg.select.js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-3.0.1.tgz#a4198e359f3825739226415f82176a90ea5cc917" - integrity sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw== - dependencies: - svg.js "^2.6.5" - symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -6573,7 +6289,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@2, through@~2.3, through@~2.3.1: +through@2, through@^2.3.8, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -6666,7 +6382,7 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -6734,18 +6450,6 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== -typeof-article@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/typeof-article/-/typeof-article-0.1.1.tgz#9f07e733c3fbb646ffa9e61c08debacd460e06af" - integrity sha1-nwfnM8P7tkb/qeYcCN66zUYOBq8= - dependencies: - kind-of "^3.1.0" - -uglify-js@^3.1.4: - version "3.14.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" - integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -6802,13 +6506,6 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -6892,11 +6589,6 @@ vm2@^3.9.4: resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.5.tgz#5288044860b4bbace443101fcd3bddb2a0aa2496" integrity sha512-LuCAHZN75H9tdrAiLFf030oW7nJV5xwNMuk1ymOZwopmuK3d2H4L1Kv4+GFHgarKiLfXXLFU+7LDABHnwOkWng== -vm2@^3.9.4: - version "3.9.5" - resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.5.tgz#5288044860b4bbace443101fcd3bddb2a0aa2496" - integrity sha512-LuCAHZN75H9tdrAiLFf030oW7nJV5xwNMuk1ymOZwopmuK3d2H4L1Kv4+GFHgarKiLfXXLFU+7LDABHnwOkWng== - w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -7002,14 +6694,6 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"