diff --git a/.env.e2e b/.env.e2e
new file mode 100644
index 0000000..a57b21b
--- /dev/null
+++ b/.env.e2e
@@ -0,0 +1,6 @@
+TYPEORM_CONNECTION=sqlite
+TYPEORM_SYNCHRONIZE=true
+SERVER_PORT=4000
+ADMIN_PORT=4001
+IFRAME_BASE_URL=http://localhost:3000
+BURDY_HOST=http://localhost:4000
diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
new file mode 100644
index 0000000..22f2597
--- /dev/null
+++ b/.github/workflows/e2e.yml
@@ -0,0 +1,20 @@
+name: E2E Tests
+
+on: [push]
+
+jobs:
+ cypress-run:
+ runs-on: ubuntu-18.04
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: E2E Tests
+ uses: cypress-io/github-action@v2
+ with:
+ record: true
+ build: npm run build
+ start: npm run e2e
+ env:
+ CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index e5a2511..215cc3e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
.env.*
!.env.defaults
!.env.sample
+!.env.e2e
node_modules
.idea
dist
@@ -15,3 +16,7 @@ project/
.next
next.config.js
next-env.d.ts
+
+# Cypress / E2E
+e2e/videos
+e2e/screenshots
diff --git a/cypress.json b/cypress.json
new file mode 100644
index 0000000..634fbbb
--- /dev/null
+++ b/cypress.json
@@ -0,0 +1,20 @@
+{
+ "projectId": "1wyx8f",
+ "chromeWebSecurity": false,
+ "baseUrl": "http://localhost:4000/admin",
+ "env": {
+ "apiUrl": "http://localhost:4000/api",
+ "firstName": "John",
+ "lastName": "Doe",
+ "email": "john.doe@burdy.io",
+ "password": "test1234@"
+ },
+ "fileServerFolder": "e2e",
+ "downloadsFolder": "e2e/downloads",
+ "fixturesFolder": "e2e/fixtures",
+ "integrationFolder": "e2e/integration",
+ "screenshotsFolder": "e2e/screenshots",
+ "videosFolder": "e2e/videos",
+ "supportFile": "e2e/support/index.ts",
+ "pluginsFile": "e2e/plugins/index.ts"
+}
diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js
new file mode 100644
index 0000000..59b2bab
--- /dev/null
+++ b/cypress/plugins/index.js
@@ -0,0 +1,22 @@
+///
+// ***********************************************************
+// This example plugins/index.js can be used to load plugins
+//
+// You can change the location of this file or turn off loading
+// the plugins file with the 'pluginsFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/plugins-guide
+// ***********************************************************
+
+// This function is called when a project is opened or re-opened (e.g. due to
+// the project's config changing)
+
+/**
+ * @type {Cypress.PluginConfig}
+ */
+// eslint-disable-next-line no-unused-vars
+module.exports = (on, config) => {
+ // `on` is used to hook into various events Cypress emits
+ // `config` is the resolved Cypress config
+}
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
new file mode 100644
index 0000000..119ab03
--- /dev/null
+++ b/cypress/support/commands.js
@@ -0,0 +1,25 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add('login', (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
diff --git a/cypress/support/index.js b/cypress/support/index.js
new file mode 100644
index 0000000..d68db96
--- /dev/null
+++ b/cypress/support/index.js
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands'
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
diff --git a/e2e/fixtures/colors/blue.jpg b/e2e/fixtures/colors/blue.jpg
new file mode 100644
index 0000000..8d5f905
Binary files /dev/null and b/e2e/fixtures/colors/blue.jpg differ
diff --git a/e2e/fixtures/colors/green.jpg b/e2e/fixtures/colors/green.jpg
new file mode 100644
index 0000000..96d220a
Binary files /dev/null and b/e2e/fixtures/colors/green.jpg differ
diff --git a/e2e/fixtures/colors/red.jpg b/e2e/fixtures/colors/red.jpg
new file mode 100644
index 0000000..d9eb4bf
Binary files /dev/null and b/e2e/fixtures/colors/red.jpg differ
diff --git a/e2e/helpers/asset.helper.js b/e2e/helpers/asset.helper.js
new file mode 100644
index 0000000..58a9a75
--- /dev/null
+++ b/e2e/helpers/asset.helper.js
@@ -0,0 +1,27 @@
+
+export const AssetHelper = {
+ createFolder: (name = '') => {
+ cy.get('[data-cy="assets-commandBar-new"]').click();
+ cy.get('[data-cy="assets-commandBar-new-folder"]').click();
+ cy.get('[data-cy=assets-createFolder-name]').click();
+ cy.get('[data-cy=assets-createFolder-name]').type(name);
+ cy.get('[data-cy=assets-createFolder-submit]').click();
+ },
+ deleteAction: () => {
+ cy.get('[data-cy="assets-commandBar-delete"]').click();
+ cy.get('[data-cy="assets-deleteConfirm"]').click();
+ },
+ renameAction: (name = '') => {
+ cy.get('[data-cy="assets-commandBar-rename"]').click();
+ cy.get('[data-cy="assets-rename-name"]').clear().type(name);
+ cy.get('[data-cy="assets-rename-submit"]').click();
+ },
+ selectors: {
+ assetTileSelect: '[data-automationid="ListCell"] .ms-Tile-check',
+ assetTile: '[data-automationid="ListCell"] .ms-Tile',
+ listItem: '[data-automationid="DetailsRowCell"][data-automation-key="column2"]',
+ listItemSelect: '[data-automationid="ListCell"] .ms-Check',
+ dropzone: '[data-name="dropzone"]'
+ }
+}
+
diff --git a/e2e/helpers/content-types.helper.js b/e2e/helpers/content-types.helper.js
new file mode 100644
index 0000000..c92a0ca
--- /dev/null
+++ b/e2e/helpers/content-types.helper.js
@@ -0,0 +1,43 @@
+
+export const ContentTypesHelper = {
+ create: (name, fields, option = 0) => {
+ cy.get('[data-cy="contentTypes-commandBar-new"]').click();
+
+ cy.get('[data-cy="contentTypes-add-name"]').type(name);
+ cy.get('[data-cy="contentTypes-add-type"]').click();
+
+ cy.get('.ms-Dropdown-item[data-index]').should('have.length', 4);
+ cy.get(`.ms-Dropdown-item[data-index="${option}"]`).click();
+
+ fields.forEach(({name, label, type}) => {
+ cy.get('[data-cy="contentTypes-fieldsList-addField"]').click();
+
+ cy.get('[data-cy="contentTypes-fieldsSelect"]')
+ .find(ContentTypesHelper.selectors.fieldListItem)
+ .contains(type)
+ .click();
+
+ cy.get('[data-cy="contentTypes-fieldsSelect-config"]').click();
+ cy.get('[data-cy="contentTypes-fieldsConfig-name"]').type(name);
+ cy.get('[data-cy="contentTypes-fieldsConfig-label"]').type(label);
+ cy.get('[data-cy="contentTypes-fieldsConfig-confirm"]').click();
+
+ cy.get('[data-cy="contentTypes-fieldsList-item-title"]').should('exist');
+ })
+
+ cy.get('[data-cy="contentTypes-add-confirm"]').click();
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem)
+ .contains(name)
+ .should('exist');
+ },
+ deleteSelected: () => {
+ cy.get('[data-cy="contentTypes-commandBar-delete"]').click();
+ cy.get('[data-cy="dialog-confirm"]').click();
+ },
+ selectors: {
+ fieldListItem: '[data-automationid="ListCell"]',
+ contentTypesListItem: '[data-automationid="ListCell"]'
+ }
+}
+
diff --git a/e2e/helpers/group.helper.js b/e2e/helpers/group.helper.js
new file mode 100644
index 0000000..71348bc
--- /dev/null
+++ b/e2e/helpers/group.helper.js
@@ -0,0 +1,25 @@
+
+export const GroupHelper = {
+ createGroup: (name, description) => {
+ cy.get('[data-cy="groups-commandBar-add"]').click();
+ cy.get('[data-cy="groups-add-name"]').type(name);
+ cy.get('[data-cy="groups-add-description"]').type(description);
+ cy.get('[data-cy="groups-add-submit"]').click();
+ },
+ editGroup: (name, description) => {
+ cy.get('[data-cy="groups-commandBar-edit"]').click();
+ cy.get('[data-cy="groups-edit-name"]').clear().type(name);
+ cy.get('[data-cy="groups-edit-description"]').clear().type(description);
+ cy.get('[data-cy="groups-edit-submit"]').click();
+ },
+ deleteSelected: () => {
+ cy.get('[data-cy="groups-commandBar-delete"]').click();
+ cy.get('[data-cy="dialog-confirm"]').click();
+ },
+ selectors: {
+ listItemSelect: '[data-automationid="ListCell"] .ms-Check',
+ listItem: '[data-automationid="ListCell"]',
+ permissionItem: '[data-automationid="ListCell"]'
+ }
+}
+
diff --git a/e2e/helpers/settings.helper.js b/e2e/helpers/settings.helper.js
new file mode 100644
index 0000000..71ff81e
--- /dev/null
+++ b/e2e/helpers/settings.helper.js
@@ -0,0 +1,7 @@
+
+export const SettingsHelper = {
+ selectors: {
+ adminEmail: '[data-cy="settings-adminEmail"]',
+ submit: '[data-cy="settings-submit"]'
+ }
+}
diff --git a/e2e/helpers/tags.helper.js b/e2e/helpers/tags.helper.js
new file mode 100644
index 0000000..338d09c
--- /dev/null
+++ b/e2e/helpers/tags.helper.js
@@ -0,0 +1,24 @@
+
+export const TagsHelper = {
+ createTag: (name, slug) => {
+ cy.get('[data-cy="tags-commandBar-new"]').click();
+ cy.get('[data-cy="tags-create-name"]').clear().type(name);
+ cy.get('[data-cy="tags-create-slug"]').clear().type(slug);
+ cy.get('[data-cy="tags-create-submit"]').click();
+ },
+ updateTag: (name, slug) => {
+ cy.get('[data-cy="tags-commandBar-update"]').click();
+ cy.get('[data-cy="tags-update-name"]').clear().type(name);
+ cy.get('[data-cy="tags-update-slug"]').clear().type(slug);
+ cy.get('[data-cy="tags-update-submit"]').click();
+ },
+ deleteSelected: () => {
+ cy.get('[data-cy="tags-commandBar-delete"]').click();
+ cy.get('[data-cy="dialog-confirm"]').click();
+ },
+ selectors: {
+ item: '[data-cy="columns-view-item"]',
+ column: '[data-cy="columns-view-column"]',
+ container: '[data-cy="columns-view"]',
+ }
+}
diff --git a/e2e/helpers/user.helper.js b/e2e/helpers/user.helper.js
new file mode 100644
index 0000000..45a9b9a
--- /dev/null
+++ b/e2e/helpers/user.helper.js
@@ -0,0 +1,34 @@
+
+export const UserHelper = {
+ createUser: (email, firstName, lastName) => {
+ cy.get('[data-cy="users-commandBar-add"]').click();
+ cy.get('[data-cy="users-add-email"]').type(email);
+ cy.get('[data-cy="users-add-password"]').type('test-password');
+ cy.get('[data-cy="users-add-firstName"]').type(firstName);
+ cy.get('[data-cy="users-add-lastName"]').type(lastName);
+ cy.get('[data-cy="users-add-submit"]').click();
+ },
+ editUser: (firstName, lastName) => {
+ cy.get('[data-cy="users-commandBar-edit"]').click();
+ cy.get('[data-cy="users-edit-firstName"]').clear().type(firstName);
+ cy.get('[data-cy="users-edit-lastName"]').clear().type(lastName);
+ cy.get('[data-cy="users-edit-submit"]').click();
+ },
+ deleteSelected: () => {
+ cy.get('[data-cy="users-commandBar-delete"]').click();
+ cy.get('[data-cy="dialog-confirm"]').click();
+ },
+ deactivateSelected: () => {
+ cy.get('[data-cy="users-commandBar-deactivate"]').click();
+ cy.get('[data-cy="dialog-confirm"]').click();
+ },
+ activateSelected: () => {
+ cy.get('[data-cy="users-commandBar-activate"]').click();
+ cy.get('[data-cy="dialog-confirm"]').click();
+ },
+ selectors: {
+ listItemSelect: '[data-automationid="ListCell"] .ms-Check',
+ listItem: '[data-automationid="ListCell"]',
+ groupRow: '[data-automationid="DetailsRow"]',
+ }
+}
diff --git a/e2e/integration/1-authentication/1-initial.spec.ts b/e2e/integration/1-authentication/1-initial.spec.ts
new file mode 100644
index 0000000..801a07d
--- /dev/null
+++ b/e2e/integration/1-authentication/1-initial.spec.ts
@@ -0,0 +1,17 @@
+
+
+describe('Initialization Test', () => {
+ it('creates first account', () => {
+ cy.visit('/');
+
+ cy.location('pathname').should('eq', '/admin/init');
+
+ cy.get('[data-cy="welcome-firstName"]').type(Cypress.env('firstName'));
+ cy.get('[data-cy="welcome-lastName"]').type(Cypress.env('lastName'));
+ cy.get('[data-cy="welcome-email"]').type(Cypress.env('email'));
+ cy.get('[data-cy="welcome-password"]').type(Cypress.env('password'));
+ cy.get('[data-cy="welcome-submit"]').click();
+
+ cy.location('pathname').should('eq', '/admin/');
+ })
+})
diff --git a/e2e/integration/1-authentication/2-login.spec.ts b/e2e/integration/1-authentication/2-login.spec.ts
new file mode 100644
index 0000000..ba545cc
--- /dev/null
+++ b/e2e/integration/1-authentication/2-login.spec.ts
@@ -0,0 +1,25 @@
+
+
+describe('Login test', () => {
+ it('logs in', () => {
+ cy.clearCookie('token');
+ cy.visit('/');
+ cy.location('pathname').should('eq', '/admin/login');
+
+ cy.get('[data-cy="login-email"]').type(Cypress.env('email'));
+ cy.get('[data-cy="login-password"]').type(Cypress.env('password'));
+ cy.get('[data-cy="login-submit"]').click();
+
+ cy.location('pathname').should('eq', '/admin/');
+ })
+
+ it('logs out', () => {
+ cy.visit('/');
+
+ cy.get('.ms-Persona-initials').click();
+ cy.get('.ms-ContextualMenu-item:nth-child(2) .ms-ContextualMenu-itemText').click();
+ cy.wait(500);
+ cy.getCookie('token').should('be.null');
+ cy.location('pathname').should('eq', '/admin/login');
+ });
+})
diff --git a/e2e/integration/2-dashboard/1-navigation.spec.ts b/e2e/integration/2-dashboard/1-navigation.spec.ts
new file mode 100644
index 0000000..8a0487c
--- /dev/null
+++ b/e2e/integration/2-dashboard/1-navigation.spec.ts
@@ -0,0 +1,43 @@
+
+
+describe('Dashboard Navigation', () => {
+ before(() => {
+ cy.login();
+ });
+
+ it('navigates to assets', () => {
+ cy.visit('/');
+ cy.get('[data-cy=dashboard-assets]').click();
+ cy.location('pathname').should('eq', '/admin/assets');
+ })
+
+ it('navigates to sites', () => {
+ cy.visit('/');
+ cy.get('[data-cy=dashboard-sites]').click();
+ cy.location('pathname').should('eq', '/admin/sites');
+ })
+
+ it('navigates to content types', () => {
+ cy.visit('/');
+ cy.get('[data-cy=dashboard-content-types]').click();
+ cy.location('pathname').should('eq', '/admin/content-types');
+ })
+
+ it('navigates to tags', () => {
+ cy.visit('/');
+ cy.get('[data-cy=dashboard-tags]').click();
+ cy.location('pathname').should('eq', '/admin/tags');
+ })
+
+ it('navigates to users', () => {
+ cy.visit('/');
+ cy.get('[data-cy=dashboard-users]').click();
+ cy.location('pathname').should('eq', '/admin/users');
+ })
+
+ it('navigates to settings', () => {
+ cy.visit('/');
+ cy.get('[data-cy=dashboard-settings]').click();
+ cy.location('pathname').should('eq', '/admin/settings');
+ })
+})
diff --git a/e2e/integration/3-assets/1-folder.spec.ts b/e2e/integration/3-assets/1-folder.spec.ts
new file mode 100644
index 0000000..3b5ac8e
--- /dev/null
+++ b/e2e/integration/3-assets/1-folder.spec.ts
@@ -0,0 +1,52 @@
+import {AssetHelper} from '../../helpers/asset.helper'
+
+describe('General Folder Tests', () => {
+ before(() => {
+ cy.login();
+ })
+
+ beforeEach(() => {
+ cy.setLocalStorage('assetDefaultView', '"tiles"');
+ })
+
+ it('creates a folder', () => {
+ cy.visit('/assets');
+ AssetHelper.createFolder('Root Folder');
+ cy.contains('.page-content', 'Root Folder');
+ cy.get('body').find(AssetHelper.selectors.assetTile).should('have.length', 1);
+ })
+
+ it('creates multi-level folders', () => {
+ cy.visit('/assets');
+
+ cy.get(AssetHelper.selectors.assetTile).first().click();
+
+ AssetHelper.createFolder('Sub Folder 1');
+ AssetHelper.createFolder('Sub Folder 2');
+ AssetHelper.createFolder('Sub Folder 3');
+
+ cy.get('body').find(AssetHelper.selectors.assetTile).should('have.length', 3);
+ })
+
+ it('deletes multiple folders', () => {
+ cy.visit('/assets');
+
+ cy.get(AssetHelper.selectors.assetTile).first().click();
+
+ cy.get(AssetHelper.selectors.assetTileSelect).eq(0).click();
+ cy.get(AssetHelper.selectors.assetTileSelect).eq(1).click();
+
+ AssetHelper.deleteAction();
+
+ cy.get('body').find(AssetHelper.selectors.assetTile).should('have.length', 1);
+ })
+
+ it('deletes root folder', () => {
+ cy.visit('/assets');
+ cy.get(AssetHelper.selectors.assetTileSelect).first().click();
+
+ AssetHelper.deleteAction();
+
+ cy.get('body').find(AssetHelper.selectors.assetTile).should('have.length', 0);
+ })
+})
diff --git a/e2e/integration/3-assets/2-folder-list.spec.ts b/e2e/integration/3-assets/2-folder-list.spec.ts
new file mode 100644
index 0000000..c24a31b
--- /dev/null
+++ b/e2e/integration/3-assets/2-folder-list.spec.ts
@@ -0,0 +1,52 @@
+import {AssetHelper} from '../../helpers/asset.helper'
+
+describe('General Folder Tests', () => {
+ before(() => {
+ cy.login();
+ })
+
+ beforeEach(() => {
+ cy.setLocalStorage('assetDefaultView', '"list"');
+ })
+
+ it('creates a folder', () => {
+ cy.visit('/assets');
+ AssetHelper.createFolder('Root Folder');
+ cy.contains('.page-content', 'Root Folder');
+ cy.get('body').find(AssetHelper.selectors.listItem).should('have.length', 1);
+ })
+
+ it('creates multi-level folders', () => {
+ cy.visit('/assets');
+
+ cy.get(AssetHelper.selectors.listItem).first().click();
+
+ AssetHelper.createFolder('Sub Folder 1');
+ AssetHelper.createFolder('Sub Folder 2');
+ AssetHelper.createFolder('Sub Folder 3');
+
+ cy.get('body').find(AssetHelper.selectors.listItem).should('have.length', 3);
+ })
+
+ it('deletes multiple folders', () => {
+ cy.visit('/assets');
+
+ cy.get(AssetHelper.selectors.listItem).first().click();
+
+ cy.get(AssetHelper.selectors.listItemSelect).eq(0).click();
+ cy.get(AssetHelper.selectors.listItemSelect).eq(1).click();
+
+ AssetHelper.deleteAction();
+
+ cy.get('body').find('[data-automationid="ListCell"]').should('have.length', 1);
+ })
+
+ it('deletes root folder', () => {
+ cy.visit('/assets');
+ cy.get(AssetHelper.selectors.listItemSelect).first().click();
+
+ AssetHelper.deleteAction();
+
+ cy.get('body').find(AssetHelper.selectors.listItem).should('have.length', 0);
+ })
+})
diff --git a/e2e/integration/3-assets/3-image.spec.ts b/e2e/integration/3-assets/3-image.spec.ts
new file mode 100644
index 0000000..c35ff29
--- /dev/null
+++ b/e2e/integration/3-assets/3-image.spec.ts
@@ -0,0 +1,39 @@
+import {AssetHelper} from '../../helpers/asset.helper'
+
+describe('Assets', () => {
+ before(() => {
+ cy.login();
+ })
+
+ beforeEach(() => {
+ cy.setLocalStorage('assetDefaultView', '"tiles"');
+ })
+
+ it('uploads files', () => {
+ cy.visit('/assets');
+ cy.get(AssetHelper.selectors.dropzone)
+ .attachFile(
+ ['colors/red.jpg', 'colors/blue.jpg', 'colors/green.jpg'],
+ {subjectType: 'drag-n-drop'}
+ );
+
+ cy.get('body').find(AssetHelper.selectors.assetTile).should('have.length', 3);
+ })
+
+ it('validates file details', () => {
+ cy.visit('/assets');
+ cy.get(AssetHelper.selectors.assetTile).each(e => {cy.wait(500);
+ cy.get(e).click();
+ cy.get('[data-cy="assets-commandBar-details"]').click();
+ cy.get('[data-cy="assets-details-mimeType"]').contains('image/jpeg').should('exist');
+ cy.get('[data-cy="assets-details-close"]').click();
+ });
+ })
+
+ it('deletes files', () => {
+ cy.visit('/assets');
+ cy.get(AssetHelper.selectors.assetTileSelect).each(e => e.click());
+ AssetHelper.deleteAction();
+ cy.get('body').find(AssetHelper.selectors.assetTile).should('have.length', 0);
+ })
+})
diff --git a/e2e/integration/3-assets/4-rename.spec.ts b/e2e/integration/3-assets/4-rename.spec.ts
new file mode 100644
index 0000000..adcf1fb
--- /dev/null
+++ b/e2e/integration/3-assets/4-rename.spec.ts
@@ -0,0 +1,23 @@
+import {AssetHelper} from '../../helpers/asset.helper'
+
+describe('Asset Rename Test', () => {
+ before(() => {
+ cy.login();
+ })
+
+ beforeEach(() => {
+ cy.setLocalStorage('assetDefaultView', '"tiles"');
+ })
+
+ it('renames folder', () => {
+ cy.visit('/assets');
+ AssetHelper.createFolder('Root Folder');
+ cy.get(AssetHelper.selectors.assetTile).contains('Root Folder').should('have.length', 1);
+ cy.get(AssetHelper.selectors.assetTileSelect).first().click();
+ AssetHelper.renameAction('Renamed Folder');
+ cy.get(AssetHelper.selectors.assetTile).contains('Renamed Folder').should('have.length', 1);
+ cy.get(AssetHelper.selectors.assetTileSelect).click();
+ AssetHelper.deleteAction();
+ cy.get(AssetHelper.selectors.assetTile).should('have.length', 0);
+ });
+})
diff --git a/e2e/integration/4-content-types/1-basic.spec.ts b/e2e/integration/4-content-types/1-basic.spec.ts
new file mode 100644
index 0000000..4ed824f
--- /dev/null
+++ b/e2e/integration/4-content-types/1-basic.spec.ts
@@ -0,0 +1,127 @@
+import {ContentTypesHelper} from '../../helpers/content-types.helper'
+import faker from 'faker';
+
+describe('Basic Content Types Test', () => {
+ const contentTypeName = faker.random.word().toLowerCase();
+ const newContentTypeName = faker.random.word().toLowerCase();
+
+ before(() => {
+ cy.login();
+ })
+
+ it('creates a content type', () => {
+ cy.visit('/content-types');
+
+ cy.get('[data-cy="contentTypes-commandBar-new"]').click();
+
+ cy.get('[data-cy="contentTypes-add-name"]').type(contentTypeName);
+ cy.get('[data-cy="contentTypes-add-type"]').click();
+
+ cy.get('.ms-Dropdown-item[data-index]').should('have.length', 4);
+ cy.get('.ms-Dropdown-item[data-index="0"]').click();
+
+ cy.get('[data-cy="contentTypes-fieldsList-addField"]').click();
+ cy.get('[data-cy="contentTypes-fieldsSelect"]')
+ .find(ContentTypesHelper.selectors.fieldListItem)
+ .should('have.length.at.least', 10);
+
+ cy.get('[data-cy="contentTypes-fieldsSelect-search"]').type('Text');
+
+ cy.get('[data-cy="contentTypes-fieldsSelect"]')
+ .find(ContentTypesHelper.selectors.fieldListItem)
+ .contains(/^Text$/)
+ .click();
+
+ cy.get('[data-cy="contentTypes-fieldsConfig-label"]').type('Title');
+ cy.get('[data-cy="contentTypes-fieldsConfig-confirm"]').click();
+
+ cy.get('[data-cy="contentTypes-fieldsList-item-title"]').should('exist');
+
+ cy.get('[data-cy="contentTypes-fieldsList-addField"]').click();
+
+ cy.get('[data-cy="contentTypes-fieldsSelect-search"]').type('Rich Text');
+
+ cy.get('[data-cy="contentTypes-fieldsSelect"]')
+ .find(ContentTypesHelper.selectors.fieldListItem)
+ .contains(/^Rich Text$/)
+ .click();
+
+ cy.get('[data-cy="contentTypes-fieldsConfig-label"]').type('Content');
+ cy.get('[data-cy="contentTypes-fieldsConfig-confirm"]').click();
+
+ cy.get('[data-cy="contentTypes-fieldsList-item-content"]').should('exist');
+
+ cy.get('[data-cy="contentTypes-add-confirm"]').click();
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem)
+ .contains(contentTypeName)
+ .should('exist');
+ })
+
+ it('validates content type details', () => {
+ cy.visit('/content-types');
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem).should('have.length', 1);
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem)
+ .find('[data-automation-key="name"]')
+ .contains(contentTypeName)
+ .should('exist')
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem)
+ .find('[data-automation-key="type"]')
+ .contains('page')
+ .should('exist')
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem)
+ .find('[data-automation-key="author"]')
+ .contains(`${Cypress.env('firstName')} ${Cypress.env('lastName')}`)
+ .should('exist')
+ })
+
+ it('updates a content type', () => {
+ cy.visit('/content-types');
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem).first().click();
+ cy.get('[data-cy="contentTypes-commandBar-edit"]').click();
+
+ cy.get('[data-cy="contentTypes-edit-name"]').should('have.value', contentTypeName);
+ cy.get('[data-cy^="contentTypes-fieldsList-item"]').should('have.length', 2);
+
+ cy.get('[data-cy="contentTypes-edit-name"]').clear().type(newContentTypeName);
+
+ cy.get('[data-cy="contentTypes-fieldsList-addField"]').click();
+
+ cy.get('[data-cy="contentTypes-fieldsSelect-search"]').type('Assets')
+
+ cy.get('[data-cy="contentTypes-fieldsSelect"]')
+ .find(ContentTypesHelper.selectors.fieldListItem)
+ .contains(/^Assets$/)
+ .click();
+
+ cy.get('[data-cy="contentTypes-fieldsConfig-label"]').type('Thumbnail');
+ cy.get('[data-cy="contentTypes-fieldsConfig-confirm"]').click();
+
+ cy.get('[data-cy="contentTypes-fieldsList-item-thumbnail"]').should('exist');
+
+ cy.get('[data-cy^="contentTypes-fieldsList-item"]').should('have.length', 3);
+ cy.get('[data-cy="contentTypes-edit-confirm"]').click();
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem)
+ .contains(newContentTypeName)
+ .should('exist');
+ })
+
+ it('deletes a content type', () => {
+ cy.visit('/content-types');
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem)
+ .contains(newContentTypeName)
+ .should('exist');
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem).first().click();
+
+ ContentTypesHelper.deleteSelected();
+
+ cy.get(ContentTypesHelper.selectors.contentTypesListItem).should('not.exist');
+ })
+})
diff --git a/e2e/integration/7-tags/1-basic.spec.ts b/e2e/integration/7-tags/1-basic.spec.ts
new file mode 100644
index 0000000..4374d3e
--- /dev/null
+++ b/e2e/integration/7-tags/1-basic.spec.ts
@@ -0,0 +1,50 @@
+import {TagsHelper} from '../../helpers/tags.helper'
+
+describe('Basic Tag Test', () => {
+ before(() => {
+ cy.login();
+ })
+
+ it('creates a tag', () => {
+ cy.visit('/tags');
+ TagsHelper.createTag('First', 'first');
+ cy.wait(500);
+ cy.get(TagsHelper.selectors.container).contains('first').should('have.length', 1);
+ })
+
+ it('has correct details', () => {
+ cy.visit('/tags');
+ cy.get(TagsHelper.selectors.container).contains('first')
+ .closest(TagsHelper.selectors.item)
+ .click();
+
+ cy.get('[data-cy="tags-details-name"]').contains('First').should('have.length', 1);
+ cy.get('[data-cy="tags-details-slug"]').contains('first').should('have.length', 1);
+ cy.get('[data-cy="tags-details-author"]')
+ .contains(`${Cypress.env('firstName')} ${Cypress.env('lastName')}`)
+ .should('have.length', 1);
+ })
+
+ it('updates a tag', () => {
+ cy.visit('/tags');
+ cy.get(TagsHelper.selectors.container).contains('first')
+ .closest(TagsHelper.selectors.item)
+ .click();
+
+ TagsHelper.updateTag('Updated', 'updated');
+ cy.wait(500);
+ cy.get(TagsHelper.selectors.item).contains('updated').should('have.length', 1);
+ })
+
+ it('deletes a tag', () => {
+ cy.visit('/tags');
+ cy.get(TagsHelper.selectors.item).contains('updated')
+ .closest(TagsHelper.selectors.item)
+ .find('.ms-Check')
+ .click();
+
+ TagsHelper.deleteSelected();
+ cy.wait(500);
+ cy.get(TagsHelper.selectors.container).contains('updated').should('have.length', 0);
+ })
+})
diff --git a/e2e/integration/7-tags/1-simple.spec.ts b/e2e/integration/7-tags/1-simple.spec.ts
new file mode 100644
index 0000000..d156288
--- /dev/null
+++ b/e2e/integration/7-tags/1-simple.spec.ts
@@ -0,0 +1,48 @@
+import {TagsHelper} from '../../helpers/tags.helper'
+
+describe('Simple Tag Test', () => {
+ before(() => {
+ cy.login();
+ })
+
+ it('creates a tag', () => {
+ cy.visit('/tags');
+ TagsHelper.createTag('First', 'first');
+ cy.wait(500);
+ cy.get(TagsHelper.selectors.container).contains('first').should('have.length', 1);
+ })
+
+ it('has correct details', () => {
+ cy.visit('/tags');
+ cy.get(TagsHelper.selectors.container).contains('first')
+ .closest(TagsHelper.selectors.item)
+ .click();
+
+ cy.get('[data-cy="tags-details-name"]').contains('First').should('have.length', 1);
+ cy.get('[data-cy="tags-details-slug"]').contains('first').should('have.length', 1);
+ cy.get('[data-cy="tags-details-author"]').contains(`${Cypress.env('firstName')} ${Cypress.env('lastName')}`).should('have.length', 1);
+ })
+
+ it('updates a tag', () => {
+ cy.visit('/tags');
+ cy.get(TagsHelper.selectors.container).contains('first')
+ .closest(TagsHelper.selectors.item)
+ .click();
+
+ TagsHelper.updateTag('Updated', 'updated');
+ cy.wait(500);
+ cy.get(TagsHelper.selectors.item).contains('updated').should('have.length', 1);
+ })
+
+ it('deletes a tag', () => {
+ cy.visit('/tags');
+ cy.get(TagsHelper.selectors.item).contains('updated')
+ .closest(TagsHelper.selectors.item)
+ .find('.ms-Check')
+ .click();
+
+ TagsHelper.deleteSelected();
+ cy.wait(500);
+ cy.get(TagsHelper.selectors.container).contains('updated').should('have.length', 0);
+ })
+})
diff --git a/e2e/integration/7-tags/2-tree.spec.ts b/e2e/integration/7-tags/2-tree.spec.ts
new file mode 100644
index 0000000..537f599
--- /dev/null
+++ b/e2e/integration/7-tags/2-tree.spec.ts
@@ -0,0 +1,70 @@
+import {TagsHelper} from '../../helpers/tags.helper'
+
+describe('Tag Tree Test', () => {
+ before(() => {
+ cy.login();
+ })
+
+ it('creates a tree', () => {
+ cy.visit('/tags');
+ // 1 Parent and 3 children
+ TagsHelper.createTag('Parent', 'parent');
+ cy.wait(500);
+ cy.get(TagsHelper.selectors.container).contains('parent')
+ .closest(TagsHelper.selectors.item)
+ .click();
+
+ TagsHelper.createTag('Child 1', 'child-1');
+ TagsHelper.createTag('Child 2', 'child-2');
+ TagsHelper.createTag('Child 3', 'child-3');
+ cy.wait(250);
+
+ cy.get(TagsHelper.selectors.item + ':contains("child-")').should('have.length', 3);
+ })
+
+ it('updates the root tag', () => {
+ cy.visit('/tags');
+
+ cy.get(TagsHelper.selectors.container).contains('parent')
+ .closest(TagsHelper.selectors.item)
+ .click();
+
+ TagsHelper.updateTag('Parent Updated', 'parent-updated');
+
+ cy.get(TagsHelper.selectors.container).contains('parent-updated').should('have.length', 1);
+ })
+
+ it('deletes multiple tags', () => {
+ cy.visit('/tags');
+
+ cy.get(TagsHelper.selectors.container).contains('parent-updated')
+ .closest(TagsHelper.selectors.item)
+ .click();
+
+ cy.get(TagsHelper.selectors.container).contains('child-1')
+ .closest(TagsHelper.selectors.item)
+ .click();
+
+ cy.get(TagsHelper.selectors.container).contains('child-2')
+ .closest(TagsHelper.selectors.item)
+ .find('.ms-Check')
+ .click();
+
+ TagsHelper.deleteSelected();
+
+ cy.wait(500);
+ cy.get(TagsHelper.selectors.item).should('have.length', 1);
+ })
+
+ it('deletes the root tag', () => {
+ cy.visit('/tags');
+
+ cy.get(TagsHelper.selectors.container).contains('parent-updated')
+ .closest(TagsHelper.selectors.item)
+ .click();
+
+ TagsHelper.deleteSelected();
+
+ cy.get(TagsHelper.selectors.container).find(TagsHelper.selectors.item).should('have.length', 0)
+ })
+})
diff --git a/e2e/integration/8-users/1-profile.spec.ts b/e2e/integration/8-users/1-profile.spec.ts
new file mode 100644
index 0000000..d4635f2
--- /dev/null
+++ b/e2e/integration/8-users/1-profile.spec.ts
@@ -0,0 +1,36 @@
+import {UserHelper} from '../../helpers/user.helper'
+import faker from 'faker';
+
+
+describe('User Profile Test', () => {
+ before(() => {
+ cy.login();
+ })
+
+ it('updates profile', () => {
+ cy.visit('/users')
+ const firstName = faker.name.firstName();
+ const lastName = faker.name.lastName();
+
+ cy.findUser(Cypress.env('email')).dblclick();
+
+ cy.editUser({
+ basic: { firstName, lastName }
+ })
+
+ cy.findUser(Cypress.env('email')).should('contain', `${firstName} ${lastName}`);
+
+ cy.wait(500);
+
+ cy.findUser(Cypress.env('email')).dblclick();
+
+ cy.editUser({
+ basic: {
+ firstName: Cypress.env('firstName'),
+ lastName: Cypress.env('lastName')
+ }
+ })
+
+ cy.findUser(Cypress.env('email')).should('contain', `${Cypress.env('firstName')} ${Cypress.env('lastName')}`);
+ })
+})
diff --git a/e2e/integration/8-users/2-operations.spec.ts b/e2e/integration/8-users/2-operations.spec.ts
new file mode 100644
index 0000000..56dff2b
--- /dev/null
+++ b/e2e/integration/8-users/2-operations.spec.ts
@@ -0,0 +1,43 @@
+import faker from 'faker';
+
+describe('User Operations Test', () => {
+ const email = faker.internet.email().toLowerCase();
+
+ before(() => {
+ cy.login();
+ })
+
+ it('creates a user', () => {
+ cy.visit('/users');
+ cy.createUser({email});
+ })
+
+ it('verifies user exists', () => {
+ cy.visit('/users');
+ cy.findUser(email).should('exist');
+ })
+
+ it('activates and deactivates a user', () => {
+ cy.visit('/users');
+
+ cy.selectUser(email);
+ cy.findUser(email).should('contain', 'active');
+
+ cy.deactivateSelectedUsers();
+
+ cy.findUser(email).should('contain', 'disabled');
+
+ cy.activateSelectedUsers();
+
+ cy.findUser(email).should('contain', 'active');
+ })
+
+ it('deletes a user', () => {
+ cy.visit('/users');
+
+ cy.findUser(email).click();
+ cy.deleteSelectedUsers();
+
+ cy.userList().should('not.contain', email);
+ })
+})
diff --git a/e2e/integration/8-users/3-membership.spec.ts b/e2e/integration/8-users/3-membership.spec.ts
new file mode 100644
index 0000000..ce578a0
--- /dev/null
+++ b/e2e/integration/8-users/3-membership.spec.ts
@@ -0,0 +1,119 @@
+import {UserHelper} from '../../helpers/user.helper'
+import faker from 'faker';
+
+describe('User Membership Test', () => {
+ const email = faker.internet.email().toLowerCase();
+
+ before(() => {
+ cy.login();
+ })
+
+ it('creates a user with groups', () => {
+ cy.visit('/users');
+
+ cy.get('[data-cy="users-commandBar-add"]').click();
+ cy.get('[data-cy="users-add-email"]').type(email);
+ cy.get('[data-cy="users-add-password"]').type('test-password');
+ cy.get('[data-cy="users-add-firstName"]').type('Test');
+ cy.get('[data-cy="users-add-lastName"]').type('Member');
+
+ cy.get('[data-cy="users-add-tabs"] [data-content="Groups"]').click();
+ cy.get('[data-cy="users-groups"]')
+ .find(UserHelper.selectors.groupRow)
+ .should('have.length', 0);
+
+ cy.get('[data-cy="users-groups-add"]').click();
+ cy.get('[data-cy="users-groups-panel"]')
+ .find(UserHelper.selectors.groupRow)
+ .should('have.length', 2);
+
+ cy.get(`[data-cy="users-groups-panel"] ${UserHelper.selectors.groupRow} .ms-Check`).each(e => e.click());
+ cy.get('[data-cy="users-groups-submit"]').click();
+
+ cy.get('[data-cy="users-groups"]')
+ .find(UserHelper.selectors.groupRow)
+ .should('have.length', 2);
+
+ cy.get('[data-cy="users-groups-add"]').click();
+ cy.get('[data-cy="users-groups-panel"]')
+ .find(UserHelper.selectors.groupRow)
+ .should('have.length', 0);
+
+ cy.get('[data-cy="users-groups-cancel"]').click();
+ cy.get('[data-cy="users-groups"]').find(UserHelper.selectors.groupRow).eq(1).click();
+ cy.get('[data-cy="users-groups-remove"]').click();
+ cy.get('[data-cy="users-groups"]')
+ .find(UserHelper.selectors.groupRow)
+ .should('have.length', 1);
+
+ cy.get('[data-cy="users-add-submit"]').click();
+
+ cy.wait(500);
+
+ cy.get(UserHelper.selectors.listItem).contains(email)
+ .closest(UserHelper.selectors.listItem)
+ .contains('Admin')
+ .should('have.length', 1);
+ });
+
+ it('updates a user with groups', () => {
+ cy.visit('/users');
+
+ cy.get(UserHelper.selectors.listItem).contains(email)
+ .closest(UserHelper.selectors.listItem)
+ .click();
+
+ cy.get('[data-cy="users-commandBar-edit"]').click();
+
+ cy.get('[data-cy="users-edit-tabs"] [data-content="Groups"]').click();
+ cy.get('[data-cy="users-groups"]')
+ .find(UserHelper.selectors.groupRow)
+ .contains('Admin')
+ .should('have.length', 1);
+
+ cy.get('[data-cy="users-groups-add"]').click();
+ cy.get('[data-cy="users-groups-panel"]')
+ .find(UserHelper.selectors.groupRow)
+ .should('have.length', 1);
+
+ cy.get('[data-cy="users-groups-cancel"]').click();
+ cy.get('[data-cy="users-groups"]')
+ .find(UserHelper.selectors.groupRow)
+ .first()
+ .click();
+
+ cy.get('[data-cy="users-groups-remove"]').click();
+ cy.get('[data-cy="users-groups-add"]').click();
+
+ cy.get('[data-cy="users-groups-panel"]')
+ .find(UserHelper.selectors.groupRow)
+ .should('have.length', 2);
+
+ cy.get('[data-cy="users-groups-panel"]').contains('User')
+ .closest(UserHelper.selectors.groupRow)
+ .click();
+
+ cy.get('[data-cy="users-groups-submit"]').click();
+ cy.get('[data-cy="users-groups"]').contains('User')
+ .should('have.length', 1);
+
+ cy.get('[data-cy="users-edit-submit"]').click();
+
+ cy.get(UserHelper.selectors.listItem).contains(email)
+ .closest(UserHelper.selectors.listItem)
+ .contains('User')
+ .should('have.length', 1);
+ });
+
+ it('deletes a user with groups', () => {
+ cy.visit('/users');
+
+ cy.get(UserHelper.selectors.listItem).contains(email)
+ .closest(UserHelper.selectors.listItem)
+ .click();
+
+ UserHelper.deleteSelected();
+
+ cy.get(UserHelper.selectors.listItem).contains(email).should('have.length', 0);
+ })
+})
diff --git a/e2e/integration/9-settings/1-general.spec.ts b/e2e/integration/9-settings/1-general.spec.ts
new file mode 100644
index 0000000..e66b53f
--- /dev/null
+++ b/e2e/integration/9-settings/1-general.spec.ts
@@ -0,0 +1,11 @@
+import {SettingsHelper} from '../../helpers/settings.helper'
+
+describe('Settings Test', () => {
+ before(() => {
+ cy.login();
+ })
+
+ it('visits the settings', () => {
+ cy.visit('/settings/general')
+ })
+})
diff --git a/e2e/integration/9-settings/2-groups.spec.ts b/e2e/integration/9-settings/2-groups.spec.ts
new file mode 100644
index 0000000..5ab96c9
--- /dev/null
+++ b/e2e/integration/9-settings/2-groups.spec.ts
@@ -0,0 +1,44 @@
+import {SettingsHelper} from '../../helpers/settings.helper'
+import {GroupHelper} from '../../helpers/group.helper'
+
+describe('Groups Test', () => {
+ before(() => {
+ cy.login();
+ })
+
+ it('has default groups', () => {
+ cy.visit('/settings/groups');
+ cy.get(GroupHelper.selectors.listItemSelect).should('have.length', 2);
+ })
+
+ it('creates a group', () => {
+ cy.visit('/settings/groups')
+ GroupHelper.createGroup('Test Group', 'Test Description');
+ cy.wait(500);
+ cy.get(GroupHelper.selectors.listItem).contains('Test Group')
+ .closest(GroupHelper.selectors.listItem)
+ .should('contain', 'Test Description');
+ })
+
+ it('updates a group', () => {
+ cy.visit('/settings/groups')
+ cy.get(GroupHelper.selectors.listItem).contains('Test Group')
+ .closest(GroupHelper.selectors.listItem)
+ .find('.ms-Check').click();
+
+ GroupHelper.editGroup('Edited Group', 'Edited Description');
+ cy.get(GroupHelper.selectors.listItem).contains('Edited Group')
+ .closest(GroupHelper.selectors.listItem)
+ .should('contain', 'Edited Description');
+ })
+
+ it('deletes a group', () => {
+ cy.visit('/settings/groups')
+ cy.get(GroupHelper.selectors.listItem).contains('Edited Group')
+ .closest(GroupHelper.selectors.listItem)
+ .find('.ms-Check').click();
+
+ GroupHelper.deleteSelected();
+ cy.get(GroupHelper.selectors.listItem).contains('Edited Group').should('have.length', 0);
+ })
+})
diff --git a/e2e/integration/9-settings/3-groups-permissions.spec.ts b/e2e/integration/9-settings/3-groups-permissions.spec.ts
new file mode 100644
index 0000000..f5bcd0c
--- /dev/null
+++ b/e2e/integration/9-settings/3-groups-permissions.spec.ts
@@ -0,0 +1,74 @@
+import {GroupHelper} from '../../helpers/group.helper'
+
+describe('Group Permissions Test', () => {
+ before(() => {
+ cy.login();
+ });
+
+ it('creates a group with permissions', () => {
+ cy.visit('/settings/groups');
+
+ cy.get('[data-cy="groups-commandBar-add"]').click();
+
+ cy.get('[data-cy="groups-add-name"]').type('Permissions Group');
+ cy.get('[data-cy="groups-add-description"]').type('Group with test permissions');
+
+ cy.get('[data-cy="permissions-chips"]')
+ .find('[data-cy="permissions-chips-item"]')
+ .should('have.length', 0);
+
+ cy.get('[data-cy="groups-add-tabs"] [data-content="Manage Permissions"]').click();
+ cy.get('[data-cy="groups-add"]')
+ .find(GroupHelper.selectors.permissionItem)
+ .first()
+ .find('.ms-Check')
+ .click();
+
+ cy.get('[data-cy="groups-add-tabs"] [data-content="General"]').click();
+ cy.get('[data-cy="permissions-chips"]')
+ .find('[data-cy="permissions-chips-item"]')
+ .should('have.length.at.least', 1);
+
+ cy.get('[data-cy="groups-add-submit"]').click();
+ })
+
+ it('validates and updates permissions', () => {
+ cy.visit('/settings/groups');
+
+ cy.get(GroupHelper.selectors.listItem).contains('Permissions Group')
+ .closest(GroupHelper.selectors.listItem)
+ .dblclick();
+
+ cy.get('[data-cy="permissions-chips"]')
+ .find('[data-cy="permissions-chips-item"]')
+ .should('have.length.at.least', 1);
+
+ cy.get('[data-cy="groups-edit-tabs"] [data-content="Manage Permissions"]').click();
+ cy.get('[data-cy="groups-edit"]')
+ .find(GroupHelper.selectors.permissionItem)
+ .eq(2)
+ .find('.ms-Check')
+ .click();
+
+ cy.get('[data-cy="groups-edit-tabs"] [data-content="General"]').click();
+
+ cy.get('[data-cy="permissions-chips"]')
+ .find('[data-cy="permissions-chips-item"]')
+ .should('have.length.at.least', 1);
+
+ cy.get('[data-cy="groups-edit-submit"]').click();
+ })
+
+ it('deletes the group', () => {
+ cy.visit('/settings/groups');
+
+ cy.get(GroupHelper.selectors.listItem).contains('Permissions Group')
+ .closest(GroupHelper.selectors.listItem)
+ .click();
+
+ GroupHelper.deleteSelected();
+
+ cy.get(GroupHelper.selectors.listItem).contains('Permissions Group')
+ .should('have.length', 0);
+ })
+})
diff --git a/e2e/plugins/index.ts b/e2e/plugins/index.ts
new file mode 100644
index 0000000..1b63c6e
--- /dev/null
+++ b/e2e/plugins/index.ts
@@ -0,0 +1,22 @@
+///
+// ***********************************************************
+// This example plugins/index.js can be used to load plugins
+//
+// You can change the location of this file or turn off loading
+// the plugins file with the 'pluginsFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/plugins-guide
+// ***********************************************************
+
+// This function is called when a project is opened or re-opened (e.g. due to
+// the project's config changing)
+
+/**
+ * @type {Cypress.PluginConfig}
+ */
+// eslint-disable-next-line no-unused-vars
+export default (on, config) => {
+ // `on` is used to hook into various events Cypress emits
+ // `config` is the resolved Cypress config
+}
diff --git a/e2e/support/commands.ts b/e2e/support/commands.ts
new file mode 100644
index 0000000..6034819
--- /dev/null
+++ b/e2e/support/commands.ts
@@ -0,0 +1,62 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add('login', (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
+import "cypress-localstorage-commands"
+import 'cypress-file-upload';
+import { IUser } from './extensions/user.commands';
+import './extensions/user.commands';
+
+declare global {
+ namespace Cypress {
+ interface Chainable {
+ dataCy(value: string): Chainable;
+ }
+
+ interface cy {
+ login(): void;
+
+ // User
+ createUser(user: IUser): void;
+ editUser(user: IUser): void;
+ selectUser(email: string): void;
+ findUser(email: string): Chainable;
+ userList(): Chainable;
+ deleteSelectedUsers(): void;
+ deactivateSelectedUsers(): void;
+ activateSelectedUsers(): void;
+ }
+ }
+}
+
+Cypress.Commands.add('login', () => {
+ cy.request('POST', `${Cypress.env('apiUrl')}/login`, {
+ email: Cypress.env('email'),
+ password: Cypress.env('password')
+ })
+})
+
+Cypress.Commands.add('dataCy', (value) => {
+ return cy.get(`[data-cy="${value}"]`);
+})
diff --git a/e2e/support/extensions/user.commands.ts b/e2e/support/extensions/user.commands.ts
new file mode 100644
index 0000000..2e50fd6
--- /dev/null
+++ b/e2e/support/extensions/user.commands.ts
@@ -0,0 +1,65 @@
+import faker from 'faker';
+import { UserHelper } from '../../helpers/user.helper';
+
+const selectors = {
+ listItemSelect: '[data-automationid="ListCell"] .ms-Check',
+ listItem: '[data-automationid="ListCell"]',
+ groupRow: '[data-automationid="DetailsRow"]',
+}
+
+export interface IUser {
+ email?: string;
+ password?: string;
+ basic?: {
+ firstName: string;
+ lastName: string;
+ }
+ groups?: string[];
+}
+
+Cypress.Commands.add('createUser', (user: IUser) => {
+ cy.get('[data-cy="users-commandBar-add"]').click();
+ cy.get('[data-cy="users-add-email"]').type(user.email ?? faker.internet.email());
+ cy.get('[data-cy="users-add-password"]').type(user?.password ?? faker.internet.password(8));
+ cy.get('[data-cy="users-add-firstName"]').type(user.basic?.firstName ?? faker.name.firstName());
+ cy.get('[data-cy="users-add-lastName"]').type(user.basic?.lastName ?? faker.name.lastName());
+
+ cy.get('[data-cy="users-add-submit"]').click();
+});
+
+Cypress.Commands.add('selectUser', (email: string) => {
+ cy.findUser(email).find('.ms-Check').click();
+});
+
+Cypress.Commands.add('deleteSelectedUsers', () => {
+ cy.get('[data-cy="users-commandBar-delete"]').click();
+ cy.get('[data-cy="dialog-confirm"]').click();
+});
+
+Cypress.Commands.add('deactivateSelectedUsers', () => {
+ cy.get('[data-cy="users-commandBar-deactivate"]').click();
+ cy.get('[data-cy="dialog-confirm"]').click();
+});
+
+Cypress.Commands.add('activateSelectedUsers', () => {
+ cy.get('[data-cy="users-commandBar-activate"]').click();
+ cy.get('[data-cy="dialog-confirm"]').click();
+});
+
+Cypress.Commands.add('userList', () => {
+ cy.get(selectors.listItem);
+})
+
+Cypress.Commands.add('findUser', (email: string) => {
+ cy.userList().contains(email).closest(selectors.listItem);
+});
+
+Cypress.Commands.add('editUser', (user: IUser) => {
+ if (user.basic) {
+ cy.get('[data-cy="users-edit-firstName"]').clear().type(user.basic.firstName);
+ cy.get('[data-cy="users-edit-lastName"]').clear().type(user.basic.lastName);
+ }
+
+ cy.get('[data-cy="users-edit-submit"]').click();
+})
+
diff --git a/e2e/support/index.ts b/e2e/support/index.ts
new file mode 100644
index 0000000..ae255ac
--- /dev/null
+++ b/e2e/support/index.ts
@@ -0,0 +1,6 @@
+import './commands'
+
+Cypress.Cookies.defaults({
+ preserve: ['token']
+})
+
diff --git a/package-lock.json b/package-lock.json
index 4ead9d7..1920cef 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,11 +1,12 @@
{
"name": "burdy",
- "version": "2.1.0",
+ "version": "2.1.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
- "version": "2.1.0",
+ "name": "burdy",
+ "version": "2.1.1",
"license": "SEE LICENSE IN LICENSE",
"dependencies": {
"@babel/core": "^7.15.5",
@@ -113,6 +114,7 @@
"@types/dotenv-flow": "^3.2.0",
"@types/draft-js": "^0.11.5",
"@types/express": "^4.17.13",
+ "@types/faker": "^5.5.9",
"@types/fs-extra": "^9.0.12",
"@types/http-proxy": "^1.17.7",
"@types/lodash": "^4.14.172",
@@ -132,7 +134,12 @@
"@types/webpack-env": "^1.16.2",
"@typescript-eslint/eslint-plugin": "^4.30.0",
"@typescript-eslint/parser": "^4.30.0",
+ "concurrently": "^7.0.0",
"copyfiles": "^2.4.1",
+ "cypress": "^9.2.1",
+ "cypress-file-upload": "^5.0.8",
+ "cypress-localstorage-commands": "^1.6.1",
+ "env-cmd": "^10.1.0",
"eslint": "^7.32.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-airbnb-typescript": "^14.0.0",
@@ -141,13 +148,15 @@
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-react": "^7.25.1",
"eslint-plugin-react-hooks": "^4.2.0",
+ "faker": "^5.5.3",
"ncp": "^2.0.0",
"prettier": "^2.3.2",
"ts-node": "^10.2.1",
"tsconfig-paths": "^3.11.0",
"ttypescript": "^1.5.12",
"typescript": "^4.4.2",
- "typescript-transform-paths": "^3.3.1"
+ "typescript-transform-paths": "^3.3.1",
+ "wait-on": "^6.0.0"
},
"peerDependencies": {
"path-to-regexp": "^6.2.0"
@@ -5613,6 +5622,83 @@
"node": ">=12"
}
},
+ "node_modules/@cypress/request": {
+ "version": "2.88.10",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz",
+ "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==",
+ "dev": true,
+ "dependencies": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "http-signature": "~1.3.6",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@cypress/request/node_modules/http-signature": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
+ "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==",
+ "dev": true,
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^2.0.2",
+ "sshpk": "^1.14.1"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/@cypress/request/node_modules/jsprim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+ "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+ "dev": true,
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "node_modules/@cypress/xvfb": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
+ "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.1.0",
+ "lodash.once": "^4.1.1"
+ }
+ },
+ "node_modules/@cypress/xvfb/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
"node_modules/@dabh/diagnostics": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
@@ -6061,6 +6147,21 @@
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
"license": "0BSD"
},
+ "node_modules/@hapi/hoek": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz",
+ "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==",
+ "dev": true
+ },
+ "node_modules/@hapi/topo": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
+ "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
+ "dev": true,
+ "dependencies": {
+ "@hapi/hoek": "^9.0.0"
+ }
+ },
"node_modules/@hookform/resolvers": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-2.8.0.tgz",
@@ -6275,6 +6376,27 @@
"node": ">= 8"
}
},
+ "node_modules/@sideway/address": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz",
+ "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==",
+ "dev": true,
+ "dependencies": {
+ "@hapi/hoek": "^9.0.0"
+ }
+ },
+ "node_modules/@sideway/formula": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz",
+ "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==",
+ "dev": true
+ },
+ "node_modules/@sideway/pinpoint": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
+ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
+ "dev": true
+ },
"node_modules/@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -6441,19 +6563,7 @@
"optional": true,
"peer": true,
"dependencies": {
- "@node-rs/helper": "^1.0.0",
- "@swc/core-android-arm64": "1.2.103",
- "@swc/core-darwin-arm64": "1.2.103",
- "@swc/core-darwin-x64": "1.2.103",
- "@swc/core-freebsd-x64": "1.2.103",
- "@swc/core-linux-arm-gnueabihf": "1.2.103",
- "@swc/core-linux-arm64-gnu": "1.2.103",
- "@swc/core-linux-arm64-musl": "1.2.103",
- "@swc/core-linux-x64-gnu": "1.2.103",
- "@swc/core-linux-x64-musl": "1.2.103",
- "@swc/core-win32-arm64-msvc": "1.2.103",
- "@swc/core-win32-ia32-msvc": "1.2.103",
- "@swc/core-win32-x64-msvc": "1.2.103"
+ "@node-rs/helper": "^1.0.0"
},
"engines": {
"node": ">=10"
@@ -6867,6 +6977,12 @@
"@types/range-parser": "*"
}
},
+ "node_modules/@types/faker": {
+ "version": "5.5.9",
+ "resolved": "https://registry.npmjs.org/@types/faker/-/faker-5.5.9.tgz",
+ "integrity": "sha512-uCx6mP3UY5SIO14XlspxsGjgaemrxpssJI0Ol+GfhxtcKpv9pgRZYsS4eeKeHVLje6Qtc8lGszuBI461+gVZBA==",
+ "dev": true
+ },
"node_modules/@types/fs-extra": {
"version": "9.0.12",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.12.tgz",
@@ -7114,6 +7230,18 @@
"@types/node": "*"
}
},
+ "node_modules/@types/sinonjs__fake-timers": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.4.tgz",
+ "integrity": "sha512-IFQTJARgMUBF+xVd2b+hIgXWrZEjND3vJtRCvIelcFB5SIXfjV4bOHbHJ0eXKh+0COrBRc8MqteKAz/j88rE0A==",
+ "dev": true
+ },
+ "node_modules/@types/sizzle": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz",
+ "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==",
+ "dev": true
+ },
"node_modules/@types/unzipper": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.4.tgz",
@@ -7137,6 +7265,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/yauzl": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
+ "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/zen-observable": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz",
@@ -7538,6 +7676,19 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -7682,6 +7833,26 @@
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"license": "ISC"
},
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/archiver": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz",
@@ -7856,8 +8027,7 @@
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
"integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"dependencies": {
"safer-buffer": "~2.1.0"
}
@@ -7866,8 +8036,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"engines": {
"node": ">=0.8"
}
@@ -7914,8 +8083,16 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "optional": true,
- "peer": true
+ "devOptional": true
+ },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
},
"node_modules/attr-accept": {
"version": "2.2.2",
@@ -7967,8 +8144,7 @@
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"engines": {
"node": "*"
}
@@ -7977,8 +8153,7 @@
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"node_modules/axe-core": {
"version": "4.1.4",
@@ -8169,8 +8344,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"dependencies": {
"tweetnacl": "^0.14.3"
}
@@ -8288,6 +8462,12 @@
"node": ">= 6"
}
},
+ "node_modules/blob-util": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
+ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "dev": true
+ },
"node_modules/block-stream": {
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
@@ -8569,6 +8749,15 @@
"node": ">=8"
}
},
+ "node_modules/cachedir": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
+ "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -8633,8 +8822,7 @@
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"node_modules/chainsaw": {
"version": "0.1.0",
@@ -8663,6 +8851,15 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/chokidar": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
@@ -8671,7 +8868,6 @@
"dependencies": {
"anymatch": "~3.1.1",
"braces": "~3.0.2",
- "fsevents": "~2.3.1",
"glob-parent": "~5.1.0",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
@@ -8723,6 +8919,15 @@
"node": ">= 4.0"
}
},
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/cli-boxes": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
@@ -8734,6 +8939,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/cli-highlight": {
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
@@ -8761,6 +8978,51 @@
"integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
"license": "MIT"
},
+ "node_modules/cli-table3": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz",
+ "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "colors": "1.4.0"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "dependencies": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -8871,8 +9133,7 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -8894,6 +9155,15 @@
"resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
"integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="
},
+ "node_modules/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@@ -8948,6 +9218,55 @@
"typedarray": "^0.0.6"
}
},
+ "node_modules/concurrently": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.0.0.tgz",
+ "integrity": "sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "date-fns": "^2.16.1",
+ "lodash": "^4.17.21",
+ "rxjs": "^6.6.3",
+ "spawn-command": "^0.0.2-1",
+ "supports-color": "^8.1.0",
+ "tree-kill": "^1.2.2",
+ "yargs": "^16.2.0"
+ },
+ "bin": {
+ "concurrently": "dist/bin/concurrently.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.0 || >=16.0.0"
+ }
+ },
+ "node_modules/concurrently/node_modules/rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
+ "node_modules/concurrently/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
"node_modules/configstore": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
@@ -9374,19 +9693,200 @@
"integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==",
"license": "MIT"
},
- "node_modules/damerau-levenshtein": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz",
- "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==",
+ "node_modules/cypress": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.2.1.tgz",
+ "integrity": "sha512-LVEe4yWCo4xO0Vd8iYjFHRyd5ulRvM56XqMgAdn05Qb9kJ6iJdO/MmjKD8gNd768698cp1FDuSmFQZHVZGk+Og==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@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",
+ "cachedir": "^2.3.0",
+ "chalk": "^4.1.0",
+ "check-more-types": "^2.24.0",
+ "cli-cursor": "^3.1.0",
+ "cli-table3": "~0.6.1",
+ "commander": "^5.1.0",
+ "common-tags": "^1.8.0",
+ "dayjs": "^1.10.4",
+ "debug": "^4.3.2",
+ "enquirer": "^2.3.6",
+ "eventemitter2": "^6.4.3",
+ "execa": "4.1.0",
+ "executable": "^4.1.1",
+ "extract-zip": "2.0.1",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "getos": "^3.2.1",
+ "is-ci": "^3.0.0",
+ "is-installed-globally": "~0.4.0",
+ "lazy-ass": "^1.6.0",
+ "listr2": "^3.8.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.0.0",
+ "minimist": "^1.2.5",
+ "ospath": "^1.2.2",
+ "pretty-bytes": "^5.6.0",
+ "proxy-from-env": "1.0.0",
+ "request-progress": "^3.0.0",
+ "supports-color": "^8.1.1",
+ "tmp": "~0.2.1",
+ "untildify": "^4.0.0",
+ "url": "^0.11.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "cypress": "bin/cypress"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/cypress-file-upload": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz",
+ "integrity": "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.2.1"
+ },
+ "peerDependencies": {
+ "cypress": ">3.0.0"
+ }
+ },
+ "node_modules/cypress-localstorage-commands": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/cypress-localstorage-commands/-/cypress-localstorage-commands-1.6.1.tgz",
+ "integrity": "sha512-rvXCB0iLzC3i9y91XH4N2I55NicH62gQk5z/APblCjnNR3wWTbDs8svC7GvE1fjt9AMIHSQm1RfWx037y+TciQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "cypress": ">=2.1.0"
+ }
+ },
+ "node_modules/cypress/node_modules/@types/node": {
+ "version": "14.18.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.5.tgz",
+ "integrity": "sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A==",
+ "dev": true
+ },
+ "node_modules/cypress/node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "node_modules/cypress/node_modules/ci-info": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz",
+ "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==",
+ "dev": true
+ },
+ "node_modules/cypress/node_modules/commander": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
+ "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cypress/node_modules/debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cypress/node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cypress/node_modules/is-ci": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
+ "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
"dev": true,
- "license": "BSD-2-Clause"
- },
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "optional": true,
- "peer": true,
+ "dependencies": {
+ "ci-info": "^3.2.0"
+ },
+ "bin": {
+ "is-ci": "bin.js"
+ }
+ },
+ "node_modules/cypress/node_modules/punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ },
+ "node_modules/cypress/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/cypress/node_modules/url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "dependencies": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ }
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz",
+ "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "devOptional": true,
"dependencies": {
"assert-plus": "^1.0.0"
},
@@ -9407,6 +9907,12 @@
"url": "https://opencollective.com/date-fns"
}
},
+ "node_modules/dayjs": {
+ "version": "1.10.7",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz",
+ "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==",
+ "dev": true
+ },
"node_modules/debug": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
@@ -9528,8 +10034,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"engines": {
"node": ">=0.4.0"
}
@@ -9797,8 +10302,7 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"dependencies": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
@@ -9899,6 +10403,31 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
+ "node_modules/env-cmd": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz",
+ "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^4.0.0",
+ "cross-spawn": "^7.0.0"
+ },
+ "bin": {
+ "env-cmd": "bin/env-cmd.js"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/env-cmd/node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -10710,6 +11239,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/eventemitter2": {
+ "version": "6.4.5",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz",
+ "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==",
+ "dev": true
+ },
"node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -10725,6 +11260,65 @@
"node": ">=0.4.x"
}
},
+ "node_modules/execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/execa/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/executable/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/exit-on-epipe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
@@ -10817,18 +11411,57 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "optional": true,
- "peer": true
+ "devOptional": true
+ },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/extract-zip/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "devOptional": true,
"engines": [
"node >=0.6.0"
- ],
- "optional": true,
- "peer": true
+ ]
+ },
+ "node_modules/faker": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz",
+ "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==",
+ "dev": true
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
@@ -10912,6 +11545,15 @@
"url": "https://opencollective.com/core-js"
}
},
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "dev": true,
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
"node_modules/fecha": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
@@ -11198,8 +11840,7 @@
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"engines": {
"node": "*"
}
@@ -11208,8 +11849,7 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
@@ -11257,15 +11897,6 @@
"node": ">=12"
}
},
- "node_modules/fs-extra/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/fs-minipass": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
@@ -11502,12 +12133,20 @@
"node": ">=6"
}
},
+ "node_modules/getos": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
+ "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
+ "dev": true,
+ "dependencies": {
+ "async": "^3.2.0"
+ }
+ },
"node_modules/getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"dependencies": {
"assert-plus": "^1.0.0"
}
@@ -11973,6 +12612,15 @@
"npm": ">=1.3.7"
}
},
+ "node_modules/human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.12.0"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -12111,6 +12759,15 @@
"node": ">=0.8.19"
}
},
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -12396,6 +13053,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-string": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
@@ -12430,6 +13098,18 @@
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
@@ -12463,8 +13143,7 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"node_modules/jest-worker": {
"version": "27.1.0",
@@ -12503,6 +13182,19 @@
"node": ">= 0.6.0"
}
},
+ "node_modules/joi": {
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz",
+ "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==",
+ "dev": true,
+ "dependencies": {
+ "@hapi/hoek": "^9.0.0",
+ "@hapi/topo": "^5.0.0",
+ "@sideway/address": "^4.1.3",
+ "@sideway/formula": "^3.0.0",
+ "@sideway/pinpoint": "^2.0.0"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -12527,8 +13219,7 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"node_modules/jsesc": {
"version": "2.5.2",
@@ -12557,8 +13248,7 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
@@ -12577,8 +13267,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"node_modules/json5": {
"version": "1.0.1",
@@ -12598,22 +13287,12 @@
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"license": "MIT",
"dependencies": {
- "graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
- "node_modules/jsonfile/node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/jsonwebtoken": {
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
@@ -12747,6 +13426,15 @@
"node": ">=8"
}
},
+ "node_modules/lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
+ "dev": true,
+ "engines": {
+ "node": "> 0.8"
+ }
+ },
"node_modules/lazystream": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
@@ -12777,6 +13465,39 @@
"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
"integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
},
+ "node_modules/listr2": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+ "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+ "dev": true,
+ "dependencies": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.16",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.5.1",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "enquirer": ">= 2.3.0 < 3"
+ },
+ "peerDependenciesMeta": {
+ "enquirer": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/listr2/node_modules/colorette": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
+ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+ "dev": true
+ },
"node_modules/load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
@@ -12954,6 +13675,54 @@
"resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
"integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
},
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/logform": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz",
@@ -13191,6 +13960,15 @@
"node": ">= 0.6"
}
},
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
@@ -14042,6 +14820,18 @@
"npm-normalize-package-bin": "^1.0.1"
}
},
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
@@ -14371,6 +15161,21 @@
"fn.name": "1.x.x"
}
},
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -14420,6 +15225,12 @@
"os-tmpdir": "^1.0.0"
}
},
+ "node_modules/ospath": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
+ "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=",
+ "dev": true
+ },
"node_modules/p-cancelable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
@@ -14464,6 +15275,21 @@
"node": ">=8"
}
},
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -14641,12 +15467,17 @@
"node": ">=8"
}
},
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"node_modules/pg": {
"version": "8.7.1",
@@ -14990,6 +15821,18 @@
"node": ">=10.13.0"
}
},
+ "node_modules/pretty-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/pretty-error": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz",
@@ -15081,6 +15924,12 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=",
+ "dev": true
+ },
"node_modules/pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -15091,8 +15940,7 @@
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"node_modules/pstree.remy": {
"version": "1.1.8",
@@ -15134,8 +15982,7 @@
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"engines": {
"node": ">=0.6"
}
@@ -15812,6 +16659,15 @@
"node": ">= 6"
}
},
+ "node_modules/request-progress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+ "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=",
+ "dev": true,
+ "dependencies": {
+ "throttleit": "^1.0.0"
+ }
+ },
"node_modules/request/node_modules/uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -15881,6 +16737,19 @@
"lowercase-keys": "^1.0.0"
}
},
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -15891,6 +16760,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "dev": true
+ },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -15929,6 +16804,21 @@
"queue-microtask": "^1.2.2"
}
},
+ "node_modules/rxjs": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz",
+ "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/rxjs/node_modules/tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
+ "dev": true
+ },
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -16346,6 +17236,12 @@
"source-map": "^0.6.0"
}
},
+ "node_modules/spawn-command": {
+ "version": "0.0.2-1",
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
+ "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
+ "dev": true
+ },
"node_modules/spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@@ -16430,7 +17326,6 @@
"peer": true,
"dependencies": {
"node-addon-api": "^3.0.0",
- "node-gyp": "3.x",
"node-pre-gyp": "^0.11.0"
},
"optionalDependencies": {
@@ -16458,8 +17353,7 @@
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"dependencies": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -16704,6 +17598,15 @@
"node": ">=4"
}
},
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
@@ -16987,6 +17890,18 @@
"node": ">=0.8"
}
},
+ "node_modules/throttleit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
+ "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
+ "dev": true
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
"node_modules/through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -17010,6 +17925,18 @@
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
"license": "MIT"
},
+ "node_modules/tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
+ "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+ "dev": true,
+ "dependencies": {
+ "rimraf": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.17.0"
+ }
+ },
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -17085,8 +18012,7 @@
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"dependencies": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
@@ -17103,6 +18029,15 @@
"node": "*"
}
},
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
"node_modules/triple-beam": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
@@ -17247,8 +18182,7 @@
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"node_modules/type-check": {
"version": "0.4.0",
@@ -17629,6 +18563,14 @@
"node": ">=8"
}
},
+ "node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -17843,17 +18785,35 @@
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "devOptional": true,
"engines": [
"node >=0.6.0"
],
- "optional": true,
- "peer": true,
"dependencies": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
+ "node_modules/wait-on": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz",
+ "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==",
+ "dev": true,
+ "dependencies": {
+ "axios": "^0.21.1",
+ "joi": "^17.4.0",
+ "lodash": "^4.17.21",
+ "minimist": "^1.2.5",
+ "rxjs": "^7.1.0"
+ },
+ "bin": {
+ "wait-on": "bin/wait-on"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/watchpack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz",
@@ -18225,15 +19185,6 @@
"node": ">= 6.4.0"
}
},
- "node_modules/winston/node_modules/is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/winston/node_modules/readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -18436,6 +19387,16 @@
"node": ">=10"
}
},
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
"node_modules/yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
@@ -22232,6 +23193,78 @@
"@cspotcode/source-map-consumer": "0.8.0"
}
},
+ "@cypress/request": {
+ "version": "2.88.10",
+ "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz",
+ "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "http-signature": "~1.3.6",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^8.3.2"
+ },
+ "dependencies": {
+ "http-signature": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
+ "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^2.0.2",
+ "sshpk": "^1.14.1"
+ }
+ },
+ "jsprim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
+ "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ }
+ }
+ },
+ "@cypress/xvfb": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
+ "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "lodash.once": "^4.1.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
"@dabh/diagnostics": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
@@ -22613,6 +23646,21 @@
}
}
},
+ "@hapi/hoek": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz",
+ "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==",
+ "dev": true
+ },
+ "@hapi/topo": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
+ "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
+ "dev": true,
+ "requires": {
+ "@hapi/hoek": "^9.0.0"
+ }
+ },
"@hookform/resolvers": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-2.8.0.tgz",
@@ -22744,6 +23792,27 @@
}
}
},
+ "@sideway/address": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz",
+ "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==",
+ "dev": true,
+ "requires": {
+ "@hapi/hoek": "^9.0.0"
+ }
+ },
+ "@sideway/formula": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz",
+ "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==",
+ "dev": true
+ },
+ "@sideway/pinpoint": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
+ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
+ "dev": true
+ },
"@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -23138,6 +24207,12 @@
"@types/range-parser": "*"
}
},
+ "@types/faker": {
+ "version": "5.5.9",
+ "resolved": "https://registry.npmjs.org/@types/faker/-/faker-5.5.9.tgz",
+ "integrity": "sha512-uCx6mP3UY5SIO14XlspxsGjgaemrxpssJI0Ol+GfhxtcKpv9pgRZYsS4eeKeHVLje6Qtc8lGszuBI461+gVZBA==",
+ "dev": true
+ },
"@types/fs-extra": {
"version": "9.0.12",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.12.tgz",
@@ -23357,6 +24432,18 @@
"@types/node": "*"
}
},
+ "@types/sinonjs__fake-timers": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.4.tgz",
+ "integrity": "sha512-IFQTJARgMUBF+xVd2b+hIgXWrZEjND3vJtRCvIelcFB5SIXfjV4bOHbHJ0eXKh+0COrBRc8MqteKAz/j88rE0A==",
+ "dev": true
+ },
+ "@types/sizzle": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz",
+ "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==",
+ "dev": true
+ },
"@types/unzipper": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.4.tgz",
@@ -23378,6 +24465,16 @@
"integrity": "sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw==",
"dev": true
},
+ "@types/yauzl": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
+ "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@types/zen-observable": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz",
@@ -23654,6 +24751,16 @@
"dev": true,
"requires": {}
},
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -23747,6 +24854,12 @@
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
},
+ "arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true
+ },
"archiver": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz",
@@ -23880,8 +24993,7 @@
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
"integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"safer-buffer": "~2.1.0"
}
@@ -23890,8 +25002,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"ast-types-flow": {
"version": "0.0.7",
@@ -23929,8 +25040,13 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "optional": true,
- "peer": true
+ "devOptional": true
+ },
+ "at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true
},
"attr-accept": {
"version": "2.2.2",
@@ -23969,15 +25085,13 @@
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"aws4": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"axe-core": {
"version": "4.1.4",
@@ -24108,8 +25222,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"tweetnacl": "^0.14.3"
}
@@ -24192,6 +25305,12 @@
}
}
},
+ "blob-util": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
+ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
+ "dev": true
+ },
"block-stream": {
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
@@ -24406,6 +25525,12 @@
}
}
},
+ "cachedir": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
+ "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==",
+ "dev": true
+ },
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -24451,8 +25576,7 @@
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"chainsaw": {
"version": "0.1.0",
@@ -24471,6 +25595,12 @@
"supports-color": "^7.1.0"
}
},
+ "check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
+ "dev": true
+ },
"chokidar": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
@@ -24514,11 +25644,26 @@
"source-map": "~0.6.0"
}
},
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
"cli-boxes": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
"integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw=="
},
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
"cli-highlight": {
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
@@ -24539,6 +25684,39 @@
}
}
},
+ "cli-table3": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz",
+ "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==",
+ "dev": true,
+ "requires": {
+ "colors": "1.4.0",
+ "string-width": "^4.2.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ },
+ "dependencies": {
+ "slice-ansi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ }
+ }
+ },
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -24631,8 +25809,7 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"delayed-stream": "~1.0.0"
}
@@ -24647,6 +25824,12 @@
"resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
"integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="
},
+ "common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "dev": true
+ },
"commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@@ -24691,6 +25874,42 @@
"typedarray": "^0.0.6"
}
},
+ "concurrently": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.0.0.tgz",
+ "integrity": "sha512-WKM7PUsI8wyXpF80H+zjHP32fsgsHNQfPLw/e70Z5dYkV7hF+rf8q3D+ScWJIEr57CpkO3OWBko6hwhQLPR8Pw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "date-fns": "^2.16.1",
+ "lodash": "^4.17.21",
+ "rxjs": "^6.6.3",
+ "spawn-command": "^0.0.2-1",
+ "supports-color": "^8.1.0",
+ "tree-kill": "^1.2.2",
+ "yargs": "^16.2.0"
+ },
+ "dependencies": {
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"configstore": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
@@ -24984,6 +26203,150 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
"integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw=="
},
+ "cypress": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.2.1.tgz",
+ "integrity": "sha512-LVEe4yWCo4xO0Vd8iYjFHRyd5ulRvM56XqMgAdn05Qb9kJ6iJdO/MmjKD8gNd768698cp1FDuSmFQZHVZGk+Og==",
+ "dev": true,
+ "requires": {
+ "@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",
+ "cachedir": "^2.3.0",
+ "chalk": "^4.1.0",
+ "check-more-types": "^2.24.0",
+ "cli-cursor": "^3.1.0",
+ "cli-table3": "~0.6.1",
+ "commander": "^5.1.0",
+ "common-tags": "^1.8.0",
+ "dayjs": "^1.10.4",
+ "debug": "^4.3.2",
+ "enquirer": "^2.3.6",
+ "eventemitter2": "^6.4.3",
+ "execa": "4.1.0",
+ "executable": "^4.1.1",
+ "extract-zip": "2.0.1",
+ "figures": "^3.2.0",
+ "fs-extra": "^9.1.0",
+ "getos": "^3.2.1",
+ "is-ci": "^3.0.0",
+ "is-installed-globally": "~0.4.0",
+ "lazy-ass": "^1.6.0",
+ "listr2": "^3.8.3",
+ "lodash": "^4.17.21",
+ "log-symbols": "^4.0.0",
+ "minimist": "^1.2.5",
+ "ospath": "^1.2.2",
+ "pretty-bytes": "^5.6.0",
+ "proxy-from-env": "1.0.0",
+ "request-progress": "^3.0.0",
+ "supports-color": "^8.1.1",
+ "tmp": "~0.2.1",
+ "untildify": "^4.0.0",
+ "url": "^0.11.0",
+ "yauzl": "^2.10.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "14.18.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.5.tgz",
+ "integrity": "sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A==",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz",
+ "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==",
+ "dev": true
+ },
+ "commander": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
+ "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "is-ci": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
+ "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^3.2.0"
+ }
+ },
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ }
+ }
+ }
+ },
+ "cypress-file-upload": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz",
+ "integrity": "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==",
+ "dev": true,
+ "requires": {}
+ },
+ "cypress-localstorage-commands": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/cypress-localstorage-commands/-/cypress-localstorage-commands-1.6.1.tgz",
+ "integrity": "sha512-rvXCB0iLzC3i9y91XH4N2I55NicH62gQk5z/APblCjnNR3wWTbDs8svC7GvE1fjt9AMIHSQm1RfWx037y+TciQ==",
+ "dev": true,
+ "requires": {}
+ },
"damerau-levenshtein": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz",
@@ -24994,8 +26357,7 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"assert-plus": "^1.0.0"
}
@@ -25005,6 +26367,12 @@
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz",
"integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA=="
},
+ "dayjs": {
+ "version": "1.10.7",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz",
+ "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==",
+ "dev": true
+ },
"debug": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
@@ -25087,8 +26455,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"delegates": {
"version": "1.0.0",
@@ -25281,8 +26648,7 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
@@ -25357,6 +26723,24 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
},
+ "env-cmd": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz",
+ "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==",
+ "dev": true,
+ "requires": {
+ "commander": "^4.0.0",
+ "cross-spawn": "^7.0.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true
+ }
+ }
+ },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -25932,6 +27316,12 @@
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
+ "eventemitter2": {
+ "version": "6.4.5",
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz",
+ "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==",
+ "dev": true
+ },
"eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -25942,6 +27332,51 @@
"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
+ "execa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
+ },
+ "executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "requires": {
+ "pify": "^2.2.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
"exit-on-epipe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
@@ -26018,15 +27453,42 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "optional": true,
- "peer": true
+ "devOptional": true
+ },
+ "extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "requires": {
+ "@types/yauzl": "^2.9.1",
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "optional": true,
- "peer": true
+ "devOptional": true
+ },
+ "faker": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz",
+ "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==",
+ "dev": true
},
"fast-deep-equal": {
"version": "3.1.3",
@@ -26096,6 +27558,15 @@
"resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz",
"integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ=="
},
+ "fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
"fecha": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
@@ -26290,15 +27761,13 @@
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
@@ -26328,13 +27797,6 @@
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
- },
- "dependencies": {
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
- }
}
},
"fs-minipass": {
@@ -26505,12 +27967,20 @@
"pump": "^3.0.0"
}
},
+ "getos": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
+ "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
+ "dev": true,
+ "requires": {
+ "async": "^3.2.0"
+ }
+ },
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"assert-plus": "^1.0.0"
}
@@ -26837,6 +28307,12 @@
"sshpk": "^1.7.0"
}
},
+ "human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true
+ },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -26918,6 +28394,12 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
},
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -27089,6 +28571,11 @@
"has-symbols": "^1.0.1"
}
},
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+ },
"is-string": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
@@ -27109,6 +28596,12 @@
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true
+ },
"is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
@@ -27136,8 +28629,7 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"jest-worker": {
"version": "27.1.0",
@@ -27164,6 +28656,19 @@
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
"integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
},
+ "joi": {
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz",
+ "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==",
+ "dev": true,
+ "requires": {
+ "@hapi/hoek": "^9.0.0",
+ "@hapi/topo": "^5.0.0",
+ "@sideway/address": "^4.1.3",
+ "@sideway/formula": "^3.0.0",
+ "@sideway/pinpoint": "^2.0.0"
+ }
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -27183,8 +28688,7 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"jsesc": {
"version": "2.5.2",
@@ -27205,8 +28709,7 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"json-schema-traverse": {
"version": "0.4.1",
@@ -27223,8 +28726,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"json5": {
"version": "1.0.1",
@@ -27241,13 +28743,6 @@
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
- },
- "dependencies": {
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
- }
}
},
"jsonwebtoken": {
@@ -27357,6 +28852,12 @@
"package-json": "^6.3.0"
}
},
+ "lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
+ "dev": true
+ },
"lazystream": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
@@ -27380,6 +28881,30 @@
"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
"integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
},
+ "listr2": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+ "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+ "dev": true,
+ "requires": {
+ "cli-truncate": "^2.1.0",
+ "colorette": "^2.0.16",
+ "log-update": "^4.0.0",
+ "p-map": "^4.0.0",
+ "rfdc": "^1.3.0",
+ "rxjs": "^7.5.1",
+ "through": "^2.3.8",
+ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+ "colorette": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
+ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+ "dev": true
+ }
+ }
+ },
"load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
@@ -27523,6 +29048,41 @@
"resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
"integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
},
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ }
+ },
+ "log-update": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.3.0",
+ "cli-cursor": "^3.1.0",
+ "slice-ansi": "^4.0.0",
+ "wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
"logform": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz",
@@ -27686,6 +29246,12 @@
"mime-db": "1.47.0"
}
},
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
"mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
@@ -28345,6 +29911,15 @@
"npm-normalize-package-bin": "^1.0.1"
}
},
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
"npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
@@ -28570,6 +30145,15 @@
"fn.name": "1.x.x"
}
},
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
"optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -28609,6 +30193,12 @@
"os-tmpdir": "^1.0.0"
}
},
+ "ospath": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
+ "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=",
+ "dev": true
+ },
"p-cancelable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
@@ -28635,6 +30225,15 @@
"p-limit": "^2.2.0"
}
},
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -28769,12 +30368,17 @@
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"pg": {
"version": "8.7.1",
@@ -28990,6 +30594,12 @@
"integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==",
"dev": true
},
+ "pretty-bytes": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
+ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
+ "dev": true
+ },
"pretty-error": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-3.0.4.tgz",
@@ -29059,6 +30669,12 @@
"ipaddr.js": "1.9.1"
}
},
+ "proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=",
+ "dev": true
+ },
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -29068,8 +30684,7 @@
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"pstree.remy": {
"version": "1.1.8",
@@ -29102,8 +30717,7 @@
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"query-string": {
"version": "7.0.1",
@@ -29598,6 +31212,15 @@
}
}
},
+ "request-progress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
+ "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=",
+ "dev": true,
+ "requires": {
+ "throttleit": "^1.0.0"
+ }
+ },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -29641,11 +31264,27 @@
"lowercase-keys": "^1.0.0"
}
},
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
},
+ "rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "dev": true
+ },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -29662,6 +31301,23 @@
"queue-microtask": "^1.2.2"
}
},
+ "rxjs": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz",
+ "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.1.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
+ "dev": true
+ }
+ }
+ },
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -29946,6 +31602,12 @@
"source-map": "^0.6.0"
}
},
+ "spawn-command": {
+ "version": "0.0.2-1",
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
+ "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
+ "dev": true
+ },
"spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@@ -30030,8 +31692,7 @@
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -30204,6 +31865,12 @@
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
@@ -30405,6 +32072,18 @@
"thenify": ">= 3.1.0 < 4"
}
},
+ "throttleit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
+ "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -30425,6 +32104,15 @@
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
},
+ "tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
+ "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+ "dev": true,
+ "requires": {
+ "rimraf": "^3.0.0"
+ }
+ },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -30475,8 +32163,7 @@
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
@@ -30487,6 +32174,12 @@
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
},
+ "tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true
+ },
"triple-beam": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
@@ -30574,8 +32267,7 @@
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "optional": true,
- "peer": true
+ "devOptional": true
},
"type-check": {
"version": "0.4.0",
@@ -30786,6 +32478,11 @@
"crypto-random-string": "^2.0.0"
}
},
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -30939,14 +32636,26 @@
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "optional": true,
- "peer": true,
+ "devOptional": true,
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
+ "wait-on": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz",
+ "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==",
+ "dev": true,
+ "requires": {
+ "axios": "^0.21.1",
+ "joi": "^17.4.0",
+ "lodash": "^4.17.21",
+ "minimist": "^1.2.5",
+ "rxjs": "^7.1.0"
+ }
+ },
"watchpack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz",
@@ -31180,11 +32889,6 @@
"winston-transport": "^4.4.0"
},
"dependencies": {
- "is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
- },
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -31349,6 +33053,16 @@
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
},
+ "yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
"yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
diff --git a/package.json b/package.json
index bfd51cf..dea1e1d 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,12 @@
"dev": "cross-env NODE_ENV=development ts-node -T -r tsconfig-paths/register ./src/burdy.ts dev",
"build": "cross-env NODE_ENV=production ts-node -T -r tsconfig-paths/register ./src/burdy.ts build",
"db": "cross-env NODE_ENV=development ts-node -T -r tsconfig-paths/register ./src/burdy.ts db",
- "burdy": "cross-env NODE_ENV=development ts-node -T -r tsconfig-paths/register ./src/burdy.ts"
+ "burdy": "cross-env NODE_ENV=development ts-node -T -r tsconfig-paths/register ./src/burdy.ts",
+ "cypress:open": "cypress open",
+ "cypress:run": "cypress run",
+ "e2e": "concurrently -k -s first \"env-cmd -f .env.e2e npm run start\" \"npm:e2e:tests\"",
+ "e2e:dev": "concurrently -k -s first \"env-cmd -f .env.e2e npm run dev\" \"npm:e2e:tests\"",
+ "e2e:tests": "wait-on -t 30000 http-get://localhost:4000/api/health && npm run cypress:run"
},
"bin": {
"burdy": "./src/burdy.js"
@@ -138,6 +143,7 @@
"@types/dotenv-flow": "^3.2.0",
"@types/draft-js": "^0.11.5",
"@types/express": "^4.17.13",
+ "@types/faker": "^5.5.9",
"@types/fs-extra": "^9.0.12",
"@types/http-proxy": "^1.17.7",
"@types/lodash": "^4.14.172",
@@ -157,7 +163,12 @@
"@types/webpack-env": "^1.16.2",
"@typescript-eslint/eslint-plugin": "^4.30.0",
"@typescript-eslint/parser": "^4.30.0",
+ "concurrently": "^7.0.0",
"copyfiles": "^2.4.1",
+ "cypress": "^9.2.1",
+ "cypress-file-upload": "^5.0.8",
+ "cypress-localstorage-commands": "^1.6.1",
+ "env-cmd": "^10.1.0",
"eslint": "^7.32.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-airbnb-typescript": "^14.0.0",
@@ -166,13 +177,15 @@
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-react": "^7.25.1",
"eslint-plugin-react-hooks": "^4.2.0",
+ "faker": "^5.5.3",
"ncp": "^2.0.0",
"prettier": "^2.3.2",
"ts-node": "^10.2.1",
"tsconfig-paths": "^3.11.0",
"ttypescript": "^1.5.12",
"typescript": "^4.4.2",
- "typescript-transform-paths": "^3.3.1"
+ "typescript-transform-paths": "^3.3.1",
+ "wait-on": "^6.0.0"
},
"peerDependencies": {
"path-to-regexp": "^6.2.0"
diff --git a/src/admin/features/content-types/components/fields-select-panel.tsx b/src/admin/features/content-types/components/fields-select-panel.tsx
index e0df167..c14ae2f 100644
--- a/src/admin/features/content-types/components/fields-select-panel.tsx
+++ b/src/admin/features/content-types/components/fields-select-panel.tsx
@@ -194,6 +194,7 @@ const FieldsSelectPanel: React.FC = ({
setSearch(newValue)}
+ data-cy="contentTypes-fieldsSelect-search"
autoFocus
/>