diff --git a/.eslintrc.js b/.eslintrc.js index 63ebcdc..8d23c48 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -19,18 +19,6 @@ module.exports = { }, extends: ['@metamask/eslint-config-nodejs'], }, - - { - files: ['*.test.ts'], - extends: ['@metamask/eslint-config-jest'], - parserOptions: { - sourceType: 'module', - }, - rules: { - // disabled to allow use of Jest tags to set inline test environment options - 'jsdoc/check-tag-names': 'off', - }, - }, ], ignorePatterns: [ diff --git a/.github/workflows/build-lint-test.yml b/.github/workflows/build-lint-test.yml index 4c5ac05..6941ad1 100644 --- a/.github/workflows/build-lint-test.yml +++ b/.github/workflows/build-lint-test.yml @@ -74,7 +74,8 @@ jobs: fi test: - name: Test + name: Run Playwright tests + timeout-minutes: 60 runs-on: ubuntu-latest needs: - prepare @@ -89,7 +90,16 @@ jobs: node-version: ${{ matrix.node-version }} cache: 'yarn' - run: yarn --immutable --immutable-cache - - run: yarn test + - name: Install Playwright Browsers + run: yarn playwright install --with-deps chrome chromium firefox msedge + - name: Run Playwright tests + run: yarn test + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 - name: Require clean working directory shell: bash run: | diff --git a/.gitignore b/.gitignore index b143af1..fcc644e 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,8 @@ node_modules/ !.yarn/releases !.yarn/sdks !.yarn/versions + +# Playwright +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/README.md b/README.md index a1d75b1..8821721 100644 --- a/README.md +++ b/README.md @@ -13,12 +13,34 @@ This package is published to npm so that we can host it locally when running end - Install [Yarn v3](https://yarnpkg.com/getting-started/install) - Run `yarn install` to install dependencies and run any required post-install scripts -### Testing and Linting - -Run `yarn test` to run the tests once. To run tests on file changes, run `yarn test:watch`. +### Linting Run `yarn lint` to run the linter, or run `yarn lint:fix` to run the linter and fix any automatically fixable issues. +### Testing + +#### Installing Playwright + +Before running tests using Playright, you will need to install the required browsers using `yarn playwright install [space-separated browsers]`. Use the `--with-deps` flag as well to prompt Playwright to install OS dependencies as well if possible, though be warned that this may require elevated privileges. + +The browsers we test with in CI are `chrome`, `chromium`, `firefox`, and `msedge`. + +To install all browsers we use on CI and any OS dependencies, run: + +``` +yarn playwright install --with-deps chrome chromium firefox msedge +``` + +You may want to consider using just one or two browsers for local testing to speed things up. These install steps are long and require a decent amount of disk space. + +#### Running tests + +Tests can be run using `yarn test`. This will run all tests using all browsers. + +To run with just a single browser, you'll need to use the flag `--project=[browser name]`. For example, `yarn test --project=chromium` to run all tests with Chromium. See the Playwright configuration (`playwright.config.ts`) to see the other project names. + +If you want to run a single test suite, pass in the test filename as a parameter. For example, `yarn test ./tests/defaults.spec.ts` will run just the "defaults" test suite. + ### Release & Publishing The project follows the same release process as the other libraries in the MetaMask organization. The GitHub Actions [`action-create-release-pr`](https://github.com/MetaMask/action-create-release-pr) and [`action-publish-release`](https://github.com/MetaMask/action-publish-release) are used to automate the release process; see those repositories for more information about how they work. diff --git a/jest.config.ts b/jest.config.ts deleted file mode 100644 index d923fea..0000000 --- a/jest.config.ts +++ /dev/null @@ -1,209 +0,0 @@ -/* - * For a detailed explanation regarding each configuration property and type check, visit: - * https://jestjs.io/docs/configuration - */ -import type { Config } from '@jest/types'; - -import { BASE_URL } from './test/constants'; - -const config: Config.InitialOptions = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/private/var/folders/fk/c3y07g0576j8_2s9m01pk4qw0000gn/T/jest_dx", - - // Automatically clear mock calls, instances and results before every test. - // This does not remove any mock implementation that may have been provided, - // so we disable it. - // clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - collectCoverage: true, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - collectCoverageFrom: ['./src/**/*.ts'], - - // The directory where Jest should output its coverage files - coverageDirectory: 'coverage', - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // Indicates which provider should be used to instrument code for coverage - coverageProvider: 'v8', - - // A list of reporter names that Jest uses when writing coverage reports - coverageReporters: ['text', 'html'], - - // An object that configures minimum threshold enforcement for coverage results - coverageThreshold: { - global: { - branches: 20, - functions: 40, - lines: 62, - statements: 62, - }, - }, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - // moduleFileExtensions: [ - // "js", - // "jsx", - // "ts", - // "tsx", - // "json", - // "node" - // ], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - preset: 'ts-jest', - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // "resetMocks" resets all mocks, including mocked modules, to jest.fn(), - // between each test case. - resetMocks: true, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // "restoreMocks" restores all mocks created using jest.spyOn to their - // original implementations, between each test. It does not affect mocked - // modules. - restoreMocks: true, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: 'jsdom', - - // Options that will be passed to the testEnvironment - testEnvironmentOptions: { url: BASE_URL }, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jest-circus/runner", - - // Reduce the default test timeout from 5s to 2.5s - testTimeout: 2500, - - // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href - // testURL: "http://localhost", - - // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" - // timers: "real", - - // A map from regular expressions to paths to transformers - // transform: undefined, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/", - // "\\.pnp\\.[^\\/]+$" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: undefined, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, -}; - -export default config; diff --git a/package.json b/package.json index ea7fcbc..4cd7da4 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "lint:misc": "prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern", "prepack": "yarn build:prod && yarn lint && yarn test", "setup": "yarn install && yarn allow-scripts", - "test": "jest", - "test:watch": "jest --watch" + "start": "yarn build && yarn http-server ./dist", + "test": "yarn playwright test" }, "dependencies": { "@metamask/design-tokens": "^1.6.0", @@ -37,12 +37,11 @@ "@lavamoat/allow-scripts": "^2.3.0", "@metamask/auto-changelog": "^3.0.0", "@metamask/eslint-config": "^9.0.0", - "@metamask/eslint-config-jest": "^9.0.0", "@metamask/eslint-config-nodejs": "^9.0.0", "@metamask/eslint-config-typescript": "^9.0.1", + "@playwright/test": "^1.30.0", "@testing-library/dom": "^8.13.0", "@testing-library/user-event": "^14.1.1", - "@types/jest": "^26.0.13", "@types/node": "^17.0.23", "@types/pump": "^1.1.1", "@types/readable-stream": "^2.3.13", @@ -53,19 +52,17 @@ "eslint": "^7.24.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.1.5", "eslint-plugin-jsdoc": "^36.1.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.4.1", "exorcist": "^2.0.0", "fs-extra": "^10.1.0", - "jest": "^28.0.0", - "jest-environment-jsdom": "^28.1.0", + "http-server": "^14.1.1", "minify-stream": "^2.1.0", + "playwright": "^1.30.0", "prettier": "^2.6.2", "prettier-plugin-packagejson": "^2.2.17", "terser": "^5.13.1", - "ts-jest": "^28.0.1", "ts-node": "^10.7.0", "typescript": "~4.4.4", "workbox-build": "^6.5.3" @@ -80,7 +77,8 @@ }, "lavamoat": { "allowScripts": { - "@lavamoat/preinstall-always-fail": false + "@lavamoat/preinstall-always-fail": false, + "playwright": false } } } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..7bfd3d8 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,91 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: './tests', + /* Maximum time one test can run for. */ + timeout: 30 * 1000, + expect: { + /** + * Maximum time expect() should wait for the condition to be met. + * For example in `await expect(locator).toHaveText();` + */ + timeout: 5000, + }, + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: Boolean(process.env.CI), + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ + actionTimeout: 0, + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://localhost:8080', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + // { + // name: 'webkit', + // use: { ...devices['Desktop Safari'] }, + // }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + { + name: 'Microsoft Edge', + use: { channel: 'msedge' }, + }, + + { + name: 'Google Chrome', + use: { channel: 'chrome' }, + }, + ], + + /* Folder for test artifacts such as screenshots, videos, traces, etc. */ + // outputDir: 'test-results/', + + /* Run your local dev server before starting the tests */ + webServer: { + command: 'yarn start', + port: 8080, + }, +}); diff --git a/src/index.test.ts b/src/index.test.ts deleted file mode 100644 index 578ad9b..0000000 --- a/src/index.test.ts +++ /dev/null @@ -1,263 +0,0 @@ -import { readFileSync } from 'fs'; -import path from 'path'; -import { queryByText } from '@testing-library/dom'; - -import { BASE_URL } from '../test/constants'; - -const phishingHtml = readFileSync( - path.resolve(__dirname, '..', 'static', 'index.html'), - { - encoding: 'utf8', - }, -); - -/** - * Returns a URL for the phishing warning page. Optionally a hostname and an - * href can be included in the URL, encoded as a query string but included in - * the "hash"/fragment portion of the URL. - * - * @param hostname - The hostname to include in the URL fragment. - * @param href - The href to include in the URL fragment. - * @param newIssueUrl - Optional, the url for the new issue link - * to include in in the URL fragment. - * @returns The phishing warning page URL. - */ -function getUrl(hostname?: string, href?: string, newIssueUrl?: string) { - if (hostname && href && newIssueUrl) { - return `${BASE_URL}hostname=${encodeURIComponent( - hostname, - )}&href=${encodeURIComponent(href)}&newIssueUrl=${encodeURIComponent( - newIssueUrl, - )}`; - } else if (hostname && href) { - return `${BASE_URL}hostname=${encodeURIComponent( - hostname, - )}&href=${encodeURIComponent(href)}`; - } else if (hostname) { - return `${BASE_URL}hostname=${encodeURIComponent(hostname)}`; - } else if (href) { - return `${BASE_URL}href=${encodeURIComponent(href)}`; - } - return BASE_URL; -} - -describe('Phishing warning page', () => { - let onDomContentLoad: EventListener | undefined; - - beforeAll(async () => { - jest - .spyOn(window.document, 'addEventListener') - .mockImplementation( - (event: string, eventHandler: EventListenerOrEventListenerObject) => { - if ( - event === 'DOMContentLoaded' && - typeof eventHandler === 'function' - ) { - onDomContentLoad = eventHandler; - } - }, - ); - await import('./index'); - }); - - beforeEach(() => { - document.getElementsByTagName('html')[0].innerHTML = phishingHtml; - }); - - afterEach(() => { - // onDomContentLoad = undefined; - document.getElementsByTagName('html')[0].innerHTML = ''; - }); - - it('should render page', async () => { - const container = window.document.getElementsByTagName('body')[0]; - expect(queryByText(container, 'Deceptive site ahead')).not.toBeNull(); - }); - - it('should have correct default "New issue" link', () => { - const newIssueLink = window.document.getElementById('new-issue-link'); - expect(newIssueLink?.getAttribute('href')).toBe( - 'https://github.com/metamask/eth-phishing-detect/issues/new', - ); - }); - - it('should correctly construct "New issue" link', async () => { - window.document.location.href = getUrl( - 'example.com', - 'https://example.com', - ); - - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - onDomContentLoad!(new Event('DOMContentLoaded')); - - const newIssueLink = window.document.getElementById('new-issue-link'); - expect(newIssueLink?.getAttribute('href')).toBe( - 'https://github.com/MetaMask/eth-phishing-detect/issues/new?title=[Legitimate%20Site%20Blocked]%20example.com&body=https%3A%2F%2Fexample.com', - ); - }); - - it('should have the correct "New issue" link if a newIssueUrl is specified in the hash query string', async () => { - window.document.location.href = getUrl( - 'example.com', - 'https://example.com', - 'https://example.com', - ); - - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - onDomContentLoad!(new Event('DOMContentLoaded')); - - const newIssueLink = window.document.getElementById('new-issue-link'); - expect(newIssueLink?.getAttribute('href')).toBe( - 'https://example.com?title=[Legitimate%20Site%20Blocked]%20example.com&body=https%3A%2F%2Fexample.com', - ); - }); - - it('should initialize the suspected link as an empty string', () => { - const suspectLink = window.document.getElementById('suspect-link'); - expect(suspectLink?.textContent).toBe(''); - }); - - it('should correctly set the suspected link', () => { - window.document.location.href = getUrl( - 'example.com', - 'https://example.com', - 'https://example.com', - ); - - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - onDomContentLoad!(new Event('DOMContentLoaded')); - - const suspectLink = window.document.getElementById('suspect-link'); - expect(suspectLink?.innerText).toBe('https://example.com'); - }); - - it('should default to crediting both projects', async () => { - const detectionRepo = window.document.getElementById('detection-repo'); - - expect(detectionRepo?.innerHTML).toBe( - 'Ethereum Phishing Detector and PhishFort', - ); - }); - - it('should credit Ethereum Phishing Detector when the source is not provided', async () => { - window.document.location.href = getUrl( - 'example.com', - 'https://example.com', - ); - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - onDomContentLoad!(new Event('DOMContentLoaded')); - const detectionRepo = window.document.getElementById('detection-repo'); - - expect(detectionRepo?.innerText).toBe('Ethereum Phishing Detector'); - }); - - it('should credit Ethereum Phishing Detector when the block source is MetaMask', async () => { - window.document.location.href = getUrl( - 'example.com', - 'https://example.com', - 'https://github.com/metamask/eth-phishing-detect/issues/new', - ); - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - onDomContentLoad!(new Event('DOMContentLoaded')); - const detectionRepo = window.document.getElementById('detection-repo'); - - expect(detectionRepo?.innerText).toBe('Ethereum Phishing Detector'); - }); - - it('should credit PhishFort when the block source is PhishFort', async () => { - window.document.location.href = getUrl( - 'example.com', - 'https://example.com', - 'https://github.com/phishfort/phishfort-lists/issues/new', - ); - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - onDomContentLoad!(new Event('DOMContentLoaded')); - const detectionRepo = window.document.getElementById('detection-repo'); - - expect(detectionRepo?.innerText).toBe('PhishFort'); - }); - - it.todo( - 'should add site to safelist when the user continues at their own risk', - ); - - it('should throw an error if the hostname is missing', async () => { - window.document.location.href = getUrl(undefined, 'https://example.com'); - - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - expect(() => onDomContentLoad!(new Event('DOMContentLoaded'))).toThrow( - "Missing 'hostname' query parameter", - ); - }); - - it('should throw an error if the href is missing', async () => { - window.document.location.href = getUrl('example.com'); - - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - expect(() => onDomContentLoad!(new Event('DOMContentLoaded'))).toThrow( - "Missing 'href' query parameter", - ); - }); - - it('should throw an error if the new issue link is missing', async () => { - window.document.location.href = getUrl( - 'example.com', - 'https://example.com', - ); - const newIssueLink = document.getElementById('new-issue-link'); - if (!newIssueLink) { - throw new Error('Unable to locate new issue link'); - } - newIssueLink.remove(); - - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - expect(() => onDomContentLoad!(new Event('DOMContentLoaded'))).toThrow( - 'Unable to locate new issue link', - ); - }); - - it('should throw an error if the continue link is missing', async () => { - window.document.location.href = getUrl( - 'example.com', - 'https://example.com', - ); - const continueLink = document.getElementById('unsafe-continue'); - if (!continueLink) { - throw new Error('Unable to locate unsafe continue link'); - } - continueLink.remove(); - - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - expect(() => onDomContentLoad!(new Event('DOMContentLoaded'))).toThrow( - 'Unable to locate unsafe continue link', - ); - }); - - it('should redirect when continue to the site is clicked', async () => { - window.document.location.href = getUrl( - 'example.com', - 'https://example.com', - ); - - await import('./index'); - // non-null assertion used because TypeScript doesn't know the event handler was run - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - onDomContentLoad!(new Event('DOMContentLoaded')); - - const continueLink = document.getElementById('unsafe-continue'); - - continueLink?.click(); - - expect(global.window.location.href).toContain('example.com'); - }); -}); diff --git a/test/constants.ts b/test/constants.ts deleted file mode 100644 index 656b90b..0000000 --- a/test/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * The base URL used in tests for the phishing warning page. - */ -export const BASE_URL = 'https://metamask.github.io/phishing-warning/vX.Y.Z/#'; diff --git a/tests/ambiguous-block.spec.ts b/tests/ambiguous-block.spec.ts new file mode 100644 index 0000000..ed3fcb1 --- /dev/null +++ b/tests/ambiguous-block.spec.ts @@ -0,0 +1,36 @@ +import { test, expect } from '@playwright/test'; +import { setupDefaultMocks } from './helpers/default-mocks'; + +test.beforeEach(async ({ context }) => { + await setupDefaultMocks(context); +}); + +test('directs users to eth-phishing-detect to dispute a block, including issue template parameters', async ({ + page, +}) => { + const querystring = new URLSearchParams({ + hostname: 'test.com', + href: 'https://test.com', + }); + await page.goto(`/#${querystring}`); + + const popupPromise = page.waitForEvent('popup'); + await page.getByRole('link', { name: 'report a detection problem' }).click(); + const popup = await popupPromise; + + await expect(popup).toHaveURL( + 'https://github.com/MetaMask/eth-phishing-detect/issues/new?title=[Legitimate%20Site%20Blocked]%20test.com&body=https%3A%2F%2Ftest.com', + ); +}); + +test('credits Ethereum Phishing Detector for the block', async ({ page }) => { + const querystring = new URLSearchParams({ + hostname: 'test.com', + href: 'https://test.com', + }); + await page.goto(`/#${querystring}`); + + await expect(page.locator('css=#detection-repo')).toHaveText( + 'Ethereum Phishing Detector', + ); +}); diff --git a/tests/bypass.spec.ts b/tests/bypass.spec.ts new file mode 100644 index 0000000..c3a8314 --- /dev/null +++ b/tests/bypass.spec.ts @@ -0,0 +1,32 @@ +import { test, expect } from '@playwright/test'; +import { setupDefaultMocks } from './helpers/default-mocks'; +import { setupStreamInitialization } from './helpers/stream-initialization'; + +test.beforeEach(async ({ context }) => { + await setupDefaultMocks(context); +}); + +test('allows the user to bypass the warning and add the site to the allowlist', async ({ + page, +}) => { + const postMessageLogs = await setupStreamInitialization(page); + const querystring = new URLSearchParams({ + hostname: 'test.com', + href: 'https://test.com', + }); + await page.goto(`/#${querystring}`); + + await page.locator('css=#unsafe-continue').click(); + + await expect(page).toHaveURL('https://test.com'); + await expect(postMessageLogs.length).toBe(1); + await expect(postMessageLogs[0].message).toStrictEqual({ + data: { + id: expect.any(Number), + jsonrpc: '2.0', + method: 'safelistPhishingDomain', + params: ['test.com'], + }, + name: 'metamask-phishing-safelist', + }); +}); diff --git a/tests/defaults.spec.ts b/tests/defaults.spec.ts new file mode 100644 index 0000000..9d67bec --- /dev/null +++ b/tests/defaults.spec.ts @@ -0,0 +1,102 @@ +import { test, expect } from '@playwright/test'; +import config from '../playwright.config'; +import { setupDefaultMocks } from './helpers/default-mocks'; + +test.beforeEach(async ({ context }) => { + await setupDefaultMocks(context); +}); + +test('has title', async ({ page }) => { + await page.goto('/'); + + await expect(page).toHaveTitle('MetaMask Phishing Detection'); +}); + +test('renders the title', async ({ page }) => { + await page.goto('/'); + + await expect( + page.getByRole('heading', { name: 'Deceptive site ahead' }), + ).toBeVisible(); +}); + +test('shows a blank suspect link', async ({ page }) => { + await page.goto('/'); + + await expect(page.locator('css=#suspect-link')).toBeEmpty(); +}); + +test('shows an empty list of detection projects', async ({ page }) => { + await page.goto('/'); + + await expect(page.locator('css=#detection-repo')).toHaveText( + 'Ethereum Phishing Detector and PhishFort', + ); +}); + +test('directs users to eth-phishing-detect to dispute a block', async ({ + page, +}) => { + await page.goto('/'); + + const popupPromise = page.waitForEvent('popup'); + await page.getByRole('link', { name: 'report a detection problem' }).click(); + const popup = await popupPromise; + + await expect(popup).toHaveURL( + 'https://github.com/metamask/eth-phishing-detect/issues/new', + ); +}); + +test('opens CryptoScamDB in a new tab', async ({ page }) => { + await page.goto('/'); + + const popupPromise = page.waitForEvent('popup'); + await page.getByRole('link', { name: 'Learn more' }).click(); + const popup = await popupPromise; + + await expect(popup).toHaveURL('https://cryptoscamdb.org/search'); +}); + +test('does nothing when the user tries to bypass the warning', async ({ + page, +}) => { + await page.goto('/'); + + await page.locator('css=#unsafe-continue').click(); + + await expect(page).toHaveURL('/'); + await expect(page.isClosed()).toBe(false); +}); + +test('closes the window when the user clicks "Back to safety"', async ({ + page, +}) => { + // Calling `replace` here instead of `goto` to ensure that the page loads with a browser history + // of length 1. Using `goto` would result in a length of 2, because Playwright starts each page + // on `about:blank`. + // We need a 1-length history so that the browser allows `window.close()` to work. + const baseURL = config.use?.baseURL; + await page.evaluate((url) => window.location.replace(url), `${baseURL}/`); + + const onClose = page.waitForEvent('close'); + await page.getByRole('button', { name: 'Back to safety' }).click(); + + await onClose; +}); + +test('logs that the service worker is registered', async ({ page }) => { + const infoLogs: string[] = []; + page.on('console', (message) => { + if (message.type() === 'log') { + infoLogs.push(message.text()); + } + }); + const expectedMessage = 'Service worker registered!'; + + await page.goto('/'); + await page.waitForLoadState('networkidle'); + + expect(infoLogs.length).toBe(1); + expect(infoLogs[0]).toMatch(expectedMessage); +}); diff --git a/tests/extension-startup.spec.ts b/tests/extension-startup.spec.ts new file mode 100644 index 0000000..40569e5 --- /dev/null +++ b/tests/extension-startup.spec.ts @@ -0,0 +1,35 @@ +import { test, expect } from '@playwright/test'; +import { setupDefaultMocks } from './helpers/default-mocks'; + +test.beforeEach(async ({ context }) => { + await setupDefaultMocks(context); +}); + +test('logs that the service worker is registered', async ({ page }) => { + const infoLogs: string[] = []; + page.on('console', (message) => { + if (message.type() === 'log') { + infoLogs.push(message.text()); + } + }); + const expectedMessage = 'Service worker registered!'; + + await page.goto('/#extensionStartup'); + await page.waitForLoadState('networkidle'); + + expect(infoLogs.length).toBe(1); + expect(infoLogs[0]).toMatch(expectedMessage); +}); + +test('does not throw any error', async ({ page }) => { + const errorLogs: string[] = []; + page.on('console', (message) => { + if (message.type() === 'error') { + errorLogs.push(message.text()); + } + }); + + await page.goto('/#extensionStartup'); + + expect(errorLogs.length).toBe(0); +}); diff --git a/tests/helpers/default-mocks.ts b/tests/helpers/default-mocks.ts new file mode 100644 index 0000000..d893953 --- /dev/null +++ b/tests/helpers/default-mocks.ts @@ -0,0 +1,37 @@ +const emptyHtmlPage = ` + + + + title + + + +`; + +/** + * Setup default network mocks for Playwright tests. + * + * @param context - The browsing context. + */ +export async function setupDefaultMocks(context) { + await context.route('https://github.com/**/*', (route) => + route.fulfill({ + body: emptyHtmlPage, + contentType: 'text/html', + }), + ); + + await context.route('https://cryptoscamdb.org/**/*', (route) => + route.fulfill({ + body: emptyHtmlPage, + contentType: 'text/html', + }), + ); + + await context.route('https://test.com/**/*', (route) => + route.fulfill({ + body: emptyHtmlPage, + contentType: 'text/html', + }), + ); +} diff --git a/tests/helpers/stream-initialization.ts b/tests/helpers/stream-initialization.ts new file mode 100644 index 0000000..8398012 --- /dev/null +++ b/tests/helpers/stream-initialization.ts @@ -0,0 +1,55 @@ +import type { Page } from '@playwright/test'; + +declare global { + interface Window { + logCall: (message: string, targetOrigin: string) => void; + originalPostMessage: Window['postMessage']; + } +} + +/** + * Mock `window.postMessage` to properly initialize the phishing warning streams, and log any + * messages sent by the phishing warning page. + * + * The returned array will continue to grow over time as new logs are added. + * + * This is based on the "Mock Browser APIs" example in the Playwright documentation. + * + * @see {@link https://playwright.dev/docs/mock-browser-apis#verifying-api-calls} + * @param page - The Playwright page object. + * @returns An array of `postMessage` logs, excluding initialization. + */ +export async function setupStreamInitialization( + page: Page, +): Promise<{ message: string; targetOrigin: string }[]> { + const logs: { message: string; targetOrigin: string }[] = []; + + // This attaches a `logCall` function to `window` that will send a message to + // Playwright to execute this function in the test runner Node.js process. + await page.exposeFunction( + 'logCall', + (message: string, targetOrigin: string) => + logs.push({ message, targetOrigin }), + ); + + // This function is executed in the browser, in the page under test + await page.addInitScript(() => { + window.originalPostMessage = window.postMessage.bind(window); + window.postMessage = (message, targetOrigin) => { + if (message?.target === 'metamask-contentscript') { + if (message.data === 'SYN') { + // The extension replies with "ACK" as part of establishing a connection + window.originalPostMessage( + { target: 'metamask-phishing-warning-page', data: 'ACK' }, + targetOrigin, + ); + // The extension replies to "ACK" with another "ACK", which we can ignore + } else if (message.data !== 'ACK') { + window.logCall(message.data, targetOrigin); + } + } + }; + }); + + return logs; +} diff --git a/tests/iframe.spec.ts b/tests/iframe.spec.ts new file mode 100644 index 0000000..3089261 --- /dev/null +++ b/tests/iframe.spec.ts @@ -0,0 +1,37 @@ +import { test as base, expect } from '@playwright/test'; +import { setupDefaultMocks } from './helpers/default-mocks'; + +/** + * Return the markup for a basic HTML page that includes an iframe. + * + * @param url - The URL of the iframe. + * @returns The markup for a page including the iframe. + */ +function getPageWithIframe(url?: string) { + return ` + + + + title + + + + + `; +} + +export const test = base.extend({ + page: async ({ baseURL, page }, use) => { + await page.setContent(getPageWithIframe(baseURL)); + await use(page); + }, +}); + +test.beforeEach(async ({ context }) => { + await setupDefaultMocks(context); +}); + +test('does not render any buttons or links', async ({ page }) => { + await expect(await page.getByRole('button').all()).toStrictEqual([]); + await expect(await page.getByRole('link').all()).toStrictEqual([]); +}); diff --git a/tests/invalid-inputs.spec.ts b/tests/invalid-inputs.spec.ts new file mode 100644 index 0000000..30da15a --- /dev/null +++ b/tests/invalid-inputs.spec.ts @@ -0,0 +1,81 @@ +import { test, expect } from '@playwright/test'; +import { setupDefaultMocks } from './helpers/default-mocks'; +import { setupStreamInitialization } from './helpers/stream-initialization'; + +test.beforeEach(async ({ context }) => { + await setupDefaultMocks(context); +}); + +test('throws an error about the hostname query parameter being missing', async ({ + context, + page, +}) => { + const errorLogs: string[] = []; + page.on('console', (message) => { + if (message.type() === 'error') { + errorLogs.push(message.text()); + } + }); + + await page.goto('/'); + + expect(errorLogs.length).toBe(1); + const browserName = context.browser()?.browserType().name(); + expect(errorLogs[0]).toMatch( + browserName === 'firefox' + ? 'Error' // for some reason the message is missing on Firefox + : `Error: Missing 'hostname' query parameter`, + ); +}); + +test('throws an error about the href query parameter being missing', async ({ + context, + page, +}) => { + const errorLogs: string[] = []; + page.on('console', (message) => { + if (message.type() === 'error') { + errorLogs.push(message.text()); + } + }); + const querystring = new URLSearchParams({ hostname: 'example.com' }); + + await page.goto(`/#${querystring}`); + + expect(errorLogs.length).toBe(1); + const browserName = context.browser()?.browserType().name(); + expect(errorLogs[0]).toMatch( + browserName === 'firefox' + ? 'Error' // for some reason the message is missing on Firefox + : `Error: Missing 'href' query parameter`, + ); +}); + +test('does not allow user to bypass warning for invalid protocols', async ({ + page, +}) => { + const postMessageLogs = await setupStreamInitialization(page); + const infoLogs: string[] = []; + page.on('console', (message) => { + if (message.type() === 'log') { + infoLogs.push(message.text()); + } + }); + const querystring = new URLSearchParams({ + hostname: 'evil.com', + // eslint-disable-next-line no-script-url + href: 'javascript:console.log("test")', + }); + const url = `/#${querystring}`; + await page.goto(url); + + await page.locator('css=#unsafe-continue').click(); + + await expect(page).toHaveURL(url); + expect( + infoLogs.some((log) => + log.includes('Disallowed Protocol, cannot continue.'), + ), + ).toBe(true); + expect(postMessageLogs).toStrictEqual([]); +}); diff --git a/tests/metamask-block.spec.ts b/tests/metamask-block.spec.ts new file mode 100644 index 0000000..af0fdb8 --- /dev/null +++ b/tests/metamask-block.spec.ts @@ -0,0 +1,38 @@ +import { test, expect } from '@playwright/test'; +import { setupDefaultMocks } from './helpers/default-mocks'; + +test.beforeEach(async ({ context }) => { + await setupDefaultMocks(context); +}); + +test('directs users to eth-phishing-detect to dispute a block, including issue template parameters', async ({ + page, +}) => { + const querystring = new URLSearchParams({ + hostname: 'test.com', + href: 'https://test.com', + newIssueUrl: 'https://github.com/MetaMask/eth-phishing-detect/issues/new', + }); + await page.goto(`/#${querystring}`); + + const popupPromise = page.waitForEvent('popup'); + await page.getByRole('link', { name: 'report a detection problem' }).click(); + const popup = await popupPromise; + + await expect(popup).toHaveURL( + 'https://github.com/MetaMask/eth-phishing-detect/issues/new?title=[Legitimate%20Site%20Blocked]%20test.com&body=https%3A%2F%2Ftest.com', + ); +}); + +test('credits Ethereum Phishing Detector for the block', async ({ page }) => { + const querystring = new URLSearchParams({ + hostname: 'test.com', + href: 'https://test.com', + newIssueUrl: 'https://github.com/MetaMask/eth-phishing-detect/issues/new', + }); + await page.goto(`/#${querystring}`); + + await expect(page.locator('css=#detection-repo')).toHaveText( + 'Ethereum Phishing Detector', + ); +}); diff --git a/tests/phishfort-block.spec.ts b/tests/phishfort-block.spec.ts new file mode 100644 index 0000000..1d9f981 --- /dev/null +++ b/tests/phishfort-block.spec.ts @@ -0,0 +1,36 @@ +import { test, expect } from '@playwright/test'; +import { setupDefaultMocks } from './helpers/default-mocks'; + +test.beforeEach(async ({ context }) => { + await setupDefaultMocks(context); +}); + +test('directs users to PhishFort to dispute a block, including issue template parameters', async ({ + page, +}) => { + const querystring = new URLSearchParams({ + hostname: 'test.com', + href: 'https://test.com', + newIssueUrl: 'https://github.com/phishfort/phishfort-lists/issues/new', + }); + await page.goto(`/#${querystring}`); + + const popupPromise = page.waitForEvent('popup'); + await page.getByRole('link', { name: 'report a detection problem' }).click(); + const popup = await popupPromise; + + await expect(popup).toHaveURL( + 'https://github.com/phishfort/phishfort-lists/issues/new?title=[Legitimate%20Site%20Blocked]%20test.com&body=https%3A%2F%2Ftest.com', + ); +}); + +test('credits PhishFort for the block', async ({ page }) => { + const querystring = new URLSearchParams({ + hostname: 'test.com', + href: 'https://test.com', + newIssueUrl: 'https://github.com/phishfort/phishfort-lists/issues/new', + }); + await page.goto(`/#${querystring}`); + + await expect(page.locator('css=#detection-repo')).toHaveText('PhishFort'); +}); diff --git a/yarn.lock b/yarn.lock index 79b6d62..a607492 100644 --- a/yarn.lock +++ b/yarn.lock @@ -36,7 +36,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4": +"@babel/code-frame@npm:^7.10.4": version: 7.10.4 resolution: "@babel/code-frame@npm:7.10.4" dependencies: @@ -45,7 +45,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7": +"@babel/code-frame@npm:^7.16.7": version: 7.16.7 resolution: "@babel/code-frame@npm:7.16.7" dependencies: @@ -61,14 +61,7 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/compat-data@npm:7.17.7" - checksum: bf13476676884ce9afc199747ff82f3bcd6d42a9cfb01ce91bdb762b83ea11ec619b6ec532d1a80469ab14f191f33b5d4b9f8796fa8be3bc728d42b0c5e737e3 - languageName: node - linkType: hard - -"@babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.17.9": +"@babel/core@npm:^7.11.1, @babel/core@npm:^7.17.9": version: 7.17.10 resolution: "@babel/core@npm:7.17.10" dependencies: @@ -91,29 +84,6 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.12.3": - version: 7.17.8 - resolution: "@babel/core@npm:7.17.8" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.17.7 - "@babel/helper-compilation-targets": ^7.17.7 - "@babel/helper-module-transforms": ^7.17.7 - "@babel/helpers": ^7.17.8 - "@babel/parser": ^7.17.8 - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.17.3 - "@babel/types": ^7.17.0 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.1.2 - semver: ^6.3.0 - checksum: 0e686b1be444d25494424065238931f2b3df908bf072b72bab973acfd6d27a481fc280c9cd8a3c6fe2c46beee50e0d2307468d8b15b64dc4036f025e75f6609d - languageName: node - linkType: hard - "@babel/generator@npm:^7.17.10": version: 7.17.10 resolution: "@babel/generator@npm:7.17.10" @@ -125,7 +95,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.17.3, @babel/generator@npm:^7.17.7, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.17.3": version: 7.17.7 resolution: "@babel/generator@npm:7.17.7" dependencies: @@ -169,20 +139,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/helper-compilation-targets@npm:7.17.7" - dependencies: - "@babel/compat-data": ^7.17.7 - "@babel/helper-validator-option": ^7.16.7 - browserslist: ^4.17.5 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 24bf851539d5ec8e73779304b5d1ad5b0be09a74459ecc7d9baee9a0fa38ad016e9eaf4b5704504ae8da32f91ce0e31857bbbd9686854caeffd38f58226d3760 - languageName: node - linkType: hard - "@babel/helper-create-class-features-plugin@npm:^7.16.10, @babel/helper-create-class-features-plugin@npm:^7.16.7, @babel/helper-create-class-features-plugin@npm:^7.17.6": version: 7.17.9 resolution: "@babel/helper-create-class-features-plugin@npm:7.17.9" @@ -449,17 +405,6 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.17.8": - version: 7.17.8 - resolution: "@babel/helpers@npm:7.17.8" - dependencies: - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.17.3 - "@babel/types": ^7.17.0 - checksum: 463dad58119fefebf2d0201bfa53ec9607aa00356908895640fc07589747fb3c2e0dfee4019f3e8c9781e57c9aa5dff4c72ec8d1b031c4ed8349f90b6aefe99d - languageName: node - linkType: hard - "@babel/helpers@npm:^7.17.9": version: 7.17.9 resolution: "@babel/helpers@npm:7.17.9" @@ -493,16 +438,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.10.4": - version: 7.11.5 - resolution: "@babel/parser@npm:7.11.5" - bin: - parser: ./bin/babel-parser.js - checksum: 3cd9834e0e072114974b214473002b40792c3f19779a39d63dd832d99a48762b9ab158762f45547f2cc8f0fbdac2727a07d1f005f175b14c1af3ec6cd9916d3d - languageName: node - linkType: hard - -"@babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.7, @babel/parser@npm:^7.17.3, @babel/parser@npm:^7.17.8": +"@babel/parser@npm:^7.16.7, @babel/parser@npm:^7.17.3": version: 7.17.8 resolution: "@babel/parser@npm:7.17.8" bin: @@ -743,17 +679,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - "@babel/plugin-syntax-class-properties@npm:^7.12.13": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" @@ -765,17 +690,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-class-properties@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 454db1392c5415abf0681a619e71c667df94f7c7587767016b804c4b84180ed4fc00cefcae677850fa356c991085ab61ae524c4d4bab95445cb4aa0a3af96017 - languageName: node - linkType: hard - "@babel/plugin-syntax-class-static-block@npm:^7.14.5": version: 7.14.5 resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" @@ -809,17 +723,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b - languageName: node - linkType: hard - "@babel/plugin-syntax-json-strings@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" @@ -831,7 +734,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -853,7 +756,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -919,17 +822,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.8.3": - version: 7.12.13 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 74cf8c8b8715ec0de6c55b96af4907cfa3bbf87dbaecdc4c30acac8c30d281d62c578001faf8f99e1884e1ccb933f5a919eb184c542b92fcef7bdefe64482c39 - languageName: node - linkType: hard - "@babel/plugin-syntax-typescript@npm:^7.16.7": version: 7.17.10 resolution: "@babel/plugin-syntax-typescript@npm:7.17.10" @@ -941,17 +833,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.16.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 661e636060609ede9a402e22603b01784c21fabb0a637e65f561c8159351fe0130bbc11fdefe31902107885e3332fc34d95eb652ac61d3f61f2d61f5da20609e - languageName: node - linkType: hard - "@babel/plugin-transform-arrow-functions@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-transform-arrow-functions@npm:7.16.7" @@ -1475,17 +1356,6 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.3.3": - version: 7.10.4 - resolution: "@babel/template@npm:7.10.4" - dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/parser": ^7.10.4 - "@babel/types": ^7.10.4 - checksum: 174a1fbfa19ed68141c9a047ff02972ebd3e8c7a98a00ffa79d4958d0f31bcfe17766987c2064d7fae851a277e1c499a05a527df346b3821d9aa9f730979cea9 - languageName: node - linkType: hard - "@babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.17.10, @babel/traverse@npm:^7.17.9": version: 7.17.10 resolution: "@babel/traverse@npm:7.17.10" @@ -1504,7 +1374,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.7.2": +"@babel/traverse@npm:^7.17.3": version: 7.17.3 resolution: "@babel/traverse@npm:7.17.3" dependencies: @@ -1522,17 +1392,6 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.10.4, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3": - version: 7.11.5 - resolution: "@babel/types@npm:7.11.5" - dependencies: - "@babel/helper-validator-identifier": ^7.10.4 - lodash: ^4.17.19 - to-fast-properties: ^2.0.0 - checksum: de2c1302f7c459d5786e8e3775c9162c07db86b4abac73368d4dfaea876bd4284241793b1f096685f74baab17b34f6c00d4a7ff03fb1bbea4d9fc46c9cae4b33 - languageName: node - linkType: hard - "@babel/types@npm:^7.16.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.17.10, @babel/types@npm:^7.4.4": version: 7.17.10 resolution: "@babel/types@npm:7.17.10" @@ -1564,13 +1423,6 @@ __metadata: languageName: node linkType: hard -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 - languageName: node - linkType: hard - "@cspotcode/source-map-consumer@npm:0.8.0": version: 0.8.0 resolution: "@cspotcode/source-map-consumer@npm:0.8.0" @@ -1640,269 +1492,6 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: ^5.3.1 - find-up: ^4.1.0 - get-package-type: ^0.1.0 - js-yaml: ^3.13.1 - resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2": - version: 0.1.2 - resolution: "@istanbuljs/schema@npm:0.1.2" - checksum: 5ce9facf2f0e3f4a93e56853cdfd78456e22d2c210c677530046e9c634ddc323dd62423ac711cd3554b5be06052c87fb8e0c266aa9010726940654c357290e78 - languageName: node - linkType: hard - -"@jest/console@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/console@npm:28.1.0" - dependencies: - "@jest/types": ^28.1.0 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^28.1.0 - jest-util: ^28.1.0 - slash: ^3.0.0 - checksum: 6ce8ed8159517c28d413fbebf806c8ed53e958f5069b45731b21add626bdea799bc6944d9cfcc5d350047e7198185515b58877e09da52801df64cfc21c4060df - languageName: node - linkType: hard - -"@jest/core@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/core@npm:28.1.0" - dependencies: - "@jest/console": ^28.1.0 - "@jest/reporters": ^28.1.0 - "@jest/test-result": ^28.1.0 - "@jest/transform": ^28.1.0 - "@jest/types": ^28.1.0 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - ci-info: ^3.2.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-changed-files: ^28.0.2 - jest-config: ^28.1.0 - jest-haste-map: ^28.1.0 - jest-message-util: ^28.1.0 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.0 - jest-resolve-dependencies: ^28.1.0 - jest-runner: ^28.1.0 - jest-runtime: ^28.1.0 - jest-snapshot: ^28.1.0 - jest-util: ^28.1.0 - jest-validate: ^28.1.0 - jest-watcher: ^28.1.0 - micromatch: ^4.0.4 - pretty-format: ^28.1.0 - rimraf: ^3.0.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: fb955cc5c8d7f294fd9bb85793e0633707fdbce9c10d4e3222b62d36564b17214abc9ab0e93397d1a6d224cd43681f8e54d570327a92a40d7ac3e47b5de3af1f - languageName: node - linkType: hard - -"@jest/environment@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/environment@npm:28.1.0" - dependencies: - "@jest/fake-timers": ^28.1.0 - "@jest/types": ^28.1.0 - "@types/node": "*" - jest-mock: ^28.1.0 - checksum: 376904d6626bb439f96a56ca9d400e1b6b4a5bafb751820fec649238e35cb7d0b9619223ade86c2906e97fae8da03a7b9561c55c1f5850afe9856db89185d754 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/expect-utils@npm:28.1.0" - dependencies: - jest-get-type: ^28.0.2 - checksum: 5b8b463682bd35ae71868020c87dc654ebed65ded4e74ea3c24bd9e1ab4637a7790c8b78c26cdcb832dd227b9981e8dd24eb3b742891637c24c2a3e38ba153e8 - languageName: node - linkType: hard - -"@jest/expect@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/expect@npm:28.1.0" - dependencies: - expect: ^28.1.0 - jest-snapshot: ^28.1.0 - checksum: e596bc2a2d02d66cb3e23982c6a48cfe24aa31932f594db7de6966db6c0b58f7aad3836a71debb8aeda6178116c35160e11ded42a355a94457f6402cbb2186e3 - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/fake-timers@npm:28.1.0" - dependencies: - "@jest/types": ^28.1.0 - "@sinonjs/fake-timers": ^9.1.1 - "@types/node": "*" - jest-message-util: ^28.1.0 - jest-mock: ^28.1.0 - jest-util: ^28.1.0 - checksum: d24375bcd52873f1e602ff02ffe57c6866570b95ec0be167a4734d051047b2c6b3dab69b2a301a390a0ca2de2ad89fd2b23e991c09a1a3b70b1dd4763c8681c7 - languageName: node - linkType: hard - -"@jest/globals@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/globals@npm:28.1.0" - dependencies: - "@jest/environment": ^28.1.0 - "@jest/expect": ^28.1.0 - "@jest/types": ^28.1.0 - checksum: dce822edd1810430ce381235f714be705a9c774c00bf109d9d5df0dc4868371da62520832df99e83635ee1fc1fa4241cf617821b4e3b1a8bcd3fcd91aa8a75a7 - languageName: node - linkType: hard - -"@jest/reporters@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/reporters@npm:28.1.0" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^28.1.0 - "@jest/test-result": ^28.1.0 - "@jest/transform": ^28.1.0 - "@jest/types": ^28.1.0 - "@jridgewell/trace-mapping": ^0.3.7 - "@types/node": "*" - chalk: ^4.0.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^5.1.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-util: ^28.1.0 - jest-worker: ^28.1.0 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - terminal-link: ^2.0.0 - v8-to-istanbul: ^9.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 19ec066ba219508ce6f5e0f0b29f26f906367372b1ddcc2d615cd842e53a10bdd02b87c8b04653e103a2e22b56d96e9af99573d9a84c6adab606158e5383d09f - languageName: node - linkType: hard - -"@jest/schemas@npm:^28.0.2": - version: 28.0.2 - resolution: "@jest/schemas@npm:28.0.2" - dependencies: - "@sinclair/typebox": ^0.23.3 - checksum: 6a177e97b112c99f377697fe803a34f4489b92cd07949876250c69edc9029c7cbda771fcbb03caebd20ffbcfa89b9c22b4dc9d1e9a7fbc9873185459b48ba780 - languageName: node - linkType: hard - -"@jest/source-map@npm:^28.0.2": - version: 28.0.2 - resolution: "@jest/source-map@npm:28.0.2" - dependencies: - "@jridgewell/trace-mapping": ^0.3.7 - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - checksum: 427195be85c28517e7e6b29fb38448a371750a1e4f4003e4c33ee0b35bbb72229c80482d444a827aa230f688a0b72c0c858ebd11425a686103c13d6cc61c8da1 - languageName: node - linkType: hard - -"@jest/test-result@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/test-result@npm:28.1.0" - dependencies: - "@jest/console": ^28.1.0 - "@jest/types": ^28.1.0 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 7f0cf04b8c27a2dbe2eb1b7ac53635e0112fa2000b80b016992a0ca8b495980c11e758b902606f3bb24fb96aa4d5a24730c1fcdacb82d105cd782e210ae412d2 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/test-sequencer@npm:28.1.0" - dependencies: - "@jest/test-result": ^28.1.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.0 - slash: ^3.0.0 - checksum: ecd87ca73d1e58ebc6a4de46176c49a0e92c2dc4b41fbd09945b7bd1379ec09ae37804cab3f41c452eea8d1ca71d31a32b602c4e3147ad74c0b0e3a50184cedd - languageName: node - linkType: hard - -"@jest/transform@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/transform@npm:28.1.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^28.1.0 - "@jridgewell/trace-mapping": ^0.3.7 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.0 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.0 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.1 - checksum: f7417409c466fa1b4d8f9f7d365c8c1ed07e709e8712279180a87e9da8520ab06518de270b290148034d93f666d7826449b5e40cac34cc5f7225980e8991f2ba - languageName: node - linkType: hard - -"@jest/types@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/types@npm:26.6.2" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^15.0.0 - chalk: ^4.0.0 - checksum: a0bd3d2f22f26ddb23f41fddf6e6a30bf4fab2ce79ec1cb6ce6fdfaf90a72e00f4c71da91ec61e13db3b10c41de22cf49d07c57ff2b59171d64b29f909c1d8d6 - languageName: node - linkType: hard - -"@jest/types@npm:^28.1.0": - version: 28.1.0 - resolution: "@jest/types@npm:28.1.0" - dependencies: - "@jest/schemas": ^28.0.2 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 22705aed92a76d45465a6c51147bc71c1fbd300b912ebad2769e3ff7fd51c1938017e29fcea52e00c00dab7130697359b2a2c2be6ee601e37c8b1042a2c4040e - languageName: node - linkType: hard - "@jridgewell/gen-mapping@npm:^0.1.0": version: 0.1.1 resolution: "@jridgewell/gen-mapping@npm:0.1.1" @@ -1972,16 +1561,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.7": - version: 0.3.10 - resolution: "@jridgewell/trace-mapping@npm:0.3.10" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 1e5f7ff99f6fe8b671aab61b5a943d00f689728380e2d20df1e8a7418b421d4f941679ab327282d9ad5b2d71c0eedf2928ad2b974d0bd046e57c6fd66e891144 - languageName: node - linkType: hard - "@jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.14 resolution: "@jridgewell/trace-mapping@npm:0.3.14" @@ -2039,17 +1618,6 @@ __metadata: languageName: node linkType: hard -"@metamask/eslint-config-jest@npm:^9.0.0": - version: 9.0.0 - resolution: "@metamask/eslint-config-jest@npm:9.0.0" - peerDependencies: - "@metamask/eslint-config": ^9.0.0 - eslint: ^7.23.0 - eslint-plugin-jest: ^24.1.3 - checksum: 74ddc7953691cc1e5fe76616fa7e0aaff3c671fae0187851bb90122662cd6a1346ae92ff1f3c28cc1beeeb31a8e86e6ca99062313e7674792a42ab56309efd20 - languageName: node - linkType: hard - "@metamask/eslint-config-nodejs@npm:^9.0.0": version: 9.0.0 resolution: "@metamask/eslint-config-nodejs@npm:9.0.0" @@ -2099,13 +1667,12 @@ __metadata: "@metamask/auto-changelog": ^3.0.0 "@metamask/design-tokens": ^1.6.0 "@metamask/eslint-config": ^9.0.0 - "@metamask/eslint-config-jest": ^9.0.0 "@metamask/eslint-config-nodejs": ^9.0.0 "@metamask/eslint-config-typescript": ^9.0.1 "@metamask/post-message-stream": ^6.0.0 + "@playwright/test": ^1.30.0 "@testing-library/dom": ^8.13.0 "@testing-library/user-event": ^14.1.1 - "@types/jest": ^26.0.13 "@types/node": ^17.0.23 "@types/pump": ^1.1.1 "@types/readable-stream": ^2.3.13 @@ -2116,23 +1683,21 @@ __metadata: eslint: ^7.24.0 eslint-config-prettier: ^8.5.0 eslint-plugin-import: ^2.22.1 - eslint-plugin-jest: ^24.1.5 eslint-plugin-jsdoc: ^36.1.0 eslint-plugin-node: ^11.1.0 eslint-plugin-prettier: ^3.4.1 exorcist: ^2.0.0 fs-extra: ^10.1.0 globalthis: 1.0.1 - jest: ^28.0.0 - jest-environment-jsdom: ^28.1.0 + http-server: ^14.1.1 minify-stream: ^2.1.0 obj-multiplex: ^1.0.0 + playwright: ^1.30.0 prettier: ^2.6.2 prettier-plugin-packagejson: ^2.2.17 pump: ^3.0.0 ses: ^0.18.1 terser: ^5.13.1 - ts-jest: ^28.0.1 ts-node: ^10.7.0 typescript: ~4.4.4 workbox-build: ^6.5.3 @@ -2237,6 +1802,18 @@ __metadata: languageName: node linkType: hard +"@playwright/test@npm:^1.30.0": + version: 1.30.0 + resolution: "@playwright/test@npm:1.30.0" + dependencies: + "@types/node": "*" + playwright-core: 1.30.0 + bin: + playwright: cli.js + checksum: 777432ac9cf3d0341fcd8dd265cb4c0775619d0ef48252b32a7c4d632d8038449756ec34bec873828cadbc08ba634e81176cb193304d34e699472771b7fb4d1e + languageName: node + linkType: hard + "@rollup/plugin-babel@npm:^5.2.0": version: 5.3.1 resolution: "@rollup/plugin-babel@npm:5.3.1" @@ -2295,31 +1872,6 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.23.3": - version: 0.23.5 - resolution: "@sinclair/typebox@npm:0.23.5" - checksum: c96056d35d9cb862aeb635ff8873e2e7633e668dd544e162aee2690a82c970d0b3f90aa2b3501fe374dfa8e792388559a3e3a86712b23ebaef10061add534f47 - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.1 - resolution: "@sinonjs/commons@npm:1.8.1" - dependencies: - type-detect: 4.0.8 - checksum: 8f258c039275d217b654c94731409208a3530c56f64ebc2a1bddaa82045800c7f9dbd09806d6dc451ee12cb79c7a5d509a58ad28179a83336da266ba5c231912 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^9.1.1": - version: 9.1.2 - resolution: "@sinonjs/fake-timers@npm:9.1.2" - dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 - languageName: node - linkType: hard - "@surma/rollup-plugin-off-main-thread@npm:^2.2.3": version: 2.2.3 resolution: "@surma/rollup-plugin-off-main-thread@npm:2.2.3" @@ -2399,47 +1951,6 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14": - version: 7.1.19 - resolution: "@types/babel__core@npm:7.1.19" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: 8c9fa87a1c2224cbec251683a58bebb0d74c497118034166aaa0491a4e2627998a6621fc71f8a60ffd27d9c0c52097defedf7637adc6618d0331c15adb302338 - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.1 - resolution: "@types/babel__generator@npm:7.6.1" - dependencies: - "@babel/types": ^7.0.0 - checksum: d4b1f967fdf3fcc9648bce12ed3de5492abe645c643be36a3ce348051a7da405f2fea504821468a99bfb2089e622faa1fa85688ceb482bb6c8c4af85db31a752 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.0.2 - resolution: "@types/babel__template@npm:7.0.2" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - checksum: ce04f0ab702d7d4c753c09e08db3e61e5fc69375ea70f5c991110511b7286124070ca70e260e8074614f8a339424de7e387c08033eaf0a9f5c81a93e350965a8 - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.0.14 - resolution: "@types/babel__traverse@npm:7.0.14" - dependencies: - "@babel/types": ^7.3.0 - checksum: cd72f7f1d48da4ee02aaa3627259bd189d1addccbec2f05cf670f0a2bf42a1b9c882ead4ae29429d054848f8ebe941c22100c8f5d131e91ae65b1b26667f5491 - languageName: node - linkType: hard - "@types/color-name@npm:^1.1.1": version: 1.1.1 resolution: "@types/color-name@npm:1.1.1" @@ -2473,72 +1984,10 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.5 - resolution: "@types/graceful-fs@npm:4.1.5" - dependencies: - "@types/node": "*" - checksum: d076bb61f45d0fc42dee496ef8b1c2f8742e15d5e47e90e20d0243386e426c04d4efd408a48875ab432f7960b4ce3414db20ed0fbbfc7bcc89d84e574f6e045a - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.3 - resolution: "@types/istanbul-lib-coverage@npm:2.0.3" - checksum: 0650cba4be8f464bee89b9de0b71a5ea3b5cc676ce24e1196b5d6a51542ce9e613ae4549bf19756bb33dbbbb32b47931040266100062bfb197c597d73e341eb0 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" - dependencies: - "@types/istanbul-lib-coverage": "*" - checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/istanbul-reports@npm:3.0.0" - dependencies: - "@types/istanbul-lib-report": "*" - checksum: 286a18cff19c4dac4321b9ea406a3560faf577fb2a4df5abf9d577fa81ba831c9baa7d40d03f1daf7fe613d468546b731c00b844b72fad9834c583311a35bb7b - languageName: node - linkType: hard - -"@types/jest@npm:^26.0.13": - version: 26.0.22 - resolution: "@types/jest@npm:26.0.22" - dependencies: - jest-diff: ^26.0.0 - pretty-format: ^26.0.0 - checksum: 8dee3e6778db4c1d4b89f6ecdaa7264fd24b445e567db3eef0efe271b724523827585547baa24f8bedcc8a431e4dffd63555996599f2556ba637e67bae7578cc - languageName: node - linkType: hard - -"@types/jsdom@npm:^16.2.4": - version: 16.2.14 - resolution: "@types/jsdom@npm:16.2.14" - dependencies: - "@types/node": "*" - "@types/parse5": "*" - "@types/tough-cookie": "*" - checksum: 12bb926fa74ea07c0ba0bfd5bf185ac0fd771b28666a5e8784b9af4bb96bb0c51fc5f494eff7da1d3cd804e4757f640a23c344c1cd5d188f95ab0ab51770d88b - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.3": - version: 7.0.7 - resolution: "@types/json-schema@npm:7.0.7" - checksum: ea3b409235862d28122751158f4054e729e31ad844bd7b8b23868f38c518047b1c0e8e4e7cc293e02c31a2fb8cfc8a4506c2de2a745cf78b218e064fb8898cd4 - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.7": - version: 7.0.11 - resolution: "@types/json-schema@npm:7.0.11" - checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d +"@types/json-schema@npm:^7.0.7": + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d languageName: node linkType: hard @@ -2577,20 +2026,6 @@ __metadata: languageName: node linkType: hard -"@types/parse5@npm:*": - version: 6.0.3 - resolution: "@types/parse5@npm:6.0.3" - checksum: ddb59ee4144af5dfcc508a8dcf32f37879d11e12559561e65788756b95b33e6f03ea027d88e1f5408f9b7bfb656bf630ace31a2169edf44151daaf8dd58df1b7 - languageName: node - linkType: hard - -"@types/prettier@npm:^2.1.5": - version: 2.4.4 - resolution: "@types/prettier@npm:2.4.4" - checksum: 2c2cc57efd49c7d8907415a72f96c84a6dd8696dd3bf8aa4ca3a667427bebf71cbfbc912673624bdfc935d272d1c008c639cf155f6449315990a4dc110f0d216 - languageName: node - linkType: hard - "@types/pump@npm:^1.1.1": version: 1.1.1 resolution: "@types/pump@npm:1.1.1" @@ -2619,20 +2054,6 @@ __metadata: languageName: node linkType: hard -"@types/stack-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "@types/stack-utils@npm:2.0.0" - checksum: b3fbae25b073116977ecb5c67d22f14567b51a7792403b0bf46e5de8f29bde3bd4ec1626afb22065495ca7f1c699c8bd66720050c94b8f8f9bcefbee79d161fd - languageName: node - linkType: hard - -"@types/tough-cookie@npm:*": - version: 4.0.2 - resolution: "@types/tough-cookie@npm:4.0.2" - checksum: e055556ffdaa39ad85ede0af192c93f93f986f4bd9e9426efdc2948e3e2632db3a4a584d4937dbf6d7620527419bc99e6182d3daf2b08685e710f2eda5291905 - languageName: node - linkType: hard - "@types/trusted-types@npm:^2.0.2": version: 2.0.2 resolution: "@types/trusted-types@npm:2.0.2" @@ -2640,31 +2061,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs-parser@npm:*": - version: 15.0.0 - resolution: "@types/yargs-parser@npm:15.0.0" - checksum: 333ab73a1f9c82c64b2fac2441558e58f062fbe7affc35bb53b8e755b62cdd32b1bbc6f4da23773887a2189bf04395e2a8c710df344df4cd578993aeefe98053 - languageName: node - linkType: hard - -"@types/yargs@npm:^15.0.0": - version: 15.0.5 - resolution: "@types/yargs@npm:15.0.5" - dependencies: - "@types/yargs-parser": "*" - checksum: fe56199c6ffc539948bb80b17fa8ffff8d7ed77e8cb21f11b5aea434582b72f03751fe5e681bff0b195724d8ea60faa5102c3051292df560b96bb2741327b2dc - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.10 - resolution: "@types/yargs@npm:17.0.10" - dependencies: - "@types/yargs-parser": "*" - checksum: f0673cbfc08e17239dc58952a88350d6c4db04a027a28a06fbad27d87b670e909f9cd9e66f9c64cebdd5071d1096261e33454a55868395f125297e5c50992ca8 - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^4.33.0": version: 4.33.0 resolution: "@typescript-eslint/eslint-plugin@npm:4.33.0" @@ -2703,22 +2099,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:^4.0.1": - version: 4.21.0 - resolution: "@typescript-eslint/experimental-utils@npm:4.21.0" - dependencies: - "@types/json-schema": ^7.0.3 - "@typescript-eslint/scope-manager": 4.21.0 - "@typescript-eslint/types": 4.21.0 - "@typescript-eslint/typescript-estree": 4.21.0 - eslint-scope: ^5.0.0 - eslint-utils: ^2.0.0 - peerDependencies: - eslint: "*" - checksum: ba364c377a5ae80792b7252ac823bf43a8f1bb81f18e690c1772a7678d7ecf49f5d2fa733eb7fdb1a5a6c9eae799776e1fdbd09070e80801c46f203dd7dfc47a - languageName: node - linkType: hard - "@typescript-eslint/parser@npm:^4.33.0": version: 4.33.0 resolution: "@typescript-eslint/parser@npm:4.33.0" @@ -2736,16 +2116,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:4.21.0": - version: 4.21.0 - resolution: "@typescript-eslint/scope-manager@npm:4.21.0" - dependencies: - "@typescript-eslint/types": 4.21.0 - "@typescript-eslint/visitor-keys": 4.21.0 - checksum: e932c937969fda5216871e4acb0adb155c427a46c4e79b290edaf5800121488965dd2946b2a2067ee24692cb6c63f603ef748c0582e10ba96cebcdf24d6eae2d - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/scope-manager@npm:4.33.0" @@ -2756,13 +2126,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:4.21.0": - version: 4.21.0 - resolution: "@typescript-eslint/types@npm:4.21.0" - checksum: f84a1a7350ef0e88bcaabb25cbb84a46eeb530bb2d2c18d00b01d18ad6f88c09650c93a67cb81144d2b794bdb6a21770740350e87fc9272a4f73623d89c6c05c - languageName: node - linkType: hard - "@typescript-eslint/types@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/types@npm:4.33.0" @@ -2770,24 +2133,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:4.21.0": - version: 4.21.0 - resolution: "@typescript-eslint/typescript-estree@npm:4.21.0" - dependencies: - "@typescript-eslint/types": 4.21.0 - "@typescript-eslint/visitor-keys": 4.21.0 - debug: ^4.1.1 - globby: ^11.0.1 - is-glob: ^4.0.1 - semver: ^7.3.2 - tsutils: ^3.17.1 - peerDependenciesMeta: - typescript: - optional: true - checksum: a0efbab5d020755842826a66bd47484b1c5c36e72edee07f27c1ac2c76670a0b9e2788dbeba3a9bff012b030673d2bfb5176a9108e52850c46ab236958562793 - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" @@ -2806,16 +2151,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:4.21.0": - version: 4.21.0 - resolution: "@typescript-eslint/visitor-keys@npm:4.21.0" - dependencies: - "@typescript-eslint/types": 4.21.0 - eslint-visitor-keys: ^2.0.0 - checksum: ad7ba8c0875084525f4aaedcd2fab387605e8d748fc28bb77ef1c4380341d8b5dae0038be9456c6db450a65d1d09bb19a0a0e1dbe67ad93f9715d6953e8f3fb3 - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" @@ -2838,13 +2173,6 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.5, abab@npm:^2.0.6": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e - languageName: node - linkType: hard - "abbrev@npm:1, abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -2852,16 +2180,6 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" - dependencies: - acorn: ^7.1.1 - acorn-walk: ^7.1.1 - checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 - languageName: node - linkType: hard - "acorn-jsx@npm:^5.3.1": version: 5.3.1 resolution: "acorn-jsx@npm:5.3.1" @@ -2882,7 +2200,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^7.0.0, acorn-walk@npm:^7.1.1": +"acorn-walk@npm:^7.0.0": version: 7.2.0 resolution: "acorn-walk@npm:7.2.0" checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f @@ -2896,7 +2214,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.0.0, acorn@npm:^7.1.1, acorn@npm:^7.4.0": +"acorn@npm:^7.0.0, acorn@npm:^7.4.0": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -2987,15 +2305,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1": - version: 4.3.1 - resolution: "ansi-escapes@npm:4.3.1" - dependencies: - type-fest: ^0.11.0 - checksum: c4962c1791cc4e29efb9976680bad7b23f322ca039e588406680fffc8b6bc6e223721193eb481dab076309d9a7371bbfc4e835efe5fe267e3395ffa047da239d - languageName: node - linkType: hard - "ansi-regex@npm:^2.0.0": version: 2.1.1 resolution: "ansi-regex@npm:2.1.1" @@ -3050,16 +2359,6 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3": - version: 3.1.1 - resolution: "anymatch@npm:3.1.1" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: c951385862bf114807d594bdffccb769bd7219ddc14f24fc135cde075ad2477a97991567b8bb5032d4f279f96897f0c2af6468a350a6c674ac0a5ee3b62a26d6 - languageName: node - linkType: hard - "aproba@npm:^1.0.3": version: 1.2.0 resolution: "aproba@npm:1.2.0" @@ -3193,6 +2492,15 @@ __metadata: languageName: node linkType: hard +"async@npm:^2.6.4": + version: 2.6.4 + resolution: "async@npm:2.6.4" + dependencies: + lodash: ^4.17.14 + checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 + languageName: node + linkType: hard + "async@npm:^3.2.3": version: 3.2.3 resolution: "async@npm:3.2.3" @@ -3235,23 +2543,6 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^28.1.0": - version: 28.1.0 - resolution: "babel-jest@npm:28.1.0" - dependencies: - "@jest/transform": ^28.1.0 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^28.0.2 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: b09195e04d58a763aa06423ffd6f3c4d1be0b40626fbbc65ca7c5668562d23624f36aee0821d9fef7496eb6a6df45c9215025451f1a64d064bfd4b0279cbe4c8 - languageName: node - linkType: hard - "babel-plugin-dynamic-import-node@npm:^2.3.3": version: 2.3.3 resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" @@ -3261,31 +2552,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@istanbuljs/load-nyc-config": ^1.0.0 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-instrument: ^5.0.4 - test-exclude: ^6.0.0 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^28.0.2": - version: 28.0.2 - resolution: "babel-plugin-jest-hoist@npm:28.0.2" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.1.14 - "@types/babel__traverse": ^7.0.6 - checksum: 713c0279fd38bdac5683c4447ebf5bce09fabd64ecb2f3963b8e08b89705195023ff93ce9a9fd01b142e6b51443736ca0a6b21e051844510f319066859c79e1f - languageName: node - linkType: hard - "babel-plugin-polyfill-corejs2@npm:^0.3.0": version: 0.3.1 resolution: "babel-plugin-polyfill-corejs2@npm:0.3.1" @@ -3322,40 +2588,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^28.0.2": - version: 28.0.2 - resolution: "babel-preset-jest@npm:28.0.2" - dependencies: - babel-plugin-jest-hoist: ^28.0.2 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 1e17c5a2fcbfa231838ea9338dabc7e9c4a214410d121c46fcc2d5bb53576152cd99356467d7821a7694e1d5765e27e43bd145c18e035d7c4bf95dc9ed1ad1ba - languageName: node - linkType: hard - "babelify@npm:^10.0.0": version: 10.0.0 resolution: "babelify@npm:10.0.0" @@ -3379,6 +2611,15 @@ __metadata: languageName: node linkType: hard +"basic-auth@npm:^2.0.1": + version: 2.0.1 + resolution: "basic-auth@npm:2.0.1" + dependencies: + safe-buffer: 5.1.2 + checksum: 3419b805d5dfc518f3a05dcf42aa53aa9ce820e50b6df5097f9e186322e1bc733c36722b624802cd37e791035aa73b828ed814d8362333d42d7f5cd04d7a5e48 + languageName: node + linkType: hard + "bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" @@ -3465,13 +2706,6 @@ __metadata: languageName: node linkType: hard -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - "browser-resolve@npm:^2.0.0": version: 2.0.0 resolution: "browser-resolve@npm:2.0.0" @@ -3612,21 +2846,6 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.17.5": - version: 4.20.2 - resolution: "browserslist@npm:4.20.2" - dependencies: - caniuse-lite: ^1.0.30001317 - electron-to-chromium: ^1.4.84 - escalade: ^3.1.1 - node-releases: ^2.0.2 - picocolors: ^1.0.0 - bin: - browserslist: cli.js - checksum: 18e09beeae32e69fea45fc3642240fb63027b1460d90e24da86377177dca3d82c80f8fa44469d95109e3962f08eb2a23e03037bd5e1f1ec38e4866e2a8572435 - languageName: node - linkType: hard - "browserslist@npm:^4.20.2, browserslist@npm:^4.20.3": version: 4.20.3 resolution: "browserslist@npm:4.20.3" @@ -3642,24 +2861,6 @@ __metadata: languageName: node linkType: hard -"bs-logger@npm:0.x": - version: 0.2.6 - resolution: "bs-logger@npm:0.2.6" - dependencies: - fast-json-stable-stringify: 2.x - checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: ^0.4.0 - checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 - languageName: node - linkType: hard - "buffer-from@npm:^1.0.0": version: 1.1.1 resolution: "buffer-from@npm:1.1.1" @@ -3748,27 +2949,6 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelcase@npm:^6.2.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001317": - version: 1.0.30001325 - resolution: "caniuse-lite@npm:1.0.30001325" - checksum: 383a86a513381e3927a30b578ac8616ce388af79dc5dced22e18fffaef17c0bed0e324eadba1b13a6c15b3ec39128fbcfbb097992d3aca206feef5a539c4639f - languageName: node - linkType: hard - "caniuse-lite@npm:^1.0.30001332": version: 1.0.30001338 resolution: "caniuse-lite@npm:1.0.30001338" @@ -3804,7 +2984,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.2, chalk@npm:^4.1.0": +"chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -3814,13 +2994,6 @@ __metadata: languageName: node linkType: hard -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 - languageName: node - linkType: hard - "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -3828,13 +3001,6 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0": - version: 3.3.0 - resolution: "ci-info@npm:3.3.0" - checksum: c3d86fe374938ecda5093b1ba39acb535d8309185ba3f23587747c6a057e63f45419b406d880304dbc0e1d72392c9a33e42fe9a1e299209bc0ded5efaa232b66 - languageName: node - linkType: hard - "cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": version: 1.0.4 resolution: "cipher-base@npm:1.0.4" @@ -3845,13 +3011,6 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.0.0": - version: 1.2.2 - resolution: "cjs-module-lexer@npm:1.2.2" - checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 - languageName: node - linkType: hard - "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -3877,13 +3036,6 @@ __metadata: languageName: node linkType: hard -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 - languageName: node - linkType: hard - "code-point-at@npm:^1.0.0": version: 1.1.0 resolution: "code-point-at@npm:1.1.0" @@ -3891,13 +3043,6 @@ __metadata: languageName: node linkType: hard -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.1 - resolution: "collect-v8-coverage@npm:1.0.1" - checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 - languageName: node - linkType: hard - "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -3951,7 +3096,7 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": +"combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -4049,7 +3194,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.7.0": version: 1.7.0 resolution: "convert-source-map@npm:1.7.0" dependencies: @@ -4082,6 +3227,13 @@ __metadata: languageName: node linkType: hard +"corser@npm:^2.0.1": + version: 2.0.1 + resolution: "corser@npm:2.0.1" + checksum: 9ff6944eda760c8c3118747a636afc3ede53b41e7b9960513a15b88032209a728e630ae4b41e20a941e34da129fe9094d1f5d95123ef64ac2e16cdad8dce9c87 + languageName: node + linkType: hard + "create-ecdh@npm:^4.0.0": version: 4.0.4 resolution: "create-ecdh@npm:4.0.4" @@ -4163,29 +3315,6 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.5.0": - version: 0.5.0 - resolution: "cssom@npm:0.5.0" - checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 - languageName: node - linkType: hard - "dash-ast@npm:^1.0.0": version: 1.0.0 resolution: "dash-ast@npm:1.0.0" @@ -4202,17 +3331,6 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^3.0.1": - version: 3.0.2 - resolution: "data-urls@npm:3.0.2" - dependencies: - abab: ^2.0.6 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^11.0.0 - checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 - languageName: node - linkType: hard - "debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -4234,6 +3352,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + "debug@npm:^4.0.1": version: 4.3.1 resolution: "debug@npm:4.3.1" @@ -4267,20 +3394,6 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.3.1": - version: 10.3.1 - resolution: "decimal.js@npm:10.3.1" - checksum: 0351ac9f05fe050f23227aa6a4573bee2d58fa7378fcf28d969a8c789525032effb488a90320fd3fe86a66e17b4bc507d811b15eada5b7f0e7ec5d2af4c24a59 - languageName: node - linkType: hard - -"dedent@npm:^0.7.0": - version: 0.7.0 - resolution: "dedent@npm:0.7.0" - checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 - languageName: node - linkType: hard - "deep-is@npm:^0.1.3": version: 0.1.3 resolution: "deep-is@npm:0.1.3" @@ -4288,13 +3401,6 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 - languageName: node - linkType: hard - "deepmerge@npm:^4.2.2": version: 4.2.2 resolution: "deepmerge@npm:4.2.2" @@ -4380,7 +3486,7 @@ __metadata: languageName: node linkType: hard -"detect-newline@npm:3.1.0, detect-newline@npm:^3.0.0": +"detect-newline@npm:3.1.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 @@ -4400,20 +3506,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^26.6.2": - version: 26.6.2 - resolution: "diff-sequences@npm:26.6.2" - checksum: 79af871776ef149a7ff3345d6b1bf37fe6e81f68632aa5542787851f6f60fba19b0be22fdd1e06046f56ae7382763ccfe94a982c39ee72bd107aef435ecbc0cf - languageName: node - linkType: hard - -"diff-sequences@npm:^28.0.2": - version: 28.0.2 - resolution: "diff-sequences@npm:28.0.2" - checksum: 482360a8ec93333ea61bc93a800a1bee37c943b94a48fa1597825076adcad24620b44a0d3aa8f3d190584a4156c4b3315028453ca33e1174001fae3cdaa7f8f8 - languageName: node - linkType: hard - "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -4481,15 +3573,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^4.0.0": - version: 4.0.0 - resolution: "domexception@npm:4.0.0" - dependencies: - webidl-conversions: ^7.0.0 - checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 - languageName: node - linkType: hard - "duplexer2@npm:^0.1.2, duplexer2@npm:~0.1.0, duplexer2@npm:~0.1.2": version: 0.1.4 resolution: "duplexer2@npm:0.1.4" @@ -4539,13 +3622,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.84": - version: 1.4.103 - resolution: "electron-to-chromium@npm:1.4.103" - checksum: ae5783cafb1f49e92946416fafc5af45d85e5a6847ce00f4cf4b4d2e54bca1d27b26699ea2cedf5b700c1a0190329e7ec20dc06198daa9f0c343044bc074ae75 - languageName: node - linkType: hard - "elliptic@npm:^6.5.3": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -4561,13 +3637,6 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.10.2": - version: 0.10.2 - resolution: "emittery@npm:0.10.2" - checksum: ee3e21788b043b90885b18ea756ec3105c1cedc50b29709c92b01e239c7e55345d4bb6d3aef4ddbaf528eef448a40b3bb831bad9ee0fc9c25cbf1367ab1ab5ac - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -4616,7 +3685,7 @@ __metadata: languageName: node linkType: hard -"error-ex@npm:^1.2.0, error-ex@npm:^1.3.1": +"error-ex@npm:^1.2.0": version: 1.3.2 resolution: "error-ex@npm:1.3.2" dependencies: @@ -4705,13 +3774,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -4719,25 +3781,6 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": - version: 2.0.0 - resolution: "escodegen@npm:2.0.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - optionator: ^0.8.1 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 5aa6b2966fafe0545e4e77936300cc94ad57cfe4dc4ebff9950492eaba83eef634503f12d7e3cbd644ecc1bab388ad0e92b06fd32222c9281a75d1cf02ec6cef - languageName: node - linkType: hard - "eslint-config-prettier@npm:^8.5.0": version: 8.5.0 resolution: "eslint-config-prettier@npm:8.5.0" @@ -4804,21 +3847,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^24.1.5": - version: 24.7.0 - resolution: "eslint-plugin-jest@npm:24.7.0" - dependencies: - "@typescript-eslint/experimental-utils": ^4.0.1 - peerDependencies: - "@typescript-eslint/eslint-plugin": ">= 4" - eslint: ">=5" - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - checksum: a4056582825ab3359d2e0e3aae50518f6f867d1cfb3240496605247d3ff9c84b4164f1a7e1f7087d5a2eae1343d738ada1ba74c422b13ad20b737601dc47ae08 - languageName: node - linkType: hard - "eslint-plugin-jsdoc@npm:^36.1.0": version: 36.1.0 resolution: "eslint-plugin-jsdoc@npm:36.1.0" @@ -4869,7 +3897,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^5.0.0, eslint-scope@npm:^5.1.1": +"eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -4974,7 +4002,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": +"esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -5030,6 +4058,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^4.0.0": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + "events@npm:^3.0.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -5048,7 +4083,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0, execa@npm:^5.1.1": +"execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -5065,13 +4100,6 @@ __metadata: languageName: node linkType: hard -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 - languageName: node - linkType: hard - "exorcist@npm:^2.0.0": version: 2.0.0 resolution: "exorcist@npm:2.0.0" @@ -5086,19 +4114,6 @@ __metadata: languageName: node linkType: hard -"expect@npm:^28.1.0": - version: 28.1.0 - resolution: "expect@npm:28.1.0" - dependencies: - "@jest/expect-utils": ^28.1.0 - jest-get-type: ^28.0.2 - jest-matcher-utils: ^28.1.0 - jest-message-util: ^28.1.0 - jest-util: ^28.1.0 - checksum: 53bfa2e094a7d5b270ce9a8dafc5432d51bb369287502acd373b66fe01072260bacd1f83bf741d5de49b008406781ab879a0247f5f6fc10d3f32fbe5a3ccfbdf - languageName: node - linkType: hard - "extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -5147,20 +4162,6 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.1.1": - version: 3.2.5 - resolution: "fast-glob@npm:3.2.5" - dependencies: - "@nodelib/fs.stat": ^2.0.2 - "@nodelib/fs.walk": ^1.2.3 - glob-parent: ^5.1.0 - merge2: ^1.3.0 - micromatch: ^4.0.2 - picomatch: ^2.2.1 - checksum: 5d6772c9b63dbb739d60b5630851e1f2cbf9744119e0968eac44c9f8cbc2d3d5cb4f2f0c74715ccb23daa336c87bea42186ed367e6c991afee61cd3d967320eb - languageName: node - linkType: hard - "fast-glob@npm:^3.2.9": version: 3.2.11 resolution: "fast-glob@npm:3.2.11" @@ -5174,14 +4175,14 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb languageName: node linkType: hard -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": +"fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c @@ -5204,15 +4205,6 @@ __metadata: languageName: node linkType: hard -"fb-watchman@npm:^2.0.0": - version: 2.0.1 - resolution: "fb-watchman@npm:2.0.1" - dependencies: - bser: 2.1.1 - checksum: 8510230778ab3a51c27dffb1b76ef2c24fab672a42742d3c0a45c2e9d1e5f20210b1fbca33486088da4a9a3958bde96b5aec0a63aac9894b4e9df65c88b2cbd6 - languageName: node - linkType: hard - "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -5249,16 +4241,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - "flat-cache@npm:^3.0.4": version: 3.0.4 resolution: "flat-cache@npm:3.0.4" @@ -5276,6 +4258,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.0.0": + version: 1.15.2 + resolution: "follow-redirects@npm:1.15.2" + peerDependenciesMeta: + debug: + optional: true + checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 + languageName: node + linkType: hard + "foreach@npm:^2.0.5": version: 2.0.5 resolution: "foreach@npm:2.0.5" @@ -5290,17 +4282,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c - languageName: node - linkType: hard - "form-data@npm:~2.3.2": version: 2.3.3 resolution: "form-data@npm:2.3.3" @@ -5370,7 +4351,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": +"fsevents@npm:~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -5380,7 +4361,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": +"fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" dependencies: @@ -5493,13 +4474,6 @@ __metadata: languageName: node linkType: hard -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 - languageName: node - linkType: hard - "get-stream@npm:^6.0.0": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -5533,7 +4507,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.0, glob-parent@npm:^5.1.2": +"glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -5633,20 +4607,6 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.1": - version: 11.0.3 - resolution: "globby@npm:11.0.3" - dependencies: - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.1.1 - ignore: ^5.1.4 - merge2: ^1.3.0 - slash: ^3.0.0 - checksum: 7d0d3e1bcb618730c8c45edb7c0067f048e1d6a6f561bfaf9c6fb5dd8274ac98b0e1e08109a160a9da1c8f1a9ab692ed36ba719517731f4ed1b29ac203992392 - languageName: node - linkType: hard - "globby@npm:^11.0.3": version: 11.1.0 resolution: "globby@npm:11.1.0" @@ -5668,7 +4628,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -5789,6 +4749,15 @@ __metadata: languageName: node linkType: hard +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 + languageName: node + linkType: hard + "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -5816,13 +4785,6 @@ __metadata: languageName: node linkType: hard -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 - languageName: node - linkType: hard - "htmlescape@npm:^1.1.0": version: 1.1.1 resolution: "htmlescape@npm:1.1.1" @@ -5848,6 +4810,40 @@ __metadata: languageName: node linkType: hard +"http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: ^4.0.0 + follow-redirects: ^1.0.0 + requires-port: ^1.0.0 + checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 + languageName: node + linkType: hard + +"http-server@npm:^14.1.1": + version: 14.1.1 + resolution: "http-server@npm:14.1.1" + dependencies: + basic-auth: ^2.0.1 + chalk: ^4.1.2 + corser: ^2.0.1 + he: ^1.2.0 + html-encoding-sniffer: ^3.0.0 + http-proxy: ^1.18.1 + mime: ^1.6.0 + minimist: ^1.2.6 + opener: ^1.5.1 + portfinder: ^1.0.28 + secure-compare: 3.0.1 + union: ~0.5.0 + url-join: ^4.0.1 + bin: + http-server: bin/http-server + checksum: 4f9674289195eaf9f3e408e093d2080b0d4647559a32c9e7868639c327cab62efd0bb8bc9ded9a625d9ce982cbb03517d4472400af5ecf36eeb5b4fa62d113fe + languageName: node + linkType: hard + "http-signature@npm:~1.2.0": version: 1.2.0 resolution: "http-signature@npm:1.2.0" @@ -5922,7 +4918,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.1.1, ignore@npm:^5.1.4": +"ignore@npm:^5.1.1": version: 5.1.8 resolution: "ignore@npm:5.1.8" checksum: 967abadb61e2cb0e5c5e8c4e1686ab926f91bc1a4680d994b91947d3c65d04c3ae126dcdf67f08e0feeb8ff8407d453e641aeeddcc47a3a3cca359f283cf6121 @@ -5946,18 +4942,6 @@ __metadata: languageName: node linkType: hard -"import-local@npm:^3.0.2": - version: 3.0.2 - resolution: "import-local@npm:3.0.2" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: c74d9f9484c878cda1de3434613c7ff72d5dadcf20e5482542232d7c2575b713ff88701d6675fcf09a3684cb23fb407c8b333b9cbc59438712723d058d8e976c - languageName: node - linkType: hard - "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -6159,13 +5143,6 @@ __metadata: languageName: node linkType: hard -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - "is-generator-function@npm:^1.0.7": version: 1.0.10 resolution: "is-generator-function@npm:1.0.10" @@ -6240,13 +5217,6 @@ __metadata: languageName: node linkType: hard -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - "is-regex@npm:^1.1.2": version: 1.1.2 resolution: "is-regex@npm:1.1.2" @@ -6365,65 +5335,6 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-coverage@npm:3.0.0" - checksum: ea57c2428858cc5d1e04c0e28b362950bbf6415e8ba1235cdd6f4c8dc3c57cb950db8b4e8a4f7e33abc240aa1eb816dba0d7285bdb8b70bda22bb2082492dbfc - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.1.0 - resolution: "istanbul-lib-instrument@npm:5.1.0" - dependencies: - "@babel/core": ^7.12.3 - "@babel/parser": ^7.14.7 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.2.0 - semver: ^6.3.0 - checksum: 8b82e733c69fe9f94d2e21f3e5760c9bedb110329aa75df4bd40df95f1cac3bf38767e43f35b125cc547ceca7376b72ce7d95cc5238b7e9088345c7b589233d3 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-report@npm:3.0.0" - dependencies: - istanbul-lib-coverage: ^3.0.0 - make-dir: ^3.0.0 - supports-color: ^7.1.0 - checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.0 - resolution: "istanbul-lib-source-maps@npm:4.0.0" - dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 292bfb4083e5f8783cdf829a7686b1a377d0c6c2119d4343c8478e948b38146c4827cddc7eee9f57605acd63c291376d67e4a84163d37c5fc78ad0f27f7e2621 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.1.4 - resolution: "istanbul-reports@npm:3.1.4" - dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: 2132983355710c522f6b26808015cab9a0ee8b9f5ae0db0d3edeff40b886dd83cb670fb123cb7b32dbe59473d7c00cdde2ba6136bc0acdb20a865fccea64dfe1 - languageName: node - linkType: hard - "jake@npm:^10.8.5": version: 10.8.5 resolution: "jake@npm:10.8.5" @@ -6438,450 +5349,6 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-changed-files@npm:28.0.2" - dependencies: - execa: ^5.0.0 - throat: ^6.0.1 - checksum: 389d4de4b26de3d2c6e23783ef4e23f827a9a79cfebd2db7c6ff74727198814469ee1e1a89f0e6d28a94e3c632ec45b044c2400a0793b8591e18d07b4b421784 - languageName: node - linkType: hard - -"jest-circus@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-circus@npm:28.1.0" - dependencies: - "@jest/environment": ^28.1.0 - "@jest/expect": ^28.1.0 - "@jest/test-result": ^28.1.0 - "@jest/types": ^28.1.0 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^0.7.0 - is-generator-fn: ^2.0.0 - jest-each: ^28.1.0 - jest-matcher-utils: ^28.1.0 - jest-message-util: ^28.1.0 - jest-runtime: ^28.1.0 - jest-snapshot: ^28.1.0 - jest-util: ^28.1.0 - pretty-format: ^28.1.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - throat: ^6.0.1 - checksum: 29b3f6936671947b81c507132f2afeadf1789cefa1a3849d7ba6a2a32c532016c8df9a647cea6e286050b7d97f1244746175fe9fe768dd38f5bba329aa6c5bc7 - languageName: node - linkType: hard - -"jest-cli@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-cli@npm:28.1.0" - dependencies: - "@jest/core": ^28.1.0 - "@jest/test-result": ^28.1.0 - "@jest/types": ^28.1.0 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - import-local: ^3.0.2 - jest-config: ^28.1.0 - jest-util: ^28.1.0 - jest-validate: ^28.1.0 - prompts: ^2.0.1 - yargs: ^17.3.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 9da98d9a7a0b670f610943be708205988030fd094029f8a64b258a5a5ef18c0b527ec7019e6b95802f2baa2241bb2d6caf31ef4fd530bcf176737e4ede1d9d79 - languageName: node - linkType: hard - -"jest-config@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-config@npm:28.1.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^28.1.0 - "@jest/types": ^28.1.0 - babel-jest: ^28.1.0 - chalk: ^4.0.0 - ci-info: ^3.2.0 - deepmerge: ^4.2.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-circus: ^28.1.0 - jest-environment-node: ^28.1.0 - jest-get-type: ^28.0.2 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.0 - jest-runner: ^28.1.0 - jest-util: ^28.1.0 - jest-validate: ^28.1.0 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^28.1.0 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: 48bfbef4334a187ce6873fd515230e521f500fe2ae57e43ec5747abee95a80583e784cfb99dd1b11664774f33da63758cc63d4a2b2ecf95c8984f2a880cd773e - languageName: node - linkType: hard - -"jest-diff@npm:^26.0.0": - version: 26.6.2 - resolution: "jest-diff@npm:26.6.2" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^26.6.2 - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: d00d297f31e1ac0252127089892432caa7a11c69bde29cf3bb6c7a839c8afdb95cf1fd401f9df16a4422745da2e6a5d94b428b30666a2540c38e1c5699915c2d - languageName: node - linkType: hard - -"jest-diff@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-diff@npm:28.1.0" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^28.0.2 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.0 - checksum: 4d90d9d18ba1d28f5520fa206831e9e8199facf28c6d2b4967c7e4cd1ee78e7e826187babdeb02073f79a1d2c186520d73f77fa29877c6547b0a79392d08a513 - languageName: node - linkType: hard - -"jest-docblock@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-docblock@npm:28.0.2" - dependencies: - detect-newline: ^3.0.0 - checksum: 97aa9707127d5bfc4589485374711bbbb7d9049067fd562132592102f0b841682357eca9b95e35496f78538a2ae400b0b0a8b03f477d6773fc093be9f4716f1f - languageName: node - linkType: hard - -"jest-each@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-each@npm:28.1.0" - dependencies: - "@jest/types": ^28.1.0 - chalk: ^4.0.0 - jest-get-type: ^28.0.2 - jest-util: ^28.1.0 - pretty-format: ^28.1.0 - checksum: a3d650c0c12a4bf4d4497b9de8aceb0dd96a6183dd8016ae1e4a16b11a81e0e29a58e23b0a1f5a6ca6135156041fd6bf2a4557b9d1ecd33dd417d3cb0e8005a0 - languageName: node - linkType: hard - -"jest-environment-jsdom@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-environment-jsdom@npm:28.1.0" - dependencies: - "@jest/environment": ^28.1.0 - "@jest/fake-timers": ^28.1.0 - "@jest/types": ^28.1.0 - "@types/jsdom": ^16.2.4 - "@types/node": "*" - jest-mock: ^28.1.0 - jest-util: ^28.1.0 - jsdom: ^19.0.0 - checksum: b1e3354a4a6fe1486cc6cd597460e6851c4f575770582e6ade7cca852ce9af9c421cb42f071863a37a0ad81e5d57443d99b1d8b2f39eac5acde8134a29e759d2 - languageName: node - linkType: hard - -"jest-environment-node@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-environment-node@npm:28.1.0" - dependencies: - "@jest/environment": ^28.1.0 - "@jest/fake-timers": ^28.1.0 - "@jest/types": ^28.1.0 - "@types/node": "*" - jest-mock: ^28.1.0 - jest-util: ^28.1.0 - checksum: e65e83962b6d6d8879611e230d878cd2690acd20d1295071f67de7b02dfc4194438961be2a73acf005fc022fb2f73f9dafd50c23088d4e6b70156f8998b19beb - languageName: node - linkType: hard - -"jest-get-type@npm:^26.3.0": - version: 26.3.0 - resolution: "jest-get-type@npm:26.3.0" - checksum: 1cc6465ae4f5e880be22ba52fd270fa64c21994915f81b41f8f7553a7957dd8e077cc8d03035de9412e2d739f8bad6a032ebb5dab5805692a5fb9e20dd4ea666 - languageName: node - linkType: hard - -"jest-get-type@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-get-type@npm:28.0.2" - checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd - languageName: node - linkType: hard - -"jest-haste-map@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-haste-map@npm:28.1.0" - dependencies: - "@jest/types": ^28.1.0 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.0 - jest-worker: ^28.1.0 - micromatch: ^4.0.4 - walker: ^1.0.7 - dependenciesMeta: - fsevents: - optional: true - checksum: 128c2d1aa39610febfc9fe66bbc40bb847d89da3e1646ed1bbe63e90bd4c930d1798d20aef8d928fda8e5b0570f05f1cbb263030ebe776c01bb86dd5174434da - languageName: node - linkType: hard - -"jest-leak-detector@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-leak-detector@npm:28.1.0" - dependencies: - jest-get-type: ^28.0.2 - pretty-format: ^28.1.0 - checksum: 911eec6b96d389c1e7741c8df85e030a9618e38105c7e71f6f2c1284a02d033fec4e6a8916385f17fd5ed0ffffb8491ac887f5b3de11d0265d8415598e9c0ae6 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-matcher-utils@npm:28.1.0" - dependencies: - chalk: ^4.0.0 - jest-diff: ^28.1.0 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.0 - checksum: 60e3e83fff67402972b101135d44443981d6519008e435b567f197220f330ec38356f905b6872348d082f0a2a4089612f63d2c72f55ee3c718de6b0ef03f4d6d - languageName: node - linkType: hard - -"jest-message-util@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-message-util@npm:28.1.0" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^28.1.0 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^28.1.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: a224f9dbb53b5ad857918938f94c6e5d9c64ccdd42e0780b3b485d66bd93c82cff7dd91fbe274273efb69533d79808f9c98622b23d70ec027e8619a20e283773 - languageName: node - linkType: hard - -"jest-mock@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-mock@npm:28.1.0" - dependencies: - "@jest/types": ^28.1.0 - "@types/node": "*" - checksum: 013428db82f418059314588e5d02a2a8f6697940ffeb1b1a23f61e9b94b1dca3ea0061d91f284e217bf0ce0e5251ff8f2f182a393cecd1ec6788d766cc18ded4 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.2 - resolution: "jest-pnp-resolver@npm:1.2.2" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: bd85dcc0e76e0eb0c3d56382ec140f08d25ff4068cda9d0e360bb78fb176cb726d0beab82dc0e8694cafd09f55fee7622b8bcb240afa5fad301f4ed3eebb4f47 - languageName: node - linkType: hard - -"jest-regex-util@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-regex-util@npm:28.0.2" - checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-resolve-dependencies@npm:28.1.0" - dependencies: - jest-regex-util: ^28.0.2 - jest-snapshot: ^28.1.0 - checksum: 0720ab19285ee64b7dad65c2feff08323660e9ff9c09380011a45d4af58dcf6a6710f10bbe80986ffe2452e11d09be0974d42163c31e832be4fab6c348b4dea5 - languageName: node - linkType: hard - -"jest-resolve@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-resolve@npm:28.1.0" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.0 - jest-pnp-resolver: ^1.2.2 - jest-util: ^28.1.0 - jest-validate: ^28.1.0 - resolve: ^1.20.0 - resolve.exports: ^1.1.0 - slash: ^3.0.0 - checksum: 1a37e3a8a1b49a148c4611f85cb27dbb6b0b2d1b76b8a52ddfeb340a74f6d2a7851ba8ba2374948a21024d56592f32b48e3142e9fd813a0fcea4d1db3602ec77 - languageName: node - linkType: hard - -"jest-runner@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-runner@npm:28.1.0" - dependencies: - "@jest/console": ^28.1.0 - "@jest/environment": ^28.1.0 - "@jest/test-result": ^28.1.0 - "@jest/transform": ^28.1.0 - "@jest/types": ^28.1.0 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.10.2 - graceful-fs: ^4.2.9 - jest-docblock: ^28.0.2 - jest-environment-node: ^28.1.0 - jest-haste-map: ^28.1.0 - jest-leak-detector: ^28.1.0 - jest-message-util: ^28.1.0 - jest-resolve: ^28.1.0 - jest-runtime: ^28.1.0 - jest-util: ^28.1.0 - jest-watcher: ^28.1.0 - jest-worker: ^28.1.0 - source-map-support: 0.5.13 - throat: ^6.0.1 - checksum: 79f622a06e7b4f065b6ad14633ddb3ebabdacc479d4059a17bad4470570f941623957701cf08a3efe49c0cf04f78830fc07270ad8ad759b623a9de1bcb93c45f - languageName: node - linkType: hard - -"jest-runtime@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-runtime@npm:28.1.0" - dependencies: - "@jest/environment": ^28.1.0 - "@jest/fake-timers": ^28.1.0 - "@jest/globals": ^28.1.0 - "@jest/source-map": ^28.0.2 - "@jest/test-result": ^28.1.0 - "@jest/transform": ^28.1.0 - "@jest/types": ^28.1.0 - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.0 - jest-message-util: ^28.1.0 - jest-mock: ^28.1.0 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.0 - jest-snapshot: ^28.1.0 - jest-util: ^28.1.0 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: e3a01bbbf6ffb28174303e2d2c043fb766b178a6354186dcbe8e8cc8e706162ecfb2b6f49d71ec7b2459dc6701979ffeee003fdf153492b9e74a846cf11af5d8 - languageName: node - linkType: hard - -"jest-snapshot@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-snapshot@npm:28.1.0" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^28.1.0 - "@jest/transform": ^28.1.0 - "@jest/types": ^28.1.0 - "@types/babel__traverse": ^7.0.6 - "@types/prettier": ^2.1.5 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^28.1.0 - graceful-fs: ^4.2.9 - jest-diff: ^28.1.0 - jest-get-type: ^28.0.2 - jest-haste-map: ^28.1.0 - jest-matcher-utils: ^28.1.0 - jest-message-util: ^28.1.0 - jest-util: ^28.1.0 - natural-compare: ^1.4.0 - pretty-format: ^28.1.0 - semver: ^7.3.5 - checksum: 73695484cf4e2af9d0dbb8bc1e851f6d6217cc740aa93b521012c253fbbd9dc1ce11b147ac3e18cac8358b4b64fe36a1b8a6d1a3083c9d275dd937281faad818 - languageName: node - linkType: hard - -"jest-util@npm:^28.0.0, jest-util@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-util@npm:28.1.0" - dependencies: - "@jest/types": ^28.1.0 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 14c2ee1c24c6efa2d7adfe81ece8b9bbda78fa871f40bed80db72726166e96f7fb22bf1d9fb1689fb433b9bcd748027eb1ee5f0851a12f1aa1c49ee0bd4d7508 - languageName: node - linkType: hard - -"jest-validate@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-validate@npm:28.1.0" - dependencies: - "@jest/types": ^28.1.0 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^28.0.2 - leven: ^3.1.0 - pretty-format: ^28.1.0 - checksum: 79f9fe39f15bb47b15da39e19a1b2ba948830b6da53ccf359857cdeaca62cd87721585b0137576e7d1d2b2d7e5b79fdfb57d5b80e6ce3c8a93865d6032b20e4a - languageName: node - linkType: hard - -"jest-watcher@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-watcher@npm:28.1.0" - dependencies: - "@jest/test-result": ^28.1.0 - "@jest/types": ^28.1.0 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.10.2 - jest-util: ^28.1.0 - string-length: ^4.0.1 - checksum: 4a1ae2e1adf933cfa963b0f82cb4fecd863f1b980b7db05dfd856e83637b9380a4476a73dcbe50a70cb49d028999fae0d1bb60d75b410a682d8b3f344a073dda - languageName: node - linkType: hard - "jest-worker@npm:^26.2.1": version: 26.6.2 resolution: "jest-worker@npm:26.6.2" @@ -6893,35 +5360,6 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^28.1.0": - version: 28.1.0 - resolution: "jest-worker@npm:28.1.0" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 44b6cfb03752543e2462f143ca5c9642206f20813068ef0461e793bb8feda85f643ee906d96a0a57728e1a2fb5b89386fd34e44289568b1cee5815c115e7ee02 - languageName: node - linkType: hard - -"jest@npm:^28.0.0": - version: 28.1.0 - resolution: "jest@npm:28.1.0" - dependencies: - "@jest/core": ^28.1.0 - import-local: ^3.0.2 - jest-cli: ^28.1.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: f025164c408cf5ddb6e74dac1e8cbaf94c1c31dd1c67aba4ceee5989b2d8a77886db8ed1fb88853b45cf194b14cd802b454bbbe6b278a1e2140250297dc100d3 - languageName: node - linkType: hard - "js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -6955,46 +5393,6 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^19.0.0": - version: 19.0.0 - resolution: "jsdom@npm:19.0.0" - dependencies: - abab: ^2.0.5 - acorn: ^8.5.0 - acorn-globals: ^6.0.0 - cssom: ^0.5.0 - cssstyle: ^2.3.0 - data-urls: ^3.0.1 - decimal.js: ^10.3.1 - domexception: ^4.0.0 - escodegen: ^2.0.0 - form-data: ^4.0.0 - html-encoding-sniffer: ^3.0.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.0 - parse5: 6.0.1 - saxes: ^5.0.1 - symbol-tree: ^3.2.4 - tough-cookie: ^4.0.0 - w3c-hr-time: ^1.0.2 - w3c-xmlserializer: ^3.0.0 - webidl-conversions: ^7.0.0 - whatwg-encoding: ^2.0.0 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^10.0.0 - ws: ^8.2.3 - xml-name-validator: ^4.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 94b693bf4a394097dd96705550bb7b6cd3c8db3c5414e6e9c92a0995ed8b61067597da2f37fca6bed4b5a2f1ef33960ee759522156dccd0b306311988ea87cfb - languageName: node - linkType: hard - "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -7062,15 +5460,6 @@ __metadata: languageName: node linkType: hard -"json5@npm:2.x, json5@npm:^2.1.2, json5@npm:^2.2.0, json5@npm:^2.2.1": - version: 2.2.1 - resolution: "json5@npm:2.2.1" - bin: - json5: lib/cli.js - checksum: 74b8a23b102a6f2bf2d224797ae553a75488b5adbaee9c9b6e5ab8b510a2fc6e38f876d4c77dea672d4014a44b2399e15f2051ac2b37b87f74c0c7602003543b - languageName: node - linkType: hard - "json5@npm:^1.0.1": version: 1.0.2 resolution: "json5@npm:1.0.2" @@ -7082,6 +5471,15 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.0, json5@npm:^2.2.1": + version: 2.2.1 + resolution: "json5@npm:2.2.1" + bin: + json5: lib/cli.js + checksum: 74b8a23b102a6f2bf2d224797ae553a75488b5adbaee9c9b6e5ab8b510a2fc6e38f876d4c77dea672d4014a44b2399e15f2051ac2b37b87f74c0c7602003543b + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -7121,13 +5519,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 - languageName: node - linkType: hard - "labeled-stream-splicer@npm:^2.0.0": version: 2.0.2 resolution: "labeled-stream-splicer@npm:2.0.2" @@ -7155,23 +5546,6 @@ __metadata: languageName: node linkType: hard -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.1.6 - resolution: "lines-and-columns@npm:1.1.6" - checksum: 198a5436b1fa5cf703bae719c01c686b076f0ad7e1aafd95a58d626cabff302dc0414822126f2f80b58a8c3d66cda8a7b6da064f27130f87e1d3506d6dfd0d68 - languageName: node - linkType: hard - "load-json-file@npm:^2.0.0": version: 2.0.0 resolution: "load-json-file@npm:2.0.0" @@ -7194,15 +5568,6 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - "lodash.debounce@npm:^4.0.8": version: 4.0.8 resolution: "lodash.debounce@npm:4.0.8" @@ -7210,13 +5575,6 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:4.x": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 - languageName: node - linkType: hard - "lodash.memoize@npm:~3.0.3": version: 3.0.4 resolution: "lodash.memoize@npm:3.0.4" @@ -7245,7 +5603,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.14, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -7286,16 +5644,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - -"make-error@npm:1.x, make-error@npm:^1.1.1": +"make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -7326,15 +5675,6 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.x": - version: 1.0.11 - resolution: "makeerror@npm:1.0.11" - dependencies: - tmpl: 1.0.x - checksum: 9a62ec2d9648c5329fdc4bc7d779a7305f32b1e55422a4f14244bc890bb43287fe013eb8d965e92a0cf4c443f3e59265b1fc3125eaedb0c2361e28b1a8de565d - languageName: node - linkType: hard - "md5.js@npm:^1.3.4": version: 1.3.5 resolution: "md5.js@npm:1.3.5" @@ -7360,16 +5700,6 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2": - version: 4.0.2 - resolution: "micromatch@npm:4.0.2" - dependencies: - braces: ^3.0.1 - picomatch: ^2.0.5 - checksum: 39590a96d9ffad21f0afac044d0a5af4f33715a16fdd82c53a01c8f5ff6f70832a31b53e52972dac3deff8bf9f0bed0207d1c34e54ab3306a5e4c4efd5f7d249 - languageName: node - linkType: hard - "micromatch@npm:^4.0.4": version: 4.0.4 resolution: "micromatch@npm:4.0.4" @@ -7408,6 +5738,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -7468,6 +5807,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -7561,6 +5907,17 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^0.5.6": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -7680,20 +6037,6 @@ __metadata: languageName: node linkType: hard -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e - languageName: node - linkType: hard - -"node-releases@npm:^2.0.2": - version: 2.0.2 - resolution: "node-releases@npm:2.0.2" - checksum: da858bf86b4d512842379749f5a5e4196ddab05ba18ffcf29f05bf460beceaca927f070f4430bb5046efec18941ddbc85e4c5fdbb83afc28a38dd6069a2f255e - languageName: node - linkType: hard - "node-releases@npm:^2.0.3": version: 2.0.4 resolution: "node-releases@npm:2.0.4" @@ -7735,13 +6078,6 @@ __metadata: languageName: node linkType: hard -"normalize-path@npm:^3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 - languageName: node - linkType: hard - "npm-normalize-package-bin@npm:^1.0.1": version: 1.0.1 resolution: "npm-normalize-package-bin@npm:1.0.1" @@ -7796,13 +6132,6 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.0": - version: 2.2.0 - resolution: "nwsapi@npm:2.2.0" - checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 - languageName: node - linkType: hard - "oauth-sign@npm:~0.9.0": version: 0.9.0 resolution: "oauth-sign@npm:0.9.0" @@ -7891,17 +6220,12 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: ~0.1.3 - fast-levenshtein: ~2.0.6 - levn: ~0.3.0 - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - word-wrap: ~1.2.3 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 +"opener@npm:^1.5.1": + version: 1.5.2 + resolution: "opener@npm:1.5.2" + bin: + opener: bin/opener-bin.js + checksum: 33b620c0d53d5b883f2abc6687dd1c5fd394d270dbe33a6356f2d71e0a2ec85b100d5bac94694198ccf5c30d592da863b2292c5539009c715a9c80c697b4f6cc languageName: node linkType: hard @@ -7935,15 +6259,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - "p-locate@npm:^2.0.0": version: 2.0.0 resolution: "p-locate@npm:2.0.0" @@ -7953,15 +6268,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -7978,13 +6284,6 @@ __metadata: languageName: node linkType: hard -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - "pako@npm:~1.0.5": version: 1.0.11 resolution: "pako@npm:1.0.11" @@ -8025,29 +6324,10 @@ __metadata: "parse-json@npm:^2.2.0": version: 2.2.0 - resolution: "parse-json@npm:2.2.0" - dependencies: - error-ex: ^1.2.0 - checksum: dda78a63e57a47b713a038630868538f718a7ca0cd172a36887b0392ccf544ed0374902eb28f8bf3409e8b71d62b79d17062f8543afccf2745f9b0b2d2bb80ca - languageName: node - linkType: hard - -"parse-json@npm:^5.2.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": ^7.0.0 - error-ex: ^1.3.1 - json-parse-even-better-errors: ^2.3.0 - lines-and-columns: ^1.1.6 - checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 - languageName: node - linkType: hard - -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd + resolution: "parse-json@npm:2.2.0" + dependencies: + error-ex: ^1.2.0 + checksum: dda78a63e57a47b713a038630868538f718a7ca0cd172a36887b0392ccf544ed0374902eb28f8bf3409e8b71d62b79d17062f8543afccf2745f9b0b2d2bb80ca languageName: node linkType: hard @@ -8065,13 +6345,6 @@ __metadata: languageName: node linkType: hard -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - "path-is-absolute@npm:^1.0.0, path-is-absolute@npm:^1.0.1": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -8143,13 +6416,6 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.0.5, picomatch@npm:^2.2.1": - version: 2.2.2 - resolution: "picomatch@npm:2.2.2" - checksum: 897a589f94665b4fd93e075fa94893936afe3f7bbef44250f0e878a8d9d001972a79589cac2856c24f6f5aa3b0abc9c8ba00c98fae4dc22bc0117188864d4181 - languageName: node - linkType: hard - "picomatch@npm:^2.2.2": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -8171,13 +6437,6 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.4": - version: 4.0.5 - resolution: "pirates@npm:4.0.5" - checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 - languageName: node - linkType: hard - "pkg-dir@npm:^2.0.0": version: 2.0.0 resolution: "pkg-dir@npm:2.0.0" @@ -8187,12 +6446,34 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" +"playwright-core@npm:1.30.0": + version: 1.30.0 + resolution: "playwright-core@npm:1.30.0" + bin: + playwright: cli.js + checksum: 4c5693f27245a1168f94708ecd8e1eb0d200de435b25cc07cfa25b97a094633818954dc00baf24e0ff551825f672050b83d1309362c1f97213fe8ebd2a147ed9 + languageName: node + linkType: hard + +"playwright@npm:^1.30.0": + version: 1.30.0 + resolution: "playwright@npm:1.30.0" + dependencies: + playwright-core: 1.30.0 + bin: + playwright: cli.js + checksum: 1987446ed07e25c0c6dedce8314209b49536eb4c7fa82e57e7fea9bd8128bacd08e49f9e89af30a647839bf2603b8c8321f50e23e334a11c1c29eedb838a81a3 + languageName: node + linkType: hard + +"portfinder@npm:^1.0.28": + version: 1.0.32 + resolution: "portfinder@npm:1.0.32" dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + async: ^2.6.4 + debug: ^3.2.7 + mkdirp: ^0.5.6 + checksum: 116b4aed1b9e16f6d5503823d966d9ffd41b1c2339e27f54c06cd2f3015a9d8ef53e2a53b57bc0a25af0885977b692007353aa28f9a0a98a44335cb50487240d languageName: node linkType: hard @@ -8203,13 +6484,6 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - "prettier-linter-helpers@npm:^1.0.0": version: 1.0.0 resolution: "prettier-linter-helpers@npm:1.0.0" @@ -8246,18 +6520,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^26.0.0, pretty-format@npm:^26.6.2": - version: 26.6.2 - resolution: "pretty-format@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - ansi-regex: ^5.0.0 - ansi-styles: ^4.0.0 - react-is: ^17.0.1 - checksum: e3b808404d7e1519f0df1aa1f25cee0054ab475775c6b2b8c5568ff23194a92d54bf93274139b6f584ca70fd773be4eaa754b0e03f12bb0a8d1426b07f079976 - languageName: node - linkType: hard - "pretty-format@npm:^27.0.2": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" @@ -8269,18 +6531,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^28.1.0": - version: 28.1.0 - resolution: "pretty-format@npm:28.1.0" - dependencies: - "@jest/schemas": ^28.0.2 - ansi-regex: ^5.0.1 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: c1018099f8f800693449df96c05c243d94e01f7429b6617e1064a1a69b4d715637fc3c579061fbc31548b87d92af74a7933c6eb3856da6f30b29c0ff67004ce0 - languageName: node - linkType: hard - "process-nextick-args@npm:~1.0.6": version: 1.0.7 resolution: "process-nextick-args@npm:1.0.7" @@ -8326,17 +6576,7 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1": - version: 2.3.2 - resolution: "prompts@npm:2.3.2" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.4 - checksum: b1f9e92b59e3be30bcca757dd8458205bc0ff2923cc98b533c09971d4aa2507437d102f73300931a2c50fb4b21f3160a4d4b4683d07c1c1a85d730b463127e18 - languageName: node - linkType: hard - -"psl@npm:^1.1.28, psl@npm:^1.1.33": +"psl@npm:^1.1.28": version: 1.8.0 resolution: "psl@npm:1.8.0" checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 @@ -8388,6 +6628,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.4.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: ^1.0.4 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 + languageName: node + linkType: hard + "qs@npm:~6.5.2": version: 6.5.3 resolution: "qs@npm:6.5.3" @@ -8442,13 +6691,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0": - version: 18.1.0 - resolution: "react-is@npm:18.1.0" - checksum: d206a0fe6790851bff168727bfb896de02c5591695afb0c441163e8630136a3e13ee1a7ddd59fdccddcc93968b4721ae112c10f790b194b03b35a3dc13a355ef - languageName: node - linkType: hard - "read-cmd-shim@npm:^4.0.0": version: 4.0.0 resolution: "read-cmd-shim@npm:4.0.0" @@ -8668,12 +6910,10 @@ __metadata: languageName: node linkType: hard -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff languageName: node linkType: hard @@ -8684,20 +6924,6 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve.exports@npm:^1.1.0": - version: 1.1.0 - resolution: "resolve.exports@npm:1.1.0" - checksum: 52865af8edb088f6c7759a328584a5de6b226754f004b742523adcfe398cfbc4559515104bc2ae87b8e78b1e4de46c9baec400b3fb1f7d517b86d2d48a098a2d - languageName: node - linkType: hard - "resolve@npm:^1.1.4, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.4.0": version: 1.22.0 resolution: "resolve@npm:1.22.0" @@ -8776,7 +7002,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -8841,7 +7067,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": +"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c @@ -8855,12 +7081,10 @@ __metadata: languageName: node linkType: hard -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" - dependencies: - xmlchars: ^2.2.0 - checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 +"secure-compare@npm:3.0.1": + version: 3.0.1 + resolution: "secure-compare@npm:3.0.1" + checksum: 0a8d8d3e54d5772d2cf1c02325f01fc7366d0bd33f964a08a84fe3ee5f34d46435a6ae729c1d239c750e160ef9b58c764d3efb945a1d07faf47978a8e4161594 languageName: node linkType: hard @@ -8882,7 +7106,16 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5": +"semver@npm:^6.1.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + languageName: node + linkType: hard + +"semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5": version: 7.3.5 resolution: "semver@npm:7.3.5" dependencies: @@ -8893,15 +7126,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" - bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 - languageName: node - linkType: hard - "semver@npm:^7.3.8": version: 7.3.8 resolution: "semver@npm:7.3.8" @@ -9012,13 +7236,6 @@ __metadata: languageName: node linkType: hard -"sisteransi@npm:^1.0.4": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -9088,16 +7305,6 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 - languageName: node - linkType: hard - "source-map-support@npm:~0.5.12, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" @@ -9115,7 +7322,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map@npm:^0.6.0, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 @@ -9209,15 +7416,6 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.3": - version: 2.0.5 - resolution: "stack-utils@npm:2.0.5" - dependencies: - escape-string-regexp: ^2.0.0 - checksum: 76b69da0f5b48a34a0f93c98ee2a96544d2c4ca2557f7eef5ddb961d3bdc33870b46f498a84a7c4f4ffb781df639840e7ebf6639164ed4da5e1aeb659615b9c7 - languageName: node - linkType: hard - "stream-browserify@npm:^3.0.0": version: 3.0.0 resolution: "stream-browserify@npm:3.0.0" @@ -9267,16 +7465,6 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^4.0.1": - version: 4.0.1 - resolution: "string-length@npm:4.0.1" - dependencies: - char-regex: ^1.0.2 - strip-ansi: ^6.0.0 - checksum: 7bd3191668ddafa6f574a8b17a1bd1b085737d64ceefa51f72cdd19c45a730422cd70d984eee7584d6e5b5c84b6318633c6d6a720a4bfd7c58769985fa77573e - languageName: node - linkType: hard - "string-width@npm:^1.0.1": version: 1.0.2 resolution: "string-width@npm:1.0.2" @@ -9459,13 +7647,6 @@ __metadata: languageName: node linkType: hard -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - "strip-comments@npm:^2.0.1": version: 2.0.1 resolution: "strip-comments@npm:2.0.1" @@ -9521,25 +7702,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - -"supports-hyperlinks@npm:^2.0.0": - version: 2.1.0 - resolution: "supports-hyperlinks@npm:2.1.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: e4f430c870a258c9854b8bd7f166a9c1e76e3b851da84d4399d6a8f1d4a485e4ec36c16455dde80acf06c86e7c0a6df76ed22b6a4644a6ae3eced8616b3f21b5 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -9547,13 +7709,6 @@ __metadata: languageName: node linkType: hard -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d - languageName: node - linkType: hard - "syntax-error@npm:^1.1.1": version: 1.4.0 resolution: "syntax-error@npm:1.4.0" @@ -9623,16 +7778,6 @@ __metadata: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - "terser@npm:^4.7.0": version: 4.8.0 resolution: "terser@npm:4.8.0" @@ -9660,17 +7805,6 @@ __metadata: languageName: node linkType: hard -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": ^0.1.2 - glob: ^7.1.4 - minimatch: ^3.0.4 - checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 - languageName: node - linkType: hard - "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -9678,13 +7812,6 @@ __metadata: languageName: node linkType: hard -"throat@npm:^6.0.1": - version: 6.0.1 - resolution: "throat@npm:6.0.1" - checksum: 782d4171ee4e3cf947483ed2ff1af3e17cc4354c693b9d339284f61f99fbc401d171e0b0d2db3295bb7d447630333e9319c174ebd7ef315c6fb791db9675369c - languageName: node - linkType: hard - "through2@npm:^2.0.0": version: 2.0.5 resolution: "through2@npm:2.0.5" @@ -9718,13 +7845,6 @@ __metadata: languageName: node linkType: hard -"tmpl@npm:1.0.x": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 - languageName: node - linkType: hard - "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -9741,17 +7861,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0": - version: 4.0.0 - resolution: "tough-cookie@npm:4.0.0" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.1.2 - checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 - languageName: node - linkType: hard - "tough-cookie@npm:~2.5.0": version: 2.5.0 resolution: "tough-cookie@npm:2.5.0" @@ -9771,48 +7880,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^3.0.0": - version: 3.0.0 - resolution: "tr46@npm:3.0.0" - dependencies: - punycode: ^2.1.1 - checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 - languageName: node - linkType: hard - -"ts-jest@npm:^28.0.1": - version: 28.0.1 - resolution: "ts-jest@npm:28.0.1" - dependencies: - bs-logger: 0.x - fast-json-stable-stringify: 2.x - jest-util: ^28.0.0 - json5: 2.x - lodash.memoize: 4.x - make-error: 1.x - semver: 7.x - yargs-parser: ^20.x - peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@types/jest": ^27.0.0 - babel-jest: ^28.0.0 - jest: ^28.0.0 - typescript: ">=4.3" - peerDependenciesMeta: - "@babel/core": - optional: true - "@types/jest": - optional: true - babel-jest: - optional: true - esbuild: - optional: true - bin: - ts-jest: cli.js - checksum: d6827b5eb9838b63c694a49a6d85020f62e6eed1e8aae935fdb3fabdccc0ed7207b41c812c0de793a8e5ba1b7818cddfc4d51dc29ed6054f3a08cafbedbef26e - languageName: node - linkType: hard - "ts-node@npm:^10.7.0": version: 10.7.0 resolution: "ts-node@npm:10.7.0" @@ -9870,7 +7937,7 @@ __metadata: languageName: node linkType: hard -"tsutils@npm:^3.17.1, tsutils@npm:^3.21.0": +"tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" dependencies: @@ -9913,29 +7980,6 @@ __metadata: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - -"type-detect@npm:4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 - languageName: node - linkType: hard - -"type-fest@npm:^0.11.0": - version: 0.11.0 - resolution: "type-fest@npm:0.11.0" - checksum: 8e7589e1eb5ced6c8e1d3051553b59b9f525c41e58baa898229915781c7bf55db8cb2f74e56d8031f6af5af2eecc7cb8da9ca3af7e5b80b49d8ca5a81891f3f9 - languageName: node - linkType: hard - "type-fest@npm:^0.16.0": version: 0.16.0 resolution: "type-fest@npm:0.16.0" @@ -10056,6 +8100,15 @@ __metadata: languageName: node linkType: hard +"union@npm:~0.5.0": + version: 0.5.0 + resolution: "union@npm:0.5.0" + dependencies: + qs: ^6.4.0 + checksum: 021530d02363fb7470ce45d4cb06ae28a97d5a245666e6d0fca6bab0673bea8c7988e7d2f8046acfbab120908cedcb099ca216b357d4483bcd96518b39101be0 + languageName: node + linkType: hard + "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -10083,13 +8136,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.2": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff - languageName: node - linkType: hard - "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -10113,6 +8159,13 @@ __metadata: languageName: node linkType: hard +"url-join@npm:^4.0.1": + version: 4.0.1 + resolution: "url-join@npm:4.0.1" + checksum: f74e868bf25dbc8be6a8d7237d4c36bb5b6c62c72e594d5ab1347fe91d6af7ccd9eb5d621e30152e4da45c2e9a26bec21390e911ab54a62d4d82e76028374ee5 + languageName: node + linkType: hard + "url@npm:~0.11.0": version: 0.11.0 resolution: "url@npm:0.11.0" @@ -10176,17 +8229,6 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.0": - version: 9.0.0 - resolution: "v8-to-istanbul@npm:9.0.0" - dependencies: - "@jridgewell/trace-mapping": ^0.3.7 - "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^1.6.0 - checksum: d8ed2c39ba657dfd851a3c7b3f2b87e5b96c9face806ecfe5b627abe53b0c86f264f51425c591e451405b739e3f8a6728da59670f081790990710e813d8d3440 - languageName: node - linkType: hard - "validate-npm-package-license@npm:^3.0.1": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -10215,33 +8257,6 @@ __metadata: languageName: node linkType: hard -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: ^1.0.0 - checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^3.0.0": - version: 3.0.0 - resolution: "w3c-xmlserializer@npm:3.0.0" - dependencies: - xml-name-validator: ^4.0.0 - checksum: 0af8589942eeb11c9fe29eb31a1a09f3d5dd136aea53a9848dfbabff79ac0dd26fe13eb54d330d5555fe27bb50b28dca0715e09f9cc2bfa7670ccc8b7f919ca2 - languageName: node - linkType: hard - -"walker@npm:^1.0.7": - version: 1.0.7 - resolution: "walker@npm:1.0.7" - dependencies: - makeerror: 1.0.x - checksum: 4038fcf92f6ab0288267ad05008aec9e089a759f1bd32e1ea45cc2eb498eb12095ec43cf8ca2bf23a465f4580a0d33b25b89f450ba521dd27083cbc695ee6bf5 - languageName: node - linkType: hard - "webidl-conversions@npm:^4.0.2": version: 4.0.2 resolution: "webidl-conversions@npm:4.0.2" @@ -10249,13 +8264,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^7.0.0": - version: 7.0.0 - resolution: "webidl-conversions@npm:7.0.0" - checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b - languageName: node - linkType: hard - "whatwg-encoding@npm:^2.0.0": version: 2.0.0 resolution: "whatwg-encoding@npm:2.0.0" @@ -10265,33 +8273,6 @@ __metadata: languageName: node linkType: hard -"whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "whatwg-mimetype@npm:3.0.0" - checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 - languageName: node - linkType: hard - -"whatwg-url@npm:^10.0.0": - version: 10.0.0 - resolution: "whatwg-url@npm:10.0.0" - dependencies: - tr46: ^3.0.0 - webidl-conversions: ^7.0.0 - checksum: a21ec309c5cc743fe9414509408bedf65eaf0fb5c17ac66baa08ef12fce16da4dd30ce90abefbd5a716408301c58a73666dabfd5042cf4242992eb98b954f861 - languageName: node - linkType: hard - -"whatwg-url@npm:^11.0.0": - version: 11.0.0 - resolution: "whatwg-url@npm:11.0.0" - dependencies: - tr46: ^3.0.0 - webidl-conversions: ^7.0.0 - checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af - languageName: node - linkType: hard - "whatwg-url@npm:^7.0.0": version: 7.1.0 resolution: "whatwg-url@npm:7.1.0" @@ -10359,7 +8340,7 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": +"word-wrap@npm:^1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f @@ -10574,16 +8555,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.1": - version: 4.0.1 - resolution: "write-file-atomic@npm:4.0.1" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^3.0.7 - checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc - languageName: node - linkType: hard - "write-file-atomic@npm:^5.0.0": version: 5.0.0 resolution: "write-file-atomic@npm:5.0.0" @@ -10594,35 +8565,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.2.3": - version: 8.6.0 - resolution: "ws@npm:8.6.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: e2fca82059f1e087d0c78e2f37135e1b8332bc804fce46f83c2db1cb8571685abf9d2c99b964bab3752536ad90b99b46fb8d1428899aed3e560684ab4641bffd - languageName: node - linkType: hard - -"xml-name-validator@npm:^4.0.0": - version: 4.0.0 - resolution: "xml-name-validator@npm:4.0.0" - checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad - languageName: node - linkType: hard - -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 - languageName: node - linkType: hard - "xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -10651,13 +8593,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.x": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 - languageName: node - linkType: hard - "yargs-parser@npm:^21.0.0": version: 21.0.1 resolution: "yargs-parser@npm:21.0.1" @@ -10680,7 +8615,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.1, yargs@npm:^17.3.1": +"yargs@npm:^17.0.1": version: 17.4.1 resolution: "yargs@npm:17.4.1" dependencies: