diff --git a/package.json b/package.json index f4fe031b9..8352f3107 100644 --- a/package.json +++ b/package.json @@ -188,8 +188,6 @@ "copy-webpack-plugin": "^10.2.0", "css-loader": "^6.6.0", "cssnano": "^5.0.16", - "cypress": "8.7", - "cypress-wait-until": "^1.7.1", "dotenv-webpack": "^7.0.3", "eslint": "^8.4.1", "eslint-config-airbnb": "^19.0.2", diff --git a/test/e2e/.env b/test/e2e/.env deleted file mode 100644 index 95d0b0cb8..000000000 --- a/test/e2e/.env +++ /dev/null @@ -1 +0,0 @@ -PORTAINER_TAG=develop \ No newline at end of file diff --git a/test/e2e/agent-stack.yml b/test/e2e/agent-stack.yml deleted file mode 100644 index 525720cc8..000000000 --- a/test/e2e/agent-stack.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: '3' -services: - agent: - image: portainer/agent - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - /var/lib/docker/volumes:/var/lib/docker/volumes - ports: - - 9001:9001 - networks: - - agent_network - deploy: - mode: global - placement: - constraints: [node.platform.os == linux] -networks: - agent_network: - driver: overlay diff --git a/test/e2e/cypress.json b/test/e2e/cypress.json deleted file mode 100644 index 5e9c0cbe7..000000000 --- a/test/e2e/cypress.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "projectId": "cgz5j5", - "baseUrl": "https://localhost:9443", - "video": false, - "experimentalNetworkStubbing": true -} diff --git a/test/e2e/cypress/fixtures/example.json b/test/e2e/cypress/fixtures/example.json deleted file mode 100644 index 0967ef424..000000000 --- a/test/e2e/cypress/fixtures/example.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/test/e2e/cypress/integration/ci_basic_tests/init.spec.js b/test/e2e/cypress/integration/ci_basic_tests/init.spec.js deleted file mode 100644 index a1cb21ff0..000000000 --- a/test/e2e/cypress/integration/ci_basic_tests/init.spec.js +++ /dev/null @@ -1,19 +0,0 @@ -context('Init admin user test', () => { - beforeEach(() => { - cy.restoreLocalStorage(); - }); - describe('Initialise admin user and endpoint', function () { - it('Create admin user and verify success', function () { - cy.initAdmin('admin', 'portainer'); - cy.url().should('include', 'init/endpoint'); - cy.saveLocalStorage(); - }); - it('Select local docker environment and init', function () { - cy.initEndpoint(); - cy.url().should('include', 'home'); - }); - it('Add docker swarm endpoint', function () { - cy.addNewEndpoint('swarm', 'Agent', 'e2e-portainer:9001'); - }); - }); -}); diff --git a/test/e2e/cypress/integration/ci_basic_tests/kubernetes.spec.js b/test/e2e/cypress/integration/ci_basic_tests/kubernetes.spec.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/test/e2e/cypress/integration/ci_basic_tests/standalone.spec.js b/test/e2e/cypress/integration/ci_basic_tests/standalone.spec.js deleted file mode 100644 index 50552a2ad..000000000 --- a/test/e2e/cypress/integration/ci_basic_tests/standalone.spec.js +++ /dev/null @@ -1,31 +0,0 @@ -context('Resting of minimum viable functionality against docker standalone', () => { - before(() => { - cy.visit('/'); - }); - - after(() => {}); - - describe('Manipulating resources as admin', function () { - beforeEach(() => { - cy.visit('/'); - cy.auth('frontend', 'admin', 'portainer'); - }); - - afterEach(() => { - // Clean Tokens - cy.clearUserTokens(); - }); - - it('Login and create resources as admin', function () { - cy.visit('/'); - cy.selectEndpoint('local'); - cy.modifyResources('frontend', 'create'); - }); - - it('Login and delete resources as admin', function () { - cy.visit('/'); - cy.selectEndpoint('local'); - cy.modifyResources('frontend', 'delete'); - }); - }); -}); diff --git a/test/e2e/cypress/integration/ci_basic_tests/swarm.spec.js b/test/e2e/cypress/integration/ci_basic_tests/swarm.spec.js deleted file mode 100644 index 1423e28af..000000000 --- a/test/e2e/cypress/integration/ci_basic_tests/swarm.spec.js +++ /dev/null @@ -1,31 +0,0 @@ -context('Testing of minimum viable functionality against docker swarm', () => { - before(() => { - cy.visit('/'); - }); - - after(() => {}); - - describe('Manipulating resources as admin', function () { - beforeEach(() => { - cy.visit('/'); - cy.auth('frontend', 'admin', 'portainer'); - }); - - afterEach(() => { - // Clean Tokens - cy.clearUserTokens(); - }); - - it('Login and create resources as admin', function () { - cy.visit('/'); - cy.selectEndpoint('swarm'); - cy.modifyResources('frontend', 'create'); - }); - - it('Login and delete resources as admin', function () { - cy.visit('/'); - cy.selectEndpoint('swarm'); - cy.modifyResources('frontend', 'delete'); - }); - }); -}); diff --git a/test/e2e/cypress/integration/init.spec.js b/test/e2e/cypress/integration/init.spec.js deleted file mode 100644 index 7a0bce690..000000000 --- a/test/e2e/cypress/integration/init.spec.js +++ /dev/null @@ -1,16 +0,0 @@ -context('Init admin & local docker endpoint', () => { - beforeEach(() => { - cy.restoreLocalStorage(); - }); - describe('Initialise admin user and endpoint', function () { - it('Create admin user and verify success', function () { - cy.initAdmin('admin', 'portainer'); - cy.url().should('include', 'init/endpoint'); - cy.saveLocalStorage(); - }); - it('Select local docker environment and init', function () { - cy.initEndpoint(); - cy.url().should('include', 'home'); - }); - }); -}); diff --git a/test/e2e/cypress/plugins/index.js b/test/e2e/cypress/plugins/index.js deleted file mode 100644 index dffed2532..000000000 --- a/test/e2e/cypress/plugins/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// 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) - -module.exports = (on, config) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config -}; diff --git a/test/e2e/cypress/support/commands.js b/test/e2e/cypress/support/commands.js deleted file mode 100644 index 93cda055d..000000000 --- a/test/e2e/cypress/support/commands.js +++ /dev/null @@ -1,575 +0,0 @@ -import 'cypress-wait-until'; -import _ from 'lodash-es'; - -let LOCAL_STORAGE_MEMORY = {}; -let USER_TOKENS = []; -let ACTIVE_ENDPOINT_ID = ''; -let ACTIVE_ENDPOINT_TYPE = ''; - -Cypress.Commands.add('saveLocalStorage', () => { - Object.keys(localStorage).forEach((key) => { - LOCAL_STORAGE_MEMORY[key] = localStorage[key]; - }); -}); - -Cypress.Commands.add('restoreLocalStorage', () => { - Object.keys(LOCAL_STORAGE_MEMORY).forEach((key) => { - localStorage.setItem(key, LOCAL_STORAGE_MEMORY[key]); - }); -}); - -Cypress.Commands.add('saveUserToken', (username) => { - USER_TOKENS[username] = localStorage.getItem('portainer.JWT').slice(1, -1); -}); - -Cypress.Commands.add('deleteUserToken', (username) => { - delete USER_TOKENS[username]; -}); - -Cypress.Commands.add('setBrowserToken', (username) => { - localStorage.setItem('portainer.JWT', USER_TOKENS[username]); -}); - -Cypress.Commands.add('clearBrowserToken', () => { - localStorage.removeItem('portainer.JWT'); -}); - -Cypress.Commands.add('clearUserTokens', () => { - USER_TOKENS = []; -}); - -Cypress.Commands.add('initAdmin', (username, password) => { - cy.visit('/#/init/admin'); - // Wait text, meaning page has loaded - cy.waitUntil(() => cy.contains('Please create the initial administrator user.')); - - if (username != 'admin') { - cy.get('#username').clear().type(username); - } - cy.get('#password').type(password); - cy.get('#confirm_password').type(password); - cy.get('[type=submit]').click(); -}); - -Cypress.Commands.add('initEndpoint', () => { - cy.get('[for=1]').click(); - cy.get('[type=submit]').click(); -}); - -Cypress.Commands.add('addNewEndpoint', (endpointName, endpointType, endpointURL) => { - const addEndpoint = (endpointName, endpointType, endpointURL) => { - cy.contains(endpointType).click(); - cy.get('input[name=container_name]').type(endpointName); - cy.get('input[name=endpoint_url]').clear().type(endpointURL); - cy.get('span').contains('Add endpoint').click(); - cy.waitUntil(() => cy.contains('Endpoints')); - }; - - cy.visit('/#!/endpoints/new'); - cy.waitUntil(() => cy.contains('Create endpoint')); - addEndpoint(endpointName, endpointType, endpointURL); -}); - -Cypress.Commands.add('selectEndpoint', (endpointName) => { - cy.visit('/#!/home'); - cy.waitUntil(() => cy.contains(endpointName).click()); - cy.waitUntil(() => cy.get('rd-header-title[title-text="Dashboard"]')); - - // Get info from active endpoint for building URL's - cy.request({ - method: 'GET', - url: '/api/endpoints?limit=10&start=1', - auth: { - bearer: USER_TOKENS['admin'], - }, - }) - .its('body') - .then((body) => { - let endpointOBJ = _.find(body, { Name: endpointName }); - ACTIVE_ENDPOINT_ID = endpointOBJ.Id; - ACTIVE_ENDPOINT_TYPE = endpointOBJ.Type; - }); -}); - -Cypress.Commands.add('auth', (location, username, password) => { - if (location == 'frontend') { - cy.visit('/#/auth'); - cy.get('#username').click(); - cy.get('#username').type(username); - cy.get('#password').type(password); - cy.waitUntil(() => cy.get('ng-transclude > .ng-scope:nth-child(1)')).click(); - // Wait until you hit the home screen and get at least 1 endpoint item - cy.waitUntil(() => cy.get('endpoint-item')).saveUserToken(username); - } else { - cy.request({ - method: 'POST', - url: '/api/auth', - body: { - username: username, - password: password, - }, - }) - .its('body') - .then((body) => { - USER_TOKENS[username] = body.jwt; - }); - } -}); - -Cypress.Commands.add('createUser', (location, username, password) => { - // Setup team route to wait for response - cy.route2({ method: 'POST', path: '**/users' }).as('users'); - - if (location == 'frontend') { - cy.visit('/#!/users'); - cy.waitUntil(() => cy.get('#username')).click(); - cy.get('#username').type(username); - cy.get('#password').type(password); - cy.get('#confirm_password').type(password); - cy.get('.btn-primary').click(); - cy.wait('@users'); - } else { - cy.request({ - method: 'POST', - url: '/api/users', - failOnStatusCode: false, - auth: { - bearer: USER_TOKENS['admin'], - }, - body: { - username: username, - password: password, - role: 2, - }, - }); - } -}); - -Cypress.Commands.add('deleteUser', (username) => { - cy.request({ - method: 'GET', - url: '/api/users', - auth: { - bearer: USER_TOKENS['admin'], - }, - }) - .its('body') - .then((response) => { - let users = response; - - for (var key in users) { - if (users[key].Username == username) { - cy.request({ - method: 'DELETE', - url: '/api/users/' + users[key].Id, - auth: { - bearer: USER_TOKENS['admin'], - }, - }); - } - } - }); -}); - -Cypress.Commands.add('deleteUsers', () => { - cy.request({ - method: 'GET', - url: '/api/users', - auth: { - bearer: USER_TOKENS['admin'], - }, - }) - .its('body') - .then((response) => { - let users = response; - - for (var key in users) { - if (users[key].Id != 1) { - cy.request({ - method: 'DELETE', - url: '/api/users/' + users[key].Id, - auth: { - bearer: USER_TOKENS['admin'], - }, - }); - } - } - }); -}); - -Cypress.Commands.add('createTeam', (location, teamName) => { - if (location == 'frontend') { - // Setup team route to wait for response - cy.route2('POST', '**/teams').as('teams'); - - cy.visit('/#!/teams'); - cy.get('#team_name').click().type(teamName); - cy.get('.btn-primary').click(); - cy.wait('@teams'); - } else { - cy.request({ - method: 'POST', - url: '/api/teams', - failOnStatusCode: false, - auth: { - bearer: USER_TOKENS['admin'], - }, - body: { - Name: teamName, - }, - }); - } -}); - -Cypress.Commands.add('deleteTeam', (teamName) => { - cy.request({ - method: 'GET', - url: '/api/teams', - auth: { - bearer: USER_TOKENS['admin'], - }, - }) - .its('body') - .then((response) => { - let teams = response; - - for (var key in teams) { - if (teams[key].Name == teamName) { - cy.request({ - method: 'DELETE', - url: '/api/teams/' + teams[key].Id, - auth: { - bearer: USER_TOKENS['admin'], - }, - }); - } - } - }); -}); - -Cypress.Commands.add('deleteTeams', () => { - cy.request({ - method: 'GET', - url: '/api/teams', - auth: { - bearer: USER_TOKENS['admin'], - }, - }) - .its('body') - .then((response) => { - let teams = response; - - for (var key in teams) { - cy.request({ - method: 'DELETE', - url: '/api/teams/' + teams[key].Id, - auth: { - bearer: USER_TOKENS['admin'], - }, - }); - } - }); -}); - -// Navigate to teams view and assign a user to a team -Cypress.Commands.add('assignToTeam', (username, teamName) => { - cy.visit('/#!/teams'); - - // Click team to browse to related team details view - cy.clickLink(teamName); - - // Get users table and execute within - cy.waitUntil(() => cy.contains('.widget', 'Users')).within(() => { - cy.contains('td', ' ' + username + ' ') - .children('span') - .click(); - }); -}); - -// Navigate to the endpoints view and give the user/team access -Cypress.Commands.add('assignAccess', (endpointName, entityName, entityType, role) => { - cy.visit('/#!/endpoints'); - cy.contains('tr', endpointName).within(() => { - cy.clickLink('Manage access'); - }); - // Click user/team dropdown - cy.waitUntil(() => cy.get('.multiSelect > .ng-binding')).click(); - - // Assign based on entity type - var type; - if (entityType == 'team') { - type = 'fa-users'; - } else { - type = 'fa-user'; - } - cy.get('.' + type) - .parent() - .contains(entityName) - .click(); - - cy.get('.multiSelect > .ng-binding').click(); - // If a role is provided, click role dropdown and select role - if (role) { - cy.get('.form-control:nth-child(1)').select(role); - } - // Click Create access button - cy.get('button[type=submit]').click(); -}); - -Cypress.Commands.add('createStack', (location, resourceName, waitForRedirection = true) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/stacks/newstack`); - cy.waitUntil(() => cy.get('#stack_name')) - .click() - .type(resourceName); - if (ACTIVE_ENDPOINT_TYPE == '1') { - cy.get('.CodeMirror-scroll') - .click({ force: true }) - .type("version: '2'") - .type('{enter}') - .type('services:') - .type('{enter}') - .type(' test:') - .type('{enter}') - .type(' image: nginx'); - } else { - cy.get('.CodeMirror-scroll') - .click({ force: true }) - .type("version: '3'") - .type('{enter}') - .type('services:') - .type('{enter}') - .type(' test:') - .type('{enter}') - .type(' image: nginx'); - } - cy.contains('Deploy the stack').click(); - // Wait for redirection to stacks view - if (waitForRedirection) cy.waitUntil(() => cy.contains('Stacks list', { timeout: 60000 })); - } -}); - -Cypress.Commands.add('deleteStack', (location, resourceName) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/stacks`); - cy.waitUntil(() => cy.contains('Stacks list', { timeout: 120000 })).showAllResources(); - cy.contains(new RegExp('^' + resourceName + '$', 'g')) - .closest('tr') - .within(() => { - cy.get('input[type=checkbox]').click(); - }); - cy.contains('Remove').click(); - cy.get('.modal-dialog').within(() => { - cy.get('button[class="btn btn-danger bootbox-accept"]').click(); - }); - cy.waitUntil(() => cy.contains('Stack successfully removed')); - } else { - cy.log('Delete stack via API'); - } -}); - -Cypress.Commands.add('createService', (location, resourceName, waitForRedirection = true) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/services/new`); - cy.waitUntil(() => cy.get('#service_name')) - .click() - .type(resourceName); - cy.get('input[name=image_name]').type('nginx:alpine'); - cy.contains('Create the service').click(); - // Wait for redirection to services view - if (waitForRedirection) cy.waitUntil(() => cy.contains('Service list', { timeout: 120000 })); - } -}); - -Cypress.Commands.add('deleteService', (location, resourceName) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/services`); - cy.waitUntil(() => cy.contains('Service list', { timeout: 120000 })).showAllResources(); - cy.contains(new RegExp('^' + resourceName + '$', 'g')) - .closest('tr') - .within(() => { - cy.get('input[type=checkbox]').click(); - }); - cy.contains('Remove').click(); - cy.get('.modal-dialog').within(() => { - cy.get('button[class="btn btn-danger bootbox-accept"]').click(); - }); - cy.waitUntil(() => cy.contains('Service successfully removed')); - } else { - cy.log('Delete service via API'); - } -}); - -Cypress.Commands.add('createContainer', (location, resourceName, waitForRedirection = true) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/containers/new`); - cy.waitUntil(() => cy.get('#container_name')) - .click() - .type(resourceName); - cy.get('input[name=image_name]').type('nginx:alpine'); - cy.contains('Deploy the container').click(); - // Wait for redirection to containers view - if (waitForRedirection) cy.waitUntil(() => cy.contains('Container list', { timeout: 120000 })); - } -}); - -Cypress.Commands.add('deleteContainer', (location, resourceName) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/containers`); - cy.waitUntil(() => cy.contains('Container list', { timeout: 120000 })).showAllResources(); - cy.contains(new RegExp('^' + resourceName + '$', 'g')) - .closest('tr') - .within(() => { - cy.get('input[type=checkbox]').click(); - }); - cy.contains('Remove').click(); - cy.get('.modal-dialog').within(() => { - cy.get('button[class="btn btn-danger bootbox-accept"]').click(); - }); - cy.waitUntil(() => cy.contains('Container successfully removed')); - } else { - cy.log('Delete container via API'); - } -}); - -Cypress.Commands.add('createNetwork', (location, resourceName, waitForRedirection = true) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/networks/new`); - cy.waitUntil(() => cy.get('#network_name')) - .click() - .type(resourceName); - cy.contains('Create the network').click(); - // Wait for redirection to networks view - if (waitForRedirection) cy.waitUntil(() => cy.contains('Network list', { timeout: 120000 })); - } -}); - -Cypress.Commands.add('deleteNetwork', (location, resourceName) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/networks`); - cy.waitUntil(() => cy.contains('Network list', { timeout: 120000 })).showAllResources(); - cy.contains(new RegExp('^' + resourceName + '$', 'g')) - .closest('tr') - .within(() => { - cy.get('input[type=checkbox]').click(); - }); - cy.contains('Remove').click(); - cy.waitUntil(() => cy.contains('Network successfully removed')); - } else { - } -}); - -Cypress.Commands.add('createVolume', (location, resourceName, waitForRedirection = true) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/volumes/new`); - cy.waitUntil(() => cy.get('#volume_name')) - .click() - .type(resourceName); - cy.contains('Create the volume').click(); - // Wait for redirection to volumes view - if (waitForRedirection) cy.waitUntil(() => cy.contains('Volume list', { timeout: 120000 })); - } -}); - -Cypress.Commands.add('deleteVolume', (location, resourceName) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/volumes`); - cy.waitUntil(() => cy.contains('Volume list', { timeout: 120000 })).showAllResources(); - cy.contains(new RegExp('^' + resourceName + '$', 'g')) - .closest('tr') - .within(() => { - cy.get('input[type=checkbox]').click(); - }); - cy.contains('Remove').click(); - cy.waitUntil(() => cy.contains('Volume successfully removed')); - } else { - } -}); - -Cypress.Commands.add('createConfig', (location, resourceName, waitForRedirection = true) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/configs/new`); - cy.waitUntil(() => cy.get('#config_name')) - .click() - .type(resourceName); - cy.waitUntil(() => cy.get('.CodeMirror-scroll')) - .click() - .type('This is a config'); - cy.get('button').contains('Create config').click(); - // Wait for redirection to configs view - if (waitForRedirection) cy.waitUntil(() => cy.contains('Configs list', { timeout: 120000 })); - } -}); - -Cypress.Commands.add('deleteConfig', (location, resourceName) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/configs`); - cy.waitUntil(() => cy.contains('Configs list', { timeout: 120000 })).showAllResources(); - cy.contains(new RegExp('^' + resourceName + '$', 'g')) - .closest('tr') - .within(() => { - cy.get('input[type=checkbox]').click(); - }); - cy.contains('Remove').click(); - cy.waitUntil(() => cy.contains('Config successfully removed')); - } else { - } -}); - -Cypress.Commands.add('createSecret', (location, resourceName, waitForRedirection = true) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/secrets/new`); - cy.waitUntil(() => cy.get('#secret_name')) - .click() - .type(resourceName); - cy.waitUntil(() => cy.get('textarea')) - .click() - .type('This is a secret'); - cy.contains('Create the secret').click(); - // Wait for redirection to secrets view - if (waitForRedirection) cy.waitUntil(() => cy.contains('Secrets list', { timeout: 120000 })); - } -}); - -Cypress.Commands.add('deleteSecret', (location, resourceName) => { - if (location == 'frontend') { - cy.visit(`/#!/${ACTIVE_ENDPOINT_ID}/docker/secrets`); - cy.waitUntil(() => cy.contains('Secrets list', { timeout: 120000 })).showAllResources(); - cy.contains(new RegExp('^' + resourceName + '$', 'g')) - .closest('tr') - .within(() => { - cy.get('input[type=checkbox]').click(); - }); - cy.contains('Remove').click(); - cy.waitUntil(() => cy.contains('Secret successfully removed')); - } else { - } -}); - -Cypress.Commands.add('modifyResource', (location, action, resourceType, resourceName) => { - // Dynamically call a custom cypress method on a resource of type 'resourceType' - cy[action + resourceType](location, resourceName); -}); - -// Method for modifying all resources in an endpoint with the default names -Cypress.Commands.add('modifyResources', (location, action) => { - const associatedResources = { - 1: ['Stack', 'Container', 'Network', 'Volume'], - 2: ['Stack', 'Service', 'Container', 'Network', 'Volume', 'Config', 'Secret'], - 3: ['Application'], - }; - for (var res in associatedResources[ACTIVE_ENDPOINT_TYPE]) { - let resource = associatedResources[ACTIVE_ENDPOINT_TYPE][res]; - cy.modifyResource(location, action, resource, resource.toLowerCase()); - } -}); - -Cypress.Commands.add('clickLink', (label) => { - cy.waitUntil(() => cy.contains('a', label)).click(); -}); - -Cypress.Commands.add('showAllResources', () => { - cy.waitUntil(() => cy.contains('.limitSelector', 'Items per page')).within(() => { - cy.get('select').select('All'); - }); -}); diff --git a/test/e2e/cypress/support/index.js b/test/e2e/cypress/support/index.js deleted file mode 100644 index 1221b17e0..000000000 --- a/test/e2e/cypress/support/index.js +++ /dev/null @@ -1 +0,0 @@ -import './commands'; diff --git a/test/e2e/docker-compose.yml b/test/e2e/docker-compose.yml deleted file mode 100644 index 1bc07fd43..000000000 --- a/test/e2e/docker-compose.yml +++ /dev/null @@ -1,47 +0,0 @@ -version: '3' -services: - manager1: - image: docker:dind - privileged: true - environment: - DOCKER_TLS_CERTDIR: - hostname: manager1 - ports: - - 9001:9001 - volumes: - - ${PWD}/agent-stack.yml:/agent-stack.yml - - networks: - - e2e-ci - depends_on: - - manager2 - - worker1 - - worker2 - manager2: - image: docker:dind - privileged: true - environment: - DOCKER_TLS_CERTDIR: - hostname: manager2 - networks: - - e2e-ci - worker1: - image: docker:dind - privileged: true - environment: - DOCKER_TLS_CERTDIR: - hostname: worker1 - networks: - - e2e-ci - worker2: - image: docker:dind - privileged: true - environment: - DOCKER_TLS_CERTDIR: - hostname: worker2 - networks: - - e2e-ci - -networks: - e2e-ci: - driver: bridge diff --git a/test/e2e/docker-swarm-cluster.sh b/test/e2e/docker-swarm-cluster.sh deleted file mode 100755 index 8115e302c..000000000 --- a/test/e2e/docker-swarm-cluster.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -exec_in() { docker-compose exec -T $@; } - -# Up all dinds nodes -docker-compose up -d - -# Manager1 init -exec_in manager1 docker swarm init -TOKEN_WORKER="$(exec_in manager1 docker swarm join-token -q worker)" -TOKEN_MANAGER="$(exec_in manager1 docker swarm join-token -q manager)" - -# Manager2 join -exec_in manager2 docker swarm join --token $TOKEN_MANAGER manager1:2377 - -# Worker1 join -exec_in worker1 docker swarm join --token $TOKEN_WORKER manager1:2377 - -# Worker2 join -exec_in worker2 docker swarm join --token $TOKEN_WORKER manager1:2377 - -# Deploy agent within dind swarm -exec_in manager1 docker stack deploy -c agent-stack.yml portainer-agent diff --git a/test/unit/app/components/containerController.spec.js b/test/unit/app/components/containerController.spec.js deleted file mode 100644 index 626ec5888..000000000 --- a/test/unit/app/components/containerController.spec.js +++ /dev/null @@ -1,53 +0,0 @@ -describe('ContainerController', function () { - var $scope, $httpBackend, mockContainer, $routeParams; - - beforeEach(module('portainer')); - - beforeEach(inject(function ($rootScope, $controller, _$routeParams_) { - $scope = $rootScope.$new(); - $routeParams = _$routeParams_; - $controller('ContainerController', { - $scope: $scope, - }); - - angular.mock.inject(function (_$httpBackend_, _Container_) { - mockContainer = _Container_; - $httpBackend = _$httpBackend_; - }); - })); - - function expectGetContainer() { - $httpBackend.expectGET('dockerapi/containers/json').respond({ - Created: 1421817232, - id: 'b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f', - Image: 'portainer:latest', - Name: '/portainer', - }); - } - - it('a correct rename request to the Docker remote API', function () { - $routeParams.id = 'b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f'; - $scope.container = { - Created: 1421817232, - id: 'b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f', - Image: 'portainer:latest', - Name: '/portainer', - }; - $scope.container.newContainerName = 'newName'; - - var newContainerName = 'newName'; - expectGetContainer(); - - $httpBackend.expectGET('dockerapi/containers/changes').respond([{ Kind: 1, Path: '/docker.sock' }]); - - $httpBackend.expectPOST('dockerapi/containers/' + $routeParams.id + '/rename?name=newName').respond({ - name: newContainerName, - }); - - $scope.renameContainer(); - - $httpBackend.flush(); - expect($scope.container.Name).toBe(newContainerName); - expect($scope.container.edit).toBeFalsy(); - }); -}); diff --git a/test/unit/app/components/containerTopController.spec.js b/test/unit/app/components/containerTopController.spec.js deleted file mode 100644 index 79a0d622d..000000000 --- a/test/unit/app/components/containerTopController.spec.js +++ /dev/null @@ -1,33 +0,0 @@ -describe('ContainerTopController', function () { - var $scope, $httpBackend, $routeParams; - - beforeEach(angular.mock.module('portainer')); - - beforeEach(inject(function (_$rootScope_, _$httpBackend_, $controller, _$routeParams_) { - $scope = _$rootScope_.$new(); - $httpBackend = _$httpBackend_; - $routeParams = _$routeParams_; - $routeParams.id = 'b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f'; - $controller('ContainerTopController', { - $scope: $scope, - $routeParams: $routeParams, - }); - })); - - it('should test controller initialize', function () { - $httpBackend.expectGET('dockerapi/containers/b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f/json').respond(200, { Name: '/foo' }); - $httpBackend.expectGET('dockerapi/containers/b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f/top?ps_args=').respond(200); - expect($scope.ps_args).toBeDefined(); - $httpBackend.flush(); - }); - - it('a correct top request to the Docker remote API', function () { - $httpBackend.expectGET('dockerapi/containers/b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f/json').respond(200, { Name: '/foo' }); - $httpBackend.expectGET('dockerapi/containers/' + $routeParams.id + '/top?ps_args=').respond(200); - $routeParams.id = '123456789123456789123456789'; - $scope.ps_args = 'aux'; - $httpBackend.expectGET('dockerapi/containers/' + $routeParams.id + '/top?ps_args=' + $scope.ps_args).respond(200); - $scope.getTop(); - $httpBackend.flush(); - }); -}); diff --git a/test/unit/app/components/networkController.spec.js b/test/unit/app/components/networkController.spec.js deleted file mode 100644 index 8752e783c..000000000 --- a/test/unit/app/components/networkController.spec.js +++ /dev/null @@ -1,85 +0,0 @@ -describe('NetworkController', function () { - var $scope, $httpBackend, $routeParams; - - beforeEach(module('portainer')); - beforeEach(inject(function (_$httpBackend_, $controller, _$routeParams_) { - $scope = {}; - $httpBackend = _$httpBackend_; - $routeParams = _$routeParams_; - $routeParams.id = 'f1e1ce1613ccd374a75caf5e2c3ab35520d1944f91498c1974ec86fb4019c79b'; - $controller('NetworkController', { - $scope: $scope, - $routeParams: $routeParams, - }); - })); - - it('initializes correctly', function () { - expectGetNetwork(); - $httpBackend.flush(); - }); - - it('issues a correct connect call to the remote API', function () { - expectGetNetwork(); - $httpBackend.expectPOST('dockerapi/networks/f1e1ce1613ccd374a75caf5e2c3ab35520d1944f91498c1974ec86fb4019c79b/connect', { Container: 'containerId' }).respond(200); - $scope.connect($routeParams.id, 'containerId'); - $httpBackend.flush(); - }); - it('issues a correct disconnect call to the remote API', function () { - expectGetNetwork(); - $httpBackend.expectPOST('dockerapi/networks/f1e1ce1613ccd374a75caf5e2c3ab35520d1944f91498c1974ec86fb4019c79b/disconnect', { Container: 'containerId' }).respond(200); - $scope.disconnect($routeParams.id, 'containerId'); - $httpBackend.flush(); - }); - it('issues a correct remove call to the remote API', function () { - expectGetNetwork(); - $httpBackend.expectDELETE('dockerapi/networks/f1e1ce1613ccd374a75caf5e2c3ab35520d1944f91498c1974ec86fb4019c79b').respond(204); - $scope.remove($routeParams.id); - $httpBackend.flush(); - }); - - function expectGetNetwork() { - $httpBackend.expectGET('dockerapi/networks/f1e1ce1613ccd374a75caf5e2c3ab35520d1944f91498c1974ec86fb4019c79b').respond({ - Name: 'bridge', - Id: 'f1e1ce1613ccd374a75caf5e2c3ab35520d1944f91498c1974ec86fb4019c79b', - Scope: 'local', - Driver: 'bridge', - IPAM: { - Driver: 'default', - Config: [ - { - Subnet: '172.17.0.1/16', - Gateway: '172.17.0.1', - }, - ], - }, - Containers: { - '727fe76cd0bd65033baab3045508784a166fbc67d177e91c1874b6b29eae946a': { - EndpointID: 'c17ec80e2cfc8eaedc7737b7bb6f954adff439767197ef89c4a5b4127d07b267', - MacAddress: '02:42:ac:11:00:03', - IPv4Address: '172.17.0.3/16', - IPv6Address: '', - }, - '8c32c2446c3dfe0defac2dc8b5fd927cd394f15e08051c677a681bf36877175b': { - EndpointID: 'cf7e795c978ab194d1af4a3efdc177d84c075582ba30a7cff414c7d516236af1', - MacAddress: '02:42:ac:11:00:04', - IPv4Address: '172.17.0.4/16', - IPv6Address: '', - }, - cfe81fc97b1f857fdb3061fe487a064b8b57d8f112910954ac16910400d2e058: { - EndpointID: '611929ffcff2ced1db8e88f77e009c4fb4a4736395251cd97553b242e2e23bf1', - MacAddress: '02:42:ac:11:00:02', - IPv4Address: '172.17.0.2/16', - IPv6Address: '', - }, - }, - Options: { - 'com.docker.network.bridge.default_bridge': 'true', - 'com.docker.network.bridge.enable_icc': 'true', - 'com.docker.network.bridge.enable_ip_masquerade': 'true', - 'com.docker.network.bridge.host_binding_ipv4': '0.0.0.0', - 'com.docker.network.bridge.name': 'docker0', - 'com.docker.network.driver.mtu': '1500', - }, - }); - } -}); diff --git a/test/unit/app/components/networksController.spec.js b/test/unit/app/components/networksController.spec.js deleted file mode 100644 index bdf58eab7..000000000 --- a/test/unit/app/components/networksController.spec.js +++ /dev/null @@ -1,109 +0,0 @@ -describe('NetworksController', function () { - var $scope, $httpBackend, $routeParams; - - beforeEach(module('portainer')); - beforeEach(inject(function (_$httpBackend_, $controller, _$routeParams_) { - $scope = {}; - $httpBackend = _$httpBackend_; - $routeParams = _$routeParams_; - $controller('NetworksController', { - $scope: $scope, - $routeParams: $routeParams, - }); - })); - - it('initializes correctly', function () { - expectGetNetwork(); - $httpBackend.flush(); - }); - - it('issues correct remove calls to the remote API', function () { - expectGetNetwork(); - $httpBackend.flush(); - $scope.networks[0].Checked = true; - $scope.networks[2].Checked = true; - $httpBackend.expectDELETE('dockerapi/networks/f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566').respond(204); - $httpBackend.expectDELETE('dockerapi/networks/13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e').respond(204); - $scope.removeAction(); - $httpBackend.flush(); - }); - it('issues a correct network creation call to the remote API', function () { - expectGetNetwork(); - var createBody = { - Name: 'isolated_nw', - Driver: 'bridge', - IPAM: { - Config: [ - { - Subnet: '172.20.0.0/16', - IPRange: '172.20.10.0/24', - Gateway: '172.20.10.11', - }, - ], - }, - }; - $httpBackend.expectPOST('dockerapi/networks/create', createBody).respond(201); - expectGetNetwork(); - $scope.addNetwork(createBody); - $httpBackend.flush(); - }); - - function expectGetNetwork() { - $httpBackend.expectGET('dockerapi/networks').respond([ - { - Name: 'bridge', - Id: 'f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566', - Scope: 'local', - Driver: 'bridge', - IPAM: { - Driver: 'default', - Config: [ - { - Subnet: '172.17.0.0/16', - }, - ], - }, - Containers: { - '39b69226f9d79f5634485fb236a23b2fe4e96a0a94128390a7fbbcc167065867': { - EndpointID: 'ed2419a97c1d9954d05b46e462e7002ea552f216e9b136b80a7db8d98b442eda', - MacAddress: '02:42:ac:11:00:02', - IPv4Address: '172.17.0.2/16', - IPv6Address: '', - }, - }, - Options: { - 'com.docker.network.bridge.default_bridge': 'true', - 'com.docker.network.bridge.enable_icc': 'true', - 'com.docker.network.bridge.enable_ip_masquerade': 'true', - 'com.docker.network.bridge.host_binding_ipv4': '0.0.0.0', - 'com.docker.network.bridge.name': 'docker0', - 'com.docker.network.driver.mtu': '1500', - }, - }, - { - Name: 'none', - Id: 'e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794', - Scope: 'local', - Driver: 'null', - IPAM: { - Driver: 'default', - Config: [], - }, - Containers: {}, - Options: {}, - }, - { - Name: 'host', - Id: '13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e', - Scope: 'local', - Driver: 'host', - IPAM: { - Driver: 'default', - Config: [], - }, - Containers: {}, - Options: {}, - }, - ]); - } -}); diff --git a/test/unit/app/components/startContainerController.spec.js b/test/unit/app/components/startContainerController.spec.js deleted file mode 100644 index f874b5cbe..000000000 --- a/test/unit/app/components/startContainerController.spec.js +++ /dev/null @@ -1,267 +0,0 @@ -describe('startContainerController', function () { - var scope, $location, createController, mockContainer, $httpBackend; - - beforeEach(angular.mock.module('portainer')); - - beforeEach(inject(function ($rootScope, $controller, _$location_) { - $location = _$location_; - scope = $rootScope.$new(); - - createController = function () { - return $controller('StartContainerController', { - $scope: scope, - }); - }; - - angular.mock.inject(function (_Container_, _$httpBackend_) { - mockContainer = _Container_; - $httpBackend = _$httpBackend_; - }); - })); - function expectGetContainers() { - $httpBackend.expectGET('dockerapi/containers/json?all=1').respond([ - { - Command: './portainer -e /docker.sock', - Created: 1421817232, - Id: 'b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f', - Image: 'portainer:latest', - Names: ['/portainer'], - Ports: [ - { - IP: '0.0.0.0', - PrivatePort: 9443, - PublicPort: 9443, - Type: 'tcp', - }, - ], - Status: 'Up 2 minutes', - }, - ]); - } - - describe('Create and start a container with port bindings', function () { - it('should issue a correct create request to the Docker remote API', function () { - var controller = createController(); - var id = '6abd8bfba81cf8a05a76a4bdefcb36c4b66cd02265f4bfcd0e236468696ebc6c'; - var expectedBody = { - name: 'container-name', - ExposedPorts: { - '9443/tcp': {}, - }, - HostConfig: { - PortBindings: { - '9443/tcp': [ - { - HostPort: '9999', - HostIp: '10.20.10.15', - }, - ], - }, - }, - }; - - expectGetContainers(); - - $httpBackend.expectPOST('dockerapi/containers/create?name=container-name', expectedBody).respond({ - Id: id, - Warnings: null, - }); - $httpBackend.expectPOST('dockerapi/containers/' + id + '/start').respond({ - id: id, - Warnings: null, - }); - - scope.config.name = 'container-name'; - scope.config.HostConfig.PortBindings = [ - { - ip: '10.20.10.15', - extPort: '9999', - intPort: '9443', - }, - ]; - - scope.create(); - $httpBackend.flush(); - }); - }); - - describe('Create and start a container with environment variables', function () { - it('should issue a correct create request to the Docker remote API', function () { - var controller = createController(); - var id = '6abd8bfba81cf8a05a76a4bdefcb36c4b66cd02265f4bfcd0e236468696ebc6c'; - var expectedBody = { - name: 'container-name', - Env: ['SHELL=/bin/bash', 'TERM=xterm-256color'], - }; - - expectGetContainers(); - - $httpBackend.expectPOST('dockerapi/containers/create?name=container-name', expectedBody).respond({ - Id: id, - Warnings: null, - }); - $httpBackend.expectPOST('dockerapi/containers/' + id + '/start').respond({ - id: id, - Warnings: null, - }); - - scope.config.name = 'container-name'; - scope.config.Env = [ - { - name: 'SHELL', - value: '/bin/bash', - }, - { - name: 'TERM', - value: 'xterm-256color', - }, - ]; - - scope.create(); - $httpBackend.flush(); - }); - }); - - describe('Create and start a container with labels', function () { - it('should issue a correct create request to the Docker remote API', function () { - var controller = createController(); - var id = '6abd8bfba81cf8a05a76a4bdefcb36c4b66cd02265f4bfcd0e236468696ebc6c'; - var expectedBody = { - name: 'container-name', - Labels: { - 'org.foo.bar': 'Baz', - 'com.biz.baz': 'Boo', - }, - }; - - expectGetContainers(); - - $httpBackend.expectPOST('dockerapi/containers/create?name=container-name', expectedBody).respond({ - Id: id, - Warnings: null, - }); - $httpBackend.expectPOST('dockerapi/containers/' + id + '/start').respond({ - id: id, - Warnings: null, - }); - - scope.config.name = 'container-name'; - scope.config.Labels = [ - { - key: 'org.foo.bar', - value: 'Baz', - }, - { - key: 'com.biz.baz', - value: 'Boo', - }, - ]; - - scope.create(); - $httpBackend.flush(); - }); - }); - - describe('Create and start a container with volumesFrom', function () { - it('should issue a correct create request to the Docker remote API', function () { - var controller = createController(); - var id = '6abd8bfba81cf8a05a76a4bdefcb36c4b66cd02265f4bfcd0e236468696ebc6c'; - var expectedBody = { - HostConfig: { - VolumesFrom: ['parent', 'other:ro'], - }, - name: 'container-name', - }; - - expectGetContainers(); - - $httpBackend.expectPOST('dockerapi/containers/create?name=container-name', expectedBody).respond({ - Id: id, - Warnings: null, - }); - $httpBackend.expectPOST('dockerapi/containers/' + id + '/start').respond({ - id: id, - Warnings: null, - }); - - scope.config.name = 'container-name'; - scope.config.HostConfig.VolumesFrom = [{ name: 'parent' }, { name: 'other:ro' }]; - - scope.create(); - $httpBackend.flush(); - }); - }); - - describe('Create and start a container with multiple options', function () { - it('should issue a correct create request to the Docker remote API', function () { - var controller = createController(); - var id = '6abd8bfba81cf8a05a76a4bdefcb36c4b66cd02265f4bfcd0e236468696ebc6c'; - var expectedBody = { - Volumes: ['/var/www'], - SecurityOpts: ['label:type:svirt_apache'], - HostConfig: { - Binds: ['/app:/app'], - Links: ['web:db'], - Dns: ['8.8.8.8'], - DnsSearch: ['example.com'], - CapAdd: ['cap_sys_admin'], - CapDrop: ['cap_foo_bar'], - Devices: [ - { - PathOnHost: '/dev/deviceName', - PathInContainer: '/dev/deviceName', - CgroupPermissions: 'mrw', - }, - ], - Sysctls: { 'net.ipv6.conf.all.disable_ipv6': '0' }, - LxcConf: { 'lxc.utsname': 'docker' }, - ExtraHosts: ['hostname:127.0.0.1'], - RestartPolicy: { name: 'always', MaximumRetryCount: 5 }, - }, - name: 'container-name', - }; - - expectGetContainers(); - - $httpBackend.expectPOST('dockerapi/containers/create?name=container-name', expectedBody).respond({ - Id: id, - Warnings: null, - }); - $httpBackend.expectPOST('dockerapi/containers/' + id + '/start').respond({ - id: id, - Warnings: null, - }); - - scope.config.name = 'container-name'; - scope.config.Volumes = [{ name: '/var/www' }]; - scope.config.SecurityOpts = [{ name: 'label:type:svirt_apache' }]; - scope.config.NetworkDisabled = true; - scope.config.Tty = true; - scope.config.OpenStdin = true; - scope.config.StdinOnce = true; - - scope.config.HostConfig.Binds = [{ name: '/app:/app' }]; - scope.config.HostConfig.Links = [{ name: 'web:db' }]; - scope.config.HostConfig.Dns = [{ name: '8.8.8.8' }]; - scope.config.HostConfig.DnsSearch = [{ name: 'example.com' }]; - scope.config.HostConfig.CapAdd = [{ name: 'cap_sys_admin' }]; - scope.config.HostConfig.CapDrop = [{ name: 'cap_foo_bar' }]; - scope.config.HostConfig.PublishAllPorts = true; - scope.config.HostConfig.Privileged = true; - scope.config.HostConfig.RestartPolicy = { name: 'always', MaximumRetryCount: 5 }; - scope.config.HostConfig.Devices = [ - { - PathOnHost: '/dev/deviceName', - PathInContainer: '/dev/deviceName', - CgroupPermissions: 'mrw', - }, - ]; - scope.config.HostConfig.Sysctls = [{ name: 'net.ipv6.conf.all.disable_ipv6', value: '0' }]; - scope.config.HostConfig.LxcConf = [{ name: 'lxc.utsname', value: 'docker' }]; - scope.config.HostConfig.ExtraHosts = [{ host: 'hostname', ip: '127.0.0.1' }]; - - scope.create(); - $httpBackend.flush(); - }); - }); -}); diff --git a/test/unit/app/components/statsController.spec.js b/test/unit/app/components/statsController.spec.js deleted file mode 100644 index a525a4b10..000000000 --- a/test/unit/app/components/statsController.spec.js +++ /dev/null @@ -1,31 +0,0 @@ -describe('StatsController', function () { - var $scope, $httpBackend, $routeParams; - - beforeEach(angular.mock.module('portainer')); - - beforeEach(inject(function (_$rootScope_, _$httpBackend_, $controller, _$routeParams_) { - $scope = _$rootScope_.$new(); - $httpBackend = _$httpBackend_; - $routeParams = _$routeParams_; - $routeParams.id = 'b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f'; - $controller('StatsController', { - $scope: $scope, - $routeParams: $routeParams, - }); - })); - - //it("should test controller initialize", function () { - // $httpBackend.expectGET('dockerapi/containers/b17882378cee8ec0136f482681b764cca430befd52a9bfd1bde031f49b8bba9f/stats?stream=false').respond(200); - // //expect($scope.ps_args).toBeDefined(); - // $httpBackend.flush(); - //}); - // - //it("a correct top request to the Docker remote API", function () { - // //$httpBackend.expectGET('dockerapi/containers/' + $routeParams.id + '/top?ps_args=').respond(200); - // //$routeParams.id = '123456789123456789123456789'; - // //$scope.ps_args = 'aux'; - // //$httpBackend.expectGET('dockerapi/containers/' + $routeParams.id + '/top?ps_args=' + $scope.ps_args).respond(200); - // //$scope.getTop(); - // //$httpBackend.flush(); - //}); -}); diff --git a/test/unit/app/components/volumesController.spec.js b/test/unit/app/components/volumesController.spec.js deleted file mode 100644 index a88516967..000000000 --- a/test/unit/app/components/volumesController.spec.js +++ /dev/null @@ -1,63 +0,0 @@ -describe('VolumesController', function () { - var $scope, $httpBackend, $routeParams; - - beforeEach(module('portainer')); - beforeEach(inject(function (_$httpBackend_, $controller, _$routeParams_) { - $scope = {}; - $httpBackend = _$httpBackend_; - $routeParams = _$routeParams_; - $controller('VolumesController', { - $scope: $scope, - $routeParams: $routeParams, - }); - })); - - it('initializes correctly', function () { - expectGetVolumes(); - $httpBackend.flush(); - }); - - it('issues correct remove calls to the remote API', function () { - expectGetVolumes(); - $httpBackend.flush(); - $scope.volumes[0].Checked = true; - $scope.volumes[2].Checked = true; - $httpBackend.expectDELETE('dockerapi/volumes/tardis').respond(200); - $httpBackend.expectDELETE('dockerapi/volumes/bar').respond(200); - $scope.removeAction(); - $httpBackend.flush(); - }); - it('issues a correct volume creation call to the remote API', function () { - expectGetVolumes(); - var createBody = { - Name: 'tardis', - Driver: 'local', - }; - $httpBackend.expectPOST('dockerapi/volumes/create', createBody).respond(201); - expectGetVolumes(); - $scope.addVolume(createBody); - $httpBackend.flush(); - }); - - function expectGetVolumes() { - $httpBackend.expectGET('dockerapi/volumes').respond({ - Volumes: [ - { - Name: 'tardis', - Driver: 'local', - Mountpoint: '/var/lib/docker/volumes/tardis', - }, - { - Name: 'foo', - Driver: 'local', - Mountpoint: '/var/lib/docker/volumes/foo', - }, - { - Name: 'bar', - Driver: 'local', - Mountpoint: '/var/lib/docker/volumes/bar', - }, - ], - }); - } -}); diff --git a/test/unit/app/shared/filters.spec.js b/test/unit/app/shared/filters.spec.js deleted file mode 100644 index 083dfaef0..000000000 --- a/test/unit/app/shared/filters.spec.js +++ /dev/null @@ -1,109 +0,0 @@ -describe('filters', function () { - beforeEach(module('portainer.filters')); - - describe('truncate', function () { - it('should truncate the string to 10 characters ending in "..." by default', inject(function (truncateFilter) { - expect(truncateFilter('this is 20 chars long')).toBe('this is...'); - })); - - it('should truncate the string to 7 characters ending in "..."', inject(function (truncateFilter) { - expect(truncateFilter('this is 20 chars long', 7)).toBe('this...'); - })); - - it('should truncate the string to 10 characters ending in "???"', inject(function (truncateFilter) { - expect(truncateFilter('this is 20 chars long', 10, '???')).toBe('this is???'); - })); - }); - - describe('getstatetext', function () { - it('should return an empty string when state is undefined', inject(function (getstatetextFilter) { - expect(getstatetextFilter(undefined)).toBe(''); - })); - - it('should detect a Ghost state', inject(function (getstatetextFilter) { - var state = { - Ghost: true, - Running: true, - Paused: false, - }; - expect(getstatetextFilter(state)).toBe('Ghost'); - })); - - it('should detect a Paused state', inject(function (getstatetextFilter) { - var state = { - Ghost: false, - Running: true, - Paused: true, - }; - expect(getstatetextFilter(state)).toBe('Running (Paused)'); - })); - - it('should detect a Running state', inject(function (getstatetextFilter) { - var state = { - Ghost: false, - Running: true, - Paused: false, - }; - expect(getstatetextFilter(state)).toBe('Running'); - })); - - it('should detect a Stopped state', inject(function (getstatetextFilter) { - var state = { - Ghost: false, - Running: false, - Paused: false, - }; - expect(getstatetextFilter(state)).toBe('Stopped'); - })); - }); - - describe('getstatelabel', function () { - it('should return default when state is undefined', inject(function (getstatelabelFilter) { - expect(getstatelabelFilter(undefined)).toBe('label-default'); - })); - - it('should return label-important when a ghost state is detected', inject(function (getstatelabelFilter) { - var state = { - Ghost: true, - Running: true, - Paused: false, - }; - expect(getstatelabelFilter(state)).toBe('label-important'); - })); - - it('should return label-success when a running state is detected', inject(function (getstatelabelFilter) { - var state = { - Ghost: false, - Running: true, - Paused: false, - }; - expect(getstatelabelFilter(state)).toBe('label-success'); - })); - }); - - describe('containername', function () { - it('should strip the leading slash from container name', inject(function (containernameFilter) { - var container = { - Names: ['/elegant_ardinghelli'], - }; - - expect(containernameFilter(container)).toBe('elegant_ardinghelli'); - })); - }); - - describe('repotag', function () { - it('should not display empty repo tag', inject(function (repotagFilter) { - var image = { - RepoTags: [':'], - }; - expect(repotagFilter(image)).toBe(''); - })); - - it('should display a normal repo tag', inject(function (repotagFilter) { - var image = { - RepoTags: ['ubuntu:latest'], - }; - expect(repotagFilter(image)).toBe('ubuntu:latest'); - })); - }); -}); diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js deleted file mode 100644 index 7cf053ba7..000000000 --- a/test/unit/karma.conf.js +++ /dev/null @@ -1,45 +0,0 @@ -// base path, that will be used to resolve files and exclude -basePath = '../..'; - -// list of files / patterns to load in the browser -files = [JASMINE, JASMINE_ADAPTER, 'dist/angular.js', 'dist/vendor.js', 'dist/portainer.js', 'bower_components/angular-mocks/angular-mocks.js', 'test/unit/**/*.spec.js']; - -// use dots reporter, as travis terminal does not support escaping sequences -// possible values: 'dots' || 'progress' -reporters = 'progress'; - -// these are default values, just to show available options - -// web server port -port = 8089; - -// cli runner port -runnerPort = 9109; - -urlRoot = '/__test/'; - -// enable / disable colors in the output (reporters and logs) -colors = true; - -// level of logging -// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG -logLevel = LOG_INFO; - -// enable / disable watching file and executing tests whenever any file changes -autoWatch = false; - -// polling interval in ms (ignored on OS that support inotify) -autoWatchInterval = 0; - -// Start these browsers, currently available: -// - Chrome -// - ChromeCanary -// - Firefox -// - Opera -// - Safari -// - PhantomJS -browsers = ['Chrome']; - -// Continuous Integration mode -// if true, it capture browsers, run tests and exit -singleRun = true; diff --git a/yarn.lock b/yarn.lock index b1f511632..2398eb7d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1225,38 +1225,6 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@cypress/request@^2.88.6": - version "2.88.10" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce" - integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - 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" - -"@cypress/xvfb@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" - integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== - dependencies: - debug "^3.1.0" - lodash.once "^4.1.1" - "@dabh/diagnostics@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" @@ -3400,7 +3368,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.17.tgz#a8ddf6e0c2341718d74ee3dc413a13a042c45a0c" integrity sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw== -"@types/node@^14.0.10", "@types/node@^14.14.31": +"@types/node@^14.0.10": version "14.18.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.11.tgz#9bd810a959e1728d78df0f68b5c825b8ea7156f4" integrity sha512-zCoCEMA+IPpsRkyCFBqew5vGb7r8RSiB3uwdu/map7uwLAfu1MTazW26/pUDWoNnF88vJz4W3U56i5gtXNqxGg== @@ -3536,12 +3504,7 @@ dependencies: "@types/node" "*" -"@types/sinonjs__fake-timers@^6.0.2": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.4.tgz#0ecc1b9259b76598ef01942f547904ce61a6a77d" - integrity sha512-IFQTJARgMUBF+xVd2b+hIgXWrZEjND3vJtRCvIelcFB5SIXfjV4bOHbHJ0eXKh+0COrBRc8MqteKAz/j88rE0A== - -"@types/sizzle@*", "@types/sizzle@^2.3.2": +"@types/sizzle@*": version "2.3.3" resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== @@ -3658,13 +3621,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yauzl@^2.9.1": - version "2.9.2" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a" - integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin@^5.7.0": version "5.11.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz#3b866371d8d75c70f9b81535e7f7d3aa26527c7a" @@ -4379,11 +4335,6 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -4502,11 +4453,6 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -arch@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - are-we-there-yet@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" @@ -4667,18 +4613,6 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" @@ -4726,7 +4660,7 @@ async@^2.6.1, async@^2.6.2: dependencies: lodash "^4.17.14" -async@^3.2.0, async@^3.2.3, async@~3.2.0: +async@^3.2.3, async@~3.2.0: version "3.2.3" resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== @@ -4782,16 +4716,6 @@ autoprefixer@^9.8.6: postcss "^7.0.32" postcss-value-parser "^4.1.0" -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - axe-core@^4.3.5: version "4.4.1" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" @@ -5085,13 +5009,6 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - better-opn@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-2.1.1.tgz#94a55b4695dc79288f31d7d0e5f658320759f7c6" @@ -5148,12 +5065,7 @@ blob-tmp@^1.0.0: resolved "https://registry.yarnpkg.com/blob-tmp/-/blob-tmp-1.0.0.tgz#de82491e222ff1354c77a93ee8e4ea2c89544273" integrity sha1-3oJJHiIv8TVMd6k+6OTqLIlUQnM= -blob-util@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" - integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== - -bluebird@^3.3.5, bluebird@^3.5.5, bluebird@^3.7.2: +bluebird@^3.3.5, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -5546,11 +5458,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cachedir@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -5649,11 +5556,6 @@ case-sensitive-paths-webpack-plugin@^2.3.0: resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - ccount@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" @@ -5798,11 +5700,6 @@ chartjs-color@^2.1.0: chartjs-color-string "^0.6.0" color-convert "^1.9.3" -check-more-types@^2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= - "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -5957,7 +5854,7 @@ cli-spinners@^2.0.0, cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== -cli-table3@^0.6.1, cli-table3@~0.6.0: +cli-table3@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.1.tgz#36ce9b7af4847f288d3cdd081fbd09bf7bd237b8" integrity sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA== @@ -6145,7 +6042,7 @@ colorspace@1.1.x: color "^3.1.3" text-hex "1.0.x" -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -6172,11 +6069,6 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" @@ -6202,11 +6094,6 @@ common-path-prefix@^3.0.0: resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -6383,11 +6270,6 @@ core-js@^3.0.4, core-js@^3.19.3, core-js@^3.6.5, core-js@^3.8.2: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.0.tgz#f479dbfc3dffb035a0827602dd056839a774aa71" integrity sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ== -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -6704,59 +6586,6 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -cypress-wait-until@^1.7.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/cypress-wait-until/-/cypress-wait-until-1.7.2.tgz#7f534dd5a11c89b65359e7a0210f20d3dfc22107" - integrity sha512-uZ+M8/MqRcpf+FII/UZrU7g1qYZ4aVlHcgyVopnladyoBrpoaMJ4PKZDrdOJ05H5RHbr7s9Tid635X3E+ZLU/Q== - -cypress@8.7: - version "8.7.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-8.7.0.tgz#2ee371f383d8f233d3425b6cc26ddeec2668b6da" - integrity sha512-b1bMC3VQydC6sXzBMFnSqcvwc9dTZMgcaOzT0vpSD+Gq1yFc+72JDWi55sfUK5eIeNLAtWOGy1NNb6UlhMvB+Q== - dependencies: - "@cypress/request" "^2.88.6" - "@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.0" - 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" - ramda "~0.27.1" - 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" - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -6770,13 +6599,6 @@ damerau-levenshtein@^1.0.7: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -6796,11 +6618,6 @@ dateformat@~3.0.3: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -dayjs@^1.10.4: - version "1.10.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== - debug@2.6.9, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -6815,7 +6632,7 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: dependencies: ms "2.1.2" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.7: +debug@^3.0.0, debug@^3.1.1, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -7326,14 +7143,6 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -7446,13 +7255,6 @@ enhanced-resolve@^5.7.0, enhanced-resolve@^5.8.3: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" @@ -8035,11 +7837,6 @@ event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -eventemitter2@^6.4.3: - version "6.4.5" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" - integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== - eventemitter2@~0.4.13: version "0.4.14" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" @@ -8068,21 +7865,6 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== -execa@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - 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" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -8111,13 +7893,6 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -executable@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -8216,7 +7991,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@^3.0.2, extend@~3.0.2: +extend@^3.0.0, extend@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -8244,27 +8019,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -8393,7 +8147,7 @@ figures@^1.3.5: escape-string-regexp "^1.0.5" object-assign "^4.1.0" -figures@^3.0.0, figures@^3.2.0: +figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -8686,11 +8440,6 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - fork-ts-checker-webpack-plugin@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" @@ -8732,15 +8481,6 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - format@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" @@ -8805,7 +8545,7 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^9.0.0, fs-extra@^9.1.0: +fs-extra@^9.0.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -8968,13 +8708,6 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -8998,20 +8731,6 @@ getobject@~1.0.0: resolved "https://registry.yarnpkg.com/getobject/-/getobject-1.0.2.tgz#25ec87a50370f6dcc3c6ba7ef43c4c16215c4c89" integrity sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg== -getos@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" - integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== - dependencies: - async "^3.2.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - github-slugger@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" @@ -9110,13 +8829,6 @@ glob@~7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== - dependencies: - ini "2.0.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -9843,15 +9555,6 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" - integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.14.1" - http2-client@^1.2.5: version "1.3.5" resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181" @@ -9870,11 +9573,6 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -10061,11 +9759,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" @@ -10289,13 +9982,6 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-ci@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - is-core-module@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" @@ -10442,14 +10128,6 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-installed-globally@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" @@ -10632,7 +10310,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -10732,11 +10410,6 @@ isobject@^4.0.0: resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.1, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" @@ -11295,11 +10968,6 @@ js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@^3.3.0, js-yaml@^3.5.1, js-yaml@^4.1.0 argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - jsdom@^16.6.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -11363,11 +11031,6 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -11380,11 +11043,6 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -11425,16 +11083,6 @@ jsonpointer@^5.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072" integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg== -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" @@ -11516,11 +11164,6 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -lazy-ass@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= - lazy-universal-dotenv@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" @@ -11615,20 +11258,6 @@ lint-staged@>=10: supports-color "^9.2.1" yaml "^1.10.2" -listr2@^3.8.3: - version "3.14.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" - integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== - 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" - listr2@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.3.tgz#cf407d811aafdb609cb5a42d8b137b79e1bd968b" @@ -11762,11 +11391,6 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.once@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -11784,7 +11408,7 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" -log-symbols@^4.0.0, log-symbols@^4.1.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -12123,7 +11747,7 @@ mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.30, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.30, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.34" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== @@ -12662,7 +12286,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0, npm-run-path@^4.0.1: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -13036,11 +12660,6 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -ospath@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" - integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= - outvariant@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.2.1.tgz#e630f6cdc1dbf398ed857e36f219de4a005ccd35" @@ -13428,11 +13047,6 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picocolors@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" @@ -13448,7 +13062,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -13921,11 +13535,6 @@ prettier@^2.5.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== -pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - pretty-error@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" @@ -14049,17 +13658,12 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-from-env@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -psl@^1.1.28, psl@^1.1.33: +psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -14128,11 +13732,6 @@ qs@^6.10.0: dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -14163,11 +13762,6 @@ ramda@^0.21.0: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= -ramda@~0.27.1: - version "0.27.2" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" - integrity sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA== - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -14855,13 +14449,6 @@ repeat-string@^1.5.4, repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request-progress@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= - dependencies: - throttleit "^1.0.0" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -15090,7 +14677,7 @@ rxjs@^6.4.0, rxjs@^6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.2.0, rxjs@^7.5.1, rxjs@^7.5.4: +rxjs@^7.2.0, rxjs@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.4.tgz#3d6bd407e6b7ce9a123e76b1e770dc5761aa368d" integrity sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ== @@ -15129,7 +14716,7 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz#ab67cbe1fe7d40603ca641c5e765cb942d04fc73" integrity sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -15786,21 +15373,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - ssri@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" @@ -16174,7 +15746,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.1: +supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -16446,11 +16018,6 @@ throttle-debounce@^3.0.1: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= - through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -16501,13 +16068,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -16596,14 +16156,6 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tr46@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" @@ -16687,18 +16239,6 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -16993,11 +16533,6 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -17201,15 +16736,6 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - vfile-location@^3.0.0, vfile-location@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" @@ -17869,7 +17395,7 @@ yargs@^17.0.1, yargs@^17.3.0: y18n "^5.0.5" yargs-parser "^21.0.0" -yauzl@^2.10.0, yauzl@^2.4.2: +yauzl@^2.4.2: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=