diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 4f92a46..0000000
--- a/.editorconfig
+++ /dev/null
@@ -1,17 +0,0 @@
-# EditorConfig is awesome: http://EditorConfig.org
-
-# top-most EditorConfig file
-root = true
-
-# Tab indentation
-[*]
-indent_style = space
-indent_size = 4
-trim_trailing_whitespace = true
-insert_final_newline = true
-
-# The indent size used in the `package.json` file cannot be changed
-# https://github.com/npm/npm/pull/3180#issuecomment-16336516
-[{.travis.yml,npm-shrinkwrap.json,package.json}]
-indent_style = space
-indent_size = 4
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index c2dba59..0000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,142 +0,0 @@
-module.exports = {
- env: {
- browser: true,
- es6: true,
- node: true
- },
- extends: ['prettier'],
- ignorePatterns: ['*.js', 'vscode.*.d.ts', 'vscode.d.ts', 'types'],
- parser: '@typescript-eslint/parser',
- parserOptions: {
- project: ['tsconfig.json'],
- sourceType: 'module'
- },
- plugins: [
- 'eslint-plugin-import',
- 'eslint-plugin-jsdoc',
- 'eslint-plugin-no-null',
- 'eslint-plugin-prefer-arrow',
- 'eslint-plugin-react',
- '@typescript-eslint',
- '@typescript-eslint/tslint',
- 'no-only-tests',
- 'header'
- ],
- rules: {
- 'no-only-tests/no-only-tests': ['error', { block: ['test', 'suite'], focus: ['only'] }],
- // Overriding ESLint rules with Typescript-specific ones
- '@typescript-eslint/ban-ts-comment': [
- 'error',
- {
- 'ts-ignore': 'allow-with-description'
- }
- ],
- '@typescript-eslint/explicit-module-boundary-types': 'off',
- 'no-bitwise': 'off',
- 'no-dupe-class-members': 'off',
- '@typescript-eslint/no-dupe-class-members': 'error',
- 'no-empty-function': 'off',
- '@typescript-eslint/no-empty-function': ['error'],
- '@typescript-eslint/no-empty-interface': 'off',
- '@typescript-eslint/no-explicit-any': 'error',
- '@typescript-eslint/no-non-null-assertion': 'off',
- 'no-unused-vars': 'off',
- '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '_\\w*' }],
- 'no-use-before-define': 'off',
- '@typescript-eslint/no-use-before-define': 'off',
- 'no-useless-constructor': 'off',
- '@typescript-eslint/no-useless-constructor': 'error',
- '@typescript-eslint/no-var-requires': 'off',
- '@typescript-eslint/no-floating-promises': [
- 'error',
- {
- ignoreVoid: false
- }
- ],
-
- // Other rules
- 'class-methods-use-this': 'off',
- 'func-names': 'off',
- 'import/extensions': 'off',
- 'import/namespace': 'off',
- 'import/no-extraneous-dependencies': 'off',
- 'import/no-unresolved': [
- 'error',
- {
- ignore: ['monaco-editor', 'vscode']
- }
- ],
- 'import/prefer-default-export': 'off',
- 'linebreak-style': 'off',
- 'no-await-in-loop': 'off',
- 'no-console': 'off',
- 'no-control-regex': 'off',
- 'no-extend-native': 'off',
- 'no-multi-str': 'off',
- 'no-param-reassign': 'off',
- 'no-prototype-builtins': 'off',
- 'no-restricted-syntax': [
- 'error',
- {
- selector: 'ForInStatement',
- message:
- 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.'
- },
-
- {
- selector: 'LabeledStatement',
- message:
- 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.'
- },
- {
- selector: 'WithStatement',
- message: '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.'
- }
- ],
- 'no-template-curly-in-string': 'off',
- 'no-underscore-dangle': 'off',
- 'no-useless-escape': 'off',
- 'no-void': [
- 'error',
- {
- allowAsStatement: true
- }
- ],
- 'operator-assignment': 'off',
- 'no-restricted-imports': ['error', { paths: ['lodash', 'rxjs', 'lodash/noop', 'rxjs/util/noop'] }],
- strict: 'off',
- 'header/header': [
- 'error',
- 'line',
- [' Copyright (c) Microsoft Corporation.', ' Licensed under the MIT License.'],
- 2
- ]
- },
- overrides: [
- {
- files: ['**/*.test.ts'],
- rules: {
- '@typescript-eslint/no-explicit-any': 'off'
- }
- }
- ],
- settings: {
- 'import/extensions': ['.ts', '.tsx', '.d.ts', '.js', '.jsx'],
- 'import/external-module-folders': ['node_modules', 'node_modules/@types'],
- 'import/parsers': {
- '@typescript-eslint/parser': ['.ts', '.tsx', '.d.ts']
- },
- 'import/resolver': {
- node: {
- extensions: ['.ts', '.tsx', '.d.ts', '.js', '.jsx']
- }
- },
- react: {
- pragma: 'React',
- version: 'detect'
- },
- propWrapperFunctions: ['forbidExtraProps', 'exact', 'Object.freeze'],
- 'import/core-modules': [],
- 'import/ignore': ['node_modules', '\\.(coffee|scss|css|less|hbs|svg|json)$']
- }
-};
diff --git a/.github/ISSUE_TEMPLATE/1_bug_report.md b/.github/ISSUE_TEMPLATE/1_bug_report.md
deleted file mode 100644
index 6048fb9..0000000
--- a/.github/ISSUE_TEMPLATE/1_bug_report.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-name: General bug report
-about: Create a report to help us improve
-labels: bug
----
-
-
-
-## Environment data
-
-- VS Code version: XXX
-- Jupyter Extension version (available under the Extensions sidebar): XXX
-- Python Extension version (available under the Extensions sidebar): XXX
-- OS (Windows | Mac | Linux distro) and version: XXX
-- Python and/or Anaconda version: XXX
-- Type of virtual environment used (N/A | venv | virtualenv | conda | ...): XXX
-- Jupyter server running: Local | Remote | N/A
-
-## Expected behaviour
-
-XXX
-
-## Actual behaviour
-
-XXX
-
-## Steps to reproduce:
-
-[**NOTE**: Self-contained, minimal reproducing code samples are **extremely** helpful and will expedite addressing your issue]
-
-1. XXX
-
-
-
-## Logs
-
-
-
-Output for Jupyter
in the Output
panel (View
→Output
, change the drop-down the upper-right of the Output
panel to Jupyter
)
-
-
-
-
-```
-XXX
-```
-
-
-
diff --git a/.github/ISSUE_TEMPLATE/3_feature_request.md b/.github/ISSUE_TEMPLATE/3_feature_request.md
deleted file mode 100644
index bfdcee0..0000000
--- a/.github/ISSUE_TEMPLATE/3_feature_request.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-name: General feature request
-about: Suggest an idea for this project
-labels: feature-request
----
-
-
-
-
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index f4b750e..0000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-blank_issues_enabled: false
-contact_links:
- - name: "Help and Support"
- url: https://github.com/microsoft/vscode-jupyter/discussions/categories/questions-and-answers
- about: "Need help getting something to work, but you're not sure it's worth of submitting an issue? Ask here."
- - name: "Chat on Discord"
- url: https://aka.ms/python-discord
- about: 'You can ask for help or chat in the `#jupyter` channel of our microsoft-python Discord server'
diff --git a/.github/actions/build-vsix/action.yml b/.github/actions/build-vsix/action.yml
deleted file mode 100644
index 67e364a..0000000
--- a/.github/actions/build-vsix/action.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-name: 'Build VSIX'
-description: "Build the extension's VSIX"
-
-outputs:
- path:
- description: 'Path to the VSIX'
- value: 'ms-toolsai-jupyter-insiders.vsix'
-
-runs:
- using: 'composite'
- steps:
- - run: npm ci --prefer-offline
- env:
- npm_config_build_from_source: true
- shell: bash
-
- # Run again, as the download of zmq binaries could have failed with 403 errors
- - run: npm run postinstall
- env:
- GITHUB_TOKEN: ${{ github.token }}
- shell: bash
-
- - run: npm run package
- shell: bash
diff --git a/.github/actions/npm-ci/action.yml b/.github/actions/npm-ci/action.yml
deleted file mode 100644
index 9e4f854..0000000
--- a/.github/actions/npm-ci/action.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: 'Install dependencies (npm ci)'
-description: "npm install (with GITHUB_TOKEN to run postinstall step)"
-
-runs:
- using: 'composite'
- steps:
- - run: npm ci --foreground-scripts --prefer-offline
- env:
- npm_config_build_from_source: true
- shell: bash
-
- # Run again, as the download of zmq binaries could have failed with 403 errors
- - run: npm run postinstall
- env:
- GITHUB_TOKEN: ${{ github.token }}
- shell: bash
diff --git a/.github/actions/set-python/action.yml b/.github/actions/set-python/action.yml
deleted file mode 100644
index 0667cf3..0000000
--- a/.github/actions/set-python/action.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-name: 'Set Python'
-description: "Sets python to a specific version"
-
-inputs:
- PYTHON_VERSION:
- description: 'Version of python'
- required: true
- default: python
-outputs:
- CI_PYTHON_PATH:
- description: 'Path to the python'
- value: ${{ steps.python_run.outputs.python_path }}
-runs:
- using: 'composite'
- steps:
- - name: Output python path
- id: python_run
- shell: bash
- run: python -c "import sys;print('::set-output name=python_path::' + sys.executable)"
-
- - name: Push to environment
- shell: bash
- run: echo "CI_PYTHON_PATH=${{ steps.python_run.outputs.python_path }}" >> $GITHUB_ENV
diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml
deleted file mode 100644
index 3a29b0e..0000000
--- a/.github/workflows/build-test.yml
+++ /dev/null
@@ -1,123 +0,0 @@
-on:
- pull_request:
- branches:
- - main
- - 'release'
- - 'release/*'
- - 'release-*'
- check_run:
- types: [rerequested, requested_action]
- push:
- branches:
- - main
- - 'release'
- - 'release/*'
- - 'release-*'
- workflow_dispatch:
-
-env:
- NODE_VERSION: 16.14.2
- NPM_VERSION: 8.15.1
- PYTHON_VERSION: '3.10'
-
-jobs:
- cancel_previous_runs:
- runs-on: ubuntu-latest
- steps:
- - name: Cancel Previous Runs
- uses: styfle/cancel-workflow-action@0.11.0
- with:
- access_token: ${{ github.token }}
-
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- - name: Use Node ${{env.NODE_VERSION}}
- uses: actions/setup-node@v3
- with:
- node-version: ${{env.NODE_VERSION}}
- - name: Use Npm ${{env.NPM_VERSION}}
- run: npm i -g npm@${{env.NPM_VERSION}}
- - run: npm i -g @vscode/vsce
- - run: npm ci
- - run: npm run package
- - uses: actions/upload-artifact@v3
- with:
- name: 'ms-toolsai-jupyter-hub-insiders.vsix'
- path: 'ms-toolsai-jupyter-hub-insiders.vsix'
-
- lint:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- - name: Use Node ${{env.NODE_VERSION}}
- uses: actions/setup-node@v3
- with:
- node-version: ${{env.NODE_VERSION}}
- - name: Use Npm ${{env.NPM_VERSION}}
- run: npm i -g npm@${{env.NPM_VERSION}}
- - run: npm ci
- - run: npm run lint
-
- tests:
- strategy:
- matrix:
- os: [ubuntu-latest]
- runs-on: ${{ matrix.os }}
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- - name: Use Node ${{env.NODE_VERSION}}
- uses: actions/setup-node@v3
- with:
- node-version: ${{env.NODE_VERSION}}
- - name: Use Python ${{env.PYTHON_VERSION}}
- uses: actions/setup-python@v4
- with:
- python-version: ${{env.PYTHON_VERSION}}
- - name: Use Npm ${{env.NPM_VERSION}}
- run: npm i -g npm@${{env.NPM_VERSION}}
- - run: npm i -g @vscode/vsce
- - run: npm ci
- - run: npm run esbuild-base-node
- - run: npm run test-compile
- - run: python -m pip install jupyterhub jupyter-core jupyterlab
- - run: npm i -g configurable-http-proxy
- - run: xvfb-run -a npm test
- if: runner.os == 'Linux'
- # - run: npm test
- # if: runner.os != 'Linux'
-
- webtest:
- strategy:
- matrix:
- os: [ubuntu-latest]
- runs-on: ${{ matrix.os }}
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- - name: Use Node ${{env.NODE_VERSION}}
- uses: actions/setup-node@v3
- with:
- node-version: ${{env.NODE_VERSION}}
- - name: Use Python ${{env.PYTHON_VERSION}}
- uses: actions/setup-python@v4
- with:
- python-version: ${{env.PYTHON_VERSION}}
- - name: Use Npm ${{env.NPM_VERSION}}
- run: npm i -g npm@${{env.NPM_VERSION}}
- - run: npm i -g @vscode/vsce
- - run: npm ci
- - run: npm run esbuild-base-web
- - run: npm run test-compile
- - run: npm run make-extension-pack-for-web-tests
- - run: npm run test-compile-webpack
- - run: python -m pip install jupyterhub jupyter-core jupyterlab
- - run: npm i -g configurable-http-proxy
- - run: xvfb-run -a npm run test:web:ci
- if: runner.os == 'Linux'
- # - run: npm test
- # if: runner.os != 'Linux'
diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml
deleted file mode 100644
index d5084f9..0000000
--- a/.github/workflows/lock.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-# https://github.com/marketplace/actions/lock-threads
-name: 'Lock Threads'
-
-on:
- schedule:
- - cron: '0 0 * * *'
-
-permissions:
- issues: write
-
-jobs:
- lock:
- runs-on: ubuntu-latest
- steps:
- - uses: dessant/lock-threads@v4
- id: lock
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
- issue-lock-inactive-days: '7'
- issue-lock-reason: 'resolved'
- process-only: 'issues'
-
- - name: Print locked issues
- run: |
- echo "Locked issues: ${{ steps.lock.outputs.issues }}"
diff --git a/.nvmrc b/.nvmrc
deleted file mode 100644
index 6276cf1..0000000
--- a/.nvmrc
+++ /dev/null
@@ -1 +0,0 @@
-v16.14.2
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index e69de29..0000000
diff --git a/.prettierrc.js b/.prettierrc.js
deleted file mode 100644
index 23ec5ae..0000000
--- a/.prettierrc.js
+++ /dev/null
@@ -1,15 +0,0 @@
-module.exports = {
- singleQuote: true,
- printWidth: 120,
- tabWidth: 4,
- endOfLine: 'auto',
- trailingComma: 'none',
- overrides: [
- {
- files: ['*.yml', '*.yaml'],
- options: {
- tabWidth: 2
- }
- }
- ]
-};
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
deleted file mode 100644
index 7b65e5a..0000000
--- a/.vscode/extensions.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- // See https://go.microsoft.com/fwlink/?LinkId=827846
- // for the documentation about the extensions.json format
- "recommendations": [
- "amodio.tsl-problem-matcher",
- "dbaeumer.vscode-eslint",
- "ms-toolsair.jupyter",
- "editorconfig.editorconfig",
- "esbenp.prettier-vscode"
- ]
-}
diff --git a/.vscode/launch.json b/.vscode/launch.json
deleted file mode 100644
index 782551b..0000000
--- a/.vscode/launch.json
+++ /dev/null
@@ -1,57 +0,0 @@
-// A launch configuration that compiles the extension and then opens it inside a new window
-{
- "version": "0.1.0",
- "configurations": [
- {
- "name": "Build and launch",
- "type": "extensionHost",
- "request": "launch",
- "runtimeExecutable": "${execPath}",
- "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
- "smartStep": true,
- "sourceMaps": true,
- "outFiles": ["${workspaceFolder}/dist/**/*", "!${workspaceFolder}/**/node_modules**/*"],
- "preLaunchTask": "Compile",
- "skipFiles": ["/**"],
- "presentation": {
- "group": "1_extension",
- "order": 1
- }
- },
- {
- "name": "Launch",
- "type": "extensionHost",
- "request": "launch",
- "runtimeExecutable": "${execPath}",
- "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
- "smartStep": true,
- "sourceMaps": true,
- "outFiles": ["${workspaceFolder}/dist/**/*", "!${workspaceFolder}/**/node_modules**/*"],
- "skipFiles": ["/**"],
- "presentation": {
- "group": "1_extension",
- "order": 1
- }
- },
- {
- "name": "Tests",
- "type": "extensionHost",
- "request": "launch",
- "runtimeExecutable": "${execPath}",
- "args": [
- "${workspaceFolder}/tmp",
- "--enable-proposed-api",
- "--extensionDevelopmentPath=${workspaceFolder}",
- "--extensionTestsPath=${workspaceFolder}/out/test/suite/index.js"
- ],
- "sourceMaps": true,
- "outFiles": ["${workspaceFolder}/out/**/*.js", "!${workspaceFolder}/**/node_modules**/*"],
- "preLaunchTask": "Compile",
- "skipFiles": ["/**"],
- "presentation": {
- "group": "2_tests",
- "order": 6
- }
- }
- ]
-}
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index fc76437..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,43 +0,0 @@
-// Place your settings in this file to overwrite default and user settings.
-{
- "files.exclude": {
- "out": false, // set this to true to hide the "out" folder with the compiled JS files
- "obj": true,
- "bin": true,
- "**/node_modules": false,
- ".vscode-test": true,
- ".vscode-test-web": true,
- "**/.venv/**": true
- },
- "search.exclude": {
- "out": true, // set this to false to include "out" folder in search results
- "**/node_modules": true,
- "coverage": true,
- "**/.venv/**": true,
- "languageServer*/**": true,
- ".vscode-test": true,
- ".vscode-test-web": true
- },
- "[typescript]": {
- "editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "[javascript]": {
- "editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "git.branchProtection": ["main", "release*"],
- "git.branchProtectionPrompt": "alwaysCommitToNewBranch",
- "typescript.tsdk": "./node_modules/typescript/lib", // we want to use the TS server from our node_modules folder to control its version
- "typescript.preferences.quoteStyle": "single",
- "javascript.preferences.quoteStyle": "single",
- "typescriptHero.imports.stringQuoteStyle": "'",
- "prettier.printWidth": 120,
- "prettier.singleQuote": true,
- "editor.codeActionsOnSave": {
- "source.fixAll.eslint": "explicit",
- "source.fixAll.tslint": "explicit"
- },
- "typescript.preferences.importModuleSpecifier": "relative",
- "mochaExplorer.nodeArgv": ["--enable-source-maps"]
-}
diff --git a/.vscode/shared.code-snippets b/.vscode/shared.code-snippets
deleted file mode 100644
index 9dcee70..0000000
--- a/.vscode/shared.code-snippets
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- // Each snippet is defined under a snippet name and has a scope, prefix, body and
- // description. The scope defines in watch languages the snippet is applicable. The prefix is what is
- // used to trigger the snippet and the body will be expanded and inserted.Possible variables are:
- // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
- // Placeholders with the same ids are connected.
- "MSFT Copyright Header": {
- "scope": "javascript,typescript",
- "prefix": [
- "header",
- "copyright"
- ],
- "body": [
- "// Copyright (c) Microsoft Corporation.",
- "// Licensed under the MIT License.",
- "",
- "$0"
- ],
- "description": "Insert Copyright Statement"
- }
-}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
deleted file mode 100644
index 136b104..0000000
--- a/.vscode/tasks.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "version": "2.0.0",
- "presentation": {
- "echo": true,
- "reveal": "always",
- "focus": false,
- "panel": "shared"
- },
- "tasks": [
- {
- "label": "Compile",
- "type": "npm",
- "script": "esbuild",
- "isBackground": true,
- "problemMatcher": ["$tsc-watch"],
- "group": {
- "kind": "build",
- "isDefault": true
- }
- },
- {
- "label": "Compile Web Extension",
- "type": "npm",
- "script": "esbuild-web-watch",
- "isBackground": true,
- "group": {
- "kind": "build",
- "isDefault": true
- }
- },
- {
- "label": "Compile Desktop Extension",
- "type": "npm",
- "script": "esbuild-node-watch",
- "isBackground": true,
- "group": {
- "kind": "build",
- "isDefault": true
- }
- },
- {
- "label": "Compile TS No Watch",
- "type": "npm",
- "script": "test-compile"
- },
- {
- "label": "Compile Web Tests No watch",
- "type": "npm",
- "script": "test-compile-webpack",
- "dependsOn": ["Compile TS No Watch"]
- }
- ]
-}
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 2431281..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,14796 +0,0 @@
-{
- "name": "jupyter-hub",
- "version": "2024.5.100",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "jupyter-hub",
- "version": "2024.5.100",
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "@jupyterlab/services": "^7.2.4",
- "@vscode/extension-telemetry": "^0.7.7",
- "buffer": "^6.0.3",
- "events": "^3.3.0",
- "isomorphic-ws": "^4.0.1",
- "node-fetch": "^2.6.7",
- "process": "^0.11.10",
- "stream-browserify": "^3.0.0",
- "util": "^0.12.5"
- },
- "devDependencies": {
- "@types/chai": "^4.3.6",
- "@types/chai-as-promised": "^7.1.8",
- "@types/mocha": "^9.1.1",
- "@types/node": "^16.18.6",
- "@types/node-fetch": "^2.6.11",
- "@types/react": "^18.2.21",
- "@types/sinon": "^17.0.3",
- "@types/webpack-env": "^1.18.1",
- "@types/ws": "^6.0.4",
- "@typescript-eslint/eslint-plugin": "^6.2.0",
- "@typescript-eslint/eslint-plugin-tslint": "^6.2.0",
- "@typescript-eslint/parser": "^6.2.0",
- "@vscode/dts": "^0.4.0",
- "@vscode/jupyter-extension": "^0.0.7",
- "@vscode/test-electron": "^2.3.4",
- "@vscode/test-web": "^0.0.56",
- "assert": "^2.1.0",
- "chai": "^4.3.8",
- "chai-as-promised": "^7.1.1",
- "esbuild": "^0.19.2",
- "eslint": "^8.45.0",
- "eslint-config-airbnb": "^19.0.4",
- "eslint-config-prettier": "^8.9.0",
- "eslint-plugin-header": "^3.1.1",
- "eslint-plugin-import": "^2.27.5",
- "eslint-plugin-jsdoc": "^46.4.5",
- "eslint-plugin-no-null": "^1.0.2",
- "eslint-plugin-no-only-tests": "^3.1.0",
- "eslint-plugin-prefer-arrow": "^1.2.3",
- "eslint-plugin-prettier": "^5.0.0",
- "glob": "^10.3.4",
- "mocha": "^10.2.0",
- "prettier": "^3.0.0",
- "sinon": "^17.0.1",
- "timers-browserify": "^2.0.12",
- "ts-loader": "^9.4.4",
- "ts-mockito": "^2.6.1",
- "tsconfig-paths-webpack-plugin": "^3.2.0",
- "typescript": "^5.2.2",
- "webpack": "^5.88.2",
- "webpack-cli": "^5.1.4",
- "ws": "^8.17.1"
- },
- "engines": {
- "vscode": "^1.83.0"
- },
- "optionalDependencies": {
- "fsevents": "^2.3.2"
- }
- },
- "node_modules/@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@azure/abort-controller": {
- "version": "1.1.0",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@azure/core-auth": {
- "version": "1.5.0",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-util": "^1.1.0",
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@azure/core-rest-pipeline": {
- "version": "1.12.0",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.4.0",
- "@azure/core-tracing": "^1.0.1",
- "@azure/core-util": "^1.3.0",
- "@azure/logger": "^1.0.0",
- "form-data": "^4.0.0",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@azure/core-tracing": {
- "version": "1.0.1",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@azure/core-util": {
- "version": "1.4.0",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@azure/logger": {
- "version": "1.0.4",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.22.10",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/highlight": "^7.22.10",
- "chalk": "^2.4.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/code-frame/node_modules/ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/chalk": {
- "version": "2.4.2",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-convert": {
- "version": "1.9.3",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-name": {
- "version": "1.1.3",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/code-frame/node_modules/has-flag": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/supports-color": {
- "version": "5.5.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.5",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.22.10",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.22.5",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.22.10",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@discoveryjs/json-ext": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
- "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@es-joy/jsdoccomment": {
- "version": "0.40.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "comment-parser": "1.4.0",
- "esquery": "^1.5.0",
- "jsdoc-type-pratt-parser": "~4.0.0"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.19.2",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.7.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.47.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.10",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
- "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@jupyter/ydoc": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@jupyter/ydoc/-/ydoc-2.1.1.tgz",
- "integrity": "sha512-NeEwqXQ2j1OyLq4uezeQmsMiI+Qo5k7dYIMqNByOM7dJp6sHeP0jQ96w7BEc9E4SmrxwcOT4cLvcJWJE8Xun4g==",
- "dependencies": {
- "@jupyterlab/nbformat": "^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0",
- "@lumino/coreutils": "^1.11.0 || ^2.0.0",
- "@lumino/disposable": "^1.10.0 || ^2.0.0",
- "@lumino/signaling": "^1.10.0 || ^2.0.0",
- "y-protocols": "^1.0.5",
- "yjs": "^13.5.40"
- }
- },
- "node_modules/@jupyterlab/coreutils": {
- "version": "6.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-6.2.4.tgz",
- "integrity": "sha512-A3yHM3UgMYKKJU8JtcPEMGUWUHMlol3TFCdFQbeJnqj+uJmxV0ejkLvDlGk+mefjpcVm/z3cXaDrwoUVtY2FDw==",
- "dependencies": {
- "@lumino/coreutils": "^2.1.2",
- "@lumino/disposable": "^2.1.2",
- "@lumino/signaling": "^2.1.2",
- "minimist": "~1.2.0",
- "path-browserify": "^1.0.0",
- "url-parse": "~1.5.4"
- }
- },
- "node_modules/@jupyterlab/nbformat": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-4.2.4.tgz",
- "integrity": "sha512-xR4qqvgjMSBeUQ7nUiRQAP6YDOZcqSHxNzIkds81dDL4wk5pj10oKpTg9lAqfwMImubjcGxTM4Msl8+N3cdpsw==",
- "dependencies": {
- "@lumino/coreutils": "^2.1.2"
- }
- },
- "node_modules/@jupyterlab/services": {
- "version": "7.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-7.2.4.tgz",
- "integrity": "sha512-9a9945owJsuAExroT/afecPSCLlQ/dhhQuttRBpycZFRBEGdSXcXY3/1q9rGUDb9wEk0A4ySk7LTZIWZTNP2rg==",
- "dependencies": {
- "@jupyter/ydoc": "^2.0.1",
- "@jupyterlab/coreutils": "^6.2.4",
- "@jupyterlab/nbformat": "^4.2.4",
- "@jupyterlab/settingregistry": "^4.2.4",
- "@jupyterlab/statedb": "^4.2.4",
- "@lumino/coreutils": "^2.1.2",
- "@lumino/disposable": "^2.1.2",
- "@lumino/polling": "^2.1.2",
- "@lumino/properties": "^2.0.1",
- "@lumino/signaling": "^2.1.2",
- "ws": "^8.11.0"
- }
- },
- "node_modules/@jupyterlab/settingregistry": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-4.2.4.tgz",
- "integrity": "sha512-95eLd8uiufWE0pso/hlHKcF760NZKlQoubazG8uIphBuYCbSVhd621JoMViAIH6LqDwWi1LfdwYRMJp9hzTlfA==",
- "dependencies": {
- "@jupyterlab/nbformat": "^4.2.4",
- "@jupyterlab/statedb": "^4.2.4",
- "@lumino/commands": "^2.3.0",
- "@lumino/coreutils": "^2.1.2",
- "@lumino/disposable": "^2.1.2",
- "@lumino/signaling": "^2.1.2",
- "@rjsf/utils": "^5.13.4",
- "ajv": "^8.12.0",
- "json5": "^2.2.3"
- },
- "peerDependencies": {
- "react": ">=16"
- }
- },
- "node_modules/@jupyterlab/settingregistry/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/@jupyterlab/settingregistry/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
- },
- "node_modules/@jupyterlab/statedb": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-4.2.4.tgz",
- "integrity": "sha512-MzNCYEPZcQ55G4M9jExM0zOjC3Bldj63kVM5ontVUpykQgs+sbMjeGcHY7mcMi9gY6hiPPSSvpL3Rf0eZArqkQ==",
- "dependencies": {
- "@lumino/commands": "^2.3.0",
- "@lumino/coreutils": "^2.1.2",
- "@lumino/disposable": "^2.1.2",
- "@lumino/properties": "^2.0.1",
- "@lumino/signaling": "^2.1.2"
- }
- },
- "node_modules/@koa/cors": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz",
- "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==",
- "dev": true,
- "dependencies": {
- "vary": "^1.1.2"
- },
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/@koa/router": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.1.tgz",
- "integrity": "sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==",
- "dev": true,
- "dependencies": {
- "debug": "^4.3.4",
- "http-errors": "^2.0.0",
- "koa-compose": "^4.1.0",
- "methods": "^1.1.2",
- "path-to-regexp": "^6.2.1"
- },
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/@lumino/algorithm": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz",
- "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA=="
- },
- "node_modules/@lumino/commands": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.3.1.tgz",
- "integrity": "sha512-DpX1kkE4PhILpvK1T4ZnaFb6UP4+YTkdZifvN3nbiomD64O2CTd+wcWIBpZMgy6MMgbVgrE8dzHxHk1EsKxNxw==",
- "dependencies": {
- "@lumino/algorithm": "^2.0.2",
- "@lumino/coreutils": "^2.2.0",
- "@lumino/disposable": "^2.1.3",
- "@lumino/domutils": "^2.0.2",
- "@lumino/keyboard": "^2.0.2",
- "@lumino/signaling": "^2.1.3",
- "@lumino/virtualdom": "^2.0.2"
- }
- },
- "node_modules/@lumino/coreutils": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz",
- "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==",
- "dependencies": {
- "@lumino/algorithm": "^2.0.2"
- }
- },
- "node_modules/@lumino/disposable": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.3.tgz",
- "integrity": "sha512-k5KXy/+T3UItiWHY4WwQawnsJnGo3aNtP5CTRKqo4+tbTNuhc3rTSvygJlNKIbEfIZXW2EWYnwfFDozkYx95eA==",
- "dependencies": {
- "@lumino/signaling": "^2.1.3"
- }
- },
- "node_modules/@lumino/domutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.2.tgz",
- "integrity": "sha512-2Kp6YHaMNI1rKB0PrALvOsZBHPy2EvVVAvJLWjlCm8MpWOVETjFp0MA9QpMubT9I76aKbaI5s1o1NJyZ8Y99pQ=="
- },
- "node_modules/@lumino/keyboard": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.2.tgz",
- "integrity": "sha512-icRUpvswDaFjqmAJNbQRb/aTu6Iugo6Y2oC08TiIwhQtLS9W+Ee9VofdqvbPSvCm6DkyP+DCWMuA3KXZ4V4g4g=="
- },
- "node_modules/@lumino/polling": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-2.1.3.tgz",
- "integrity": "sha512-WEZk96ddK6eHEhdDkFUAAA40EOLit86QVbqQqnbPmhdGwFogek26Kq9b1U273LJeirv95zXCATOJAkjRyb7D+w==",
- "dependencies": {
- "@lumino/coreutils": "^2.2.0",
- "@lumino/disposable": "^2.1.3",
- "@lumino/signaling": "^2.1.3"
- }
- },
- "node_modules/@lumino/properties": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.2.tgz",
- "integrity": "sha512-b312oA3Bh97WFK8efXejYmC3DVJmvzJk72LQB7H3fXhfqS5jUWvL7MSnNmgcQvGzl9fIhDWDWjhtSTi0KGYYBg=="
- },
- "node_modules/@lumino/signaling": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz",
- "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==",
- "dependencies": {
- "@lumino/algorithm": "^2.0.2",
- "@lumino/coreutils": "^2.2.0"
- }
- },
- "node_modules/@lumino/virtualdom": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.2.tgz",
- "integrity": "sha512-HYZThOtZSoknjdXA102xpy5CiXtTFCVz45EXdWeYLx3NhuEwuAIX93QBBIhupalmtFlRg1yhdDNV40HxJ4kcXg==",
- "dependencies": {
- "@lumino/algorithm": "^2.0.2"
- }
- },
- "node_modules/@microsoft/1ds-core-js": {
- "version": "3.2.13",
- "license": "MIT",
- "dependencies": {
- "@microsoft/applicationinsights-core-js": "2.8.15",
- "@microsoft/applicationinsights-shims": "^2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.7"
- }
- },
- "node_modules/@microsoft/1ds-post-js": {
- "version": "3.2.13",
- "license": "MIT",
- "dependencies": {
- "@microsoft/1ds-core-js": "3.2.13",
- "@microsoft/applicationinsights-shims": "^2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.7"
- }
- },
- "node_modules/@microsoft/applicationinsights-channel-js": {
- "version": "2.8.15",
- "license": "MIT",
- "dependencies": {
- "@microsoft/applicationinsights-common": "2.8.15",
- "@microsoft/applicationinsights-core-js": "2.8.15",
- "@microsoft/applicationinsights-shims": "2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.9"
- },
- "peerDependencies": {
- "tslib": "*"
- }
- },
- "node_modules/@microsoft/applicationinsights-common": {
- "version": "2.8.15",
- "license": "MIT",
- "dependencies": {
- "@microsoft/applicationinsights-core-js": "2.8.15",
- "@microsoft/applicationinsights-shims": "2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.9"
- },
- "peerDependencies": {
- "tslib": "*"
- }
- },
- "node_modules/@microsoft/applicationinsights-core-js": {
- "version": "2.8.15",
- "license": "MIT",
- "dependencies": {
- "@microsoft/applicationinsights-shims": "2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.9"
- },
- "peerDependencies": {
- "tslib": "*"
- }
- },
- "node_modules/@microsoft/applicationinsights-shims": {
- "version": "2.0.2",
- "license": "MIT"
- },
- "node_modules/@microsoft/applicationinsights-web-basic": {
- "version": "2.8.15",
- "license": "MIT",
- "dependencies": {
- "@microsoft/applicationinsights-channel-js": "2.8.15",
- "@microsoft/applicationinsights-common": "2.8.15",
- "@microsoft/applicationinsights-core-js": "2.8.15",
- "@microsoft/applicationinsights-shims": "2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.9"
- },
- "peerDependencies": {
- "tslib": "*"
- }
- },
- "node_modules/@microsoft/applicationinsights-web-snippet": {
- "version": "1.0.1",
- "license": "MIT"
- },
- "node_modules/@microsoft/dynamicproto-js": {
- "version": "1.1.9",
- "license": "MIT"
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@opentelemetry/api": {
- "version": "1.4.1",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@opentelemetry/core": {
- "version": "1.15.2",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.15.2"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/resources": {
- "version": "1.15.2",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "1.15.2",
- "@opentelemetry/semantic-conventions": "1.15.2"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/sdk-trace-base": {
- "version": "1.15.2",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "1.15.2",
- "@opentelemetry/resources": "1.15.2",
- "@opentelemetry/semantic-conventions": "1.15.2"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.5.0"
- }
- },
- "node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.15.2",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@pkgr/utils": {
- "version": "2.4.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "fast-glob": "^3.3.0",
- "is-glob": "^4.0.3",
- "open": "^9.1.0",
- "picocolors": "^1.0.0",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/unts"
- }
- },
- "node_modules/@playwright/browser-chromium": {
- "version": "1.45.3",
- "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.45.3.tgz",
- "integrity": "sha512-UVPW8HveE8SghaahoMy8CfG0QdJ2mO0BZLOcPT8nlQh7Z97Gkv4e3Ad69D1oCqM3m3zYkDPAiGB+hOASNS0d/g==",
- "dev": true,
- "hasInstallScript": true,
- "dependencies": {
- "playwright-core": "1.45.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@rjsf/utils": {
- "version": "5.19.4",
- "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.19.4.tgz",
- "integrity": "sha512-853BZuQvl62Xw2Ve07dkOdEzlr7jCBU/XFPhj9tik3s++InY1brBIDBRZKABvWHjymdSvO9gSzQXzj9aFREcFA==",
- "dependencies": {
- "json-schema-merge-allof": "^0.8.1",
- "jsonpointer": "^5.0.1",
- "lodash": "^4.17.21",
- "lodash-es": "^4.17.21",
- "react-is": "^18.2.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "react": "^16.14.0 || >=17"
- }
- },
- "node_modules/@rjsf/utils/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
- },
- "node_modules/@sinonjs/commons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "11.2.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz",
- "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^3.0.0"
- }
- },
- "node_modules/@sinonjs/samsam": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz",
- "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^2.0.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- }
- },
- "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/text-encoding": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
- "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
- "dev": true
- },
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@types/chai": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz",
- "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==",
- "dev": true
- },
- "node_modules/@types/chai-as-promised": {
- "version": "7.1.8",
- "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz",
- "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==",
- "dev": true,
- "dependencies": {
- "@types/chai": "*"
- }
- },
- "node_modules/@types/eslint": {
- "version": "8.44.2",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz",
- "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==",
- "dev": true,
- "dependencies": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "node_modules/@types/eslint-scope": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
- "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
- "dev": true,
- "dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
- "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
- "dev": true
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.12",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/mocha": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
- "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==",
- "dev": true
- },
- "node_modules/@types/node": {
- "version": "16.18.43",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/node-fetch": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz",
- "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "form-data": "^4.0.0"
- }
- },
- "node_modules/@types/prop-types": {
- "version": "15.7.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/react": {
- "version": "18.2.21",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@types/scheduler": {
- "version": "0.16.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/semver": {
- "version": "7.5.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/sinon": {
- "version": "17.0.3",
- "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz",
- "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==",
- "dev": true,
- "dependencies": {
- "@types/sinonjs__fake-timers": "*"
- }
- },
- "node_modules/@types/sinonjs__fake-timers": {
- "version": "8.1.5",
- "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz",
- "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==",
- "dev": true
- },
- "node_modules/@types/webpack-env": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.1.tgz",
- "integrity": "sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==",
- "dev": true
- },
- "node_modules/@types/ws": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz",
- "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.4.1",
- "@typescript-eslint/type-utils": "6.4.1",
- "@typescript-eslint/utils": "6.4.1",
- "@typescript-eslint/visitor-keys": "6.4.1",
- "debug": "^4.3.4",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.4",
- "natural-compare": "^1.4.0",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin-tslint": {
- "version": "6.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/utils": "6.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0",
- "tslint": "^5.0.0 || ^6.0.0",
- "typescript": "*"
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "6.4.1",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/scope-manager": "6.4.1",
- "@typescript-eslint/types": "6.4.1",
- "@typescript-eslint/typescript-estree": "6.4.1",
- "@typescript-eslint/visitor-keys": "6.4.1",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "6.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "6.4.1",
- "@typescript-eslint/visitor-keys": "6.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "6.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "6.4.1",
- "@typescript-eslint/utils": "6.4.1",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "6.4.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.4.1",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/types": "6.4.1",
- "@typescript-eslint/visitor-keys": "6.4.1",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "6.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.4.1",
- "@typescript-eslint/types": "6.4.1",
- "@typescript-eslint/typescript-estree": "6.4.1",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "6.4.1",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@vscode/dts": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "https-proxy-agent": "^7.0.0",
- "minimist": "^1.2.8",
- "prompts": "^2.4.2"
- },
- "bin": {
- "dts": "index.js"
- }
- },
- "node_modules/@vscode/dts/node_modules/agent-base": {
- "version": "7.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@vscode/dts/node_modules/https-proxy-agent": {
- "version": "7.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.0.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@vscode/extension-telemetry": {
- "version": "0.7.7",
- "license": "MIT",
- "dependencies": {
- "@microsoft/1ds-core-js": "^3.2.9",
- "@microsoft/1ds-post-js": "^3.2.9",
- "@microsoft/applicationinsights-web-basic": "^2.8.11",
- "applicationinsights": "2.5.0"
- },
- "engines": {
- "vscode": "^1.75.0"
- }
- },
- "node_modules/@vscode/jupyter-extension": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/@vscode/jupyter-extension/-/jupyter-extension-0.0.7.tgz",
- "integrity": "sha512-kpgHnBnioYh9M14UwtYHwpl/921xRP96ZWFfNqLkQWhDVbxAoPZB1FAqBqSxkONHUZdsUxUBmlOj07QXEQn2zQ==",
- "dev": true
- },
- "node_modules/@vscode/test-electron": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.4.tgz",
- "integrity": "sha512-eWzIqXMhvlcoXfEFNWrVu/yYT5w6De+WZXR/bafUQhAp8+8GkQo95Oe14phwiRUPv8L+geAKl/QM2+PoT3YW3g==",
- "dev": true,
- "dependencies": {
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "jszip": "^3.10.1",
- "semver": "^7.5.2"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@vscode/test-web": {
- "version": "0.0.56",
- "resolved": "https://registry.npmjs.org/@vscode/test-web/-/test-web-0.0.56.tgz",
- "integrity": "sha512-lR688n+D6A9odw+IZ5cU8CYr2YXLB61bGgyZpPVJe/sJy4/DYX5CAxPb7Wj9ZMYL41CTvWq5DeXtfCjlabPcYA==",
- "dev": true,
- "dependencies": {
- "@koa/cors": "^5.0.0",
- "@koa/router": "^12.0.1",
- "@playwright/browser-chromium": "^1.45.0",
- "glob": "^10.4.2",
- "gunzip-maybe": "^1.4.2",
- "http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.4",
- "koa": "^2.15.3",
- "koa-morgan": "^1.0.1",
- "koa-mount": "^4.0.0",
- "koa-static": "^5.0.0",
- "minimist": "^1.2.8",
- "playwright": "^1.45.0",
- "tar-fs": "^3.0.6",
- "vscode-uri": "^3.0.8"
- },
- "bin": {
- "vscode-test-web": "out/index.js"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@vscode/test-web/node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "dev": true,
- "dependencies": {
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@vscode/test-web/node_modules/http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "dev": true,
- "dependencies": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@vscode/test-web/node_modules/https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
- "dev": true,
- "dependencies": {
- "agent-base": "^7.0.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@webassemblyjs/ast": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
- "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-numbers": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
- "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
- "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
- "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
- "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
- "dev": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
- "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
- "dev": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
- "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6",
- "@webassemblyjs/wasm-opt": "1.11.6",
- "@webassemblyjs/wasm-parser": "1.11.6",
- "@webassemblyjs/wast-printer": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
- "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
- "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6",
- "@webassemblyjs/wasm-parser": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
- "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
- "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.6",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webpack-cli/configtest": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
- "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
- "dev": true,
- "engines": {
- "node": ">=14.15.0"
- },
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
- }
- },
- "node_modules/@webpack-cli/info": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
- "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
- "dev": true,
- "engines": {
- "node": ">=14.15.0"
- },
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
- }
- },
- "node_modules/@webpack-cli/serve": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
- "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
- "dev": true,
- "engines": {
- "node": ">=14.15.0"
- },
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
- },
- "peerDependenciesMeta": {
- "webpack-dev-server": {
- "optional": true
- }
- }
- },
- "node_modules/@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "node_modules/@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "dev": true,
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/acorn": {
- "version": "8.10.0",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-import-assertions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
- "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^8"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/applicationinsights": {
- "version": "2.5.0",
- "license": "MIT",
- "dependencies": {
- "@azure/core-auth": "^1.4.0",
- "@azure/core-rest-pipeline": "^1.10.0",
- "@microsoft/applicationinsights-web-snippet": "^1.0.1",
- "@opentelemetry/api": "^1.0.4",
- "@opentelemetry/core": "^1.0.1",
- "@opentelemetry/sdk-trace-base": "^1.0.1",
- "@opentelemetry/semantic-conventions": "^1.0.1",
- "cls-hooked": "^4.2.2",
- "continuation-local-storage": "^3.2.1",
- "diagnostic-channel": "1.1.0",
- "diagnostic-channel-publishers": "1.0.5"
- },
- "engines": {
- "node": ">=8.0.0"
- },
- "peerDependencies": {
- "applicationinsights-native-metrics": "*"
- },
- "peerDependenciesMeta": {
- "applicationinsights-native-metrics": {
- "optional": true
- }
- }
- },
- "node_modules/are-docs-informative": {
- "version": "0.0.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/aria-query": {
- "version": "5.3.0",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "dequal": "^2.0.3"
- }
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "is-string": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.tosorted": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.1.3"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
- "is-shared-array-buffer": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/assert": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
- "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "is-nan": "^1.3.2",
- "object-is": "^1.1.5",
- "object.assign": "^4.1.4",
- "util": "^0.12.5"
- }
- },
- "node_modules/assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/ast-types-flow": {
- "version": "0.0.7",
- "dev": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/async-hook-jl": {
- "version": "1.7.6",
- "license": "MIT",
- "dependencies": {
- "stack-chain": "^1.3.7"
- },
- "engines": {
- "node": "^4.7 || >=6.9 || >=7.3"
- }
- },
- "node_modules/async-listener": {
- "version": "0.6.10",
- "license": "BSD-2-Clause",
- "dependencies": {
- "semver": "^5.3.0",
- "shimmer": "^1.1.0"
- },
- "engines": {
- "node": "<=0.11.8 || >0.11.10"
- }
- },
- "node_modules/async-listener/node_modules/semver": {
- "version": "5.7.2",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/asynciterator.prototype": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-symbols": "^1.0.3"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "license": "MIT"
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.5",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/axe-core": {
- "version": "4.7.2",
- "dev": true,
- "license": "MPL-2.0",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/axobject-query": {
- "version": "3.2.1",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "dequal": "^2.0.3"
- }
- },
- "node_modules/b4a": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
- "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==",
- "dev": true
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/bare-events": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
- "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
- "dev": true,
- "optional": true
- },
- "node_modules/bare-fs": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz",
- "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "bare-events": "^2.0.0",
- "bare-path": "^2.0.0",
- "bare-stream": "^2.0.0"
- }
- },
- "node_modules/bare-os": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz",
- "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==",
- "dev": true,
- "optional": true
- },
- "node_modules/bare-path": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz",
- "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "bare-os": "^2.1.0"
- }
- },
- "node_modules/bare-stream": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz",
- "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "streamx": "^2.18.0"
- }
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/basic-auth/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/big-integer": {
- "version": "1.6.51",
- "dev": true,
- "license": "Unlicense",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/bplist-parser": {
- "version": "0.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "big-integer": "^1.6.44"
- },
- "engines": {
- "node": ">= 5.10.0"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "node_modules/browserify-zlib": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
- "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==",
- "dev": true,
- "dependencies": {
- "pako": "~0.2.0"
- }
- },
- "node_modules/browserify-zlib/node_modules/pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
- "dev": true
- },
- "node_modules/browserslist": {
- "version": "4.21.10",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz",
- "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001517",
- "electron-to-chromium": "^1.4.477",
- "node-releases": "^2.0.13",
- "update-browserslist-db": "^1.0.11"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "node_modules/builtin-modules": {
- "version": "3.3.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bundle-name": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "run-applescript": "^5.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cache-content-type": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
- "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==",
- "dev": true,
- "dependencies": {
- "mime-types": "^2.1.18",
- "ylru": "^1.2.0"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001534",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz",
- "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
- },
- "node_modules/chai": {
- "version": "4.3.8",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz",
- "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==",
- "dev": true,
- "dependencies": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^4.1.2",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chai-as-promised": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz",
- "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==",
- "dev": true,
- "dependencies": {
- "check-error": "^1.0.2"
- },
- "peerDependencies": {
- "chai": ">= 2.1.2 < 5"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
- "dev": true,
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/cliui/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cls-hooked": {
- "version": "4.2.2",
- "license": "BSD-2-Clause",
- "dependencies": {
- "async-hook-jl": "^1.7.6",
- "emitter-listener": "^1.0.1",
- "semver": "^5.4.1"
- },
- "engines": {
- "node": "^4.7 || >=6.9 || >=7.3 || >=8.2.1"
- }
- },
- "node_modules/cls-hooked/node_modules/semver": {
- "version": "5.7.2",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
- "dev": true,
- "engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "license": "MIT",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/commander": {
- "version": "2.20.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/comment-parser": {
- "version": "1.4.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 12.0.0"
- }
- },
- "node_modules/compute-gcd": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz",
- "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==",
- "dependencies": {
- "validate.io-array": "^1.0.3",
- "validate.io-function": "^1.0.2",
- "validate.io-integer-array": "^1.0.0"
- }
- },
- "node_modules/compute-lcm": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz",
- "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==",
- "dependencies": {
- "compute-gcd": "^1.2.1",
- "validate.io-array": "^1.0.3",
- "validate.io-function": "^1.0.2",
- "validate.io-integer-array": "^1.0.0"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/confusing-browser-globals": {
- "version": "1.0.11",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/continuation-local-storage": {
- "version": "3.2.1",
- "license": "BSD-2-Clause",
- "dependencies": {
- "async-listener": "^0.6.0",
- "emitter-listener": "^1.1.1"
- }
- },
- "node_modules/cookies": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz",
- "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==",
- "dev": true,
- "dependencies": {
- "depd": "~2.0.0",
- "keygrip": "~1.1.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "dev": true,
- "license": "BSD-2-Clause",
- "peer": true
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/deep-eql": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
- "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
- "dev": true,
- "dependencies": {
- "type-detect": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==",
- "dev": true
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/default-browser": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bundle-name": "^3.0.0",
- "default-browser-id": "^3.0.0",
- "execa": "^7.1.1",
- "titleize": "^3.0.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-browser-id": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bplist-parser": "^0.2.0",
- "untildify": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-lazy-prop": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
- "dev": true
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/diagnostic-channel": {
- "version": "1.1.0",
- "license": "MIT",
- "dependencies": {
- "semver": "^5.3.0"
- }
- },
- "node_modules/diagnostic-channel-publishers": {
- "version": "1.0.5",
- "license": "MIT",
- "peerDependencies": {
- "diagnostic-channel": "*"
- }
- },
- "node_modules/diagnostic-channel/node_modules/semver": {
- "version": "5.7.2",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/diff": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
- "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "dev": true
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.520",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.520.tgz",
- "integrity": "sha512-Frfus2VpYADsrh1lB3v/ft/WVFlVzOIm+Q0p7U7VqHI6qr7NWHYKe+Wif3W50n7JAFoBsWVsoU0+qDks6WQ60g==",
- "dev": true
- },
- "node_modules/emitter-listener": {
- "version": "1.1.2",
- "license": "BSD-2-Clause",
- "dependencies": {
- "shimmer": "^1.2.0"
- }
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/enhanced-resolve": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
- "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/envinfo": {
- "version": "7.10.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz",
- "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==",
- "dev": true,
- "bin": {
- "envinfo": "dist/cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.22.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.1",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "es-set-tostringtag": "^2.0.1",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.2.1",
- "get-symbol-description": "^1.0.0",
- "globalthis": "^1.0.3",
- "gopd": "^1.0.1",
- "has": "^1.0.3",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
- "is-callable": "^1.2.7",
- "is-negative-zero": "^2.0.2",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
- "is-string": "^1.0.7",
- "is-typed-array": "^1.1.10",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.12.3",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.0",
- "safe-array-concat": "^1.0.0",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.7",
- "string.prototype.trimend": "^1.0.6",
- "string.prototype.trimstart": "^1.0.6",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.10"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dependencies": {
- "get-intrinsic": "^1.2.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-iterator-helpers": {
- "version": "1.0.13",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "asynciterator.prototype": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.21.3",
- "es-set-tostringtag": "^2.0.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.2.1",
- "globalthis": "^1.0.3",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "iterator.prototype": "^1.1.0",
- "safe-array-concat": "^1.0.0"
- }
- },
- "node_modules/es-module-lexer": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz",
- "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==",
- "dev": true
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has": "^1.0.3"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/esbuild": {
- "version": "0.19.2",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/android-arm": "0.19.2",
- "@esbuild/android-arm64": "0.19.2",
- "@esbuild/android-x64": "0.19.2",
- "@esbuild/darwin-arm64": "0.19.2",
- "@esbuild/darwin-x64": "0.19.2",
- "@esbuild/freebsd-arm64": "0.19.2",
- "@esbuild/freebsd-x64": "0.19.2",
- "@esbuild/linux-arm": "0.19.2",
- "@esbuild/linux-arm64": "0.19.2",
- "@esbuild/linux-ia32": "0.19.2",
- "@esbuild/linux-loong64": "0.19.2",
- "@esbuild/linux-mips64el": "0.19.2",
- "@esbuild/linux-ppc64": "0.19.2",
- "@esbuild/linux-riscv64": "0.19.2",
- "@esbuild/linux-s390x": "0.19.2",
- "@esbuild/linux-x64": "0.19.2",
- "@esbuild/netbsd-x64": "0.19.2",
- "@esbuild/openbsd-x64": "0.19.2",
- "@esbuild/sunos-x64": "0.19.2",
- "@esbuild/win32-arm64": "0.19.2",
- "@esbuild/win32-ia32": "0.19.2",
- "@esbuild/win32-x64": "0.19.2"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "dev": true
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.47.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.2",
- "@eslint/js": "^8.47.0",
- "@humanwhocodes/config-array": "^0.11.10",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-airbnb": {
- "version": "19.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-config-airbnb-base": "^15.0.0",
- "object.assign": "^4.1.2",
- "object.entries": "^1.1.5"
- },
- "engines": {
- "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^7.32.0 || ^8.2.0",
- "eslint-plugin-import": "^2.25.3",
- "eslint-plugin-jsx-a11y": "^6.5.1",
- "eslint-plugin-react": "^7.28.0",
- "eslint-plugin-react-hooks": "^4.3.0"
- }
- },
- "node_modules/eslint-config-airbnb-base": {
- "version": "15.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "confusing-browser-globals": "^1.0.10",
- "object.assign": "^4.1.2",
- "object.entries": "^1.1.5",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "peerDependencies": {
- "eslint": "^7.32.0 || ^8.2.0",
- "eslint-plugin-import": "^2.25.2"
- }
- },
- "node_modules/eslint-config-airbnb-base/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-config-prettier": {
- "version": "8.10.0",
- "dev": true,
- "license": "MIT",
- "bin": {
- "eslint-config-prettier": "bin/cli.js"
- },
- "peerDependencies": {
- "eslint": ">=7.0.0"
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.8.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-header": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "eslint": ">=7.7.0"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.28.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.findlastindex": "^1.2.2",
- "array.prototype.flat": "^1.3.1",
- "array.prototype.flatmap": "^1.3.1",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.7",
- "eslint-module-utils": "^2.8.0",
- "has": "^1.0.3",
- "is-core-module": "^2.13.0",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.6",
- "object.groupby": "^1.0.0",
- "object.values": "^1.1.6",
- "semver": "^6.3.1",
- "tsconfig-paths": "^3.14.2"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-jsdoc": {
- "version": "46.5.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@es-joy/jsdoccomment": "~0.40.1",
- "are-docs-informative": "^0.0.2",
- "comment-parser": "1.4.0",
- "debug": "^4.3.4",
- "escape-string-regexp": "^4.0.0",
- "esquery": "^1.5.0",
- "is-builtin-module": "^3.2.1",
- "semver": "^7.5.4",
- "spdx-expression-parse": "^3.0.1"
- },
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.7.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/runtime": "^7.20.7",
- "aria-query": "^5.1.3",
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "ast-types-flow": "^0.0.7",
- "axe-core": "^4.6.2",
- "axobject-query": "^3.1.1",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "has": "^1.0.3",
- "jsx-ast-utils": "^3.3.3",
- "language-tags": "=1.0.5",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=4.0"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-no-null": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=5.0.0"
- },
- "peerDependencies": {
- "eslint": ">=3.0.0"
- }
- },
- "node_modules/eslint-plugin-no-only-tests": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=5.0.0"
- }
- },
- "node_modules/eslint-plugin-prefer-arrow": {
- "version": "1.2.3",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "eslint": ">=2.0.0"
- }
- },
- "node_modules/eslint-plugin-prettier": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prettier-linter-helpers": "^1.0.0",
- "synckit": "^0.8.5"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/prettier"
- },
- "peerDependencies": {
- "@types/eslint": ">=8.0.0",
- "eslint": ">=8.0.0",
- "prettier": ">=3.0.0"
- },
- "peerDependenciesMeta": {
- "@types/eslint": {
- "optional": true
- },
- "eslint-config-prettier": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-plugin-react": {
- "version": "7.33.2",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "array.prototype.tosorted": "^1.1.1",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.0.12",
- "estraverse": "^5.3.0",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "object.hasown": "^1.1.2",
- "object.values": "^1.1.6",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.4",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.8"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
- }
- },
- "node_modules/eslint-plugin-react-hooks": {
- "version": "4.6.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/doctrine": {
- "version": "2.1.0",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.4",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.2",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "9.6.1",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "dev": true,
- "license": "BSD-2-Clause",
- "peer": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esquery": {
- "version": "1.5.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/execa": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.1",
- "human-signals": "^4.3.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^3.0.7",
- "strip-final-newline": "^3.0.0"
- },
- "engines": {
- "node": "^14.18.0 || ^16.14.0 || >=18.0.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/execa/node_modules/is-stream": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "license": "MIT"
- },
- "node_modules/fast-diff": {
- "version": "1.3.0",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/fast-fifo": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
- "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.3.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-uri": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
- "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw=="
- },
- "node_modules/fastest-levenshtein": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
- "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
- "dev": true,
- "engines": {
- "node": ">= 4.9.1"
- }
- },
- "node_modules/fastq": {
- "version": "1.15.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.2.7",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/for-each": {
- "version": "0.3.3",
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.1.3"
- }
- },
- "node_modules/foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0",
- "functions-have-names": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-stream": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dev": true,
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "dev": true
- },
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/globals": {
- "version": "13.21.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/globby": {
- "version": "11.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/gopd": {
- "version": "1.0.1",
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/gunzip-maybe": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz",
- "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==",
- "dev": true,
- "dependencies": {
- "browserify-zlib": "^0.1.4",
- "is-deflate": "^1.0.0",
- "is-gzip": "^1.0.0",
- "peek-stream": "^1.1.0",
- "pumpify": "^1.3.3",
- "through2": "^2.0.3"
- },
- "bin": {
- "gunzip-maybe": "bin.js"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-bigints": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.0.1",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.0",
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/http-assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz",
- "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==",
- "dev": true,
- "dependencies": {
- "deep-equal": "~1.0.1",
- "http-errors": "~1.8.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-assert/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/http-assert/node_modules/http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
- "dev": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/http-assert/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dev": true,
- "dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "license": "MIT",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/human-signals": {
- "version": "4.3.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14.18.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/ignore": {
- "version": "5.2.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/immediate": {
- "version": "3.0.6",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
- "dev": true,
- "dependencies": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "bin": {
- "import-local-fixture": "fixtures/cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "license": "ISC"
- },
- "node_modules/internal-slot": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/interpret": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
- "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
- "dev": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/is-arguments": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
- "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-async-function": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bigint": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-bigints": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-builtin-module": {
- "version": "3.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "builtin-modules": "^3.3.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.13.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-deflate": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz",
- "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==",
- "dev": true
- },
- "node_modules/is-docker": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-finalizationregistry": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "call-bind": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.0.10",
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-gzip": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
- "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-inside-container": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-map": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-nan": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
- "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-regex": {
- "version": "1.1.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-set": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-string": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.12",
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.11"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-weakmap": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakset": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-wsl": {
- "version": "2.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-wsl/node_modules/is-docker": {
- "version": "2.2.1",
- "dev": true,
- "license": "MIT",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isomorphic-ws": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz",
- "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==",
- "peerDependencies": {
- "ws": "*"
- }
- },
- "node_modules/isomorphic.js": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz",
- "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==",
- "funding": {
- "type": "GitHub Sponsors ❤",
- "url": "https://github.com/sponsors/dmonad"
- }
- },
- "node_modules/iterator.prototype": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "define-properties": "^1.1.4",
- "get-intrinsic": "^1.1.3",
- "has-symbols": "^1.0.3",
- "has-tostringtag": "^1.0.0",
- "reflect.getprototypeof": "^1.0.3"
- }
- },
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jest-worker": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "license": "MIT",
- "peer": true
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsdoc-type-pratt-parser": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "node_modules/json-schema-compare": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz",
- "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==",
- "dependencies": {
- "lodash": "^4.17.4"
- }
- },
- "node_modules/json-schema-merge-allof": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz",
- "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==",
- "dependencies": {
- "compute-lcm": "^1.1.2",
- "json-schema-compare": "^0.2.2",
- "lodash": "^4.17.20"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonpointer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
- "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/jszip": {
- "version": "3.10.1",
- "dev": true,
- "license": "(MIT OR GPL-3.0-or-later)",
- "dependencies": {
- "lie": "~3.3.0",
- "pako": "~1.0.2",
- "readable-stream": "~2.3.6",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/just-extend": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz",
- "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==",
- "dev": true
- },
- "node_modules/keygrip": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
- "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
- "dev": true,
- "dependencies": {
- "tsscmp": "1.0.6"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kleur": {
- "version": "3.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/koa": {
- "version": "2.15.3",
- "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.3.tgz",
- "integrity": "sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==",
- "dev": true,
- "dependencies": {
- "accepts": "^1.3.5",
- "cache-content-type": "^1.0.0",
- "content-disposition": "~0.5.2",
- "content-type": "^1.0.4",
- "cookies": "~0.9.0",
- "debug": "^4.3.2",
- "delegates": "^1.0.0",
- "depd": "^2.0.0",
- "destroy": "^1.0.4",
- "encodeurl": "^1.0.2",
- "escape-html": "^1.0.3",
- "fresh": "~0.5.2",
- "http-assert": "^1.3.0",
- "http-errors": "^1.6.3",
- "is-generator-function": "^1.0.7",
- "koa-compose": "^4.1.0",
- "koa-convert": "^2.0.0",
- "on-finished": "^2.3.0",
- "only": "~0.0.2",
- "parseurl": "^1.3.2",
- "statuses": "^1.5.0",
- "type-is": "^1.6.16",
- "vary": "^1.1.2"
- },
- "engines": {
- "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4"
- }
- },
- "node_modules/koa-compose": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz",
- "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==",
- "dev": true
- },
- "node_modules/koa-convert": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz",
- "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==",
- "dev": true,
- "dependencies": {
- "co": "^4.6.0",
- "koa-compose": "^4.1.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/koa-morgan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/koa-morgan/-/koa-morgan-1.0.1.tgz",
- "integrity": "sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==",
- "dev": true,
- "dependencies": {
- "morgan": "^1.6.1"
- }
- },
- "node_modules/koa-mount": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/koa-mount/-/koa-mount-4.0.0.tgz",
- "integrity": "sha512-rm71jaA/P+6HeCpoRhmCv8KVBIi0tfGuO/dMKicbQnQW/YJntJ6MnnspkodoA4QstMVEZArsCphmd0bJEtoMjQ==",
- "dev": true,
- "dependencies": {
- "debug": "^4.0.1",
- "koa-compose": "^4.1.0"
- },
- "engines": {
- "node": ">= 7.6.0"
- }
- },
- "node_modules/koa-send": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz",
- "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.1",
- "http-errors": "^1.7.3",
- "resolve-path": "^1.4.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/koa-send/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/koa-send/node_modules/http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
- "dev": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/koa-send/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/koa-static": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz",
- "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==",
- "dev": true,
- "dependencies": {
- "debug": "^3.1.0",
- "koa-send": "^5.0.0"
- },
- "engines": {
- "node": ">= 7.6.0"
- }
- },
- "node_modules/koa-static/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/koa/node_modules/http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
- "dev": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/koa/node_modules/http-errors/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/koa/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/language-subtag-registry": {
- "version": "0.3.22",
- "dev": true,
- "license": "CC0-1.0",
- "peer": true
- },
- "node_modules/language-tags": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "language-subtag-registry": "~0.3.2"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lib0": {
- "version": "0.2.95",
- "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.95.tgz",
- "integrity": "sha512-St5XGDh5omvNawGkAOa7CFRjxl4xEKLj9DxgT8Nl7rmrD6l2WRTngvmZGhJKRaniROterT0RDVdnwLlU9PiEOg==",
- "dependencies": {
- "isomorphic.js": "^0.2.4"
- },
- "bin": {
- "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js",
- "0gentesthtml": "bin/gentesthtml.js",
- "0serve": "bin/0serve.js"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "type": "GitHub Sponsors ❤",
- "url": "https://github.com/sponsors/dmonad"
- }
- },
- "node_modules/lie": {
- "version": "3.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "immediate": "~3.0.5"
- }
- },
- "node_modules/loader-runner": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
- "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
- "dev": true,
- "engines": {
- "node": ">=6.11.5"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "license": "MIT"
- },
- "node_modules/lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
- },
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "dev": true
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/loupe": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
- "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
- "dev": true,
- "dependencies": {
- "get-func-name": "^2.0.0"
- }
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/mocha": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
- "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.3",
- "debug": "4.3.4",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.2.0",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "5.0.1",
- "ms": "2.1.3",
- "nanoid": "3.3.3",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "workerpool": "6.2.1",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha.js"
- },
- "engines": {
- "node": ">= 14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mochajs"
- }
- },
- "node_modules/mocha/node_modules/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/mocha/node_modules/minimatch": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
- "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/mocha/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/mocha/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/morgan": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
- "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
- "dev": true,
- "dependencies": {
- "basic-auth": "~2.0.1",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-finished": "~2.3.0",
- "on-headers": "~1.0.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/morgan/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/morgan/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/morgan/node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
- "dev": true,
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
- "dev": true,
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "node_modules/nise": {
- "version": "5.1.9",
- "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz",
- "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^3.0.0",
- "@sinonjs/fake-timers": "^11.2.2",
- "@sinonjs/text-encoding": "^0.7.2",
- "just-extend": "^6.2.0",
- "path-to-regexp": "^6.2.1"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
- "dev": true
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm-run-path": {
- "version": "5.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/npm-run-path/node_modules/path-key": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.12.3",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-is": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
- "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.entries": {
- "version": "1.1.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.groupby": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.21.2",
- "get-intrinsic": "^1.2.1"
- }
- },
- "node_modules/object.hasown": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.values": {
- "version": "1.1.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "dev": true,
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "6.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/only": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
- "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==",
- "dev": true
- },
- "node_modules/open": {
- "version": "9.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "default-browser": "^4.0.0",
- "define-lazy-prop": "^3.0.0",
- "is-inside-container": "^1.0.0",
- "is-wsl": "^2.2.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/package-json-from-dist": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
- "dev": true
- },
- "node_modules/pako": {
- "version": "1.0.11",
- "dev": true,
- "license": "(MIT AND Zlib)"
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true
- },
- "node_modules/path-to-regexp": {
- "version": "6.2.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/peek-stream": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
- "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "duplexify": "^3.5.0",
- "through2": "^2.0.3"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/playwright": {
- "version": "1.45.3",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.3.tgz",
- "integrity": "sha512-QhVaS+lpluxCaioejDZ95l4Y4jSFCsBvl2UZkpeXlzxmqS+aABr5c82YmfMHrL6x27nvrvykJAFpkzT2eWdJww==",
- "dev": true,
- "dependencies": {
- "playwright-core": "1.45.3"
- },
- "bin": {
- "playwright": "cli.js"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "fsevents": "2.3.2"
- }
- },
- "node_modules/playwright-core": {
- "version": "1.45.3",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.3.tgz",
- "integrity": "sha512-+ym0jNbcjikaOwwSZycFbwkWgfruWvYlJfThKYAlImbxUgdWFO2oW70ojPm4OpE4t6TAo2FY/smM+hpVTtkhDA==",
- "dev": true,
- "bin": {
- "playwright-core": "cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/playwright/node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prettier": {
- "version": "3.0.2",
- "dev": true,
- "license": "MIT",
- "bin": {
- "prettier": "bin/prettier.cjs"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/prettier-linter-helpers": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-diff": "^1.1.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "dependencies": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/queue-tick": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
- "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
- "dev": true
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/readable-stream": {
- "version": "2.3.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/readable-stream/node_modules/safe-buffer": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/rechoir": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
- "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
- "dev": true,
- "dependencies": {
- "resolve": "^1.20.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.1",
- "globalthis": "^1.0.3",
- "which-builtin-type": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.14.0",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "functions-have-names": "^1.2.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
- },
- "node_modules/resolve": {
- "version": "1.22.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "dependencies": {
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-cwd/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-path": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz",
- "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==",
- "dev": true,
- "dependencies": {
- "http-errors": "~1.6.2",
- "path-is-absolute": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/resolve-path/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/resolve-path/node_modules/http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
- "dev": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/resolve-path/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true
- },
- "node_modules/resolve-path/node_modules/setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
- },
- "node_modules/resolve-path/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/glob": {
- "version": "7.2.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/run-applescript": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "execa": "^5.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-applescript/node_modules/execa": {
- "version": "5.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/run-applescript/node_modules/human-signals": {
- "version": "2.1.0",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/run-applescript/node_modules/is-stream": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-applescript/node_modules/mimic-fn": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/run-applescript/node_modules/npm-run-path": {
- "version": "4.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/run-applescript/node_modules/onetime": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-applescript/node_modules/strip-final-newline": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-array-concat": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "has-symbols": "^1.0.3",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-array-concat/node_modules/isarray": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/safe-regex-test": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "is-regex": "^1.1.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/semver": {
- "version": "7.5.4",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shimmer": {
- "version": "1.2.1",
- "license": "BSD-2-Clause"
- },
- "node_modules/side-channel": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/sinon": {
- "version": "17.0.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz",
- "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^3.0.0",
- "@sinonjs/fake-timers": "^11.2.2",
- "@sinonjs/samsam": "^8.0.0",
- "diff": "^5.1.0",
- "nise": "^5.1.5",
- "supports-color": "^7.2.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/sinon"
- }
- },
- "node_modules/sinon/node_modules/diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "dev": true,
- "license": "CC-BY-3.0"
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.13",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true
- },
- "node_modules/stack-chain": {
- "version": "1.3.7",
- "license": "MIT"
- },
- "node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "dependencies": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- }
- },
- "node_modules/stream-browserify/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/stream-shift": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
- "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
- "dev": true
- },
- "node_modules/streamx": {
- "version": "2.18.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
- "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==",
- "dev": true,
- "dependencies": {
- "fast-fifo": "^1.3.2",
- "queue-tick": "^1.0.1",
- "text-decoder": "^1.1.0"
- },
- "optionalDependencies": {
- "bare-events": "^2.2.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.1.1",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.1.2",
- "license": "MIT"
- },
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/string-width/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/string-width/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/string.prototype.matchall": {
- "version": "4.0.8",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.3",
- "regexp.prototype.flags": "^1.4.3",
- "side-channel": "^1.0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/synckit": {
- "version": "0.8.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@pkgr/utils": "^2.3.1",
- "tslib": "^2.5.0"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/unts"
- }
- },
- "node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tar-fs": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz",
- "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==",
- "dev": true,
- "dependencies": {
- "pump": "^3.0.0",
- "tar-stream": "^3.1.5"
- },
- "optionalDependencies": {
- "bare-fs": "^2.1.1",
- "bare-path": "^2.1.0"
- }
- },
- "node_modules/tar-fs/node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/tar-stream": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
- "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
- "dev": true,
- "dependencies": {
- "b4a": "^1.6.4",
- "fast-fifo": "^1.2.0",
- "streamx": "^2.15.0"
- }
- },
- "node_modules/terser": {
- "version": "5.19.4",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz",
- "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==",
- "dev": true,
- "dependencies": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser-webpack-plugin": {
- "version": "5.3.9",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
- "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
- "dev": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.17",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.16.8"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.1.0"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "uglify-js": {
- "optional": true
- }
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
- "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/text-decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz",
- "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==",
- "dev": true,
- "dependencies": {
- "b4a": "^1.6.4"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "dependencies": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "node_modules/timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "dev": true,
- "dependencies": {
- "setimmediate": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/titleize": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "license": "MIT"
- },
- "node_modules/ts-api-utils": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=16.13.0"
- },
- "peerDependencies": {
- "typescript": ">=4.2.0"
- }
- },
- "node_modules/ts-loader": {
- "version": "9.4.4",
- "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz",
- "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "enhanced-resolve": "^5.0.0",
- "micromatch": "^4.0.0",
- "semver": "^7.3.4"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "typescript": "*",
- "webpack": "^5.0.0"
- }
- },
- "node_modules/ts-mockito": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz",
- "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.5"
- }
- },
- "node_modules/tsconfig-paths": {
- "version": "3.14.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- },
- "node_modules/tsconfig-paths-webpack-plugin": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz",
- "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "enhanced-resolve": "^5.7.0",
- "tsconfig-paths": "^3.9.0"
- }
- },
- "node_modules/tsconfig-paths/node_modules/json5": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/tslib": {
- "version": "2.6.2",
- "license": "0BSD"
- },
- "node_modules/tslint": {
- "version": "6.1.3",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "builtin-modules": "^1.1.1",
- "chalk": "^2.3.0",
- "commander": "^2.12.1",
- "diff": "^4.0.1",
- "glob": "^7.1.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.3",
- "resolve": "^1.3.2",
- "semver": "^5.3.0",
- "tslib": "^1.13.0",
- "tsutils": "^2.29.0"
- },
- "bin": {
- "tslint": "bin/tslint"
- },
- "engines": {
- "node": ">=4.8.0"
- },
- "peerDependencies": {
- "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev"
- }
- },
- "node_modules/tslint/node_modules/ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tslint/node_modules/argparse": {
- "version": "1.0.10",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/tslint/node_modules/builtin-modules": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/tslint/node_modules/chalk": {
- "version": "2.4.2",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tslint/node_modules/color-convert": {
- "version": "1.9.3",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/tslint/node_modules/color-name": {
- "version": "1.1.3",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/tslint/node_modules/diff": {
- "version": "4.0.2",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/tslint/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/tslint/node_modules/glob": {
- "version": "7.2.3",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/tslint/node_modules/has-flag": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tslint/node_modules/js-yaml": {
- "version": "3.14.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/tslint/node_modules/mkdirp": {
- "version": "0.5.6",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "minimist": "^1.2.6"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/tslint/node_modules/semver": {
- "version": "5.7.2",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/tslint/node_modules/supports-color": {
- "version": "5.5.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tslint/node_modules/tslib": {
- "version": "1.14.1",
- "dev": true,
- "license": "0BSD",
- "peer": true
- },
- "node_modules/tsscmp": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
- "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
- "dev": true,
- "engines": {
- "node": ">=0.6.x"
- }
- },
- "node_modules/tsutils": {
- "version": "2.29.0",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "tslib": "^1.8.1"
- },
- "peerDependencies": {
- "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev"
- }
- },
- "node_modules/tsutils/node_modules/tslib": {
- "version": "1.14.1",
- "dev": true,
- "license": "0BSD",
- "peer": true
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dev": true,
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typescript": {
- "version": "5.2.2",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
- "which-boxed-primitive": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/untildify": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
- "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "node_modules/util": {
- "version": "0.12.5",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
- "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "is-arguments": "^1.0.4",
- "is-generator-function": "^1.0.7",
- "is-typed-array": "^1.1.3",
- "which-typed-array": "^1.1.2"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "license": "MIT"
- },
- "node_modules/validate.io-array": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz",
- "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg=="
- },
- "node_modules/validate.io-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz",
- "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ=="
- },
- "node_modules/validate.io-integer": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz",
- "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==",
- "dependencies": {
- "validate.io-number": "^1.0.3"
- }
- },
- "node_modules/validate.io-integer-array": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz",
- "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==",
- "dependencies": {
- "validate.io-array": "^1.0.3",
- "validate.io-integer": "^1.0.4"
- }
- },
- "node_modules/validate.io-number": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz",
- "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg=="
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/vscode-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
- "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
- "dev": true
- },
- "node_modules/watchpack": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
- "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
- "dev": true,
- "dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "license": "BSD-2-Clause"
- },
- "node_modules/webpack": {
- "version": "5.88.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz",
- "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==",
- "dev": true,
- "dependencies": {
- "@types/eslint-scope": "^3.7.3",
- "@types/estree": "^1.0.0",
- "@webassemblyjs/ast": "^1.11.5",
- "@webassemblyjs/wasm-edit": "^1.11.5",
- "@webassemblyjs/wasm-parser": "^1.11.5",
- "acorn": "^8.7.1",
- "acorn-import-assertions": "^1.9.0",
- "browserslist": "^4.14.5",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.15.0",
- "es-module-lexer": "^1.2.1",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.7",
- "watchpack": "^2.4.0",
- "webpack-sources": "^3.2.3"
- },
- "bin": {
- "webpack": "bin/webpack.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-cli": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
- "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
- "dev": true,
- "dependencies": {
- "@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^2.1.1",
- "@webpack-cli/info": "^2.0.2",
- "@webpack-cli/serve": "^2.0.5",
- "colorette": "^2.0.14",
- "commander": "^10.0.1",
- "cross-spawn": "^7.0.3",
- "envinfo": "^7.7.3",
- "fastest-levenshtein": "^1.0.12",
- "import-local": "^3.0.2",
- "interpret": "^3.1.1",
- "rechoir": "^0.8.0",
- "webpack-merge": "^5.7.3"
- },
- "bin": {
- "webpack-cli": "bin/cli.js"
- },
- "engines": {
- "node": ">=14.15.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "5.x.x"
- },
- "peerDependenciesMeta": {
- "@webpack-cli/generators": {
- "optional": true
- },
- "webpack-bundle-analyzer": {
- "optional": true
- },
- "webpack-dev-server": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-cli/node_modules/commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
- "dev": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/webpack-merge": {
- "version": "5.9.0",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz",
- "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==",
- "dev": true,
- "dependencies": {
- "clone-deep": "^4.0.1",
- "wildcard": "^2.0.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/webpack-sources": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
- "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
- "dev": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/webpack/node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/webpack/node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type": {
- "version": "1.1.3",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "function.prototype.name": "^1.1.5",
- "has-tostringtag": "^1.0.0",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.0.5",
- "is-finalizationregistry": "^1.0.2",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.1.4",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.0.2",
- "which-collection": "^1.0.1",
- "which-typed-array": "^1.1.9"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type/node_modules/isarray": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/which-collection": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "is-map": "^2.0.1",
- "is-set": "^2.0.1",
- "is-weakmap": "^2.0.1",
- "is-weakset": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.11",
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/wildcard": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
- "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
- "dev": true
- },
- "node_modules/workerpool": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
- "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y-protocols": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz",
- "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==",
- "dependencies": {
- "lib0": "^0.2.85"
- },
- "engines": {
- "node": ">=16.0.0",
- "npm": ">=8.0.0"
- },
- "funding": {
- "type": "GitHub Sponsors ❤",
- "url": "https://github.com/sponsors/dmonad"
- },
- "peerDependencies": {
- "yjs": "^13.0.0"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "dependencies": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yjs": {
- "version": "13.6.18",
- "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.18.tgz",
- "integrity": "sha512-GBTjO4QCmv2HFKFkYIJl7U77hIB1o22vSCSQD1Ge8ZxWbIbn8AltI4gyXbtL+g5/GJep67HCMq3Y5AmNwDSyEg==",
- "dependencies": {
- "lib0": "^0.2.86"
- },
- "engines": {
- "node": ">=16.0.0",
- "npm": ">=8.0.0"
- },
- "funding": {
- "type": "GitHub Sponsors ❤",
- "url": "https://github.com/sponsors/dmonad"
- }
- },
- "node_modules/ylru": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz",
- "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "dev": true
- },
- "@azure/abort-controller": {
- "version": "1.1.0",
- "requires": {
- "tslib": "^2.2.0"
- }
- },
- "@azure/core-auth": {
- "version": "1.5.0",
- "requires": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-util": "^1.1.0",
- "tslib": "^2.2.0"
- }
- },
- "@azure/core-rest-pipeline": {
- "version": "1.12.0",
- "requires": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.4.0",
- "@azure/core-tracing": "^1.0.1",
- "@azure/core-util": "^1.3.0",
- "@azure/logger": "^1.0.0",
- "form-data": "^4.0.0",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "tslib": "^2.2.0"
- },
- "dependencies": {
- "@tootallnate/once": {
- "version": "2.0.0"
- },
- "http-proxy-agent": {
- "version": "5.0.0",
- "requires": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- }
- }
- }
- },
- "@azure/core-tracing": {
- "version": "1.0.1",
- "requires": {
- "tslib": "^2.2.0"
- }
- },
- "@azure/core-util": {
- "version": "1.4.0",
- "requires": {
- "@azure/abort-controller": "^1.0.0",
- "tslib": "^2.2.0"
- }
- },
- "@azure/logger": {
- "version": "1.0.4",
- "requires": {
- "tslib": "^2.2.0"
- }
- },
- "@babel/code-frame": {
- "version": "7.22.10",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/highlight": "^7.22.10",
- "chalk": "^2.4.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "peer": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "dev": true,
- "peer": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "dev": true,
- "peer": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "dev": true,
- "peer": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "dev": true,
- "peer": true
- },
- "has-flag": {
- "version": "3.0.0",
- "dev": true,
- "peer": true
- },
- "supports-color": {
- "version": "5.5.0",
- "dev": true,
- "peer": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.22.5",
- "dev": true,
- "peer": true
- },
- "@babel/highlight": {
- "version": "7.22.10",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.22.5",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "peer": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "dev": true,
- "peer": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "dev": true,
- "peer": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "dev": true,
- "peer": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "dev": true,
- "peer": true
- },
- "has-flag": {
- "version": "3.0.0",
- "dev": true,
- "peer": true
- },
- "supports-color": {
- "version": "5.5.0",
- "dev": true,
- "peer": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/runtime": {
- "version": "7.22.10",
- "dev": true,
- "peer": true,
- "requires": {
- "regenerator-runtime": "^0.14.0"
- }
- },
- "@discoveryjs/json-ext": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
- "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
- "dev": true
- },
- "@es-joy/jsdoccomment": {
- "version": "0.40.1",
- "dev": true,
- "requires": {
- "comment-parser": "1.4.0",
- "esquery": "^1.5.0",
- "jsdoc-type-pratt-parser": "~4.0.0"
- }
- },
- "@esbuild/darwin-arm64": {
- "version": "0.19.2",
- "dev": true,
- "optional": true
- },
- "@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "@eslint-community/regexpp": {
- "version": "4.7.0",
- "dev": true
- },
- "@eslint/eslintrc": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- }
- },
- "@eslint/js": {
- "version": "8.47.0",
- "dev": true
- },
- "@humanwhocodes/config-array": {
- "version": "0.11.10",
- "dev": true,
- "requires": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
- }
- },
- "@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "dev": true
- },
- "@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "dev": true
- },
- "@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "requires": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true
- },
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- }
- }
- },
- "@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true
- },
- "@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true
- },
- "@jridgewell/source-map": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
- "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "@jupyter/ydoc": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@jupyter/ydoc/-/ydoc-2.1.1.tgz",
- "integrity": "sha512-NeEwqXQ2j1OyLq4uezeQmsMiI+Qo5k7dYIMqNByOM7dJp6sHeP0jQ96w7BEc9E4SmrxwcOT4cLvcJWJE8Xun4g==",
- "requires": {
- "@jupyterlab/nbformat": "^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0",
- "@lumino/coreutils": "^1.11.0 || ^2.0.0",
- "@lumino/disposable": "^1.10.0 || ^2.0.0",
- "@lumino/signaling": "^1.10.0 || ^2.0.0",
- "y-protocols": "^1.0.5",
- "yjs": "^13.5.40"
- }
- },
- "@jupyterlab/coreutils": {
- "version": "6.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-6.2.4.tgz",
- "integrity": "sha512-A3yHM3UgMYKKJU8JtcPEMGUWUHMlol3TFCdFQbeJnqj+uJmxV0ejkLvDlGk+mefjpcVm/z3cXaDrwoUVtY2FDw==",
- "requires": {
- "@lumino/coreutils": "^2.1.2",
- "@lumino/disposable": "^2.1.2",
- "@lumino/signaling": "^2.1.2",
- "minimist": "~1.2.0",
- "path-browserify": "^1.0.0",
- "url-parse": "~1.5.4"
- }
- },
- "@jupyterlab/nbformat": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-4.2.4.tgz",
- "integrity": "sha512-xR4qqvgjMSBeUQ7nUiRQAP6YDOZcqSHxNzIkds81dDL4wk5pj10oKpTg9lAqfwMImubjcGxTM4Msl8+N3cdpsw==",
- "requires": {
- "@lumino/coreutils": "^2.1.2"
- }
- },
- "@jupyterlab/services": {
- "version": "7.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-7.2.4.tgz",
- "integrity": "sha512-9a9945owJsuAExroT/afecPSCLlQ/dhhQuttRBpycZFRBEGdSXcXY3/1q9rGUDb9wEk0A4ySk7LTZIWZTNP2rg==",
- "requires": {
- "@jupyter/ydoc": "^2.0.1",
- "@jupyterlab/coreutils": "^6.2.4",
- "@jupyterlab/nbformat": "^4.2.4",
- "@jupyterlab/settingregistry": "^4.2.4",
- "@jupyterlab/statedb": "^4.2.4",
- "@lumino/coreutils": "^2.1.2",
- "@lumino/disposable": "^2.1.2",
- "@lumino/polling": "^2.1.2",
- "@lumino/properties": "^2.0.1",
- "@lumino/signaling": "^2.1.2",
- "ws": "^8.11.0"
- }
- },
- "@jupyterlab/settingregistry": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-4.2.4.tgz",
- "integrity": "sha512-95eLd8uiufWE0pso/hlHKcF760NZKlQoubazG8uIphBuYCbSVhd621JoMViAIH6LqDwWi1LfdwYRMJp9hzTlfA==",
- "requires": {
- "@jupyterlab/nbformat": "^4.2.4",
- "@jupyterlab/statedb": "^4.2.4",
- "@lumino/commands": "^2.3.0",
- "@lumino/coreutils": "^2.1.2",
- "@lumino/disposable": "^2.1.2",
- "@lumino/signaling": "^2.1.2",
- "@rjsf/utils": "^5.13.4",
- "ajv": "^8.12.0",
- "json5": "^2.2.3"
- },
- "dependencies": {
- "ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "requires": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
- }
- }
- },
- "@jupyterlab/statedb": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-4.2.4.tgz",
- "integrity": "sha512-MzNCYEPZcQ55G4M9jExM0zOjC3Bldj63kVM5ontVUpykQgs+sbMjeGcHY7mcMi9gY6hiPPSSvpL3Rf0eZArqkQ==",
- "requires": {
- "@lumino/commands": "^2.3.0",
- "@lumino/coreutils": "^2.1.2",
- "@lumino/disposable": "^2.1.2",
- "@lumino/properties": "^2.0.1",
- "@lumino/signaling": "^2.1.2"
- }
- },
- "@koa/cors": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz",
- "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==",
- "dev": true,
- "requires": {
- "vary": "^1.1.2"
- }
- },
- "@koa/router": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.1.tgz",
- "integrity": "sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==",
- "dev": true,
- "requires": {
- "debug": "^4.3.4",
- "http-errors": "^2.0.0",
- "koa-compose": "^4.1.0",
- "methods": "^1.1.2",
- "path-to-regexp": "^6.2.1"
- }
- },
- "@lumino/algorithm": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz",
- "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA=="
- },
- "@lumino/commands": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.3.1.tgz",
- "integrity": "sha512-DpX1kkE4PhILpvK1T4ZnaFb6UP4+YTkdZifvN3nbiomD64O2CTd+wcWIBpZMgy6MMgbVgrE8dzHxHk1EsKxNxw==",
- "requires": {
- "@lumino/algorithm": "^2.0.2",
- "@lumino/coreutils": "^2.2.0",
- "@lumino/disposable": "^2.1.3",
- "@lumino/domutils": "^2.0.2",
- "@lumino/keyboard": "^2.0.2",
- "@lumino/signaling": "^2.1.3",
- "@lumino/virtualdom": "^2.0.2"
- }
- },
- "@lumino/coreutils": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz",
- "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==",
- "requires": {
- "@lumino/algorithm": "^2.0.2"
- }
- },
- "@lumino/disposable": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.3.tgz",
- "integrity": "sha512-k5KXy/+T3UItiWHY4WwQawnsJnGo3aNtP5CTRKqo4+tbTNuhc3rTSvygJlNKIbEfIZXW2EWYnwfFDozkYx95eA==",
- "requires": {
- "@lumino/signaling": "^2.1.3"
- }
- },
- "@lumino/domutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.2.tgz",
- "integrity": "sha512-2Kp6YHaMNI1rKB0PrALvOsZBHPy2EvVVAvJLWjlCm8MpWOVETjFp0MA9QpMubT9I76aKbaI5s1o1NJyZ8Y99pQ=="
- },
- "@lumino/keyboard": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.2.tgz",
- "integrity": "sha512-icRUpvswDaFjqmAJNbQRb/aTu6Iugo6Y2oC08TiIwhQtLS9W+Ee9VofdqvbPSvCm6DkyP+DCWMuA3KXZ4V4g4g=="
- },
- "@lumino/polling": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-2.1.3.tgz",
- "integrity": "sha512-WEZk96ddK6eHEhdDkFUAAA40EOLit86QVbqQqnbPmhdGwFogek26Kq9b1U273LJeirv95zXCATOJAkjRyb7D+w==",
- "requires": {
- "@lumino/coreutils": "^2.2.0",
- "@lumino/disposable": "^2.1.3",
- "@lumino/signaling": "^2.1.3"
- }
- },
- "@lumino/properties": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.2.tgz",
- "integrity": "sha512-b312oA3Bh97WFK8efXejYmC3DVJmvzJk72LQB7H3fXhfqS5jUWvL7MSnNmgcQvGzl9fIhDWDWjhtSTi0KGYYBg=="
- },
- "@lumino/signaling": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz",
- "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==",
- "requires": {
- "@lumino/algorithm": "^2.0.2",
- "@lumino/coreutils": "^2.2.0"
- }
- },
- "@lumino/virtualdom": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.2.tgz",
- "integrity": "sha512-HYZThOtZSoknjdXA102xpy5CiXtTFCVz45EXdWeYLx3NhuEwuAIX93QBBIhupalmtFlRg1yhdDNV40HxJ4kcXg==",
- "requires": {
- "@lumino/algorithm": "^2.0.2"
- }
- },
- "@microsoft/1ds-core-js": {
- "version": "3.2.13",
- "requires": {
- "@microsoft/applicationinsights-core-js": "2.8.15",
- "@microsoft/applicationinsights-shims": "^2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.7"
- }
- },
- "@microsoft/1ds-post-js": {
- "version": "3.2.13",
- "requires": {
- "@microsoft/1ds-core-js": "3.2.13",
- "@microsoft/applicationinsights-shims": "^2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.7"
- }
- },
- "@microsoft/applicationinsights-channel-js": {
- "version": "2.8.15",
- "requires": {
- "@microsoft/applicationinsights-common": "2.8.15",
- "@microsoft/applicationinsights-core-js": "2.8.15",
- "@microsoft/applicationinsights-shims": "2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.9"
- }
- },
- "@microsoft/applicationinsights-common": {
- "version": "2.8.15",
- "requires": {
- "@microsoft/applicationinsights-core-js": "2.8.15",
- "@microsoft/applicationinsights-shims": "2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.9"
- }
- },
- "@microsoft/applicationinsights-core-js": {
- "version": "2.8.15",
- "requires": {
- "@microsoft/applicationinsights-shims": "2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.9"
- }
- },
- "@microsoft/applicationinsights-shims": {
- "version": "2.0.2"
- },
- "@microsoft/applicationinsights-web-basic": {
- "version": "2.8.15",
- "requires": {
- "@microsoft/applicationinsights-channel-js": "2.8.15",
- "@microsoft/applicationinsights-common": "2.8.15",
- "@microsoft/applicationinsights-core-js": "2.8.15",
- "@microsoft/applicationinsights-shims": "2.0.2",
- "@microsoft/dynamicproto-js": "^1.1.9"
- }
- },
- "@microsoft/applicationinsights-web-snippet": {
- "version": "1.0.1"
- },
- "@microsoft/dynamicproto-js": {
- "version": "1.1.9"
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@opentelemetry/api": {
- "version": "1.4.1"
- },
- "@opentelemetry/core": {
- "version": "1.15.2",
- "requires": {
- "@opentelemetry/semantic-conventions": "1.15.2"
- }
- },
- "@opentelemetry/resources": {
- "version": "1.15.2",
- "requires": {
- "@opentelemetry/core": "1.15.2",
- "@opentelemetry/semantic-conventions": "1.15.2"
- }
- },
- "@opentelemetry/sdk-trace-base": {
- "version": "1.15.2",
- "requires": {
- "@opentelemetry/core": "1.15.2",
- "@opentelemetry/resources": "1.15.2",
- "@opentelemetry/semantic-conventions": "1.15.2"
- }
- },
- "@opentelemetry/semantic-conventions": {
- "version": "1.15.2"
- },
- "@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true
- },
- "@pkgr/utils": {
- "version": "2.4.2",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "fast-glob": "^3.3.0",
- "is-glob": "^4.0.3",
- "open": "^9.1.0",
- "picocolors": "^1.0.0",
- "tslib": "^2.6.0"
- }
- },
- "@playwright/browser-chromium": {
- "version": "1.45.3",
- "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.45.3.tgz",
- "integrity": "sha512-UVPW8HveE8SghaahoMy8CfG0QdJ2mO0BZLOcPT8nlQh7Z97Gkv4e3Ad69D1oCqM3m3zYkDPAiGB+hOASNS0d/g==",
- "dev": true,
- "requires": {
- "playwright-core": "1.45.3"
- }
- },
- "@rjsf/utils": {
- "version": "5.19.4",
- "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.19.4.tgz",
- "integrity": "sha512-853BZuQvl62Xw2Ve07dkOdEzlr7jCBU/XFPhj9tik3s++InY1brBIDBRZKABvWHjymdSvO9gSzQXzj9aFREcFA==",
- "requires": {
- "json-schema-merge-allof": "^0.8.1",
- "jsonpointer": "^5.0.1",
- "lodash": "^4.17.21",
- "lodash-es": "^4.17.21",
- "react-is": "^18.2.0"
- },
- "dependencies": {
- "react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
- }
- }
- },
- "@sinonjs/commons": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
- "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "11.2.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz",
- "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^3.0.0"
- }
- },
- "@sinonjs/samsam": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz",
- "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^2.0.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- },
- "dependencies": {
- "@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- }
- }
- },
- "@sinonjs/text-encoding": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
- "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
- "dev": true
- },
- "@tootallnate/once": {
- "version": "1.1.2",
- "dev": true
- },
- "@types/chai": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz",
- "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==",
- "dev": true
- },
- "@types/chai-as-promised": {
- "version": "7.1.8",
- "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz",
- "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==",
- "dev": true,
- "requires": {
- "@types/chai": "*"
- }
- },
- "@types/eslint": {
- "version": "8.44.2",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz",
- "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==",
- "dev": true,
- "requires": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "@types/eslint-scope": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
- "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
- "dev": true,
- "requires": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
- "@types/estree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
- "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
- "dev": true
- },
- "@types/json-schema": {
- "version": "7.0.12",
- "dev": true
- },
- "@types/json5": {
- "version": "0.0.29",
- "dev": true
- },
- "@types/mocha": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
- "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==",
- "dev": true
- },
- "@types/node": {
- "version": "16.18.43",
- "dev": true
- },
- "@types/node-fetch": {
- "version": "2.6.11",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz",
- "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "form-data": "^4.0.0"
- }
- },
- "@types/prop-types": {
- "version": "15.7.5",
- "dev": true
- },
- "@types/react": {
- "version": "18.2.21",
- "dev": true,
- "requires": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- }
- },
- "@types/scheduler": {
- "version": "0.16.3",
- "dev": true
- },
- "@types/semver": {
- "version": "7.5.0",
- "dev": true
- },
- "@types/sinon": {
- "version": "17.0.3",
- "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz",
- "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==",
- "dev": true,
- "requires": {
- "@types/sinonjs__fake-timers": "*"
- }
- },
- "@types/sinonjs__fake-timers": {
- "version": "8.1.5",
- "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz",
- "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==",
- "dev": true
- },
- "@types/webpack-env": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.1.tgz",
- "integrity": "sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==",
- "dev": true
- },
- "@types/ws": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz",
- "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@typescript-eslint/eslint-plugin": {
- "version": "6.4.1",
- "dev": true,
- "requires": {
- "@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.4.1",
- "@typescript-eslint/type-utils": "6.4.1",
- "@typescript-eslint/utils": "6.4.1",
- "@typescript-eslint/visitor-keys": "6.4.1",
- "debug": "^4.3.4",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.4",
- "natural-compare": "^1.4.0",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- }
- },
- "@typescript-eslint/eslint-plugin-tslint": {
- "version": "6.4.1",
- "dev": true,
- "requires": {
- "@typescript-eslint/utils": "6.4.1"
- }
- },
- "@typescript-eslint/parser": {
- "version": "6.4.1",
- "dev": true,
- "requires": {
- "@typescript-eslint/scope-manager": "6.4.1",
- "@typescript-eslint/types": "6.4.1",
- "@typescript-eslint/typescript-estree": "6.4.1",
- "@typescript-eslint/visitor-keys": "6.4.1",
- "debug": "^4.3.4"
- }
- },
- "@typescript-eslint/scope-manager": {
- "version": "6.4.1",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "6.4.1",
- "@typescript-eslint/visitor-keys": "6.4.1"
- }
- },
- "@typescript-eslint/type-utils": {
- "version": "6.4.1",
- "dev": true,
- "requires": {
- "@typescript-eslint/typescript-estree": "6.4.1",
- "@typescript-eslint/utils": "6.4.1",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.0.1"
- }
- },
- "@typescript-eslint/types": {
- "version": "6.4.1",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "6.4.1",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "6.4.1",
- "@typescript-eslint/visitor-keys": "6.4.1",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- }
- },
- "@typescript-eslint/utils": {
- "version": "6.4.1",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.4.1",
- "@typescript-eslint/types": "6.4.1",
- "@typescript-eslint/typescript-estree": "6.4.1",
- "semver": "^7.5.4"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "6.4.1",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "6.4.1",
- "eslint-visitor-keys": "^3.4.1"
- }
- },
- "@vscode/dts": {
- "version": "0.4.0",
- "dev": true,
- "requires": {
- "https-proxy-agent": "^7.0.0",
- "minimist": "^1.2.8",
- "prompts": "^2.4.2"
- },
- "dependencies": {
- "agent-base": {
- "version": "7.1.0",
- "dev": true,
- "requires": {
- "debug": "^4.3.4"
- }
- },
- "https-proxy-agent": {
- "version": "7.0.1",
- "dev": true,
- "requires": {
- "agent-base": "^7.0.2",
- "debug": "4"
- }
- }
- }
- },
- "@vscode/extension-telemetry": {
- "version": "0.7.7",
- "requires": {
- "@microsoft/1ds-core-js": "^3.2.9",
- "@microsoft/1ds-post-js": "^3.2.9",
- "@microsoft/applicationinsights-web-basic": "^2.8.11",
- "applicationinsights": "2.5.0"
- }
- },
- "@vscode/jupyter-extension": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/@vscode/jupyter-extension/-/jupyter-extension-0.0.7.tgz",
- "integrity": "sha512-kpgHnBnioYh9M14UwtYHwpl/921xRP96ZWFfNqLkQWhDVbxAoPZB1FAqBqSxkONHUZdsUxUBmlOj07QXEQn2zQ==",
- "dev": true
- },
- "@vscode/test-electron": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.4.tgz",
- "integrity": "sha512-eWzIqXMhvlcoXfEFNWrVu/yYT5w6De+WZXR/bafUQhAp8+8GkQo95Oe14phwiRUPv8L+geAKl/QM2+PoT3YW3g==",
- "dev": true,
- "requires": {
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "jszip": "^3.10.1",
- "semver": "^7.5.2"
- }
- },
- "@vscode/test-web": {
- "version": "0.0.56",
- "resolved": "https://registry.npmjs.org/@vscode/test-web/-/test-web-0.0.56.tgz",
- "integrity": "sha512-lR688n+D6A9odw+IZ5cU8CYr2YXLB61bGgyZpPVJe/sJy4/DYX5CAxPb7Wj9ZMYL41CTvWq5DeXtfCjlabPcYA==",
- "dev": true,
- "requires": {
- "@koa/cors": "^5.0.0",
- "@koa/router": "^12.0.1",
- "@playwright/browser-chromium": "^1.45.0",
- "glob": "^10.4.2",
- "gunzip-maybe": "^1.4.2",
- "http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.4",
- "koa": "^2.15.3",
- "koa-morgan": "^1.0.1",
- "koa-mount": "^4.0.0",
- "koa-static": "^5.0.0",
- "minimist": "^1.2.8",
- "playwright": "^1.45.0",
- "tar-fs": "^3.0.6",
- "vscode-uri": "^3.0.8"
- },
- "dependencies": {
- "agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "dev": true,
- "requires": {
- "debug": "^4.3.4"
- }
- },
- "http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "dev": true,
- "requires": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- }
- },
- "https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
- "dev": true,
- "requires": {
- "agent-base": "^7.0.2",
- "debug": "4"
- }
- }
- }
- },
- "@webassemblyjs/ast": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
- "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-numbers": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
- "dev": true
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
- "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
- "dev": true
- },
- "@webassemblyjs/helper-numbers": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
- "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
- "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
- "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
- "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
- "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6",
- "@webassemblyjs/wasm-opt": "1.11.6",
- "@webassemblyjs/wasm-parser": "1.11.6",
- "@webassemblyjs/wast-printer": "1.11.6"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
- "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
- "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-buffer": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.11.6",
- "@webassemblyjs/wasm-parser": "1.11.6"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
- "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
- "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.6",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webpack-cli/configtest": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
- "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
- "dev": true,
- "requires": {}
- },
- "@webpack-cli/info": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
- "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
- "dev": true,
- "requires": {}
- },
- "@webpack-cli/serve": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
- "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
- "dev": true,
- "requires": {}
- },
- "@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "dev": true,
- "requires": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- }
- },
- "acorn": {
- "version": "8.10.0",
- "dev": true
- },
- "acorn-import-assertions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
- "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
- "dev": true,
- "requires": {}
- },
- "acorn-jsx": {
- "version": "5.3.2",
- "dev": true,
- "requires": {}
- },
- "agent-base": {
- "version": "6.0.2",
- "requires": {
- "debug": "4"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.1",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "applicationinsights": {
- "version": "2.5.0",
- "requires": {
- "@azure/core-auth": "^1.4.0",
- "@azure/core-rest-pipeline": "^1.10.0",
- "@microsoft/applicationinsights-web-snippet": "^1.0.1",
- "@opentelemetry/api": "^1.0.4",
- "@opentelemetry/core": "^1.0.1",
- "@opentelemetry/sdk-trace-base": "^1.0.1",
- "@opentelemetry/semantic-conventions": "^1.0.1",
- "cls-hooked": "^4.2.2",
- "continuation-local-storage": "^3.2.1",
- "diagnostic-channel": "1.1.0",
- "diagnostic-channel-publishers": "1.0.5"
- }
- },
- "are-docs-informative": {
- "version": "0.0.2",
- "dev": true
- },
- "argparse": {
- "version": "2.0.1",
- "dev": true
- },
- "aria-query": {
- "version": "5.3.0",
- "dev": true,
- "peer": true,
- "requires": {
- "dequal": "^2.0.3"
- }
- },
- "array-buffer-byte-length": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
- }
- },
- "array-includes": {
- "version": "3.1.6",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "is-string": "^1.0.7"
- }
- },
- "array-union": {
- "version": "2.1.0",
- "dev": true
- },
- "array.prototype.findlastindex": {
- "version": "1.2.2",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.1.3"
- }
- },
- "array.prototype.flat": {
- "version": "1.3.1",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- }
- },
- "array.prototype.flatmap": {
- "version": "1.3.1",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- }
- },
- "array.prototype.tosorted": {
- "version": "1.1.1",
- "dev": true,
- "peer": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.1.3"
- }
- },
- "arraybuffer.prototype.slice": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
- "is-shared-array-buffer": "^1.0.2"
- }
- },
- "assert": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
- "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "is-nan": "^1.3.2",
- "object-is": "^1.1.5",
- "object.assign": "^4.1.4",
- "util": "^0.12.5"
- }
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "ast-types-flow": {
- "version": "0.0.7",
- "dev": true,
- "peer": true
- },
- "async-hook-jl": {
- "version": "1.7.6",
- "requires": {
- "stack-chain": "^1.3.7"
- }
- },
- "async-listener": {
- "version": "0.6.10",
- "requires": {
- "semver": "^5.3.0",
- "shimmer": "^1.1.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.2"
- }
- }
- },
- "asynciterator.prototype": {
- "version": "1.0.0",
- "dev": true,
- "peer": true,
- "requires": {
- "has-symbols": "^1.0.3"
- }
- },
- "asynckit": {
- "version": "0.4.0"
- },
- "available-typed-arrays": {
- "version": "1.0.5"
- },
- "axe-core": {
- "version": "4.7.2",
- "dev": true,
- "peer": true
- },
- "axobject-query": {
- "version": "3.2.1",
- "dev": true,
- "peer": true,
- "requires": {
- "dequal": "^2.0.3"
- }
- },
- "b4a": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
- "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "dev": true
- },
- "bare-events": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
- "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
- "dev": true,
- "optional": true
- },
- "bare-fs": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz",
- "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==",
- "dev": true,
- "optional": true,
- "requires": {
- "bare-events": "^2.0.0",
- "bare-path": "^2.0.0",
- "bare-stream": "^2.0.0"
- }
- },
- "bare-os": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz",
- "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==",
- "dev": true,
- "optional": true
- },
- "bare-path": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz",
- "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==",
- "dev": true,
- "optional": true,
- "requires": {
- "bare-os": "^2.1.0"
- }
- },
- "bare-stream": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz",
- "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "streamx": "^2.18.0"
- }
- },
- "base64-js": {
- "version": "1.5.1"
- },
- "basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.2"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
- }
- },
- "big-integer": {
- "version": "1.6.51",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
- },
- "bplist-parser": {
- "version": "0.2.0",
- "dev": true,
- "requires": {
- "big-integer": "^1.6.44"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "requires": {
- "fill-range": "^7.1.1"
- }
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "browserify-zlib": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
- "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==",
- "dev": true,
- "requires": {
- "pako": "~0.2.0"
- },
- "dependencies": {
- "pako": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
- "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
- "dev": true
- }
- }
- },
- "browserslist": {
- "version": "4.21.10",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz",
- "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001517",
- "electron-to-chromium": "^1.4.477",
- "node-releases": "^2.0.13",
- "update-browserslist-db": "^1.0.11"
- }
- },
- "buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "builtin-modules": {
- "version": "3.3.0",
- "dev": true
- },
- "bundle-name": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "run-applescript": "^5.0.0"
- }
- },
- "cache-content-type": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
- "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==",
- "dev": true,
- "requires": {
- "mime-types": "^2.1.18",
- "ylru": "^1.2.0"
- }
- },
- "call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "requires": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "dev": true
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30001534",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz",
- "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==",
- "dev": true
- },
- "chai": {
- "version": "4.3.8",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz",
- "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^4.1.2",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- }
- },
- "chai-as-promised": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz",
- "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==",
- "dev": true,
- "requires": {
- "check-error": "^1.0.2"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
- }
- },
- "chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
- "dev": true
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- }
- }
- },
- "clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- }
- },
- "cls-hooked": {
- "version": "4.2.2",
- "requires": {
- "async-hook-jl": "^1.7.6",
- "emitter-listener": "^1.0.1",
- "semver": "^5.4.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.2"
- }
- }
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
- "dev": true
- },
- "color-convert": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "dev": true
- },
- "colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.20.3",
- "dev": true
- },
- "comment-parser": {
- "version": "1.4.0",
- "dev": true
- },
- "compute-gcd": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz",
- "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==",
- "requires": {
- "validate.io-array": "^1.0.3",
- "validate.io-function": "^1.0.2",
- "validate.io-integer-array": "^1.0.0"
- }
- },
- "compute-lcm": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz",
- "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==",
- "requires": {
- "compute-gcd": "^1.2.1",
- "validate.io-array": "^1.0.3",
- "validate.io-function": "^1.0.2",
- "validate.io-integer-array": "^1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "dev": true
- },
- "confusing-browser-globals": {
- "version": "1.0.11",
- "dev": true
- },
- "content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.2.1"
- }
- },
- "content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "dev": true
- },
- "continuation-local-storage": {
- "version": "3.2.1",
- "requires": {
- "async-listener": "^0.6.0",
- "emitter-listener": "^1.1.1"
- }
- },
- "cookies": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz",
- "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==",
- "dev": true,
- "requires": {
- "depd": "~2.0.0",
- "keygrip": "~1.1.0"
- }
- },
- "core-util-is": {
- "version": "1.0.3",
- "dev": true
- },
- "cross-spawn": {
- "version": "7.0.3",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "csstype": {
- "version": "3.1.2",
- "dev": true
- },
- "damerau-levenshtein": {
- "version": "1.0.8",
- "dev": true,
- "peer": true
- },
- "debug": {
- "version": "4.3.4",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
- "deep-eql": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
- "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==",
- "dev": true
- },
- "deep-is": {
- "version": "0.1.4",
- "dev": true
- },
- "default-browser": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "bundle-name": "^3.0.0",
- "default-browser-id": "^3.0.0",
- "execa": "^7.1.1",
- "titleize": "^3.0.0"
- }
- },
- "default-browser-id": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "bplist-parser": "^0.2.0",
- "untildify": "^4.0.0"
- }
- },
- "define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "requires": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- }
- },
- "define-lazy-prop": {
- "version": "3.0.0",
- "dev": true
- },
- "define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- }
- },
- "delayed-stream": {
- "version": "1.0.0"
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
- "dev": true
- },
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true
- },
- "dequal": {
- "version": "2.0.3",
- "dev": true,
- "peer": true
- },
- "destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "dev": true
- },
- "diagnostic-channel": {
- "version": "1.1.0",
- "requires": {
- "semver": "^5.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.2"
- }
- }
- },
- "diagnostic-channel-publishers": {
- "version": "1.0.5",
- "requires": {}
- },
- "diff": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
- "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
- "dev": true
- },
- "dir-glob": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "dev": true
- },
- "electron-to-chromium": {
- "version": "1.4.520",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.520.tgz",
- "integrity": "sha512-Frfus2VpYADsrh1lB3v/ft/WVFlVzOIm+Q0p7U7VqHI6qr7NWHYKe+Wif3W50n7JAFoBsWVsoU0+qDks6WQ60g==",
- "dev": true
- },
- "emitter-listener": {
- "version": "1.1.2",
- "requires": {
- "shimmer": "^1.2.0"
- }
- },
- "emoji-regex": {
- "version": "9.2.2",
- "dev": true
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "enhanced-resolve": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
- "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- }
- },
- "envinfo": {
- "version": "7.10.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz",
- "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==",
- "dev": true
- },
- "es-abstract": {
- "version": "1.22.1",
- "dev": true,
- "requires": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.1",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "es-set-tostringtag": "^2.0.1",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.2.1",
- "get-symbol-description": "^1.0.0",
- "globalthis": "^1.0.3",
- "gopd": "^1.0.1",
- "has": "^1.0.3",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
- "is-callable": "^1.2.7",
- "is-negative-zero": "^2.0.2",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
- "is-string": "^1.0.7",
- "is-typed-array": "^1.1.10",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.12.3",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.0",
- "safe-array-concat": "^1.0.0",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.7",
- "string.prototype.trimend": "^1.0.6",
- "string.prototype.trimstart": "^1.0.6",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.10"
- }
- },
- "es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "requires": {
- "get-intrinsic": "^1.2.4"
- }
- },
- "es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
- },
- "es-iterator-helpers": {
- "version": "1.0.13",
- "dev": true,
- "peer": true,
- "requires": {
- "asynciterator.prototype": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.21.3",
- "es-set-tostringtag": "^2.0.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.2.1",
- "globalthis": "^1.0.3",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "iterator.prototype": "^1.1.0",
- "safe-array-concat": "^1.0.0"
- }
- },
- "es-module-lexer": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz",
- "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==",
- "dev": true
- },
- "es-set-tostringtag": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "has-tostringtag": "^1.0.0"
- }
- },
- "es-shim-unscopables": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "esbuild": {
- "version": "0.19.2",
- "dev": true,
- "requires": {
- "@esbuild/android-arm": "0.19.2",
- "@esbuild/android-arm64": "0.19.2",
- "@esbuild/android-x64": "0.19.2",
- "@esbuild/darwin-arm64": "0.19.2",
- "@esbuild/darwin-x64": "0.19.2",
- "@esbuild/freebsd-arm64": "0.19.2",
- "@esbuild/freebsd-x64": "0.19.2",
- "@esbuild/linux-arm": "0.19.2",
- "@esbuild/linux-arm64": "0.19.2",
- "@esbuild/linux-ia32": "0.19.2",
- "@esbuild/linux-loong64": "0.19.2",
- "@esbuild/linux-mips64el": "0.19.2",
- "@esbuild/linux-ppc64": "0.19.2",
- "@esbuild/linux-riscv64": "0.19.2",
- "@esbuild/linux-s390x": "0.19.2",
- "@esbuild/linux-x64": "0.19.2",
- "@esbuild/netbsd-x64": "0.19.2",
- "@esbuild/openbsd-x64": "0.19.2",
- "@esbuild/sunos-x64": "0.19.2",
- "@esbuild/win32-arm64": "0.19.2",
- "@esbuild/win32-ia32": "0.19.2",
- "@esbuild/win32-x64": "0.19.2"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "dev": true
- },
- "eslint": {
- "version": "8.47.0",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.2",
- "@eslint/js": "^8.47.0",
- "@humanwhocodes/config-array": "^0.11.10",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- }
- },
- "eslint-config-airbnb": {
- "version": "19.0.4",
- "dev": true,
- "requires": {
- "eslint-config-airbnb-base": "^15.0.0",
- "object.assign": "^4.1.2",
- "object.entries": "^1.1.5"
- }
- },
- "eslint-config-airbnb-base": {
- "version": "15.0.0",
- "dev": true,
- "requires": {
- "confusing-browser-globals": "^1.0.10",
- "object.assign": "^4.1.2",
- "object.entries": "^1.1.5",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.1",
- "dev": true
- }
- }
- },
- "eslint-config-prettier": {
- "version": "8.10.0",
- "dev": true,
- "requires": {}
- },
- "eslint-import-resolver-node": {
- "version": "0.3.9",
- "dev": true,
- "requires": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "eslint-module-utils": {
- "version": "2.8.0",
- "dev": true,
- "requires": {
- "debug": "^3.2.7"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "eslint-plugin-header": {
- "version": "3.1.1",
- "dev": true,
- "requires": {}
- },
- "eslint-plugin-import": {
- "version": "2.28.1",
- "dev": true,
- "requires": {
- "array-includes": "^3.1.6",
- "array.prototype.findlastindex": "^1.2.2",
- "array.prototype.flat": "^1.3.1",
- "array.prototype.flatmap": "^1.3.1",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.7",
- "eslint-module-utils": "^2.8.0",
- "has": "^1.0.3",
- "is-core-module": "^2.13.0",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.6",
- "object.groupby": "^1.0.0",
- "object.values": "^1.1.6",
- "semver": "^6.3.1",
- "tsconfig-paths": "^3.14.2"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "doctrine": {
- "version": "2.1.0",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "semver": {
- "version": "6.3.1",
- "dev": true
- }
- }
- },
- "eslint-plugin-jsdoc": {
- "version": "46.5.0",
- "dev": true,
- "requires": {
- "@es-joy/jsdoccomment": "~0.40.1",
- "are-docs-informative": "^0.0.2",
- "comment-parser": "1.4.0",
- "debug": "^4.3.4",
- "escape-string-regexp": "^4.0.0",
- "esquery": "^1.5.0",
- "is-builtin-module": "^3.2.1",
- "semver": "^7.5.4",
- "spdx-expression-parse": "^3.0.1"
- }
- },
- "eslint-plugin-jsx-a11y": {
- "version": "6.7.1",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/runtime": "^7.20.7",
- "aria-query": "^5.1.3",
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "ast-types-flow": "^0.0.7",
- "axe-core": "^4.6.2",
- "axobject-query": "^3.1.1",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "has": "^1.0.3",
- "jsx-ast-utils": "^3.3.3",
- "language-tags": "=1.0.5",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.1",
- "dev": true,
- "peer": true
- }
- }
- },
- "eslint-plugin-no-null": {
- "version": "1.0.2",
- "dev": true,
- "requires": {}
- },
- "eslint-plugin-no-only-tests": {
- "version": "3.1.0",
- "dev": true
- },
- "eslint-plugin-prefer-arrow": {
- "version": "1.2.3",
- "dev": true,
- "requires": {}
- },
- "eslint-plugin-prettier": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "prettier-linter-helpers": "^1.0.0",
- "synckit": "^0.8.5"
- }
- },
- "eslint-plugin-react": {
- "version": "7.33.2",
- "dev": true,
- "peer": true,
- "requires": {
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "array.prototype.tosorted": "^1.1.1",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.0.12",
- "estraverse": "^5.3.0",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "object.hasown": "^1.1.2",
- "object.values": "^1.1.6",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.4",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.8"
- },
- "dependencies": {
- "doctrine": {
- "version": "2.1.0",
- "dev": true,
- "peer": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "resolve": {
- "version": "2.0.0-next.4",
- "dev": true,
- "peer": true,
- "requires": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "semver": {
- "version": "6.3.1",
- "dev": true,
- "peer": true
- }
- }
- },
- "eslint-plugin-react-hooks": {
- "version": "4.6.0",
- "dev": true,
- "peer": true,
- "requires": {}
- },
- "eslint-scope": {
- "version": "7.2.2",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "3.4.3",
- "dev": true
- },
- "espree": {
- "version": "9.6.1",
- "dev": true,
- "requires": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "dev": true,
- "peer": true
- },
- "esquery": {
- "version": "1.5.0",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- }
- },
- "estraverse": {
- "version": "5.3.0",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "dev": true
- },
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
- },
- "execa": {
- "version": "7.2.0",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.1",
- "human-signals": "^4.3.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^3.0.7",
- "strip-final-newline": "^3.0.0"
- },
- "dependencies": {
- "is-stream": {
- "version": "3.0.0",
- "dev": true
- }
- }
- },
- "fast-deep-equal": {
- "version": "3.1.3"
- },
- "fast-diff": {
- "version": "1.3.0",
- "dev": true
- },
- "fast-fifo": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
- "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
- "dev": true
- },
- "fast-glob": {
- "version": "3.3.1",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "dev": true
- },
- "fast-uri": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
- "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw=="
- },
- "fastest-levenshtein": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
- "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
- "dev": true
- },
- "fastq": {
- "version": "1.15.0",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "file-entry-cache": {
- "version": "6.0.1",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "flat-cache": {
- "version": "3.0.4",
- "dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- }
- },
- "flatted": {
- "version": "3.2.7",
- "dev": true
- },
- "for-each": {
- "version": "0.3.3",
- "requires": {
- "is-callable": "^1.1.3"
- }
- },
- "foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "dependencies": {
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true
- }
- }
- },
- "form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "dev": true
- },
- "fs.realpath": {
- "version": "1.0.0",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.3",
- "optional": true
- },
- "function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
- },
- "function.prototype.name": {
- "version": "1.1.5",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0",
- "functions-have-names": "^1.2.2"
- }
- },
- "functions-have-names": {
- "version": "1.2.3",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "requires": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- }
- },
- "get-stream": {
- "version": "6.0.1",
- "dev": true
- },
- "get-symbol-description": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- }
- },
- "glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dev": true,
- "requires": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "glob-parent": {
- "version": "6.0.2",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.3"
- }
- },
- "glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "dev": true
- },
- "globals": {
- "version": "13.21.0",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "globalthis": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3"
- }
- },
- "globby": {
- "version": "11.1.0",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- }
- },
- "gopd": {
- "version": "1.0.1",
- "requires": {
- "get-intrinsic": "^1.1.3"
- }
- },
- "graceful-fs": {
- "version": "4.2.11",
- "dev": true
- },
- "graphemer": {
- "version": "1.4.0",
- "dev": true
- },
- "gunzip-maybe": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz",
- "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==",
- "dev": true,
- "requires": {
- "browserify-zlib": "^0.1.4",
- "is-deflate": "^1.0.0",
- "is-gzip": "^1.0.0",
- "peek-stream": "^1.1.0",
- "pumpify": "^1.3.3",
- "through2": "^2.0.3"
- }
- },
- "has": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-bigints": {
- "version": "1.0.2",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "dev": true
- },
- "has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "requires": {
- "es-define-property": "^1.0.0"
- }
- },
- "has-proto": {
- "version": "1.0.1"
- },
- "has-symbols": {
- "version": "1.0.3"
- },
- "has-tostringtag": {
- "version": "1.0.0",
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "requires": {
- "function-bind": "^1.1.2"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "http-assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz",
- "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==",
- "dev": true,
- "requires": {
- "deep-equal": "~1.0.1",
- "http-errors": "~1.8.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true
- },
- "http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.1"
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true
- }
- }
- },
- "http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dev": true,
- "requires": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- }
- },
- "http-proxy-agent": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.1",
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "human-signals": {
- "version": "4.3.1",
- "dev": true
- },
- "ieee754": {
- "version": "1.2.1"
- },
- "ignore": {
- "version": "5.2.4",
- "dev": true
- },
- "immediate": {
- "version": "3.0.6",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.0",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
- "dev": true,
- "requires": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4"
- },
- "internal-slot": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- }
- },
- "interpret": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
- "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
- "dev": true
- },
- "is-arguments": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
- "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-array-buffer": {
- "version": "3.0.2",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
- }
- },
- "is-async-function": {
- "version": "2.0.0",
- "dev": true,
- "peer": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-bigint": {
- "version": "1.0.4",
- "dev": true,
- "requires": {
- "has-bigints": "^1.0.1"
- }
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-boolean-object": {
- "version": "1.1.2",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-builtin-module": {
- "version": "3.2.1",
- "dev": true,
- "requires": {
- "builtin-modules": "^3.3.0"
- }
- },
- "is-callable": {
- "version": "1.2.7"
- },
- "is-core-module": {
- "version": "2.13.0",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-date-object": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-deflate": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz",
- "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==",
- "dev": true
- },
- "is-docker": {
- "version": "3.0.0",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "dev": true
- },
- "is-finalizationregistry": {
- "version": "1.0.2",
- "dev": true,
- "peer": true,
- "requires": {
- "call-bind": "^1.0.2"
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-generator-function": {
- "version": "1.0.10",
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-glob": {
- "version": "4.0.3",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-gzip": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
- "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==",
- "dev": true
- },
- "is-inside-container": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "is-docker": "^3.0.0"
- }
- },
- "is-map": {
- "version": "2.0.2",
- "dev": true,
- "peer": true
- },
- "is-nan": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
- "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3"
- }
- },
- "is-negative-zero": {
- "version": "2.0.2",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-number-object": {
- "version": "1.0.7",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-path-inside": {
- "version": "3.0.3",
- "dev": true
- },
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-regex": {
- "version": "1.1.4",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-set": {
- "version": "2.0.2",
- "dev": true,
- "peer": true
- },
- "is-shared-array-buffer": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2"
- }
- },
- "is-string": {
- "version": "1.0.7",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-symbol": {
- "version": "1.0.4",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "is-typed-array": {
- "version": "1.1.12",
- "requires": {
- "which-typed-array": "^1.1.11"
- }
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "is-weakmap": {
- "version": "2.0.1",
- "dev": true,
- "peer": true
- },
- "is-weakref": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2"
- }
- },
- "is-weakset": {
- "version": "2.0.2",
- "dev": true,
- "peer": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- }
- },
- "is-wsl": {
- "version": "2.2.0",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0"
- },
- "dependencies": {
- "is-docker": {
- "version": "2.2.1",
- "dev": true
- }
- }
- },
- "isarray": {
- "version": "1.0.0",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "dev": true
- },
- "isomorphic-ws": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz",
- "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==",
- "requires": {}
- },
- "isomorphic.js": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz",
- "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw=="
- },
- "iterator.prototype": {
- "version": "1.1.0",
- "dev": true,
- "peer": true,
- "requires": {
- "define-properties": "^1.1.4",
- "get-intrinsic": "^1.1.3",
- "has-symbols": "^1.0.3",
- "has-tostringtag": "^1.0.0",
- "reflect.getprototypeof": "^1.0.3"
- }
- },
- "jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "jest-worker": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "peer": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "jsdoc-type-pratt-parser": {
- "version": "4.0.0",
- "dev": true
- },
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "json-schema-compare": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz",
- "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==",
- "requires": {
- "lodash": "^4.17.4"
- }
- },
- "json-schema-merge-allof": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz",
- "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==",
- "requires": {
- "compute-lcm": "^1.1.2",
- "json-schema-compare": "^0.2.2",
- "lodash": "^4.17.20"
- }
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "dev": true
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
- },
- "jsonpointer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
- "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ=="
- },
- "jsx-ast-utils": {
- "version": "3.3.5",
- "dev": true,
- "peer": true,
- "requires": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- }
- },
- "jszip": {
- "version": "3.10.1",
- "dev": true,
- "requires": {
- "lie": "~3.3.0",
- "pako": "~1.0.2",
- "readable-stream": "~2.3.6",
- "setimmediate": "^1.0.5"
- }
- },
- "just-extend": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz",
- "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==",
- "dev": true
- },
- "keygrip": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
- "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
- "dev": true,
- "requires": {
- "tsscmp": "1.0.6"
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "kleur": {
- "version": "3.0.3",
- "dev": true
- },
- "koa": {
- "version": "2.15.3",
- "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.3.tgz",
- "integrity": "sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==",
- "dev": true,
- "requires": {
- "accepts": "^1.3.5",
- "cache-content-type": "^1.0.0",
- "content-disposition": "~0.5.2",
- "content-type": "^1.0.4",
- "cookies": "~0.9.0",
- "debug": "^4.3.2",
- "delegates": "^1.0.0",
- "depd": "^2.0.0",
- "destroy": "^1.0.4",
- "encodeurl": "^1.0.2",
- "escape-html": "^1.0.3",
- "fresh": "~0.5.2",
- "http-assert": "^1.3.0",
- "http-errors": "^1.6.3",
- "is-generator-function": "^1.0.7",
- "koa-compose": "^4.1.0",
- "koa-convert": "^2.0.0",
- "on-finished": "^2.3.0",
- "only": "~0.0.2",
- "parseurl": "^1.3.2",
- "statuses": "^1.5.0",
- "type-is": "^1.6.16",
- "vary": "^1.1.2"
- },
- "dependencies": {
- "http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.1"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true
- }
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true
- }
- }
- },
- "koa-compose": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz",
- "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==",
- "dev": true
- },
- "koa-convert": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz",
- "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==",
- "dev": true,
- "requires": {
- "co": "^4.6.0",
- "koa-compose": "^4.1.0"
- }
- },
- "koa-morgan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/koa-morgan/-/koa-morgan-1.0.1.tgz",
- "integrity": "sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==",
- "dev": true,
- "requires": {
- "morgan": "^1.6.1"
- }
- },
- "koa-mount": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/koa-mount/-/koa-mount-4.0.0.tgz",
- "integrity": "sha512-rm71jaA/P+6HeCpoRhmCv8KVBIi0tfGuO/dMKicbQnQW/YJntJ6MnnspkodoA4QstMVEZArsCphmd0bJEtoMjQ==",
- "dev": true,
- "requires": {
- "debug": "^4.0.1",
- "koa-compose": "^4.1.0"
- }
- },
- "koa-send": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz",
- "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "http-errors": "^1.7.3",
- "resolve-path": "^1.4.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true
- },
- "http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.1"
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true
- }
- }
- },
- "koa-static": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz",
- "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==",
- "dev": true,
- "requires": {
- "debug": "^3.1.0",
- "koa-send": "^5.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "language-subtag-registry": {
- "version": "0.3.22",
- "dev": true,
- "peer": true
- },
- "language-tags": {
- "version": "1.0.5",
- "dev": true,
- "peer": true,
- "requires": {
- "language-subtag-registry": "~0.3.2"
- }
- },
- "levn": {
- "version": "0.4.1",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "lib0": {
- "version": "0.2.95",
- "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.95.tgz",
- "integrity": "sha512-St5XGDh5omvNawGkAOa7CFRjxl4xEKLj9DxgT8Nl7rmrD6l2WRTngvmZGhJKRaniROterT0RDVdnwLlU9PiEOg==",
- "requires": {
- "isomorphic.js": "^0.2.4"
- }
- },
- "lie": {
- "version": "3.3.0",
- "dev": true,
- "requires": {
- "immediate": "~3.0.5"
- }
- },
- "loader-runner": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
- "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
- "dev": true
- },
- "locate-path": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21"
- },
- "lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
- },
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "dev": true
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- }
- },
- "loose-envify": {
- "version": "1.4.0",
- "peer": true,
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "loupe": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
- "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.0"
- }
- },
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "dev": true
- },
- "merge-stream": {
- "version": "2.0.0",
- "dev": true
- },
- "merge2": {
- "version": "1.4.1",
- "dev": true
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.5",
- "dev": true,
- "requires": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- }
- },
- "mime-db": {
- "version": "1.52.0"
- },
- "mime-types": {
- "version": "2.1.35",
- "requires": {
- "mime-db": "1.52.0"
- }
- },
- "mimic-fn": {
- "version": "4.0.0",
- "dev": true
- },
- "minimatch": {
- "version": "3.1.2",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.8"
- },
- "minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true
- },
- "mocha": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
- "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
- "dev": true,
- "requires": {
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.3",
- "debug": "4.3.4",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.2.0",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "5.0.1",
- "ms": "2.1.3",
- "nanoid": "3.3.3",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "workerpool": "6.2.1",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "dependencies": {
- "glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "dependencies": {
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
- }
- },
- "minimatch": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
- "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- }
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "morgan": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
- "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
- "dev": true,
- "requires": {
- "basic-auth": "~2.0.1",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-finished": "~2.3.0",
- "on-headers": "~1.0.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- }
- }
- },
- "ms": {
- "version": "2.1.2"
- },
- "nanoid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
- "dev": true
- },
- "natural-compare": {
- "version": "1.4.0",
- "dev": true
- },
- "negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "dev": true
- },
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "nise": {
- "version": "5.1.9",
- "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz",
- "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^3.0.0",
- "@sinonjs/fake-timers": "^11.2.2",
- "@sinonjs/text-encoding": "^0.7.2",
- "just-extend": "^6.2.0",
- "path-to-regexp": "^6.2.1"
- }
- },
- "node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
- "node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
- "dev": true
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "npm-run-path": {
- "version": "5.1.0",
- "dev": true,
- "requires": {
- "path-key": "^4.0.0"
- },
- "dependencies": {
- "path-key": {
- "version": "4.0.0",
- "dev": true
- }
- }
- },
- "object-assign": {
- "version": "4.1.1",
- "dev": true,
- "peer": true
- },
- "object-inspect": {
- "version": "1.12.3",
- "dev": true
- },
- "object-is": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
- "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1"
- }
- },
- "object-keys": {
- "version": "1.1.1",
- "dev": true
- },
- "object.assign": {
- "version": "4.1.4",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
- }
- },
- "object.entries": {
- "version": "1.1.6",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "object.fromentries": {
- "version": "2.0.6",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "object.groupby": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.21.2",
- "get-intrinsic": "^1.2.1"
- }
- },
- "object.hasown": {
- "version": "1.1.2",
- "dev": true,
- "peer": true,
- "requires": {
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "object.values": {
- "version": "1.1.6",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "mimic-fn": "^4.0.0"
- }
- },
- "only": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
- "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==",
- "dev": true
- },
- "open": {
- "version": "9.1.0",
- "dev": true,
- "requires": {
- "default-browser": "^4.0.0",
- "define-lazy-prop": "^3.0.0",
- "is-inside-container": "^1.0.0",
- "is-wsl": "^2.2.0"
- }
- },
- "optionator": {
- "version": "0.9.3",
- "dev": true,
- "requires": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "package-json-from-dist": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
- "dev": true
- },
- "pako": {
- "version": "1.0.11",
- "dev": true
- },
- "parent-module": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true
- },
- "path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
- "path-exists": {
- "version": "4.0.0",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "dev": true
- },
- "path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "requires": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true
- }
- }
- },
- "path-to-regexp": {
- "version": "6.2.1",
- "dev": true
- },
- "path-type": {
- "version": "4.0.0",
- "dev": true
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "peek-stream": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
- "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "duplexify": "^3.5.0",
- "through2": "^2.0.3"
- }
- },
- "picocolors": {
- "version": "1.0.0",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.1",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- }
- }
- },
- "playwright": {
- "version": "1.45.3",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.3.tgz",
- "integrity": "sha512-QhVaS+lpluxCaioejDZ95l4Y4jSFCsBvl2UZkpeXlzxmqS+aABr5c82YmfMHrL6x27nvrvykJAFpkzT2eWdJww==",
- "dev": true,
- "requires": {
- "fsevents": "2.3.2",
- "playwright-core": "1.45.3"
- },
- "dependencies": {
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true
- }
- }
- },
- "playwright-core": {
- "version": "1.45.3",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.3.tgz",
- "integrity": "sha512-+ym0jNbcjikaOwwSZycFbwkWgfruWvYlJfThKYAlImbxUgdWFO2oW70ojPm4OpE4t6TAo2FY/smM+hpVTtkhDA==",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.2.1",
- "dev": true
- },
- "prettier": {
- "version": "3.0.2",
- "dev": true
- },
- "prettier-linter-helpers": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "fast-diff": "^1.1.2"
- }
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "dev": true
- },
- "prompts": {
- "version": "2.4.2",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- }
- },
- "prop-types": {
- "version": "15.8.1",
- "dev": true,
- "peer": true,
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
- "punycode": {
- "version": "2.3.0",
- "dev": true
- },
- "querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
- },
- "queue-microtask": {
- "version": "1.2.3",
- "dev": true
- },
- "queue-tick": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
- "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "react": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
- "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
- "peer": true,
- "requires": {
- "loose-envify": "^1.1.0"
- }
- },
- "react-is": {
- "version": "16.13.1",
- "dev": true,
- "peer": true
- },
- "readable-stream": {
- "version": "2.3.8",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- }
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "rechoir": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
- "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
- "dev": true,
- "requires": {
- "resolve": "^1.20.0"
- }
- },
- "reflect.getprototypeof": {
- "version": "1.0.3",
- "dev": true,
- "peer": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.1",
- "globalthis": "^1.0.3",
- "which-builtin-type": "^1.1.3"
- }
- },
- "regenerator-runtime": {
- "version": "0.14.0",
- "dev": true,
- "peer": true
- },
- "regexp.prototype.flags": {
- "version": "1.5.0",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "functions-have-names": "^1.2.3"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true
- },
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
- },
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
- },
- "resolve": {
- "version": "1.22.4",
- "dev": true,
- "requires": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "requires": {
- "resolve-from": "^5.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- }
- }
- },
- "resolve-from": {
- "version": "4.0.0",
- "dev": true
- },
- "resolve-path": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz",
- "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==",
- "dev": true,
- "requires": {
- "http-errors": "~1.6.2",
- "path-is-absolute": "1.0.1"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true
- },
- "http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true
- }
- }
- },
- "reusify": {
- "version": "1.0.4",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- },
- "dependencies": {
- "glob": {
- "version": "7.2.3",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
- }
- },
- "run-applescript": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "execa": "^5.0.0"
- },
- "dependencies": {
- "execa": {
- "version": "5.1.1",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- }
- },
- "human-signals": {
- "version": "2.1.0",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.1",
- "dev": true
- },
- "mimic-fn": {
- "version": "2.1.0",
- "dev": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- },
- "onetime": {
- "version": "5.1.2",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "strip-final-newline": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "safe-array-concat": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "has-symbols": "^1.0.3",
- "isarray": "^2.0.5"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.5",
- "dev": true
- }
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "dev": true
- },
- "safe-regex-test": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "is-regex": "^1.1.4"
- }
- },
- "schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- },
- "semver": {
- "version": "7.5.4",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "requires": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- }
- },
- "setimmediate": {
- "version": "1.0.5",
- "dev": true
- },
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- },
- "shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.2"
- }
- },
- "shebang-command": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "dev": true
- },
- "shimmer": {
- "version": "1.2.1"
- },
- "side-channel": {
- "version": "1.0.4",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- }
- },
- "signal-exit": {
- "version": "3.0.7",
- "dev": true
- },
- "sinon": {
- "version": "17.0.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz",
- "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^3.0.0",
- "@sinonjs/fake-timers": "^11.2.2",
- "@sinonjs/samsam": "^8.0.0",
- "diff": "^5.1.0",
- "nise": "^5.1.5",
- "supports-color": "^7.2.0"
- },
- "dependencies": {
- "diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true
- }
- }
- },
- "sisteransi": {
- "version": "1.0.5",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.13",
- "dev": true
- },
- "sprintf-js": {
- "version": "1.0.3",
- "dev": true,
- "peer": true
- },
- "stack-chain": {
- "version": "1.3.7"
- },
- "statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "dev": true
- },
- "stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "requires": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "stream-shift": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
- "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
- "dev": true
- },
- "streamx": {
- "version": "2.18.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
- "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==",
- "dev": true,
- "requires": {
- "bare-events": "^2.2.0",
- "fast-fifo": "^1.3.2",
- "queue-tick": "^1.0.1",
- "text-decoder": "^1.1.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "requires": {
- "safe-buffer": "~5.1.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2"
- }
- }
- },
- "string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "requires": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true
- },
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- }
- }
- },
- "string-width-cjs": {
- "version": "npm:string-width@4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- }
- }
- },
- "string.prototype.matchall": {
- "version": "4.0.8",
- "dev": true,
- "peer": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.3",
- "regexp.prototype.flags": "^1.4.3",
- "side-channel": "^1.0.4"
- }
- },
- "string.prototype.trim": {
- "version": "1.2.7",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.6",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.6",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-ansi-cjs": {
- "version": "npm:strip-ansi@6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-bom": {
- "version": "3.0.0",
- "dev": true
- },
- "strip-final-newline": {
- "version": "3.0.0",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "dev": true
- },
- "synckit": {
- "version": "0.8.5",
- "dev": true,
- "requires": {
- "@pkgr/utils": "^2.3.1",
- "tslib": "^2.5.0"
- }
- },
- "tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true
- },
- "tar-fs": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz",
- "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==",
- "dev": true,
- "requires": {
- "bare-fs": "^2.1.1",
- "bare-path": "^2.1.0",
- "pump": "^3.0.0",
- "tar-stream": "^3.1.5"
- },
- "dependencies": {
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "tar-stream": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
- "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
- "dev": true,
- "requires": {
- "b4a": "^1.6.4",
- "fast-fifo": "^1.2.0",
- "streamx": "^2.15.0"
- }
- },
- "terser": {
- "version": "5.19.4",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz",
- "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==",
- "dev": true,
- "requires": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- }
- },
- "terser-webpack-plugin": {
- "version": "5.3.9",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
- "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.17",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.16.8"
- },
- "dependencies": {
- "serialize-javascript": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
- "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- }
- }
- },
- "text-decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz",
- "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==",
- "dev": true,
- "requires": {
- "b4a": "^1.6.4"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "dev": true
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "dev": true,
- "requires": {
- "setimmediate": "^1.0.4"
- }
- },
- "titleize": {
- "version": "3.0.0",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "dev": true
- },
- "tr46": {
- "version": "0.0.3"
- },
- "ts-api-utils": {
- "version": "1.0.2",
- "dev": true,
- "requires": {}
- },
- "ts-loader": {
- "version": "9.4.4",
- "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz",
- "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "enhanced-resolve": "^5.0.0",
- "micromatch": "^4.0.0",
- "semver": "^7.3.4"
- }
- },
- "ts-mockito": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz",
- "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.5"
- }
- },
- "tsconfig-paths": {
- "version": "3.14.2",
- "dev": true,
- "requires": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- },
- "dependencies": {
- "json5": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- }
- }
- },
- "tsconfig-paths-webpack-plugin": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz",
- "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "enhanced-resolve": "^5.7.0",
- "tsconfig-paths": "^3.9.0"
- }
- },
- "tslib": {
- "version": "2.6.2"
- },
- "tslint": {
- "version": "6.1.3",
- "dev": true,
- "peer": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "builtin-modules": "^1.1.1",
- "chalk": "^2.3.0",
- "commander": "^2.12.1",
- "diff": "^4.0.1",
- "glob": "^7.1.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.3",
- "resolve": "^1.3.2",
- "semver": "^5.3.0",
- "tslib": "^1.13.0",
- "tsutils": "^2.29.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "peer": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "dev": true,
- "peer": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "builtin-modules": {
- "version": "1.1.1",
- "dev": true,
- "peer": true
- },
- "chalk": {
- "version": "2.4.2",
- "dev": true,
- "peer": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "dev": true,
- "peer": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "dev": true,
- "peer": true
- },
- "diff": {
- "version": "4.0.2",
- "dev": true,
- "peer": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "dev": true,
- "peer": true
- },
- "glob": {
- "version": "7.2.3",
- "dev": true,
- "peer": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "dev": true,
- "peer": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "dev": true,
- "peer": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "mkdirp": {
- "version": "0.5.6",
- "dev": true,
- "peer": true,
- "requires": {
- "minimist": "^1.2.6"
- }
- },
- "semver": {
- "version": "5.7.2",
- "dev": true,
- "peer": true
- },
- "supports-color": {
- "version": "5.5.0",
- "dev": true,
- "peer": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "tslib": {
- "version": "1.14.1",
- "dev": true,
- "peer": true
- }
- }
- },
- "tsscmp": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
- "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
- "dev": true
- },
- "tsutils": {
- "version": "2.29.0",
- "dev": true,
- "peer": true,
- "requires": {
- "tslib": "^1.8.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "dev": true,
- "peer": true
- }
- }
- },
- "type-check": {
- "version": "0.4.0",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "type-fest": {
- "version": "0.20.2",
- "dev": true
- },
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dev": true,
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
- "typed-array-buffer": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
- }
- },
- "typed-array-byte-length": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- }
- },
- "typed-array-byte-offset": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- }
- },
- "typed-array-length": {
- "version": "1.0.4",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
- }
- },
- "typescript": {
- "version": "5.2.2",
- "dev": true
- },
- "unbox-primitive": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "untildify": {
- "version": "4.0.0",
- "dev": true
- },
- "update-browserslist-db": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
- "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
- "dev": true,
- "requires": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "requires": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "util": {
- "version": "0.12.5",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
- "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
- "requires": {
- "inherits": "^2.0.3",
- "is-arguments": "^1.0.4",
- "is-generator-function": "^1.0.7",
- "is-typed-array": "^1.1.3",
- "which-typed-array": "^1.1.2"
- }
- },
- "util-deprecate": {
- "version": "1.0.2"
- },
- "validate.io-array": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz",
- "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg=="
- },
- "validate.io-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz",
- "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ=="
- },
- "validate.io-integer": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz",
- "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==",
- "requires": {
- "validate.io-number": "^1.0.3"
- }
- },
- "validate.io-integer-array": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz",
- "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==",
- "requires": {
- "validate.io-array": "^1.0.3",
- "validate.io-integer": "^1.0.4"
- }
- },
- "validate.io-number": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz",
- "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg=="
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "dev": true
- },
- "vscode-uri": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
- "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
- "dev": true
- },
- "watchpack": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
- "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
- "dev": true,
- "requires": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- }
- },
- "webidl-conversions": {
- "version": "3.0.1"
- },
- "webpack": {
- "version": "5.88.2",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz",
- "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==",
- "dev": true,
- "requires": {
- "@types/eslint-scope": "^3.7.3",
- "@types/estree": "^1.0.0",
- "@webassemblyjs/ast": "^1.11.5",
- "@webassemblyjs/wasm-edit": "^1.11.5",
- "@webassemblyjs/wasm-parser": "^1.11.5",
- "acorn": "^8.7.1",
- "acorn-import-assertions": "^1.9.0",
- "browserslist": "^4.14.5",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.15.0",
- "es-module-lexer": "^1.2.1",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.7",
- "watchpack": "^2.4.0",
- "webpack-sources": "^3.2.3"
- },
- "dependencies": {
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- }
- }
- },
- "webpack-cli": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
- "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
- "dev": true,
- "requires": {
- "@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^2.1.1",
- "@webpack-cli/info": "^2.0.2",
- "@webpack-cli/serve": "^2.0.5",
- "colorette": "^2.0.14",
- "commander": "^10.0.1",
- "cross-spawn": "^7.0.3",
- "envinfo": "^7.7.3",
- "fastest-levenshtein": "^1.0.12",
- "import-local": "^3.0.2",
- "interpret": "^3.1.1",
- "rechoir": "^0.8.0",
- "webpack-merge": "^5.7.3"
- },
- "dependencies": {
- "commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
- "dev": true
- }
- }
- },
- "webpack-merge": {
- "version": "5.9.0",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz",
- "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==",
- "dev": true,
- "requires": {
- "clone-deep": "^4.0.1",
- "wildcard": "^2.0.0"
- }
- },
- "webpack-sources": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
- "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
- "dev": true
- },
- "whatwg-url": {
- "version": "5.0.0",
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-boxed-primitive": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- }
- },
- "which-builtin-type": {
- "version": "1.1.3",
- "dev": true,
- "peer": true,
- "requires": {
- "function.prototype.name": "^1.1.5",
- "has-tostringtag": "^1.0.0",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.0.5",
- "is-finalizationregistry": "^1.0.2",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.1.4",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.0.2",
- "which-collection": "^1.0.1",
- "which-typed-array": "^1.1.9"
- },
- "dependencies": {
- "isarray": {
- "version": "2.0.5",
- "dev": true,
- "peer": true
- }
- }
- },
- "which-collection": {
- "version": "1.0.1",
- "dev": true,
- "peer": true,
- "requires": {
- "is-map": "^2.0.1",
- "is-set": "^2.0.1",
- "is-weakmap": "^2.0.1",
- "is-weakset": "^2.0.1"
- }
- },
- "which-typed-array": {
- "version": "1.1.11",
- "requires": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-tostringtag": "^1.0.0"
- }
- },
- "wildcard": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
- "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
- "dev": true
- },
- "workerpool": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
- "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true
- },
- "ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true
- },
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- }
- }
- },
- "wrap-ansi-cjs": {
- "version": "npm:wrap-ansi@7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "dev": true
- },
- "ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
- "requires": {}
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
- "y-protocols": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz",
- "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==",
- "requires": {
- "lib0": "^0.2.85"
- }
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yallist": {
- "version": "4.0.0",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- }
- },
- "yjs": {
- "version": "13.6.18",
- "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.18.tgz",
- "integrity": "sha512-GBTjO4QCmv2HFKFkYIJl7U77hIB1o22vSCSQD1Ge8ZxWbIbn8AltI4gyXbtL+g5/GJep67HCMq3Y5AmNwDSyEg==",
- "requires": {
- "lib0": "^0.2.86"
- }
- },
- "ylru": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz",
- "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==",
- "dev": true
- },
- "yocto-queue": {
- "version": "0.1.0",
- "dev": true
- }
- }
-}
diff --git a/package.json b/package.json
index ee43826..21bcfde 100644
--- a/package.json
+++ b/package.json
@@ -1,165 +1,102 @@
{
- "name": "jupyter-hub",
- "displayName": "JupyterHub",
- "version": "2024.5.100",
- "description": "Support for connecting to Jupyter Hub in VS Code along with the Jupyter Extension",
- "publisher": "ms-toolsai",
- "preview": true,
- "author": {
- "name": "Microsoft Corporation"
- },
- "extensionDependencies": [
- "ms-toolsai.jupyter"
- ],
- "license": "MIT",
- "homepage": "https://github.com/Microsoft/vscode-jupyter-hub",
- "repository": {
- "type": "git",
- "url": "https://github.com/Microsoft/vscode-jupyter-hub"
- },
- "bugs": {
- "url": "https://github.com/Microsoft/vscode-jupyter-hub/issues"
- },
- "qna": "https://github.com/microsoft/vscode-jupyter/discussions",
- "icon": "icon.png",
- "galleryBanner": {
- "color": "#ffffff",
- "theme": "light"
- },
- "engines": {
- "vscode": "^1.83.0"
- },
- "l10n": "./l10n",
- "keywords": [
- "jupyter",
- "jupyterhub",
- "notebook",
- "notebookKernelJupyterNotebook",
- "multi-root ready",
- "python",
- "interactive"
- ],
- "categories": [
- "Data Science",
- "Machine Learning",
- "Notebooks"
- ],
- "activationEvents": [
- "onNotebook:jupyter-notebook",
- "onNotebook:interactive"
- ],
- "main": "./dist/extension.node.js",
- "browser": "./dist/extension.web.js",
- "capabilities": {
- "virtualWorkspaces": true,
- "untrustedWorkspaces": {
- "supported": "limited",
- "description": "%capabilities.untrustedWorkspace.description%"
- }
- },
- "contributes": {
- "configuration": {
- "type": "object",
- "title": "JupyterHub",
- "properties": {
- "jupyterhub.log": {
- "type": "string",
- "default": "error",
- "enum": [
- "off",
- "error",
- "warn",
- "debug"
- ],
- "description": "%jupyterHub.configuration.jupyterHub.log.description%"
- }
- }
- }
- },
- "scripts": {
- "package": "npm run esbuild-release && vsce package -o ms-toolsai-jupyter-hub-insiders.vsix",
- "compile": "npm run esbuild",
- "postinstall": "npx vscode-dts 1.82.0",
- "test:unittests": "mocha --config ./build/.mocha.unittests.js.json ./out/**/*.unit.test.js",
- "lint": "eslint -c .eslintrc.js --ext .ts --ext .tsx src",
- "prettier-fix": "prettier 'src/**/*.ts*' --write && prettier 'build/**/*.js' --write",
- "updateBuildNumber": "node ./build/updateBuildNumber.js",
- "esbuild-base-node": "esbuild ./src/extension.node.ts --bundle --outfile=dist/extension.node.js --external:vscode --external:node:crypto --format=cjs --platform=node",
- "esbuild-base-web": "esbuild ./src/extension.web.ts --bundle --outfile=dist/extension.web.js --external:vscode --external:node:crypto --format=cjs --target=es2018 --define:global=this",
- "esbuild-test-web": "esbuild ./src/test/suite/index.web.ts --bundle --outfile=dist/test.index.web.js --external:vscode --external:node:crypto --format=cjs --target=es2018 --define:global=this --alias:stream=stream-browserify",
- "esbuild": "npm run esbuild-base-node -- --sourcemap && npm run esbuild-base-web -- --sourcemap",
- "esbuild-release": "npm run esbuild-base-node && npm run esbuild-base-web",
- "esbuild-node-watch": "npm run esbuild-base-node -- --sourcemap --watch",
- "esbuild-web-watch": "npm run esbuild-base-web -- --sourcemap --watch",
- "test-compile": "tsc -p ./",
- "test-compile-watch": "tsc -p ./ --watch",
- "test": "node ./out/test/runTest.js",
- "test:web": "vscode-test-web --quality=insiders --browserType=chromium --extensionDevelopmentPath=. --extensionTestsPath=dist/web/test/suite/test.index.web.js ./tmp",
- "test:web:ci": "node ./out/test/runTest.web.js",
- "test-compile-webpack": "webpack",
- "test-compile-webpack-watch": "webpack --watch",
- "make-extension-pack-for-web-tests": "node ./build/makeExtensionPack.js",
- "open-in-browser": "vscode-test-web --extensionDevelopmentPath=. ./tmp"
- },
- "dependencies": {
- "@jupyterlab/services": "^7.2.4",
- "@vscode/extension-telemetry": "^0.7.7",
- "buffer": "^6.0.3",
- "events": "^3.3.0",
- "isomorphic-ws": "^4.0.1",
- "node-fetch": "^2.6.7",
- "process": "^0.11.10",
- "stream-browserify": "^3.0.0",
- "util": "^0.12.5"
- },
- "devDependencies": {
- "@types/chai": "^4.3.6",
- "@types/chai-as-promised": "^7.1.8",
- "@types/mocha": "^9.1.1",
- "@types/node": "^16.18.6",
- "@types/node-fetch": "^2.6.11",
- "@types/react": "^18.2.21",
- "@types/sinon": "^17.0.3",
- "@types/webpack-env": "^1.18.1",
- "@types/ws": "^6.0.4",
- "@typescript-eslint/eslint-plugin": "^6.2.0",
- "@typescript-eslint/eslint-plugin-tslint": "^6.2.0",
- "@typescript-eslint/parser": "^6.2.0",
- "@vscode/dts": "^0.4.0",
- "@vscode/jupyter-extension": "^0.0.7",
- "@vscode/test-electron": "^2.3.4",
- "@vscode/test-web": "^0.0.56",
- "assert": "^2.1.0",
- "chai": "^4.3.8",
- "chai-as-promised": "^7.1.1",
- "esbuild": "^0.19.2",
- "eslint": "^8.45.0",
- "eslint-config-airbnb": "^19.0.4",
- "eslint-config-prettier": "^8.9.0",
- "eslint-plugin-header": "^3.1.1",
- "eslint-plugin-import": "^2.27.5",
- "eslint-plugin-jsdoc": "^46.4.5",
- "eslint-plugin-no-null": "^1.0.2",
- "eslint-plugin-no-only-tests": "^3.1.0",
- "eslint-plugin-prefer-arrow": "^1.2.3",
- "eslint-plugin-prettier": "^5.0.0",
- "glob": "^10.3.4",
- "mocha": "^10.2.0",
- "prettier": "^3.0.0",
- "sinon": "^17.0.1",
- "timers-browserify": "^2.0.12",
- "ts-loader": "^9.4.4",
- "ts-mockito": "^2.6.1",
- "tsconfig-paths-webpack-plugin": "^3.2.0",
- "typescript": "^5.2.2",
- "webpack": "^5.88.2",
- "webpack-cli": "^5.1.4",
- "ws": "^8.17.1"
- },
- "devDependenciesComments": {
- "@types/react": "Added to ensure @lumino compiles, @lumino is a dependency of Jupyter Lab npm"
- },
- "optionalDependencies": {
- "fsevents": "^2.3.2"
- }
+ "activationEvents": [
+ "onNotebook:jupyter-notebook",
+ "onNotebook:interactive"
+ ],
+ "browser": "./dist/extension.web.js",
+ "capabilities": {
+ "untrustedWorkspaces": {
+ "description": "%capabilities.untrustedWorkspace.description%",
+ "supported": "limited"
+ },
+ "virtualWorkspaces": true
+ },
+ "contributes": {
+ "configuration": {
+ "properties": {
+ "jupyterhub.log": {
+ "default": "error",
+ "description": "%jupyterHub.configuration.jupyterHub.log.description%",
+ "enum": [
+ "off",
+ "error",
+ "warn",
+ "debug"
+ ],
+ "type": "string"
+ }
+ },
+ "title": "JupyterHub",
+ "type": "object"
+ }
+ },
+ "dependencies": {
+ "@jupyterlab/services": "^7.2.4",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "isomorphic-ws": "^4.0.1",
+ "node-fetch": "^2.6.7",
+ "process": "^0.11.10",
+ "stream-browserify": "^3.0.0",
+ "util": "^0.12.5"
+ },
+ "description": "Support for connecting to Jupyter Hub in VS Code along with the Jupyter Extension",
+ "devDependencies": {
+ "@types/chai": "^4.3.6",
+ "@types/chai-as-promised": "^7.1.8",
+ "@types/node": "^16.18.6",
+ "@types/node-fetch": "^2.6.11",
+ "@types/sinon": "^17.0.3",
+ "@types/ws": "^6.0.4",
+ "assert": "^2.1.0",
+ "chai": "^4.3.8",
+ "chai-as-promised": "^7.1.1",
+ "esbuild": "^0.19.2",
+ "glob": "^10.3.4",
+ "sinon": "^17.0.1",
+ "timers-browserify": "^2.0.12",
+ "ts-loader": "^9.4.4",
+ "ts-mockito": "^2.6.1",
+ "ws": "^8.17.1"
+ },
+ "devDependenciesComments": {
+ "@types/react": "Added to ensure @lumino compiles, @lumino is a dependency of Jupyter Lab npm"
+ },
+ "displayName": "JupyterHub",
+ "extensionDependencies": [
+ "ms-toolsai.jupyter"
+ ],
+ "galleryBanner": {
+ "color": "#ffffff",
+ "theme": "light"
+ },
+ "icon": "icon.png",
+ "l10n": "./l10n",
+ "main": "./dist/extension.node.js",
+ "name": "jupyter-hub",
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ },
+ "preview": true,
+ "qna": "https://github.com/microsoft/vscode-jupyter/discussions",
+ "scripts": {
+ "compile": "npm run esbuild",
+ "esbuild": "npm run esbuild-base-node -- --sourcemap && npm run esbuild-base-web -- --sourcemap",
+ "esbuild-base-node": "esbuild ./src/extension.node.ts --bundle --outfile=dist/extension.node.js --external:vscode --external:node:crypto --format=cjs --platform=node",
+ "esbuild-base-web": "esbuild ./src/extension.web.ts --bundle --outfile=dist/extension.web.js --external:vscode --external:node:crypto --format=cjs --target=es2018 --define:global=this",
+ "esbuild-node-watch": "npm run esbuild-base-node -- --sourcemap --watch",
+ "esbuild-release": "npm run esbuild-base-node && npm run esbuild-base-web",
+ "esbuild-test-web": "esbuild ./src/test/suite/index.web.ts --bundle --outfile=dist/test.index.web.js --external:vscode --external:node:crypto --format=cjs --target=es2018 --define:global=this --alias:stream=stream-browserify",
+ "esbuild-web-watch": "npm run esbuild-base-web -- --sourcemap --watch",
+ "make-extension-pack-for-web-tests": "node ./build/makeExtensionPack.js",
+ "open-in-browser": "vscode-test-web --extensionDevelopmentPath=. ./tmp",
+ "test-compile": "tsc -p ./",
+ "test-compile-watch": "tsc -p ./ --watch",
+ "test-compile-webpack": "webpack",
+ "test-compile-webpack-watch": "webpack --watch",
+ "test:unittests": "mocha --config ./build/.mocha.unittests.js.json ./out/**/*.unit.test.js",
+ "test:web": "vscode-test-web --quality=insiders --browserType=chromium --extensionDevelopmentPath=. --extensionTestsPath=dist/web/test/suite/test.index.web.js ./tmp",
+ "test:web:ci": "node ./out/test/runTest.web.js",
+ "updateBuildNumber": "node ./build/updateBuildNumber.js"
+ }
}
diff --git a/src/authenticator.ts b/src/authenticator.ts
deleted file mode 100644
index b386e68..0000000
--- a/src/authenticator.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { CancellationToken } from 'vscode';
-import { SimpleFetch } from './common/request';
-import { IAuthenticator } from './types';
-import { generateNewApiToken, verifyApiToken } from './jupyterHubApi';
-
-export class Authenticator implements IAuthenticator {
- constructor(private readonly fetch: SimpleFetch) {}
- public async getJupyterAuthInfo(
- options: {
- baseUrl: string;
- authInfo: {
- username: string;
- password: string;
- token: string;
- };
- },
- token: CancellationToken
- ): Promise<{ token: string; tokenId: string }> {
- // Possible user has entered the API token instead of the password.
- if (!options.authInfo.token) {
- const isApiTokenValid = await verifyApiToken(
- options.baseUrl,
- options.authInfo.username,
- options.authInfo.password,
- this.fetch,
- token
- );
- if (isApiTokenValid) {
- return { tokenId: '', token: options.authInfo.password };
- }
- }
- if (options.authInfo.token) {
- const isApiTokenValid = await verifyApiToken(
- options.baseUrl,
- options.authInfo.username,
- options.authInfo.token,
- this.fetch,
- token
- );
- if (isApiTokenValid) {
- return { tokenId: '', token: options.authInfo.token };
- }
- }
- return generateNewApiToken(
- options.baseUrl,
- options.authInfo.username,
- options.authInfo.password,
- this.fetch,
- token
- );
- }
-}
diff --git a/src/common/async.ts b/src/common/async.ts
deleted file mode 100644
index a61bff7..0000000
--- a/src/common/async.ts
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { CancellationError, CancellationToken, Disposable } from 'vscode';
-
-export async function sleep(timeout: number, token?: CancellationToken) {
- let disposables: Disposable[] = [];
- const promise = new Promise((resolve) => {
- const timer = setTimeout(resolve, timeout);
- disposables.push(new Disposable(() => clearTimeout(timer)));
- });
- await raceCancellation(token, promise).finally(() => {
- disposables.forEach((d) => d.dispose());
- });
-}
-
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export function isPromise(v: any): v is Promise {
- return typeof v?.then === 'function' && typeof v?.catch === 'function';
-}
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export function isPromiseLike(v: any): v is PromiseLike {
- return typeof v?.then === 'function';
-}
-
-export function raceTimeout(timeout: number, ...promises: Promise[]): Promise;
-export function raceTimeout(timeout: number, defaultValue: T, ...promises: Promise[]): Promise;
-export function raceTimeout(timeout: number, defaultValue: T, ...promises: Promise[]): Promise {
- const resolveValue = isPromiseLike(defaultValue) ? undefined : defaultValue;
- if (isPromiseLike(defaultValue)) {
- promises.push(defaultValue as unknown as Promise);
- }
-
- let promiseResolve: ((value: T) => void) | undefined = undefined;
-
- const timer = setTimeout(() => promiseResolve?.(resolveValue as unknown as T), timeout);
-
- return Promise.race([
- Promise.race(promises).finally(() => clearTimeout(timer)),
- new Promise((resolve) => (promiseResolve = resolve))
- ]);
-}
-
-export function raceTimeoutError(timeout: number, error: Error, ...promises: Promise[]): Promise {
- let promiseReject: ((value: unknown) => void) | undefined = undefined;
- const timer = setTimeout(() => promiseReject?.(error), timeout);
-
- return Promise.race([
- Promise.race(promises).finally(() => clearTimeout(timer)),
- new Promise((_, reject) => (promiseReject = reject))
- ]);
-}
-
-export async function raceCancellation(
- token: CancellationToken | undefined,
- ...promises: Promise[]
-): Promise;
-export async function raceCancellation(
- token: CancellationToken | undefined,
- defaultValue: T,
- ...promises: Promise[]
-): Promise;
-export async function raceCancellation(
- token: CancellationToken | undefined,
- defaultValue: T,
- ...promises: Promise[]
-): Promise {
- let value: T | undefined;
- if (isPromiseLike(defaultValue)) {
- promises.push(defaultValue as unknown as Promise);
- value = undefined;
- } else {
- value = defaultValue;
- }
- if (!token) {
- return await Promise.race(promises);
- }
- if (token.isCancellationRequested) {
- return value;
- }
-
- return new Promise((resolve, reject) => {
- if (token.isCancellationRequested) {
- return resolve(value);
- }
- const disposable = token.onCancellationRequested(() => {
- disposable.dispose();
- resolve(value);
- });
- Promise.race(promises)
- .then(resolve, reject)
- .finally(() => disposable.dispose());
- });
-}
-export async function raceCancellationError(token?: CancellationToken, ...promises: Promise[]): Promise {
- if (!token) {
- return Promise.race(promises);
- }
- if (token.isCancellationRequested) {
- throw new CancellationError();
- }
-
- return new Promise((resolve, reject) => {
- if (token.isCancellationRequested) {
- return reject(new CancellationError());
- }
- const disposable = token.onCancellationRequested(() => {
- disposable.dispose();
- reject(new CancellationError());
- });
- Promise.race(promises)
- .then(resolve, reject)
- .finally(() => disposable.dispose());
- });
-}
-
-//======================
-// Deferred
-
-// eslint-disable-next-line @typescript-eslint/naming-convention
-export interface Deferred {
- readonly promise: Promise;
- readonly resolved: boolean;
- readonly rejected: boolean;
- readonly completed: boolean;
- readonly value?: T;
- resolve(value?: T | PromiseLike): void;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- reject(reason?: any): void;
-}
-
-class DeferredImpl implements Deferred {
- private _resolve!: (value: T | PromiseLike) => void;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- private _reject!: (reason?: any) => void;
- private _resolved: boolean = false;
- private _rejected: boolean = false;
- private _promise: Promise;
- private _value: T | undefined;
- public get value() {
- return this._value;
- }
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- constructor(private scope: any = null) {
- // eslint-disable-next-line
- this._promise = new Promise((res, rej) => {
- this._resolve = res;
- this._reject = rej;
- });
- }
- public resolve(value?: T | PromiseLike) {
- this._value = value as T | undefined;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- this._resolve.apply(this.scope ? this.scope : this, arguments as any);
- this._resolved = true;
- }
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- public reject(_reason?: any) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- this._reject.apply(this.scope ? this.scope : this, arguments as any);
- this._rejected = true;
- }
- get promise(): Promise {
- return this._promise;
- }
- get resolved(): boolean {
- return this._resolved;
- }
- get rejected(): boolean {
- return this._rejected;
- }
- get completed(): boolean {
- return this._rejected || this._resolved;
- }
-}
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export function createDeferred(scope: any = null): Deferred {
- return new DeferredImpl(scope);
-}
-
-export function createDeferredFromPromise(promise: Promise): Deferred {
- const deferred = createDeferred();
- promise.then(deferred.resolve.bind(deferred)).catch(deferred.reject.bind(deferred));
- return deferred;
-}
diff --git a/src/common/constants.ts b/src/common/constants.ts
deleted file mode 100644
index a6e28ec..0000000
--- a/src/common/constants.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-export const AppInsightsKey = '0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255';
-export const EXTENSION_ID = 'ms-toolsai.jupyter-hub';
-export const JUPYTER_EXTENSION_ID = 'ms-toolsai.jupyter';
diff --git a/src/common/crypto.ts b/src/common/crypto.ts
deleted file mode 100644
index f0db1c7..0000000
--- a/src/common/crypto.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-const computedHashes: Record = {};
-let stopStoringHashes = false;
-
-let cryptoProvider: Crypto;
-declare var WorkerGlobalScope: Function | undefined;
-// Web
-if (typeof window === 'object') {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- cryptoProvider = (window as any).crypto;
-}
-// Web worker
-else if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- cryptoProvider = self.crypto;
-} else {
- // Node
- cryptoProvider = require('node:crypto').webcrypto;
-}
-
-/**
- * Computes a hash for a give string and returns hash as a hex value.
- */
-export async function computeHash(data: string, algorithm: 'SHA-512' | 'SHA-256' | 'SHA-1'): Promise {
- // Save some CPU as this is called in a number of places.
- // This will not get too large, will only grow by number of files per workspace, even if user has
- // 1000s of files, this will not grow that large to cause any memory issues.
- // Files get hashed a lot in a number of places within the extension (.interactive is the IW window Uri).
- // Even things that include file paths like kernel id, which isn't a file path, but contains python executable path.
- const isCandidateForCaching = data.includes('/') || data.includes('\\') || data.endsWith('.interactive');
- if (isCandidateForCaching && computedHashes[data]) {
- return computedHashes[data];
- }
-
- const hash = await computeHashInternal(data, algorithm);
-
- if (isCandidateForCaching && !stopStoringHashes) {
- // Just a simple fail safe, why 10_000, simple why not 10_000
- // All we want to ensure is that we don't store too many hashes.
- // The only way we can get there is if user never closes VS Code and our code
- // ends up hashing Uris of cells, then again user would have to have 1000s of cells in notebooks to hit this case.
- if (Object.keys(computedHashes).length > 10_000) {
- stopStoringHashes = true;
- }
- computedHashes[data] = hash;
- }
- return hash;
-}
-
-async function computeHashInternal(data: string, algorithm: 'SHA-512' | 'SHA-256' | 'SHA-1'): Promise {
- const inputBuffer = new TextEncoder().encode(data);
- const hashBuffer = await cryptoProvider.subtle.digest({ name: algorithm }, inputBuffer);
-
- // Turn into hash string (got this logic from https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest)
- const hashArray = Array.from(new Uint8Array(hashBuffer));
- return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
-}
diff --git a/src/common/inputCapture.ts b/src/common/inputCapture.ts
deleted file mode 100644
index c1fab01..0000000
--- a/src/common/inputCapture.ts
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import {
- CancellationError,
- CancellationToken,
- Disposable,
- EventEmitter,
- QuickInputButton,
- QuickInputButtons,
- QuickPickItem,
- QuickPickItemButtonEvent,
- window
-} from 'vscode';
-import { dispose } from './lifecycle';
-
-/**
- * Capture input with support for back buttons.
- * The input is not closed until it is disposed.
- * We keep it open as there could be other async operations happening after a value is captured.
- */
-export class WorkflowInputCapture {
- private disposables: Disposable[] = [];
- public dispose() {
- dispose(this.disposables);
- }
- public async getValue(
- options: {
- title: string;
- value?: string;
- placeholder?: string;
- validationMessage?: string;
- password?: boolean;
- validateInput?(value: string): Promise;
- buttons?: QuickInputButton[];
- onDidTriggerButton?: (e: QuickInputButton) => void;
- },
- token: CancellationToken
- ) {
- return new Promise((resolve, reject) => {
- const input = window.createInputBox();
- this.disposables.push(new Disposable(() => input.hide()));
- this.disposables.push(input);
- input.ignoreFocusOut = true;
- input.title = options.title;
- input.ignoreFocusOut = true;
- input.value = options.value || '';
- input.placeholder = options.placeholder || '';
- input.password = options.password === true;
- input.validationMessage = options.validationMessage || '';
- input.buttons = [QuickInputButtons.Back, ...(options.buttons || [])];
- input.show();
- input.onDidChangeValue(() => (input.validationMessage = ''), this, this.disposables);
- input.onDidTriggerButton((e) => options.onDidTriggerButton?.(e), this, this.disposables);
- input.onDidHide(() => reject(new CancellationError()), this, this.disposables);
- input.onDidTriggerButton(
- (e) => {
- if (e === QuickInputButtons.Back) {
- resolve(undefined);
- }
- },
- this,
- this.disposables
- );
- input.onDidAccept(
- async () => {
- // Do not hide the input box,
- // We keep it open as there could be other async operations happening after this.
- // UI will be hidden upon disposing.
- if (options.validateInput) {
- input.validationMessage = await options.validateInput(input.value);
- if (input.validationMessage) {
- return;
- }
- }
- // After this we always end up doing some async stuff,
- // or display a new quick pick or ui.
- // Hence mark this as busy until we dismiss this UI.
- input.busy = true;
- resolve(input.value || options.value || '');
- },
- this,
- this.disposables
- );
- token.onCancellationRequested(() => reject(new CancellationError()), this, this.disposables);
- });
- }
- public async pickValue(
- options: {
- title: string;
- placeholder?: string;
- validationMessage?: string;
- quickPickItems: T[];
- },
- token: CancellationToken
- ) {
- return new Promise((resolve, reject) => {
- const input = window.createQuickPick();
- this.disposables.push(new Disposable(() => input.hide()));
- this.disposables.push(input);
- input.ignoreFocusOut = true;
- input.title = options.title;
- input.ignoreFocusOut = true;
- input.placeholder = options.placeholder || '';
- input.buttons = [QuickInputButtons.Back];
- input.items = options.quickPickItems;
- input.canSelectMany = false;
- input.show();
- input.onDidHide(() => reject(new CancellationError()), this, this.disposables);
- input.onDidTriggerButton(
- (e) => {
- if (e === QuickInputButtons.Back) {
- resolve(undefined);
- }
- },
- this,
- this.disposables
- );
- input.onDidAccept(
- async () => {
- // After this we always end up doing some async stuff,
- // or display a new quick pick or ui.
- // Hence mark this as busy until we dismiss this UI.
- input.busy = true;
- if (input.selectedItems.length === 1) {
- resolve(input.selectedItems[0]);
- } else {
- resolve(undefined);
- }
- },
- this,
- this.disposables
- );
- token.onCancellationRequested(() => reject(new CancellationError()), this, this.disposables);
- });
- }
-}
-
-/**
- * Capture quick input with support for back buttons.
- * The input is not closed until it is disposed.
- * We keep it open as there could be other async operations happening after a value is captured.
- */
-export class WorkflowQuickInputCapture {
- private disposables: Disposable[] = [];
- private readonly _onDidTriggerItemButton = new EventEmitter>();
- readonly onDidTriggerItemButton = this._onDidTriggerItemButton.event;
- constructor() {
- this.disposables.push(this._onDidTriggerItemButton);
- }
- public dispose() {
- dispose(this.disposables);
- }
- public async getValue(
- options: {
- title: string;
- placeholder?: string;
- items: QuickPickItem[];
- },
- token: CancellationToken
- ) {
- return new Promise((resolve, reject) => {
- const input = window.createQuickPick();
- this.disposables.push(input);
- input.canSelectMany = false;
- input.ignoreFocusOut = true;
- input.placeholder = options.placeholder || '';
- input.title = options.title;
- input.buttons = [QuickInputButtons.Back];
- input.items = options.items;
- input.show();
- this.disposables.push(input.onDidHide(() => reject(new CancellationError())));
- input.onDidTriggerButton(
- (e) => {
- if (e === QuickInputButtons.Back) {
- return resolve(undefined);
- }
- },
- this,
- this.disposables
- );
- input.onDidTriggerItemButton((e) => this._onDidTriggerItemButton.fire(e), this, this.disposables);
- input.onDidAccept(
- () => (input.selectedItems.length ? resolve(input.selectedItems[0]) : undefined),
- this,
- this.disposables
- );
- token.onCancellationRequested(() => reject(new CancellationError()), this, this.disposables);
- });
- }
-}
diff --git a/src/common/lifecycle.ts b/src/common/lifecycle.ts
deleted file mode 100644
index c4c3eab..0000000
--- a/src/common/lifecycle.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-/* eslint-disable @typescript-eslint/no-explicit-any */
-
-export interface IDisposable {
- dispose(): void;
-}
-
-function isIterable(thing: any): thing is Iterable {
- return thing && typeof thing === 'object' && typeof thing[Symbol.iterator] === 'function';
-}
-
-/**
- * Disposes of the value(s) passed in.
- */
-export function dispose(disposable: T): T;
-export function dispose(disposable: T | undefined): T | undefined;
-export function dispose(disposables: Array): Array;
-export function dispose(disposables: ReadonlyArray): ReadonlyArray;
-export function dispose(arg: T | Array | ReadonlyArray | undefined): any {
- if (isIterable(arg)) {
- for (const d of arg) {
- if (d) {
- try {
- d.dispose();
- } catch {
- //
- }
- }
- }
- } else if (arg) {
- try {
- arg.dispose();
- } catch {
- //
- }
- }
-}
-
-export class DisposableStore {
- private readonly disposables: IDisposable[] = [];
- add(disposable: T) {
- this.disposables.push(disposable);
- return disposable;
- }
- dispose() {
- dispose(this.disposables);
- }
-}
-
-export const disposableStore = new DisposableStore();
diff --git a/src/common/localize.ts b/src/common/localize.ts
deleted file mode 100644
index 47b00d2..0000000
--- a/src/common/localize.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { l10n } from 'vscode';
-
-// Most messages are re-used, hence keep them in a single place and re-use.
-export namespace Localized {
- export const OutputChannelName = l10n.t('JupyterHub');
- export const ConnectingToJupyterServer = l10n.t('Connecting to JupyterHub Server');
- export const startingJupyterServer = l10n.t('Starting Server');
- export const KernelActionSourceTitle = l10n.t('Existing JupyterHub Server...');
- export const labelOfCommandToEnterUrl = l10n.t('Enter the URL of the running JupyterHub Server...');
- export const placeholderOfInputBoxToEnterUrl = l10n.t('Enter the URL of the running JupyterHub Server');
- export const titleOfInputBoxToEnterUrl = l10n.t('Enter the URL of the running JupyterHub Server');
- export const captureUserNameTitle = 'Enter your username';
- export const captureUserNamePrompt = 'username';
- export const capturePasswordTitle = 'Enter your password or API token';
- export const capturePasswordPrompt = 'password or token';
- export const usernamePasswordAuthFailure = l10n.t('Invalid username or password.');
- export const jupyterSelfCertFail = (errorMessage: string) =>
- l10n.t(
- 'The security certificate used by server {0} was not issued by a trusted certificate authority.\r\nThis may indicate an attempt to steal your information.\r\nDo you want to enable the Allow Unauthorized Remote Connection setting for this workspace to allow you to connect?',
- errorMessage
- );
- export const jupyterExpiredCertFail = (errorMessage: string) =>
- l10n.t(
- 'The security certificate used by server {0} has expired.\r\nThis may indicate an attempt to steal your information.\r\nDo you want to enable the Allow Unauthorized Remote Connection setting for this workspace to allow you to connect?',
- errorMessage
- );
- export const jupyterSelfCertFailErrorMessageOnly = l10n.t(
- 'The security certificate used by server was not issued by a trusted certificate authority.\r\nThis may indicate an attempt to steal your information.'
- );
- export const jupyterSelfCertExpiredErrorMessageOnly = l10n.t(
- 'The security certificate used by server has expired.\r\nThis may indicate an attempt to steal your information.'
- );
- export const jupyterSelfCertEnable = l10n.t('Yes, connect anyway');
- export const jupyterSelfCertClose = l10n.t('No, close the connection');
- export const connectToToTheJupyterServer = (url: string) => l10n.t('Connect to the JupyterHub server {0}', url);
- export const jupyterSelectURIInvalidURI = l10n.t('Invalid URL specified');
- export const invalidJupyterHubUrl = l10n.t('Invalid JupyterHub URL specified');
- export const jupyterRenameServer = l10n.t('Change server name');
- export const remoteJupyterConnectionFailedWithoutServerWithError = (errorMessage: string) =>
- l10n.t('Connection failure. Verify the server is running and reachable. ({0}).', errorMessage);
- export const emptyUserNameErrorMessage = l10n.t('Username cannot be empty');
- export const emptyPasswordErrorMessage = l10n.t('Password/API token cannot be empty');
- export const authMethodApiTokenMoreInfoTooltip = l10n.t('More Info');
-}
diff --git a/src/common/logging.ts b/src/common/logging.ts
deleted file mode 100644
index f781d47..0000000
--- a/src/common/logging.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { window, workspace } from 'vscode';
-import { Localized } from './localize';
-import { disposableStore } from './lifecycle';
-
-export const outputChannel = disposableStore.add(window.createOutputChannel(Localized.OutputChannelName, 'log'));
-
-let loggingLevel: 'error' | 'debug' | 'off' | 'warn' = workspace.getConfiguration('jupyterhub').get('log', 'error');
-
-disposableStore.add(
- workspace.onDidChangeConfiguration((e) => {
- if (e.affectsConfiguration('jupyterhub.log')) {
- let setting: string = workspace.getConfiguration('jupyterhub').log;
- setting = setting.toLowerCase();
- if (setting === 'error' || setting === 'debug' || setting === 'off') {
- loggingLevel = setting;
- } else {
- console.error(`Invalid Error Level for JupyterHub ${setting}`);
- }
- }
- })
-);
-
-export function traceWarn(..._args: unknown[]): void {
- if (loggingLevel === 'off') {
- return;
- }
- logMessage('warn', ..._args);
-}
-
-export function traceError(..._args: unknown[]): void {
- if (loggingLevel === 'off') {
- return;
- }
- logMessage('error', ..._args);
-}
-
-export function traceDebug(_message: string, ..._args: unknown[]): void {
- if (loggingLevel !== 'debug') {
- return;
- }
- logMessage('debug', ..._args);
-}
-
-function logMessage(level: 'error' | 'debug' | 'warn', ...data: unknown[]) {
- outputChannel.appendLine(`${getTimeForLogging()} [${level}] ${formatErrors(...data).join(' ')}`);
-}
-
-function getTimeForLogging(): string {
- const date = new Date();
- const hours = String(date.getHours()).padStart(2, '0');
- const minutes = String(date.getMinutes()).padStart(2, '0');
- const seconds = String(date.getSeconds()).padStart(2, '0');
- const millis = String(date.getMilliseconds()).padStart(3, '0');
- return `${hours}:${minutes}:${seconds}.${millis}`;
-}
-
-function formatErrors(...args: unknown[]) {
- return args.map((arg) => {
- if (!(arg instanceof Error)) {
- return arg;
- }
- const info: string[] = [`${arg.name}: ${arg.message}`.trim()];
- if (arg.stack) {
- const stack = (arg.stack || '').split(/\r?\n/g).map((l) => l.trim()); // remove tabs and other white space
- const firstStackLine = stack.find((l) => l.indexOf('at ') === 0);
- if (stack.length === 1) {
- //
- } else if (stack.length === 1) {
- info.push(stack[0]);
- } else if (stack.length > 1 && firstStackLine?.length) {
- info.push(firstStackLine);
- } else {
- info.push(stack[0]);
- }
- }
- const propertiesToIgnore = ['stack', 'message', 'name'];
- Object.keys(arg)
- .filter((key) => propertiesToIgnore.indexOf(key) === -1)
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- .forEach((key) => info.push(`${key} = ${String((arg as any)[key]).trim()}`));
- return info
- .filter((l) => l.trim().length)
- .map((l, i) => (i === 0 ? l : ` > ${l}`))
- .join('\n');
- });
-}
diff --git a/src/common/request.ts b/src/common/request.ts
deleted file mode 100644
index 25bf231..0000000
--- a/src/common/request.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { CancellationToken, ConfigurationTarget, window, workspace } from 'vscode';
-import { IJupyterRequestCreator } from '../types';
-import { Localized } from './localize';
-import { raceCancellationError } from './async';
-import { solveCertificateProblem } from './telemetry';
-import { traceError } from './logging';
-
-/**
- * Responsible for intercepting connections to a remote server and asking for a password if necessary
- */
-export class SimpleFetch {
- constructor(public readonly requestCreator: IJupyterRequestCreator) {}
-
- public async send(url: string, options: RequestInit, token: CancellationToken): Promise {
- const allowUnauthorized = workspace
- .getConfiguration('jupyter')
- .get('allowUnauthorizedRemoteConnection', false);
-
- // Try once and see if it fails with unauthorized.
- try {
- return await raceCancellationError(
- token,
- this.requestCreator.getFetchMethod()(url, this.addAllowUnauthorized(url, allowUnauthorized, options))
- );
- } catch (e) {
- traceError(`Error sending request to ${url}`, e);
- if (e.message.indexOf('reason: self signed certificate') >= 0) {
- // Ask user to change setting and possibly try again.
- const value = await window.showErrorMessage(
- Localized.jupyterSelfCertFail(e.message),
- { modal: true },
- Localized.jupyterSelfCertEnable,
- Localized.jupyterSelfCertClose
- );
- if (value === Localized.jupyterSelfCertEnable) {
- solveCertificateProblem('self-signed', 'allow');
- await workspace
- .getConfiguration('jupyter')
- .updateSetting(
- 'allowUnauthorizedRemoteConnection',
- true,
- undefined,
- ConfigurationTarget.Workspace
- );
- // Now that we have fixed the error, lets try to send the request again.
- return this.requestCreator.getFetchMethod()(url, this.addAllowUnauthorized(url, true, options));
- } else if (value === Localized.jupyterSelfCertClose) {
- solveCertificateProblem('self-signed', 'cancel');
- }
- }
- throw e;
- }
- }
-
- /**
- * For HTTPS connections respect our allowUnauthorized setting by adding in an agent to enable that on the request
- */
- private addAllowUnauthorized(url: string, allowUnauthorized: boolean, options: RequestInit): RequestInit {
- if (url.startsWith('https') && allowUnauthorized && this.requestCreator.createHttpRequestAgent) {
- const requestAgent = this.requestCreator.createHttpRequestAgent();
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- return { ...options, agent: requestAgent } as any;
- }
-
- return options;
- }
-}
diff --git a/src/common/requestCreator.node.ts b/src/common/requestCreator.node.ts
deleted file mode 100644
index 2c211e3..0000000
--- a/src/common/requestCreator.node.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { Agent } from 'https';
-import * as nodeFetch from 'node-fetch';
-import { IJupyterRequestCreator } from '../types';
-import { ClassType } from './types';
-
-// Function for creating node Request object that prevents jupyterlab services from writing its own
-// authorization header.
-/* eslint-disable @typescript-eslint/no-explicit-any */
-export class JupyterRequestCreator implements IJupyterRequestCreator {
- public getRequestCtor(getAuthHeader?: () => any) {
- // Only need the authorizing part. Cookie and rejectUnauthorized are set in the websocket ctor for node.
- class AuthorizingRequest extends nodeFetch.Request {
- constructor(input: nodeFetch.RequestInfo, init?: nodeFetch.RequestInit) {
- super(input, init);
-
- // Add all of the authorization parts onto the headers.
- const origHeaders = this.headers;
- const authorizationHeader = getAuthHeader?.() || {};
- const keys = Object.keys(authorizationHeader);
- keys.forEach((k) => origHeaders.append(k, authorizationHeader[k].toString()));
- origHeaders.set('Content-Type', 'application/json');
-
- // Rewrite the 'append' method for the headers to disallow 'authorization' after this point
- const origAppend = origHeaders.append.bind(origHeaders);
- origHeaders.append = (k, v) => {
- if (k.toLowerCase() !== 'authorization') {
- origAppend(k, v);
- }
- };
- }
- }
-
- return (
- getAuthHeader && Object.keys(getAuthHeader() || {}).length ? AuthorizingRequest : nodeFetch.Request
- ) as any;
- }
-
- public getFetchMethod(): (input: RequestInfo, init?: RequestInit) => Promise {
- return nodeFetch.default as any;
- }
-
- public getHeadersCtor(): ClassType {
- return nodeFetch.Headers as any;
- }
-
- public getRequestInit(): RequestInit {
- return { cache: 'no-store', credentials: 'same-origin' };
- }
-
- public createHttpRequestAgent() {
- return new Agent({ rejectUnauthorized: false }); // CodeQL [SM03616] User has been prompted at this point whether to allow making requests to http servers with invalid certificates.
- }
-}
diff --git a/src/common/requestCreator.web.ts b/src/common/requestCreator.web.ts
deleted file mode 100644
index cbff3d2..0000000
--- a/src/common/requestCreator.web.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { IJupyterRequestCreator } from '../types';
-import { ClassType } from './types';
-
-// Function for creating node Request object that prevents jupyterlab services from writing its own
-// authorization header.
-export class JupyterRequestCreator implements IJupyterRequestCreator {
- public getRequestCtor(getAuthHeaders?: () => Record) {
- class AuthorizingRequest extends Request {
- constructor(input: RequestInfo, init?: RequestInit) {
- super(input, init);
-
- // Add all of the authorization parts onto the headers.
- const origHeaders = this.headers;
-
- if (getAuthHeaders) {
- const authorizationHeader = getAuthHeaders();
- const keys = Object.keys(authorizationHeader);
- keys.forEach((k) => origHeaders.append(k, authorizationHeader[k].toString()));
- origHeaders.set('Content-Type', 'application/json');
-
- // Rewrite the 'append' method for the headers to disallow 'authorization' after this point
- const origAppend = origHeaders.append.bind(origHeaders);
- origHeaders.append = (k, v) => {
- if (k.toLowerCase() !== 'authorization') {
- origAppend(k, v);
- }
- };
- }
- }
- }
-
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- return (getAuthHeaders && Object.keys(getAuthHeaders() || {}).length ? AuthorizingRequest : Request) as any;
- }
-
- public getFetchMethod(): (input: RequestInfo, init?: RequestInit) => Promise {
- return fetch;
- }
-
- public getHeadersCtor(): ClassType {
- return Headers;
- }
-
- public getRequestInit(): RequestInit {
- return { cache: 'no-store' };
- }
-}
diff --git a/src/common/stopwatch.ts b/src/common/stopwatch.ts
deleted file mode 100644
index fed923a..0000000
--- a/src/common/stopwatch.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-/**
- * Tracks wall clock time. Start time is set at contruction.
- */
-export class StopWatch {
- private started = Date.now();
- public get elapsed() {
- return Date.now() - this.started;
- }
- public reset() {
- this.started = Date.now();
- }
-}
diff --git a/src/common/telemetry.ts b/src/common/telemetry.ts
deleted file mode 100644
index 169d6f7..0000000
--- a/src/common/telemetry.ts
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import TelemetryReporter from '@vscode/extension-telemetry';
-import { AppInsightsKey } from './constants';
-import { disposableStore } from './lifecycle';
-import { computeHash } from './crypto';
-import { noop } from './utils';
-
-// #region Telemetry
-
-// #endregion
-
-export interface IPropertyData {
- classification:
- | 'SystemMetaData'
- | 'CallstackOrException'
- | 'CustomerContent'
- | 'PublicNonPersonalData'
- | 'EndUserPseudonymizedInformation';
- purpose: 'PerformanceAndHealth' | 'FeatureInsight' | 'BusinessInsight';
- comment: string;
- expiration?: string;
- endpoint?: string;
- isMeasurement?: boolean;
-}
-
-export interface IGDPRProperty {
- owner: string;
- comment: string;
- expiration?: string;
- readonly [name: string]: IPropertyData | undefined | IGDPRProperty | string;
-}
-
-type IGDPRPropertyWithoutMetadata = Omit;
-export type OmitMetadata = Omit;
-
-export type ClassifiedEvent = {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- [k in keyof T]: any;
-};
-
-export type StrictPropertyChecker =
- keyof TEvent extends keyof OmitMetadata
- ? keyof OmitMetadata extends keyof TEvent
- ? TEvent
- : TError
- : TError;
-
-export type StrictPropertyCheckError = { error: 'Type of classified event does not match event properties' };
-
-export type StrictPropertyCheck = StrictPropertyChecker<
- E,
- ClassifiedEvent>,
- StrictPropertyCheckError
->;
-
-let telemetryReporter: TelemetryReporter;
-
-/**
- * Send this & subsequent telemetry only after this promise has been resolved.
- * We have a default timeout of 30s.
- * @param {P[E]} [properties]
- * Can optionally contain a property `waitBeforeSending` referencing a promise.
- * Which must be awaited before sending the telemetry.
- */
-export function publicLog2> = never, T extends IGDPRProperty = never>(
- eventName: string,
- data?: StrictPropertyCheck
-) {
- telemetryReporter = telemetryReporter
- ? telemetryReporter
- : disposableStore.add(new TelemetryReporter(AppInsightsKey));
- telemetryReporter.sendTelemetryEvent(eventName, data);
-}
-
-const urlsAndVersion = new Map();
-function getHostName(url: string) {
- try {
- return new URL(url).hostname;
- } catch {
- return '';
- }
-}
-
-interface JupyterHubUrlAddedData {
- serverId: string;
- hostNameHash: string;
- baseUrlHash: string;
- version: number;
-}
-type JupyterHubUrlDataClassification = {
- owner: 'donjayamanne';
- comment: 'Jupyter Hub Versions';
- serverId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'unique identifier of server' };
- hostNameHash: {
- classification: 'SystemMetaData';
- purpose: 'FeatureInsight';
- comment: 'Hash of the host name of the server';
- };
- baseUrlHash: {
- classification: 'SystemMetaData';
- purpose: 'FeatureInsight';
- comment: 'Hash of the base url';
- };
- version: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Version of JupyterHub' };
-};
-function stripPIIFromVersion(version: string) {
- const parts = version.split('.');
- if (parts.length < 2) {
- return 0;
- }
- return parseFloat(`${parseInt(parts[0], 10)}.${parseInt(parts[1], 10)}`);
-}
-
-/**
- * Safe way to send data in telemetry (obfuscate PII).
- */
-export async function getTelemetrySafeHashedString(data: string) {
- return computeHash(data, 'SHA-256');
-}
-
-export function sendJupyterHubUrlAdded(baseUrl: string, version: string, serverId: string) {
- urlsAndVersion.set(baseUrl, version);
- Promise.all([getTelemetrySafeHashedString(getHostName(baseUrl)), getTelemetrySafeHashedString(baseUrl)])
- .then(([hostNameHash, baseUrlHash]) => {
- publicLog2('addJupyterHubUrl', {
- serverId,
- hostNameHash,
- baseUrlHash,
- version: stripPIIFromVersion(version)
- });
- })
- .catch(noop);
-}
-
-interface JupyterHubUrlNotAdded {
- failed: true;
- reason: 'cancel' | 'back' | 'error';
- lastStep:
- | ''
- | 'Before'
- | 'Get Url'
- | 'Get Username'
- | 'Get Password'
- | 'Verify Connection'
- | 'Server Selector'
- | 'Get Display Name'
- | 'After';
-}
-type JupyterHubUrlNotAddedClassification = {
- owner: 'donjayamanne';
- comment: 'Url was not added';
- failed: {
- classification: 'SystemMetaData';
- purpose: 'FeatureInsight';
- comment: 'Indicator that adding the Url failed';
- };
- reason: {
- classification: 'SystemMetaData';
- purpose: 'FeatureInsight';
- comment: 'Reason for cancellation, back, cancel or error';
- };
- lastStep: {
- classification: 'SystemMetaData';
- purpose: 'FeatureInsight';
- comment: 'Last step the user took before exiting the workflow to add a url';
- };
-};
-
-export function sendJupyterHubUrlNotAdded(
- reason: 'cancel' | 'back' | 'error',
- lastStep:
- | ''
- | 'Before'
- | 'Get Url'
- | 'Get Username'
- | 'Get Password'
- | 'Verify Connection'
- | 'Server Selector'
- | 'Get Display Name'
- | 'After'
-) {
- publicLog2('addJupyterHubUrl', {
- failed: true,
- reason,
- lastStep
- });
-}
-
-interface JupyterHubTokenGeneratedUsingOldAPIData {
- hostNameHash: string;
- baseUrlHash: string;
-}
-type JupyterHubTokenGeneratedUsingOldAPIDataClassification = {
- owner: 'donjayamanne';
- comment: 'Sent when we generate API tokens using the old API';
- hostNameHash: {
- classification: 'SystemMetaData';
- purpose: 'FeatureInsight';
- comment: 'Hash of the host name of the server';
- };
- baseUrlHash: {
- classification: 'SystemMetaData';
- purpose: 'FeatureInsight';
- comment: 'Hash of the base url';
- };
-};
-
-export function trackUsageOfOldApiGeneration(baseUrl: string) {
- Promise.all([getTelemetrySafeHashedString(getHostName(baseUrl)), getTelemetrySafeHashedString(baseUrl)])
- .then(([hostNameHash, baseUrlHash]) => {
- publicLog2(
- 'generateTokenWithOldApi',
- {
- hostNameHash,
- baseUrlHash
- }
- );
- })
- .catch(noop);
-}
-interface JupyterHubUsage {}
-type JupyterHubUsageClassification = {
- owner: 'donjayamanne';
- comment: 'Sent extension activates';
-};
-
-export function trackInstallOfExtension() {
- publicLog2('activated', {});
-}
-
-interface JupyterHubUrlCertProblemsSolutionData {
- solution: 'allow' | 'cancel';
- problem: 'self-signed' | 'expired';
-}
-type JupyterHubUrlCertProblemsSolutionDataClassification = {
- owner: 'donjayamanne';
- comment: 'Sent when user attempts to overcome a cert problem';
- problem: {
- classification: 'SystemMetaData';
- purpose: 'FeatureInsight';
- comment: 'Problem with certificate';
- };
- solution: {
- classification: 'SystemMetaData';
- purpose: 'FeatureInsight';
- comment: 'How did user solve the cert problem did they allow usage of untrusted certs or cancel adding them';
- };
-};
-
-export function solveCertificateProblem(problem: 'self-signed' | 'expired', solution: 'allow' | 'cancel') {
- publicLog2(
- 'addJupyterHubUrlWithCertProblem',
- {
- solution,
- problem
- }
- );
-}
diff --git a/src/common/types.ts b/src/common/types.ts
deleted file mode 100644
index 48c4305..0000000
--- a/src/common/types.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export type ClassType = { new (...args: any[]): T };
-
-/**
- * Like `Readonly<>`, but recursive.
- *
- * See https://github.com/Microsoft/TypeScript/pull/21316.
- */
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export type DeepReadonly = T extends any[] ? IDeepReadonlyArray : DeepReadonlyNonArray;
-type DeepReadonlyNonArray = T extends object ? DeepReadonlyObject : T;
-interface IDeepReadonlyArray extends ReadonlyArray> {}
-type DeepReadonlyObject = {
- readonly [P in NonFunctionPropertyNames]: DeepReadonly;
-};
-type NonFunctionPropertyNames = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T];
-
-/**
- * Converts a union type to intersection
- * Courtesy of https://stackoverflow.com/questions/50374908/transform-union-type-to-intersection-type
- *
- */
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
-export type PickType = {
- [P in keyof T as T[P] extends Value ? P : never]: T[P];
-};
-export type ExcludeType = {
- [P in keyof T as T[P] extends Value ? never : P]: T[P];
-};
-
-export type ReadWrite = {
- -readonly [P in keyof T]: T[P];
-};
diff --git a/src/common/utils.ts b/src/common/utils.ts
deleted file mode 100644
index 46a8161..0000000
--- a/src/common/utils.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-export const noop = () => {
- //
-};
-
-export function uuid() {
- const id = [];
- const chars = '0123456789abcdef';
- for (var i = 0; i < 36; i++) {
- id[i] = chars.substring(Math.floor(Math.random() * 0x10))[0];
- }
- id[8] = id[13] = id[18] = id[23] = '-';
-
- return id.join('');
-}
diff --git a/src/extension.node.ts b/src/extension.node.ts
deleted file mode 100644
index 55351d9..0000000
--- a/src/extension.node.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { ExtensionContext, ExtensionMode } from 'vscode';
-import { disposableStore } from './common/lifecycle';
-import { JupyterHubUrlCapture } from './urlCapture';
-import { JupyterRequestCreator } from './common/requestCreator.node';
-import { traceError } from './common/logging';
-import { JupyterHubServerStorage } from './storage';
-import { SimpleFetch } from './common/request';
-import { JupyterServerIntegration } from './jupyterIntegration';
-import { ClassImplementationsForTests } from './testUtils';
-import { getJupyterApi } from './utils';
-import { trackInstallOfExtension } from './common/telemetry';
-
-export async function activate(context: ExtensionContext) {
- trackInstallOfExtension();
- context.subscriptions.push(disposableStore);
- getJupyterApi()
- .then((api) => {
- const requestCreator = new JupyterRequestCreator();
- const fetch = new SimpleFetch(requestCreator);
- const storage = disposableStore.add(new JupyterHubServerStorage(context.secrets, context.globalState));
- const uriCapture = disposableStore.add(new JupyterHubUrlCapture(fetch, storage));
- disposableStore.add(new JupyterServerIntegration(fetch, api.exports, storage, uriCapture));
- })
- .catch((ex) => traceError('Failed to activate jupyter extension', ex));
- if (context.extensionMode === ExtensionMode.Test) {
- return { RequestCreator: JupyterRequestCreator } as ClassImplementationsForTests;
- }
-}
diff --git a/src/extension.web.ts b/src/extension.web.ts
deleted file mode 100644
index 91cac54..0000000
--- a/src/extension.web.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { ExtensionContext, ExtensionMode } from 'vscode';
-import { disposableStore } from './common/lifecycle';
-import { JupyterHubUrlCapture } from './urlCapture';
-import { JupyterRequestCreator } from './common/requestCreator.web';
-import { traceError } from './common/logging';
-import { JupyterHubServerStorage } from './storage';
-import { SimpleFetch } from './common/request';
-import { JupyterServerIntegration } from './jupyterIntegration';
-import { getJupyterApi, setIsWebExtension } from './utils';
-import { ClassImplementationsForTests } from './testUtils';
-import { trackInstallOfExtension } from './common/telemetry';
-
-export async function activate(context: ExtensionContext) {
- trackInstallOfExtension();
- setIsWebExtension();
- context.subscriptions.push(disposableStore);
- getJupyterApi()
- .then((api) => {
- const requestCreator = new JupyterRequestCreator();
- const fetch = new SimpleFetch(requestCreator);
- const storage = disposableStore.add(new JupyterHubServerStorage(context.secrets, context.globalState));
- const uriCapture = disposableStore.add(new JupyterHubUrlCapture(fetch, storage));
- disposableStore.add(new JupyterServerIntegration(fetch, api.exports, storage, uriCapture));
- })
- .catch((ex) => traceError('Failed to activate jupyter extension', ex));
-
- if (context.extensionMode === ExtensionMode.Test) {
- return { RequestCreator: JupyterRequestCreator } as ClassImplementationsForTests;
- }
-}
diff --git a/src/jupyterHubApi.ts b/src/jupyterHubApi.ts
deleted file mode 100644
index 95b8c02..0000000
--- a/src/jupyterHubApi.ts
+++ /dev/null
@@ -1,409 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { CancellationToken, workspace } from 'vscode';
-import { SimpleFetch } from './common/request';
-import { ServerConnection } from '@jupyterlab/services';
-import { traceDebug, traceError, traceWarn } from './common/logging';
-import { appendUrlPath } from './utils';
-import { noop } from './common/utils';
-import { trackUsageOfOldApiGeneration } from './common/telemetry';
-
-export namespace ApiTypes {
- /**
- * https://jupyterhub.readthedocs.io/en/stable/reference/rest-api.html#operation/get-user
- */
- export interface UserInfo {
- /**
- * The user's notebook server's base URL, if running; null if not.
- */
- server?: string;
- last_activity: Date;
- roles: string[];
- groups: string[];
- name: string;
- admin: boolean;
- pending?: null | 'spawn' | 'stop';
- /**
- * The servers for this user. By default: only includes active servers.
- * Changed in 3.0: if ?include_stopped_servers parameter is specified, stopped servers will be included as well.
- */
- servers?: Record;
- }
- export interface ServerInfo {
- /**
- * The server's name.
- * The user's default server has an empty name
- */
- name: string;
- /**
- * UTC timestamp last-seen activity on this server.
- */
- last_activity: Date;
- /**
- * UTC timestamp when the server was last started.
- */
- started?: Date;
- /**
- * The currently pending action, if any.
- * A server is not ready if an action is pending.
- */
- pending?: null | 'spawn' | 'stop';
- /**
- * Whether the server is ready for traffic.
- * Will always be false when any transition is pending.
- */
- ready: boolean;
- /**
- * Whether the server is stopped.
- * Added in JupyterHub 3.0,
- * and only useful when using the ?include_stopped_servers request parameter.
- * Now that stopped servers may be included (since JupyterHub 3.0),
- * this is the simplest way to select stopped servers.
- * Always equivalent to not (ready or pending).
- */
- stopped: boolean;
- /**
- * The URL path where the server can be accessed (typically /user/:name/:server.name/).
- * Will be a full URL if subdomains are configured.
- */
- url: string;
- /**
- * User specified options for the user's spawned instance of a single-user server.
- */
- user_options: {};
- /**
- * The URL path for an event-stream to retrieve events during a spawn.
- */
- progress_url: string;
- }
-}
-
-export async function getVersion(url: string, fetch: SimpleFetch, token: CancellationToken): Promise {
- // Otherwise request hub/api. This should return the json with the hub version
- // if this is a hub url
- const apiUrl = appendUrlPath(url, 'hub/api');
- let response: Response | undefined;
- let messageTemplate = `Invalid Jupyter Hub Url ${apiUrl} (failed to get version)`;
- try {
- const response = await fetch.send(
- apiUrl,
- {
- method: 'get',
- redirect: 'manual',
- headers: { Connection: 'keep-alive' }
- },
- token
- );
- if (response.status === 200) {
- messageTemplate = `Invalid Jupyter Hub Url ${apiUrl} (failed to parse response)`;
- const { version }: { version: string } = await response.json();
- return version;
- }
- throw new Error('Non 200 response');
- } catch (ex) {
- throw new Error(await getResponseErrorMessageToThrowOrLog(messageTemplate, response));
- }
-}
-
-export async function deleteApiToken(
- baseUrl: string,
- username: string,
- tokenId: string,
- token: string,
- fetch: SimpleFetch,
- cancellationToken: CancellationToken
-) {
- const url = appendUrlPath(baseUrl, `hub/api/users/${username}/tokens/${tokenId}`);
- const options = { method: 'DELETE', headers: { Authorization: `token ${token}` } };
- await fetch.send(url, options, cancellationToken);
-}
-
-export async function verifyApiToken(
- baseUrl: string,
- username: string,
- token: string,
- fetch: SimpleFetch,
- cancellationToken: CancellationToken
-) {
- try {
- await getUserInfo(baseUrl, username, token, fetch, cancellationToken);
- return true;
- } catch (ex) {
- // Capture errors, with CORS we can get an error here even if the token is valid.
- traceDebug(`Token is no longer valid`, ex);
- return false;
- }
-}
-
-export async function generateNewApiToken(
- baseUrl: string,
- username: string,
- password: string,
- fetch: SimpleFetch,
- cancellationToken: CancellationToken
-): Promise<{ token: string; tokenId: string }> {
- let response: Response | undefined;
- try {
- const url = appendUrlPath(baseUrl, `hub/api/users/${username}/tokens`);
- const body = {
- auth: { username: username, password: password },
- note: `Requested by JupyterHub extension in VSCode`
- };
- type ResponseType = { user: string; id: string; token: string };
- response = await fetch.send(url, { method: 'POST', body: JSON.stringify(body) }, cancellationToken);
- const json = (await response.json()) as ResponseType;
- traceDebug(`Generated new token for user using the new way`);
- return { token: json.token, tokenId: json.id };
- } catch (ex) {
- traceError(await getResponseErrorMessageToThrowOrLog(`Failed to generate token, trying old way`, response), ex);
- return generateNewApiTokenOldWay(baseUrl, username, password, fetch, cancellationToken);
- }
-}
-
-/**
- * This is a backup way of generating tokens.
- * In 1.5 the new approach was introduced, but we need to support older versions.
- * This in case we have users with older versions.
- */
-export async function generateNewApiTokenOldWay(
- baseUrl: string,
- username: string,
- password: string,
- fetch: SimpleFetch,
- cancellationToken: CancellationToken
-): Promise<{ token: string; tokenId: string }> {
- try {
- const url = appendUrlPath(baseUrl, `hub/api/authorizations/token`);
- const body = { username: username, password: password };
- type ResponseType = { user: {}; token: string };
- const response = await fetch.send(url, { method: 'POST', body: JSON.stringify(body) }, cancellationToken);
- const json = (await response.json()) as ResponseType;
- if (json.token) {
- traceDebug(`Generated new token for user using the old way`);
- trackUsageOfOldApiGeneration(baseUrl);
- return { token: json.token, tokenId: '' };
- }
- throw new Error('Unable to generate Token using the old api route');
- } catch (ex) {
- traceError(`Failed to generate token, trying old way`, ex);
- throw ex;
- }
-}
-export async function getUserInfo(
- baseUrl: string,
- username: string,
- token: string,
- fetch: SimpleFetch,
- cancellationToken: CancellationToken,
- includeStoppedServers?: boolean
-): Promise {
- traceDebug(`Getting user info for user ${baseUrl}, token length = ${token.length} && ${token.trim().length}`);
- const path = includeStoppedServers
- ? `hub/api/users/${username}?include_stopped_servers`
- : `hub/api/users/${username}`;
- const url = appendUrlPath(baseUrl, path);
- const headers = { Authorization: `token ${token}` };
- const response = await fetch.send(url, { method: 'GET', headers }, cancellationToken);
- if (response.status === 200) {
- return response.json();
- }
- throw new Error(await getResponseErrorMessageToThrowOrLog(`Failed to get user info`, response));
-}
-
-export async function getUserJupyterUrl(
- baseUrl: string,
- username: string,
- serverName: string | undefined,
- token: string,
- fetch: SimpleFetch,
- cancelToken: CancellationToken
-) {
- // If we have a server name, then also get a list of the stopped servers.
- // Possible the server has been stopped.
- const includeStoppedServers = !!serverName;
- const info = await getUserInfo(baseUrl, username, token, fetch, cancelToken, includeStoppedServers);
- if (serverName) {
- // Find the server in the list
- const server = (info.servers || {})[serverName];
- if (server?.url) {
- return appendUrlPath(baseUrl, server.url);
- }
- const servers = Object.keys(info.servers || {});
- traceError(
- `Failed to get the user Jupyter Url for ${serverName} existing servers include ${JSON.stringify(info)}`
- );
- throw new Error(
- `Named Jupyter Server '${serverName}' not found, existing servers include ${servers.join(', ')}`
- );
- } else {
- const defaultServer = (info.servers || {})['']?.url || info.server;
- if (defaultServer) {
- return appendUrlPath(baseUrl, defaultServer);
- }
- traceError(
- `Failed to get the user Jupyter Url as there is no default server for the user ${JSON.stringify(info)}`
- );
- return appendUrlPath(baseUrl, `user/${username}/`);
- }
-}
-
-export async function listServers(
- baseUrl: string,
- username: string,
- token: string,
- fetch: SimpleFetch,
- cancelToken: CancellationToken
-) {
- try {
- const info = await getUserInfo(baseUrl, username, token, fetch, cancelToken, true).catch((ex) => {
- traceWarn(`Failed to get user info with stopped servers, defaulting without`, ex);
- return getUserInfo(baseUrl, username, token, fetch, cancelToken);
- });
-
- return Object.values(info.servers || {});
- } catch (ex) {
- traceError(`Failed to get a list of servers for the user ${username}`, ex);
- return [];
- }
-}
-
-export async function startServer(
- baseUrl: string,
- username: string,
- serverName: string | undefined,
- token: string,
- fetch: SimpleFetch,
- cancellationToken: CancellationToken
-): Promise {
- const url = serverName
- ? appendUrlPath(baseUrl, `hub/api/users/${username}/servers/${encodeURIComponent(serverName)}`)
- : appendUrlPath(baseUrl, `hub/api/users/${username}/server`);
- const headers = { Authorization: `token ${token}` };
- const response = await fetch.send(url, { method: 'POST', headers }, cancellationToken);
- if (response.status === 201 || response.status === 202) {
- return;
- }
- throw new Error(await getResponseErrorMessageToThrowOrLog(`Failed to fetch user info`, response));
-}
-async function getResponseErrorMessageToThrowOrLog(message: string, response?: Response) {
- if (!response) {
- return message;
- }
- let responseText = '';
- try {
- responseText = await response.text();
- } catch (ex) {
- traceError(`Error fetching text from response to log error ${message}`, ex);
- }
- return `${message}, ${response.statusText} (${response.status}) with message ${responseText}`;
-}
-
-export async function createServerConnectSettings(
- baseUrl: string,
- serverName: string | undefined,
- authInfo: {
- username: string;
- token: string;
- },
- fetch: SimpleFetch,
- cancelToken: CancellationToken
-): Promise {
- baseUrl = await getUserJupyterUrl(baseUrl, authInfo.username, serverName, authInfo.token, fetch, cancelToken);
- let serverSettings: Partial = {
- baseUrl,
- appUrl: '',
- // A web socket is required to allow token authentication
- wsUrl: baseUrl.replace('http', 'ws')
- };
-
- // Agent is allowed to be set on this object, but ts doesn't like it on RequestInit, so any
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- let requestInit: any = fetch.requestCreator.getRequestInit();
-
- serverSettings = { ...serverSettings, token: authInfo.token, appendToken: true };
-
- const allowUnauthorized = workspace
- .getConfiguration('jupyter')
- .get('allowUnauthorizedRemoteConnection', false);
- // If this is an https connection and we want to allow unauthorized connections set that option on our agent
- // we don't need to save the agent as the previous behaviour is just to create a temporary default agent when not specified
- if (baseUrl.startsWith('https') && allowUnauthorized && fetch.requestCreator.createHttpRequestAgent) {
- const requestAgent = fetch.requestCreator.createHttpRequestAgent();
- requestInit = { ...requestInit, agent: requestAgent };
- }
-
- // This replaces the WebSocket constructor in jupyter lab services with our own implementation
- // See _createSocket here:
- // https://github.com/jupyterlab/jupyterlab/blob/cfc8ebda95e882b4ed2eefd54863bb8cdb0ab763/packages/services/src/kernel/default.ts
- serverSettings = {
- ...serverSettings,
- init: requestInit,
- fetch: fetch.requestCreator.getFetchMethod(),
- Request: fetch.requestCreator.getRequestCtor(undefined),
- Headers: fetch.requestCreator.getHeadersCtor()
- };
-
- return ServerConnection.makeSettings(serverSettings);
-}
-
-// Caching is faster than making a http request every single time.
-const cacheOfBaseUrls = new Map();
-
-/**
- * Give a Url to a Jupyter Hub server, return the base url of the server.
- * If the Url is not a Jupyter Hub server, then an error is throw.
- */
-export async function getJupyterHubBaseUrl(url: string, fetch: SimpleFetch, token: CancellationToken): Promise {
- const cachedBaseUrl = cacheOfBaseUrls.get(url);
- if (cachedBaseUrl) {
- return cachedBaseUrl;
- }
- // We need to get the base url of the Jupyter Hub server.
- // User may have entered https:///user//lab, we have no idea.
-
- // If the URL has the /user/ option in it, it's likely this is jupyter hub
- if (await getVersion(url, fetch, token).catch(noop)) {
- cacheOfBaseUrls.set(url, url);
- return url;
- }
-
- if (url.toLowerCase().includes('/user/')) {
- try {
- const strippedUrl = url.substring(0, url.toLowerCase().indexOf('/user/'));
- if (await getVersion(strippedUrl, fetch, token).catch(noop)) {
- cacheOfBaseUrls.set(url, strippedUrl);
- return strippedUrl;
- }
- } catch {
- //
- }
- }
-
- if (await getVersion(new URL(url).origin, fetch, token).catch(noop)) {
- cacheOfBaseUrls.set(url, new URL(url).origin);
- return new URL(url).origin;
- }
-
- throw new Error('Unable to determine base url of Jupyter Hub Server');
-}
-
-export function extractUserNameFromUrl(url: string) {
- // User user name from the Url.
- if (url.toLowerCase().includes('/user/')) {
- const parts = url.split('/');
- const userIndex = parts.findIndex((p) => p.toLowerCase() === 'user');
- if (userIndex > 0 && parts.length >= userIndex + 1) {
- return parts[userIndex + 1].trim();
- }
- }
-}
-export function extractTokenFromUrl(url: string) {
- try {
- const parsedUrl = new URL(url);
- const token = parsedUrl.searchParams.get('token');
- return token || '';
- } catch {
- return '';
- }
-}
diff --git a/src/jupyterIntegration.ts b/src/jupyterIntegration.ts
deleted file mode 100644
index c5e6f4e..0000000
--- a/src/jupyterIntegration.ts
+++ /dev/null
@@ -1,313 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-/* eslint-disable @typescript-eslint/no-explicit-any */
-import * as nodeFetch from 'node-fetch';
-import WebSocketIsomorphic from 'isomorphic-ws';
-import { CancellationError, CancellationToken, CancellationTokenSource, Disposable, EventEmitter, Uri } from 'vscode';
-import type {
- Jupyter,
- JupyterServer,
- JupyterServerCommand,
- JupyterServerCommandProvider,
- JupyterServerConnectionInformation,
- JupyterServerProvider
-} from '@vscode/jupyter-extension';
-import { Localized } from './common/localize';
-import { traceDebug, traceError } from './common/logging';
-import { dispose } from './common/lifecycle';
-import { JupyterHubServerStorage } from './storage';
-import { SimpleFetch } from './common/request';
-import { JupyterHubUrlCapture } from './urlCapture';
-import { Authenticator } from './authenticator';
-import { deleteApiToken, getUserJupyterUrl } from './jupyterHubApi';
-import { noop } from './common/utils';
-import { IJupyterHubConnectionValidator } from './types';
-import { JupyterHubConnectionValidator } from './validator';
-
-export const UserJupyterServerUriListKey = 'user-jupyter-server-uri-list';
-export const UserJupyterServerUriListKeyV2 = 'user-jupyter-server-uri-list-version2';
-export const UserJupyterServerUriListMementoKey = '_builtin.jupyterServerUrlProvider.uriList';
-
-export class JupyterServerIntegration implements JupyterServerProvider, JupyterServerCommandProvider {
- readonly id: string = 'UserJupyterServerPickerProviderId';
- readonly documentation = Uri.parse('https://aka.ms/vscodeJuptyerExtKernelPickerExistingServer');
- private readonly newAuthenticator: Authenticator;
- private readonly disposables: Disposable[] = [];
- private readonly _onDidChangeServers = new EventEmitter();
- public readonly onDidChangeServers = this._onDidChangeServers.event;
- private previouslyEnteredUrlTypedIntoQuickPick?: string;
- private previouslyEnteredJupyterServerBasedOnUrlTypedIntoQuickPick?: JupyterServer;
- private readonly jupyterConnectionValidator: IJupyterHubConnectionValidator;
- constructor(
- private readonly fetch: SimpleFetch,
- private readonly jupyterApi: Jupyter,
- private readonly storage: JupyterHubServerStorage,
- private readonly urlCapture: JupyterHubUrlCapture,
- private readonly nodeFetchImpl: typeof nodeFetch = nodeFetch
- ) {
- this.jupyterConnectionValidator = new JupyterHubConnectionValidator(fetch);
- this.newAuthenticator = new Authenticator(fetch);
- const collection = this.jupyterApi.createJupyterServerCollection(
- this.id,
- Localized.KernelActionSourceTitle,
- this
- );
- this.disposables.push(collection);
- this.disposables.push(this._onDidChangeServers);
- collection.commandProvider = this;
- collection.documentation = Uri.parse('https://aka.ms/vscodeJupyterHub');
- }
- public dispose() {
- dispose(this.disposables);
- }
- public async handleCommand(
- command: JupyterServerCommand & { url?: string },
- token: CancellationToken
- ): Promise {
- try {
- const url = 'url' in command ? command.url : undefined;
-
- // Its possible this command was executed as a result of hitting the back button.
- // When we provide a url we skip the url capture input box, but when we come here from the
- // back button then we need to re-display the url capture input box.
- let displayName: string | undefined = undefined;
- let serverId: string | undefined = undefined;
- let whyCaptureUrl: 'cameHereFromBackButton' | 'captureNewUrl' = 'captureNewUrl';
- if (
- url &&
- this.previouslyEnteredUrlTypedIntoQuickPick === url &&
- this.previouslyEnteredJupyterServerBasedOnUrlTypedIntoQuickPick
- ) {
- whyCaptureUrl = 'cameHereFromBackButton';
- serverId = this.previouslyEnteredJupyterServerBasedOnUrlTypedIntoQuickPick.id;
- displayName = this.previouslyEnteredJupyterServerBasedOnUrlTypedIntoQuickPick.label;
- }
- const server = await this.urlCapture.captureRemoteJupyterUrl(
- token,
- url,
- displayName,
- undefined,
- serverId,
- whyCaptureUrl
- );
- if (!server) {
- this.previouslyEnteredJupyterServerBasedOnUrlTypedIntoQuickPick = undefined;
- this.previouslyEnteredUrlTypedIntoQuickPick = undefined;
- return;
- }
- this._onDidChangeServers.fire();
- this.previouslyEnteredJupyterServerBasedOnUrlTypedIntoQuickPick = server;
- return server;
- } catch (ex) {
- if (!(ex instanceof CancellationError)) {
- traceError(`Failed to select a Jupyter Server`, ex);
- }
- this.previouslyEnteredUrlTypedIntoQuickPick = undefined;
- this.previouslyEnteredJupyterServerBasedOnUrlTypedIntoQuickPick = undefined;
- throw ex;
- }
- }
- /**
- * @param value Value entered by the user in the quick pick
- */
- async provideCommands(value: string, _token: CancellationToken): Promise {
- this.previouslyEnteredJupyterServerBasedOnUrlTypedIntoQuickPick = undefined;
- this.previouslyEnteredUrlTypedIntoQuickPick = undefined;
- let url = '';
- try {
- value = (value || '').trim();
- if (['http:', 'https:'].includes(new URL(value.trim()).protocol.toLowerCase())) {
- url = value;
- }
- } catch {
- //
- }
- if (url) {
- this.previouslyEnteredUrlTypedIntoQuickPick = url;
- const label = Localized.connectToToTheJupyterServer(url);
- return [{ label, url } as JupyterServerCommand];
- }
- return [{ label: Localized.labelOfCommandToEnterUrl, canBeAutoSelected: true }];
- }
- async removeJupyterServer?(server: JupyterServer): Promise {
- const tokenSource = new CancellationTokenSource();
- try {
- const serverInfo = this.storage.all.find((s) => s.id === server.id);
- const authInfo = await this.storage.getCredentials(server.id).catch(noop);
- if (serverInfo && authInfo?.token && authInfo.tokenId) {
- // Delete the token that we created (we no longer need this).
- await deleteApiToken(
- serverInfo.baseUrl,
- authInfo.username,
- authInfo.tokenId,
- authInfo.token,
- this.fetch,
- tokenSource.token
- ).catch((ex) => traceDebug(`Failed to delete token ${server.id}`, ex));
- }
- await this.storage.removeServer(server.id);
- } catch (ex) {
- traceDebug(`Failed to remove server ${server.id}`, ex);
- } finally {
- this._onDidChangeServers.fire();
- }
- }
- async provideJupyterServers(_token: CancellationToken): Promise {
- return this.storage.all.map((s) => {
- return {
- id: s.id,
- label: s.displayName
- };
- });
- }
- private cachedOfAuthInfo = new Map>();
- public async resolveJupyterServer(server: JupyterServer, token: CancellationToken): Promise {
- if (!this.cachedOfAuthInfo.get(server.id)) {
- const promise = this.resolveJupyterServerImpl(server, token);
- promise.catch((ex) => {
- if (this.cachedOfAuthInfo.get(server.id) === promise) {
- traceError(`Failed to get auth information for server ${server.id}`, ex);
- this.cachedOfAuthInfo.delete(server.id);
- }
- });
- this.cachedOfAuthInfo.set(server.id, promise);
- }
- return this.cachedOfAuthInfo.get(server.id)!;
- }
- private async resolveJupyterServerImpl(
- server: JupyterServer,
- cancelToken: CancellationToken
- ): Promise {
- const serverInfo = this.storage.all.find((s) => s.id === server.id);
- if (!serverInfo) {
- throw new Error('Server not found');
- }
- const authInfo = await this.storage.getCredentials(server.id);
- if (!authInfo) {
- throw new Error(`Server ${server.id} not found`);
- }
-
- // Verify the server is running, if not start this server.
- const result = await this.newAuthenticator.getJupyterAuthInfo(
- { baseUrl: serverInfo.baseUrl, authInfo },
- cancelToken
- );
-
- if (result.tokenId && authInfo?.token !== result.token) {
- // If we have ended up with a new token, (happens if th old token expired)
- // Then save the updated token information.
- try {
- await this.storage.addServerOrUpdate(
- {
- baseUrl: serverInfo.baseUrl,
- displayName: serverInfo.displayName,
- id: serverInfo.id,
- serverName: serverInfo.serverName
- },
- {
- password: authInfo.password || '',
- username: authInfo.username || '',
- token: result.token,
- tokenId: result.tokenId
- }
- );
- } catch (ex) {
- traceError(`Failed to update server with the latest token information ${server.id}`, ex);
- }
- }
-
- // Validate the uri and auth infor.
- // Else nothing will work when attempting to connect to this server from Jupyter Extension.
- await this.jupyterConnectionValidator
- .validateJupyterUri(
- serverInfo.baseUrl,
- { username: authInfo.username, password: authInfo.password, token: result.token },
- this.newAuthenticator,
- cancelToken
- )
- .catch(noop);
- // Ensure the server is running.
- // Else nothing will work when attempting to connect to this server from Jupyter Extension.
- await this.jupyterConnectionValidator
- .ensureServerIsRunning(
- serverInfo.baseUrl,
- serverInfo.serverName,
- { username: authInfo.username, password: authInfo.password, token: result.token },
- this.newAuthenticator,
- cancelToken
- )
- .catch(noop);
-
- const rawBaseUrl = await getUserJupyterUrl(
- serverInfo.baseUrl,
- authInfo.username || '',
- serverInfo.serverName,
- authInfo.token,
- this.fetch,
- cancelToken
- );
-
- // https://github.com/microsoft/vscode-jupyter-hub/issues/53
- const baseUrl = Uri.parse(rawBaseUrl);
- const brokenUrl = new this.nodeFetchImpl.Request(baseUrl.toString(true)).url;
- const correctUrl = new this.nodeFetchImpl.Request(rawBaseUrl).url;
- const brokenWsUrl = brokenUrl.replace('http', 'ws');
- const brokenWsUrl2 = baseUrl.toString(true).replace('http', 'ws');
- const correctWsUrl = correctUrl.replace('http', 'ws');
- const ourFetch = async (input: Request, init?: RequestInit) => {
- const newUrl = input.url.replace(brokenUrl, correctUrl);
- init = init || {
- method: input.method,
- body: input.body,
- headers: input.headers,
- redirect: input.redirect,
- cache: input.cache,
- credentials: input.credentials,
- integrity: input.integrity,
- keepalive: input.keepalive,
- mode: input.mode,
- referrer: input.referrer,
- referrerPolicy: input.referrerPolicy,
- signal: input.signal
- };
- const newInput = new this.nodeFetchImpl.Request(newUrl, init as any);
- return this.nodeFetchImpl.default(newInput as any, init as any);
- };
- const headers = {
- Authorization: `token ${result.token}`
- };
-
- const addOurHeaders = (options?: any) => {
- options = options || {};
- return {
- ...options,
- headers: {
- ...(options.headers || {}),
- ...headers
- }
- };
- };
-
- class OurWebSocket extends WebSocketIsomorphic {
- constructor(url: string, protocols?: string | string[], options?: any) {
- super(
- url.replace(brokenWsUrl, correctWsUrl).replace(brokenWsUrl2, correctWsUrl),
- protocols,
- addOurHeaders(options)
- );
- }
- }
- const connectionInformation: JupyterServerConnectionInformation = {
- baseUrl,
- token: result.token,
- headers
- };
- (connectionInformation as any).fetch = ourFetch;
- (connectionInformation as any).WebSocket = OurWebSocket;
- return {
- ...server,
- connectionInformation
- };
- }
-}
diff --git a/src/storage.ts b/src/storage.ts
deleted file mode 100644
index 961437b..0000000
--- a/src/storage.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { EventEmitter, Memento, SecretStorage } from 'vscode';
-import { traceError } from './common/logging';
-import { DisposableStore } from './common/lifecycle';
-import { IJupyterHubServerStorage, JupyterHubServer } from './types';
-
-const serverListStorageKey = 'JupyterHubServers';
-const AuthKeyPrefix = 'JupyterHubServerAuthInfo_';
-function getAuthInfoKey(serverId: string) {
- return `${AuthKeyPrefix}${serverId}`;
-}
-type Credentials = {
- username: string;
- password: string; // Required to re-generate the token.
- token: string; // Generated using Hub REST API, this api token is used for connecting to Jupyter by Jupyter Extension.
- tokenId: string; // Requried when we want to delete the token using the Hub REST API.
-};
-
-export class JupyterHubServerStorage implements IJupyterHubServerStorage {
- private disposable = new DisposableStore();
- _onDidRemove = new EventEmitter();
- onDidRemove = this._onDidRemove.event;
- constructor(
- private readonly secrets: SecretStorage,
- private readonly globalMemento: Memento
- ) {}
- dispose() {
- this.disposable.dispose();
- }
- public get all(): JupyterHubServer[] {
- return this.globalMemento.get(serverListStorageKey, []);
- }
- public async getCredentials(
- serverId: string
- ): Promise<{ username: string; password: string; token: string; tokenId: string } | undefined> {
- try {
- const js = await this.secrets.get(getAuthInfoKey(serverId));
- if (!js) {
- return;
- }
- return JSON.parse(js || '') as Credentials;
- } catch (ex) {
- traceError(`Failed to extract stored username/password ${serverId}`);
- return;
- }
- }
- public async addServerOrUpdate(
- server: { id: string; baseUrl: string; displayName: string; serverName: string | undefined },
- auth: { username: string; password: string; token: string; tokenId: string }
- ) {
- await Promise.all([
- this.globalMemento.update(serverListStorageKey, this.all.filter((s) => s.id !== server.id).concat(server)),
- this.secrets.store(getAuthInfoKey(server.id), JSON.stringify(auth))
- ]);
- }
- public async removeServer(serverId: string) {
- const item = this.all.find((s) => s.id === serverId);
- await Promise.all([
- this.globalMemento.update(
- serverListStorageKey,
- this.all.filter((s) => s.id !== serverId)
- ),
- this.secrets.delete(getAuthInfoKey(serverId))
- ]);
-
- if (item) {
- this._onDidRemove.fire(item);
- }
- }
-}
diff --git a/src/test/constants.node.ts b/src/test/constants.node.ts
deleted file mode 100644
index b558e73..0000000
--- a/src/test/constants.node.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import * as path from 'path';
-
-export const EXTENSION_DIR = path.join(__dirname, '..', '..');
-export const TEMP_DIR = path.join(EXTENSION_DIR, 'tmp');
diff --git a/src/test/constants.ts b/src/test/constants.ts
deleted file mode 100644
index e64bae3..0000000
--- a/src/test/constants.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-export const CI_PYTHON_PATH = process.env.CI_PYTHON_PATH || 'python';
-
diff --git a/src/test/runTest.ts b/src/test/runTest.ts
deleted file mode 100644
index a000070..0000000
--- a/src/test/runTest.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import * as path from 'path';
-import { downloadAndUnzipVSCode, resolveCliPathFromVSCodeExecutablePath, runTests } from '@vscode/test-electron';
-import { TEMP_DIR } from './constants.node';
-import { dispose } from '../common/lifecycle';
-import { spawnSync } from 'child_process';
-import { getExtensionsDir, startJupterHub } from './suite/helpers.node';
-
-async function main() {
- const disposables: { dispose(): void }[] = [];
- try {
- const extensionDevelopmentPath = path.resolve(__dirname, '../../');
- disposables.push(await startJupterHub());
-
- const extensionTestsPath = path.resolve(__dirname, './suite/index');
- const vscodeExecutablePath = await downloadAndUnzipVSCode('insiders');
- const cliPath = resolveCliPathFromVSCodeExecutablePath(vscodeExecutablePath);
- const extensionsDir = await getExtensionsDir();
-
- console.info(`Installing Jupyter Extension`);
- spawnSync(
- cliPath,
- [
- '--install-extension',
- 'ms-toolsai.jupyter',
- '--pre-release',
- '--extensions-dir',
- extensionsDir,
- '--disable-telemetry'
- ],
- {
- encoding: 'utf-8',
- stdio: 'inherit'
- }
- );
-
- // Download VS Code, unzip it and run the integration test
- await runTests({
- extensionDevelopmentPath,
- extensionTestsPath,
- launchArgs: [TEMP_DIR, '--extensions-dir', extensionsDir],
- version: 'insiders'
- });
- } catch (err) {
- console.error('Failed to run tests', err);
- process.exit(1);
- } finally {
- dispose(disposables);
- }
-}
-
-main().catch((ex) => console.error('Unexpected error in running tests', ex));
diff --git a/src/test/runTest.web.ts b/src/test/runTest.web.ts
deleted file mode 100644
index 986faca..0000000
--- a/src/test/runTest.web.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { runTests } from '@vscode/test-web';
-import * as path from 'path';
-import { EXTENSION_DIR, TEMP_DIR } from './constants.node';
-import { getExtensionsDir, startJupterHub } from './suite/helpers.node';
-import { dispose } from '../common/lifecycle';
-import { downloadAndUnzipVSCode, resolveCliPathFromVSCodeExecutablePath } from '@vscode/test-electron';
-import { spawnSync } from 'child_process';
-
-async function main() {
- const disposables: { dispose(): void }[] = [];
- let exitCode = 0;
- try {
- const extensionDevelopmentPath = path.resolve(__dirname, '../../');
- disposables.push(await startJupterHub());
-
- const extensionTestsPath = path.resolve(EXTENSION_DIR, 'dist/web/test/suite/test.index.web.js');
- const vscodeExecutablePath = await downloadAndUnzipVSCode('insiders');
- const cliPath = resolveCliPathFromVSCodeExecutablePath(vscodeExecutablePath);
- const extensionsDir = await getExtensionsDir();
-
- console.info(`Installing Jupyter Extension`);
- spawnSync(
- cliPath,
- [
- '--install-extension',
- 'ms-toolsai.jupyter',
- '--pre-release',
- '--extensions-dir',
- extensionsDir,
- '--disable-telemetry'
- ],
- {
- encoding: 'utf-8',
- stdio: 'inherit'
- }
- );
-
- // Download VS Code, unzip it and run the integration test
- await runTests({
- extensionDevelopmentPath,
- extensionTestsPath,
- folderPath: TEMP_DIR,
- browserType: 'chromium',
- quality: 'insiders'
- });
- } catch (err) {
- console.error('Failed to run tests', err);
- exitCode = 1;
- } finally {
- dispose(disposables);
- }
-
- // Not all promises complete. Force exit
- process.exit(exitCode);
-}
-
-main().catch((ex) => console.error('Unexpected error in running tests', ex));
diff --git a/src/test/suite/extension.test.ts b/src/test/suite/extension.test.ts
deleted file mode 100644
index 17a4002..0000000
--- a/src/test/suite/extension.test.ts
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { assert, expect } from 'chai';
-import { Authenticator } from '../../authenticator';
-import { CancellationTokenSource, Uri, workspace } from 'vscode';
-import { DisposableStore } from '../../common/lifecycle';
-import { activateHubExtension, getWebSocketCreator } from './helpers';
-import { noop } from '../../common/utils';
-import { SimpleFetch } from '../../common/request';
-import { JupyterHubConnectionValidator, getKernelSpecs } from '../../validator';
-import { ClassType, ReadWrite } from '../../common/types';
-import { IJupyterRequestCreator, type IJupyterHubConnectionValidator } from '../../types';
-import { createServerConnectSettings, deleteApiToken } from '../../jupyterHubApi';
-import { KernelManager, SessionManager } from '@jupyterlab/services';
-
-const TIMEOUT = 30_000; // Spinning up jupyter servers could take a while.
-describe('Authentication', function () {
- let baseUrl = 'http://localhost:8000';
- let apiToken = '';
- let username = '';
- let cancellationToken: CancellationTokenSource;
- this.timeout(TIMEOUT);
- let RequestCreator: ClassType;
- let disposableStore: DisposableStore;
- let authenticator: Authenticator;
- let fetch: SimpleFetch;
- let requestCreator: IJupyterRequestCreator;
- let generatedTokens: { token: string; tokenId: string }[] = [];
- let validator: IJupyterHubConnectionValidator;
- before(async function () {
- this.timeout(TIMEOUT);
- const file = Uri.joinPath(workspace.workspaceFolders![0].uri, 'jupyterhub.json');
- await activateHubExtension().then((classes) => {
- RequestCreator = classes.RequestCreator;
- });
-
- requestCreator = new RequestCreator();
- fetch = new SimpleFetch(requestCreator);
- authenticator = new Authenticator(fetch);
- cancellationToken = new CancellationTokenSource();
- validator = new JupyterHubConnectionValidator(fetch);
- const { url, username: user } = JSON.parse(Buffer.from(await workspace.fs.readFile(file)).toString());
- baseUrl = url;
- username = user;
- const { token } = await generateToken('pwd');
- // Ensure the server is running.
- await validator.ensureServerIsRunning(
- url,
- undefined,
- {
- password: 'pwd',
- username,
- token
- },
- authenticator,
- cancellationToken.token
- );
- apiToken = token;
- assert.ok(baseUrl, 'No JupyterHub url');
- assert.ok(apiToken, 'No JupyterHub token');
- });
- beforeEach(() => (disposableStore = new DisposableStore()));
- afterEach(() => disposableStore.dispose());
- after(async () => {
- // Delete all tokens generated.
- await Promise.all(
- generatedTokens.map((item) =>
- deleteApiToken(baseUrl, username, item.tokenId, item.token, fetch, cancellationToken.token).catch(noop)
- )
- );
- cancellationToken.dispose();
- });
-
- async function generateToken(password: string) {
- const { token, tokenId } = await authenticator.getJupyterAuthInfo(
- { baseUrl, authInfo: { username, password, token: '' } },
- cancellationToken.token
- );
- expect(token).to.be.a('string').that.is.not.equal('');
- if (password !== token) {
- expect(tokenId).to.be.a('string').that.is.not.equal('');
- }
- generatedTokens.push({ token, tokenId });
- return { token, tokenId };
- }
- [
- { title: 'password', password: () => 'pwd' }, // Test with password.
- { title: 'token', password: () => apiToken } // Test with a user entered API token.
- ].forEach(({ title, password }) => {
- describe(title, function () {
- it('should get Auth info', async () => {
- const { token } = await generateToken(password());
- expect(token).to.be.a('string').that.is.not.equal('');
- });
- it('should pass validation', async function () {
- const { token } = await generateToken(password());
-
- const validator = new JupyterHubConnectionValidator(fetch);
- await validator.validateJupyterUri(
- baseUrl,
- { username, password: password(), token },
- authenticator,
- cancellationToken.token
- );
- });
- it('should be able to start a session', async function () {
- const { token } = await generateToken(password());
- const serverSettings = await createServerConnectSettings(
- baseUrl,
- undefined,
- { username: username, token },
- fetch,
- cancellationToken.token
- );
- (serverSettings as ReadWrite).WebSocket = getWebSocketCreator()(
- undefined,
- true,
- () => ({
- Authorization: `token ${token}`
- }),
- () => []
- ) as any;
-
- const kernelSpecs = await getKernelSpecs(serverSettings, cancellationToken.token);
- if (!kernelSpecs) {
- throw new Error('No kernel specs');
- }
- const kernelManager = disposableStore.add(new KernelManager({ serverSettings }));
- await kernelManager.ready;
-
- const sessionManager = disposableStore.add(new SessionManager({ serverSettings, kernelManager }));
- await sessionManager.ready;
- const session = await sessionManager.startNew({
- name: kernelSpecs.default,
- path: 'one.ipynb',
- type: 'notebook'
- });
- expect(session.model.kernel?.name).to.be.equal(kernelSpecs.default);
- expect(session.model.path).to.be.equal('one.ipynb');
- expect(session.model.type).to.be.equal('notebook');
- await Promise.all([session.shutdown().catch(noop), kernelManager.shutdownAll().catch(noop)]);
- });
- });
- });
-});
diff --git a/src/test/suite/helpers.node.ts b/src/test/suite/helpers.node.ts
deleted file mode 100644
index ad4330d..0000000
--- a/src/test/suite/helpers.node.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { spawn } from 'child_process';
-import { CI_PYTHON_PATH } from '../constants';
-import * as path from 'path';
-import * as os from 'os';
-import * as fs from 'fs';
-import { EXTENSION_DIR, TEMP_DIR } from '../constants.node';
-
-const configFile = path.join(EXTENSION_DIR, 'build', 'jupyterhub_config.py');
-export async function startJupterHub(): Promise<{ dispose: () => void }> {
- setupTempDir();
- const token = await generateJupyberHubToken();
- const url = 'http://localhost:8000';
- fs.writeFileSync(
- path.join(TEMP_DIR, 'jupyterhub.json'),
- JSON.stringify({ url, token, username: os.userInfo().username })
- );
- return spawnJupyterHub();
-}
-
-export async function getExtensionsDir(): Promise {
- const name = 'vscode_jupyter_hub_exts';
- const extDirPath = path.join(TEMP_DIR, name);
- if (!fs.existsSync(extDirPath)) {
- fs.mkdirSync(extDirPath);
- }
- return extDirPath;
-}
-
-function setupTempDir() {
- if (fs.existsSync(TEMP_DIR)) {
- return;
- }
- fs.mkdirSync(TEMP_DIR);
-}
-
-export async function generateJupyberHubToken() {
- return new Promise((resolve) => {
- try {
- const proc = spawn(
- CI_PYTHON_PATH,
- ['-m', 'jupyterhub', 'token', os.userInfo().username, '--config', configFile],
- {
- cwd: TEMP_DIR,
- env: process.env
- }
- );
- proc.stdout.on('data', (data) => {
- resolve(data.toString().trim());
- });
- } catch (ex) {
- console.error('Failed to generate JupyterHub token', ex);
- }
- });
-}
-function spawnJupyterHub() {
- const proc = spawn('python', ['-m', 'jupyterhub', '--config', configFile], {
- stdio: 'inherit',
- cwd: TEMP_DIR
- });
- return { dispose: () => proc.kill() };
-}
diff --git a/src/test/suite/helpers.ts b/src/test/suite/helpers.ts
deleted file mode 100644
index fff6d48..0000000
--- a/src/test/suite/helpers.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { extensions } from 'vscode';
-import { EXTENSION_ID } from '../../common/constants';
-import { ClassImplementationsForTests } from '../../testUtils';
-import { ClassType } from '../../common/types';
-
-export async function activateHubExtension() {
- const ext = extensions.getExtension(EXTENSION_ID);
- if (!ext) {
- throw new Error('JupyterHub extension not installed');
- }
- if (!ext.isActive) {
- await ext.activate();
- }
- return Promise.resolve(ext.exports as ClassImplementationsForTests);
-}
-
-type WebSocketCtor = (
- cookieString?: string,
- allowUnauthorized?: boolean,
- getAuthHeaders?: () => Record,
- getWebSocketProtocols?: () => string | string[] | undefined
-) => ClassType;
-// eslint-disable-next-line @typescript-eslint/no-explicit-any
-let webSocketCtor: WebSocketCtor = undefined as any;
-export function setWebSocketCreator(creator: WebSocketCtor) {
- webSocketCtor = creator;
-}
-export function getWebSocketCreator() {
- return webSocketCtor;
-}
diff --git a/src/test/suite/index.ts b/src/test/suite/index.ts
deleted file mode 100644
index f346dd3..0000000
--- a/src/test/suite/index.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import * as path from 'path';
-import Mocha from 'mocha';
-import * as glob from 'glob';
-import { setWebSocketCreator } from './helpers';
-import { getWebsocketCtor } from './wesocketCtor.node';
-
-setWebSocketCreator(getWebsocketCtor);
-
-export async function run(): Promise {
- // Create the mocha test
- const mocha = new Mocha({
- ui: 'bdd',
- color: true
- });
-
- const testsRoot = path.resolve(__dirname, '..');
- return new Promise((c, e) => {
- const testFiles = new glob.Glob('**/**.test.js', { cwd: testsRoot });
- const testFileStream = testFiles.stream();
-
- testFileStream.on('data', (file) => {
- mocha.addFile(path.resolve(testsRoot, file));
- });
- testFileStream.on('error', (err) => {
- e(err);
- });
- testFileStream.on('end', () => {
- try {
- // Run the mocha test
- mocha.run((failures) => {
- if (failures > 0) {
- e(new Error(`${failures} tests failed.`));
- } else {
- c();
- }
- });
- } catch (err) {
- console.error(err);
- e(err);
- }
- });
- });
-}
diff --git a/src/test/suite/index.web.ts b/src/test/suite/index.web.ts
deleted file mode 100644
index 846040b..0000000
--- a/src/test/suite/index.web.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { setIsWebExtension } from '../../utils';
-import { setWebSocketCreator } from './helpers';
-import { getWebsocketCtor } from './websocketCtor.web';
-
-setIsWebExtension();
-setWebSocketCreator(getWebsocketCtor);
-
-// Imports mocha for the browser, defining the `mocha` global.
-export function run(): Promise {
- require('mocha/mocha');
- return new Promise((c, e) => {
- mocha.setup({
- ui: 'bdd',
- reporter: undefined
- });
-
- // Bundles all files in the current directory matching `*.test`
- const importAll = (r: __WebpackModuleApi.RequireContext) => r.keys().forEach(r);
- importAll(require.context('.', true, /\.test$/));
-
- try {
- // Run the mocha test
- mocha.run((failures) => {
- if (failures > 0) {
- e(new Error(`${failures} tests failed.`));
- } else {
- c();
- }
- });
- } catch (err) {
- console.error(err);
- e(err);
- }
- });
-}
diff --git a/src/test/suite/jupyterIntegration.test.ts b/src/test/suite/jupyterIntegration.test.ts
deleted file mode 100644
index 229742f..0000000
--- a/src/test/suite/jupyterIntegration.test.ts
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { assert, expect, use } from 'chai';
-import * as sinon from 'sinon';
-import { mock, instance, anything, when } from 'ts-mockito';
-import * as nodeFetch from 'node-fetch';
-import WebSocketIsomorphic from 'isomorphic-ws';
-import chaiAsPromised from 'chai-as-promised';
-import { Authenticator } from '../../authenticator';
-import { CancellationTokenSource, type CancellationToken } from 'vscode';
-import { DisposableStore } from '../../common/lifecycle';
-import { noop } from '../../common/utils';
-import { SimpleFetch } from '../../common/request';
-import { JupyterHubConnectionValidator } from '../../validator';
-import { type IAuthenticator } from '../../types';
-import { JupyterServerIntegration } from '../../jupyterIntegration';
-import type { JupyterHubServerStorage } from '../../storage';
-import type { Jupyter, JupyterServer } from '@vscode/jupyter-extension';
-import type { JupyterHubUrlCapture } from '../../urlCapture';
-use(chaiAsPromised);
-
-describe('Jupyter Integration', function () {
- let cancellationToken: CancellationTokenSource;
- let disposableStore: DisposableStore;
- let integration: JupyterServerIntegration;
- let fetch: SimpleFetch;
- let jupyterApi: Jupyter;
- let storage: JupyterHubServerStorage;
- let urlCapture: JupyterHubUrlCapture;
- let lastRequestInput: Request | undefined;
- let lastRequestInit: RequestInit | undefined;
- beforeEach(async function () {
- lastRequestInput = undefined;
- lastRequestInit = undefined;
- disposableStore = new DisposableStore();
- fetch = mock();
- jupyterApi = mock();
- storage = mock();
- urlCapture = mock();
- cancellationToken = disposableStore.add(new CancellationTokenSource());
-
- when(jupyterApi.createJupyterServerCollection(anything(), anything(), anything())).thenReturn({
- dispose: noop
- } as any);
- when(storage.all).thenReturn([]);
-
- integration = new JupyterServerIntegration(
- instance(fetch),
- instance(jupyterApi),
- instance(storage),
- instance(urlCapture),
- {
- ...nodeFetch,
- default: ((req: any, init: any) => {
- lastRequestInput = req;
- lastRequestInit = init;
- return Promise.resolve(new Response()) as any;
- }) as any
- }
- );
- });
- afterEach(() => disposableStore.dispose());
-
- describe('Initial state', function () {
- it('Should not provide one command', async () => {
- const commands = await integration.provideCommands('', cancellationToken.token);
- expect(commands).to.lengthOf(1);
- });
- it('Should return empty list of servers', async () => {
- const servers = await integration.provideJupyterServers(cancellationToken.token);
- expect(servers).to.lengthOf(0);
- });
- it('Should reject when attempting to resolve an unknown server', async () => {
- const promise = integration.resolveJupyterServer({ id: 'xyz' } as any, cancellationToken.token);
- await assert.isRejected(promise);
- });
- });
- describe('Entering a Url', function () {
- it('Should register a server', async () => {
- const commands = await integration.provideCommands('', cancellationToken.token);
- const url = 'http://localhost:8000';
- const serverToReturn: JupyterServer = {
- id: 'xyz',
- label: 'New Server'
- };
-
- when(
- urlCapture.captureRemoteJupyterUrl(anything(), url, anything(), undefined, anything(), anything())
- ).thenResolve(serverToReturn);
-
- const server = await integration.handleCommand({ ...commands[0], url }, cancellationToken.token);
-
- expect(server).not.to.be.undefined;
- expect(server?.id).to.be.equal('xyz');
- expect(server?.label).to.be.equal('New Server');
- });
- });
- describe('Resolve Server Info', function () {
- const url = 'http://localhost:8000';
- let server: JupyterServer;
- let stubbedAuth: sinon.SinonStub<
- [
- options: { baseUrl: string; authInfo: { username: string; password: string; token: string } },
- token: CancellationToken
- ],
- Promise<{ token: string; tokenId: string }>
- >;
- let stubbedValidator: sinon.SinonStub<
- [
- baseUrl: string,
- authInfo: { username: string; password: string; token: string },
- authenticator: IAuthenticator,
- mainCancel: CancellationToken
- ],
- Promise
- >;
- let stubbedServerStarter: sinon.SinonStub<
- [
- baseUrl: string,
- serverName: string | undefined,
- authInfo: {
- username: string;
- password: string;
- token: string;
- },
- authenticator: IAuthenticator,
- mainCancel: CancellationToken
- ],
- Promise
- >;
- let resolvedServer: JupyterServer;
-
- beforeEach(async () => {
- const serverToReturn: JupyterServer = {
- id: 'xyz',
- label: 'New Server'
- };
-
- when(
- urlCapture.captureRemoteJupyterUrl(anything(), url, anything(), undefined, anything(), anything())
- ).thenResolve(serverToReturn);
-
- const commands = await integration.provideCommands('', cancellationToken.token);
- server = (await integration.handleCommand({ ...commands[0], url }, cancellationToken.token))!;
-
- when(storage.all).thenReturn([{ id: server.id, baseUrl: url, displayName: server.label }]);
- stubbedAuth = sinon.stub(Authenticator.prototype, 'getJupyterAuthInfo').callsFake(async () => {
- return {
- token: '',
- tokenId: ''
- };
- });
- stubbedValidator = sinon
- .stub(JupyterHubConnectionValidator.prototype, 'validateJupyterUri')
- .callsFake(async () => {
- return;
- });
- stubbedServerStarter = sinon
- .stub(JupyterHubConnectionValidator.prototype, 'ensureServerIsRunning')
- .callsFake(async () => {
- return;
- });
-
- when(
- fetch.send('http://localhost:8000/hub/api/users/joe@bloe%20(personal)', anything(), anything())
- ).thenResolve({
- status: 200,
- json: () =>
- Promise.resolve({
- name: 'joe@bloe (personal)',
- server: 'user/joe@bloe%20%28personal%29/'
- }) as any
- } as any);
- when(storage.getCredentials(server.id)).thenResolve({
- password: '',
- token: '',
- tokenId: '',
- username: 'joe@bloe (personal)'
- });
- resolvedServer = await integration.resolveJupyterServer(server, cancellationToken.token);
- });
- afterEach(() => {
- stubbedAuth.restore();
- stubbedValidator.restore();
- stubbedServerStarter.restore();
- });
- it('Will return the right url', async () => {
- expect(resolvedServer.connectionInformation).not.to.be.undefined;
- expect(resolvedServer.connectionInformation?.baseUrl.toString(true)).to.be.equal(
- `${url}/user/joe@bloe (personal)/`
- );
- });
- it('Should have custom fetch/WebSocket implementations', async () => {
- const { fetch, WebSocket }: { fetch: typeof nodeFetch.default; WebSocket: WebSocketIsomorphic } =
- resolvedServer.connectionInformation as any;
-
- expect(fetch).to.be.a('function');
- expect(WebSocket).to.be.a('function');
- });
- it('Should not encode @ and encode the rest', async () => {
- const { fetch, WebSocket }: { fetch: typeof nodeFetch.default; WebSocket: typeof WebSocketIsomorphic } =
- resolvedServer.connectionInformation as any;
- const brokenUrl = new nodeFetch.Request(resolvedServer.connectionInformation!.baseUrl.toString(true)).url;
- const request = new Request(brokenUrl);
- await fetch(request as any).catch(noop);
-
- expect(lastRequestInit).not.to.be.undefined;
- expect(lastRequestInput?.url).to.be.deep.equal('http://localhost:8000/user/joe@bloe%20%28personal%29/');
- const ws = new WebSocket(`${brokenUrl.replace('http', 'ws')}api/kernels`);
- expect(ws.url).to.be.equal('ws://localhost:8000/user/joe@bloe%20%28personal%29/api/kernels');
- });
- });
-});
diff --git a/src/test/suite/kernelSocketWrapper.ts b/src/test/suite/kernelSocketWrapper.ts
deleted file mode 100644
index fc5d053..0000000
--- a/src/test/suite/kernelSocketWrapper.ts
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { EventEmitter } from 'vscode';
-import * as WebSocketWS from 'ws';
-import { ClassType } from '../../common/types';
-import { traceError } from '../../common/logging';
-
-/* eslint-disable @typescript-eslint/no-explicit-any */
-export type IWebSocketLike = {
- onopen: ((this: any, event: any) => void) | null;
- onerror: ((this: any, event: any) => void) | null;
- onclose: ((this: any, event: any) => void) | null;
- onmessage: ((this: any, event: any) => void) | null;
- emit(event: string | symbol, ...args: any[]): boolean;
- send(data: any, a2: any): void;
- close(): void;
-};
-
-/**
- * This is called a mixin class in TypeScript.
- * Allows us to have different base classes but inherit behavior (workaround for not allowing multiple inheritance).
- * Essentially it sticks a temp class in between the base class and the class you're writing.
- * Something like this:
- *
- * class Base {
- * doStuff() {
- *
- * }
- * }
- *
- * function Mixin = (SuperClass) {
- * return class extends SuperClass {
- * doExtraStuff() {
- * super.doStuff();
- * }
- * }
- * }
- *
- * function SubClass extends Mixin(Base) {
- * doBar() : {
- * super.doExtraStuff();
- * }
- * }
- *
- */
-
-/**
- * Adds send/recieve hooks to a WebSocketLike object. These are necessary for things like IPyWidgets support.
- * @param SuperClass The class to mix into
- * @returns
- */
-export function KernelSocketWrapper>(SuperClass: T) {
- return class BaseKernelSocket extends SuperClass {
- private receiveHooks: ((data: WebSocketWS.Data) => Promise)[];
- private sendHooks: ((data: any, cb?: (err?: Error) => void) => Promise)[];
- private msgChain: Promise;
- private sendChain: Promise;
- private _onAnyMessage = new EventEmitter<{ msg: string; direction: 'send' }>();
- public onAnyMessage = this._onAnyMessage.event;
- constructor(...rest: any[]) {
- super(...rest);
- // Make sure the message chain is initialized
- this.msgChain = Promise.resolve();
- this.sendChain = Promise.resolve();
- this.receiveHooks = [];
- this.sendHooks = [];
- }
-
- protected patchSuperEmit(patch: (event: string | symbol, ...args: any[]) => boolean) {
- super.emit = patch;
- }
-
- public sendToRealKernel(data: any, a2: any) {
- // This will skip the send hooks. It's coming from
- // the UI side.
- this._onAnyMessage.fire({ msg: data, direction: 'send' });
- super.send(data, a2);
- }
-
- public override send(data: any, a2: any): void {
- if (this.sendHooks) {
- // Stick the send hooks into the send chain. We use chain
- // to ensure that:
- // a) Hooks finish before we fire the event for real
- // b) Event fires
- // c) Next message happens after this one (so the UI can handle the message before another event goes through)
- this.sendChain = this.sendChain
- .then(() => Promise.all(this.sendHooks.map((s) => s(data, a2))))
- .then(() => super.send(data, a2));
- } else {
- super.send(data, a2);
- }
- }
-
- protected handleEvent(
- superHandler: (event: string | symbol, ...args: any[]) => boolean,
- event: string | symbol,
- ...args: any[]
- ): boolean {
- if (event === 'message' && this.receiveHooks.length) {
- // Stick the receive hooks into the message chain. We use chain
- // to ensure that:
- // a) Hooks finish before we fire the event for real
- // b) Event fires
- // c) Next message happens after this one (so this side can handle the message before another event goes through)
- this.msgChain = this.msgChain
- .then(() => Promise.all(this.receiveHooks.map((p) => p(args[0]))))
- .then(() => superHandler(event, ...args))
- .catch((e) => traceError(`Exception while handling messages: ${e}`));
- // True value indicates there were handlers. We definitely have 'message' handlers.
- return true;
- } else {
- return superHandler(event, ...args);
- }
- }
-
- public override emit(event: string | symbol, ...args: any[]): boolean {
- return this.handleEvent((ev, ...args) => super.emit(ev, ...args), event, ...args);
- }
-
- public addReceiveHook(hook: (data: WebSocketWS.Data) => Promise) {
- this.receiveHooks.push(hook);
- }
- public removeReceiveHook(hook: (data: WebSocketWS.Data) => Promise) {
- this.receiveHooks = this.receiveHooks.filter((l) => l !== hook);
- }
-
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- public addSendHook(patch: (data: any, cb?: (err?: Error) => void) => Promise): void {
- this.sendHooks.push(patch);
- }
-
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- public removeSendHook(patch: (data: any, cb?: (err?: Error) => void) => Promise): void {
- this.sendHooks = this.sendHooks.filter((p) => p !== patch);
- }
- };
-}
diff --git a/src/test/suite/websocketCtor.web.ts b/src/test/suite/websocketCtor.web.ts
deleted file mode 100644
index 4925a3e..0000000
--- a/src/test/suite/websocketCtor.web.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import WebSocketIsomorphic from 'isomorphic-ws';
-import { KernelSocketWrapper } from './kernelSocketWrapper';
-import { traceError } from '../../common/logging';
-
-const JupyterWebSockets = new Map(); // NOSONAR
-
-// Function for creating node Request object that prevents jupyterlab services from writing its own
-// authorization header.
-export function getWebsocketCtor(
- _cookieString?: string,
- _allowUnauthorized?: boolean,
- _getAuthHeaders?: () => Record,
- getWebSocketProtocols?: () => string | string[] | undefined
-) {
- const getProtocols = (protocols?: string | string[]): string | string[] | undefined => {
- const authProtocols = getWebSocketProtocols ? getWebSocketProtocols() : undefined;
- if (!authProtocols && !protocols) {
- return;
- }
- if (!protocols && authProtocols) {
- return authProtocols;
- }
- if (protocols && !authProtocols) {
- return protocols;
- }
- protocols = !protocols ? [] : typeof protocols === 'string' ? [protocols] : protocols;
- if (Array.isArray(authProtocols)) {
- protocols.push(...authProtocols);
- } else if (typeof authProtocols === 'string') {
- protocols.push(authProtocols);
- }
- return protocols;
- };
- class JupyterWebSocket extends KernelSocketWrapper(WebSocketIsomorphic) {
- private kernelId: string | undefined;
- private timer: NodeJS.Timeout | number = 0;
- private boundOpenHandler = this.openHandler.bind(this);
-
- constructor(url: string, protocols?: string | string[] | undefined) {
- super(url, getProtocols(protocols));
- let timer: NodeJS.Timeout | undefined = undefined;
- // Parse the url for the kernel id
- const parsed = /.*\/kernels\/(.*)\/.*/.exec(url);
- if (parsed && parsed.length > 1) {
- this.kernelId = parsed[1];
- }
- if (this.kernelId) {
- JupyterWebSockets.set(this.kernelId, this);
- this.onclose = () => {
- if (timer && this.timer !== timer) {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- clearInterval(timer as any);
- }
- if (JupyterWebSockets.get(this.kernelId!) === this) {
- JupyterWebSockets.delete(this.kernelId!);
- }
- };
- } else {
- traceError('KernelId not extracted from Kernel WebSocket URL');
- }
-
- // TODO: Implement ping. Well actually see if ping is necessary
- // Ping the websocket connection every 30 seconds to make sure it stays alive
- //timer = this.timer = setInterval(() => this.ping(), 30_000);
-
- // On open, replace the onmessage handler with our own.
- this.addEventListener('open', this.boundOpenHandler);
- }
-
- private openHandler() {
- // Node version uses emit override to handle messages before they go to jupyter (and pause messages)
- // We need a workaround. There is no 'emit' on websockets for the web so we have to create one.
- const originalMessageHandler = this.onmessage;
-
- // We do this by replacing the set onmessage (set by jupyterlabs) with our
- // own version
- this.onmessage = (ev) => {
- this.handleEvent(
- (ev, ...args) => {
- const event: WebSocketIsomorphic.MessageEvent = {
- data: args[0],
- type: ev.toString(),
- target: this
- };
- originalMessageHandler(event);
- return true;
- },
- 'message',
- ev.data
- );
- };
-
- this.removeEventListener('open', this.boundOpenHandler);
- }
- }
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- return JupyterWebSocket as any;
-}
diff --git a/src/test/suite/wesocketCtor.node.ts b/src/test/suite/wesocketCtor.node.ts
deleted file mode 100644
index f26255b..0000000
--- a/src/test/suite/wesocketCtor.node.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import WebSocketIsomorphic from 'isomorphic-ws';
-import { ClassType } from '../../common/types';
-import { KernelSocketWrapper } from './kernelSocketWrapper';
-import { traceError } from '../../common/logging';
-import { noop } from '../../common/utils';
-
-/* eslint-disable @typescript-eslint/no-explicit-any */
-const JupyterWebSockets = new Map(); // NOSONAR
-
-// Function for creating node Request object that prevents jupyterlab services from writing its own
-// authorization header.
-export function getWebsocketCtor(
- cookieString?: string,
- allowUnauthorized?: boolean,
- getAuthHeaders?: () => Record,
- getWebSocketProtocols?: () => string | string[] | undefined
-): ClassType {
- const generateOptions = (): WebSocketIsomorphic.ClientOptions => {
- let co: WebSocketIsomorphic.ClientOptions = {};
- let co_headers: { [key: string]: string } | undefined;
-
- if (allowUnauthorized) {
- co = { ...co, rejectUnauthorized: false };
- }
-
- if (cookieString) {
- co_headers = { Cookie: cookieString };
- }
-
- // Auth headers have to be refetched every time we create a connection. They may have expired
- // since the last connection.
- if (getAuthHeaders) {
- const authorizationHeader = getAuthHeaders();
- co_headers = co_headers ? { ...co_headers, ...authorizationHeader } : authorizationHeader;
- }
- if (co_headers) {
- co = { ...co, headers: co_headers };
- }
- return co;
- };
- const getProtocols = (protocols?: string | string[]): string | string[] | undefined => {
- const authProtocols = getWebSocketProtocols ? getWebSocketProtocols() : undefined;
- if (!authProtocols && !protocols) {
- return;
- }
- if (!protocols && authProtocols) {
- return authProtocols;
- }
- if (protocols && !authProtocols) {
- return protocols;
- }
- protocols = !protocols ? [] : typeof protocols === 'string' ? [protocols] : protocols;
- if (Array.isArray(authProtocols)) {
- protocols.push(...authProtocols);
- } else if (typeof authProtocols === 'string') {
- protocols.push(authProtocols);
- }
- return protocols;
- };
- class JupyterWebSocket extends KernelSocketWrapper(WebSocketIsomorphic) {
- private kernelId: string | undefined;
- private timer: NodeJS.Timeout | number;
-
- constructor(url: string, protocols?: string | string[] | undefined) {
- super(url, getProtocols(protocols), generateOptions());
- let timer: NodeJS.Timeout | undefined = undefined;
- // Parse the url for the kernel id
- const parsed = /.*\/kernels\/(.*)\/.*/.exec(url);
- if (parsed && parsed.length > 1) {
- this.kernelId = parsed[1];
- }
- if (this.kernelId) {
- JupyterWebSockets.set(this.kernelId, this);
- this.on('close', () => {
- if (timer && this.timer !== timer) {
- clearInterval(timer as any);
- }
- if (JupyterWebSockets.get(this.kernelId!) === this) {
- JupyterWebSockets.delete(this.kernelId!);
- }
- });
- } else {
- traceError('KernelId not extracted from Kernel WebSocket URL');
- }
-
- // Ping the websocket connection every 30 seconds to make sure it stays alive
- timer = this.timer = setInterval(() => this.ping(noop), 30_000);
- }
- }
- return JupyterWebSocket as any;
-}
diff --git a/src/testUtils.ts b/src/testUtils.ts
deleted file mode 100644
index 738dd76..0000000
--- a/src/testUtils.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { ClassType } from './common/types';
-import { IJupyterRequestCreator } from './types';
-
-// This is only used in tests.
-// We have a few different implementations of some interfaces that vary depending on web or desktop/
-// We'd like to test both, with the same testse.
-// Instead of building a DI container we'll just map the classes so we can get them in tests (lite di container esp like class)
-
-export type ClassImplementationsForTests = {
- RequestCreator: ClassType;
-};
diff --git a/src/types.ts b/src/types.ts
deleted file mode 100644
index 74e551a..0000000
--- a/src/types.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-// eslint-disable @typescript-eslint/no-explicit-any
-
-import { CancellationToken, Event } from 'vscode';
-import { ClassType } from './common/types';
-
-export interface IJupyterRequestCreator {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- getRequestCtor(getAuthHeader?: () => any): ClassType;
- getFetchMethod(): (input: RequestInfo, init?: RequestInit) => Promise;
- getHeadersCtor(): ClassType;
- getRequestInit(): RequestInit;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- createHttpRequestAgent?(): any;
-}
-
-export type JupyterHubServer = {
- id: string;
- baseUrl: string;
- displayName: string;
- /**
- * Name of the server to start and use.
- * If empty, then defaults to the `default` server, which is an empty string.
- */
- serverName?: string;
-};
-
-export interface IJupyterHubServerStorage {
- onDidRemove: Event;
- all: JupyterHubServer[];
- dispose(): void;
- getCredentials(serverId: string): Promise<{ username: string; password: string } | undefined>;
- addServerOrUpdate(server: JupyterHubServer, auth: { username: string; password: string }): Promise;
- removeServer(serverId: string): Promise;
-}
-
-export interface IJupyterHubConnectionValidator {
- validateJupyterUri(
- baseUrl: string,
- authInfo: {
- username: string;
- password: string;
- token?: string;
- },
- authenticator: IAuthenticator,
- token: CancellationToken
- ): Promise;
- ensureServerIsRunning(
- baseUrl: string,
- serverName: string | undefined,
- authInfo: {
- username: string;
- password: string;
- token?: string;
- },
- authenticator: IAuthenticator,
- token: CancellationToken
- ): Promise;
-}
-
-export interface IAuthenticator {
- getJupyterAuthInfo(
- options: {
- baseUrl: string;
- authInfo: {
- username: string;
- password: string;
- token: string;
- };
- },
- token: CancellationToken
- ): Promise<{ token: string; tokenId?: string }>;
-}
diff --git a/src/urlCapture.ts b/src/urlCapture.ts
deleted file mode 100644
index c479286..0000000
--- a/src/urlCapture.ts
+++ /dev/null
@@ -1,527 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import {
- CancellationError,
- CancellationToken,
- QuickInputButton,
- ThemeIcon,
- Uri,
- env,
- l10n,
- type QuickPickItem
-} from 'vscode';
-import type { JupyterServer } from '@vscode/jupyter-extension';
-import { Localized } from './common/localize';
-import { noop, uuid } from './common/utils';
-import { traceDebug, traceError, traceWarn } from './common/logging';
-import { DisposableStore, dispose } from './common/lifecycle';
-import { JupyterHubConnectionValidator, isSelfCertsError, isSelfCertsExpiredError } from './validator';
-import { WorkflowInputCapture } from './common/inputCapture';
-import { JupyterHubServerStorage } from './storage';
-import { SimpleFetch } from './common/request';
-import { IAuthenticator } from './types';
-import { Authenticator } from './authenticator';
-import {
- extractTokenFromUrl,
- extractUserNameFromUrl,
- getJupyterHubBaseUrl,
- getVersion,
- listServers,
- type ApiTypes
-} from './jupyterHubApi';
-import { isWebExtension } from './utils';
-import { sendJupyterHubUrlAdded, sendJupyterHubUrlNotAdded } from './common/telemetry';
-
-export class JupyterHubUrlCapture {
- private readonly jupyterConnection: JupyterHubConnectionValidator;
- private readonly displayNamesOfHandles = new Map();
- private readonly newAuthenticator: Authenticator;
- private readonly disposable = new DisposableStore();
- constructor(
- private readonly fetch: SimpleFetch,
- private readonly storage: JupyterHubServerStorage
- ) {
- this.newAuthenticator = new Authenticator(fetch);
- this.jupyterConnection = new JupyterHubConnectionValidator(fetch);
- }
- dispose() {
- this.disposable.dispose();
- }
- public async captureRemoteJupyterUrl(
- token: CancellationToken,
- initialUrl: string = '',
- displayName: string = '',
- validationErrorMessage: string = '',
- serverId = uuid(),
- reasonForCapture: 'cameHereFromBackButton' | 'captureNewUrl' = 'captureNewUrl'
- ): Promise {
- try {
- return await this.captureRemoteJupyterUrlImpl(
- initialUrl,
- displayName,
- validationErrorMessage,
- serverId,
- reasonForCapture,
- token
- );
- } catch (ex) {
- if (!(ex instanceof CancellationError)) {
- traceError('Failed to capture remote jupyter server', ex);
- }
- throw ex;
- }
- }
- private async captureRemoteJupyterUrlImpl(
- url: string = '',
- displayName: string = '',
- validationErrorMessage: string = '',
- id = uuid(),
- reasonForCapture: 'cameHereFromBackButton' | 'captureNewUrl' = 'captureNewUrl',
- token: CancellationToken
- ): Promise {
- const state: State = {
- auth: { username: '', password: '', token: '', tokenId: '' },
- baseUrl: '',
- serverName: undefined,
- hubVersion: '',
- urlWasPrePopulated: false,
- url,
- displayName,
- displayNamesOfHandles: this.displayNamesOfHandles,
- errorMessage: validationErrorMessage,
- serverId: id
- };
- const steps: MultiStep[] = [
- new GetUrlStep(this.fetch),
- new GetUserName(),
- new GetPassword(this.newAuthenticator),
- new VerifyConnection(this.jupyterConnection, this.newAuthenticator),
- new ServerSelector(this.fetch),
- new GetDisplayName(this.storage)
- ];
- const disposables = new DisposableStore();
- let nextStep: Step | undefined = 'Get Url';
- if (url) {
- // Validate the URI first, which would otherwise be validated when user enters the Uri into the input box.
- if (isValidUrl(url)) {
- try {
- state.baseUrl = await getJupyterHubBaseUrl(url, this.fetch, token);
- const version = await getVersion(state.baseUrl, this.fetch, token);
- state.hubVersion = version;
- state.urlWasPrePopulated = true;
- nextStep = reasonForCapture === 'captureNewUrl' ? 'Get Username' : 'Get Url';
- } catch {
- validationErrorMessage = Localized.invalidJupyterHubUrl;
- }
- } else {
- // Uri has an error, show the error message by displaying the input box and pre-populating the url.
- validationErrorMessage = Localized.jupyterSelectURIInvalidURI;
- nextStep = 'Get Url';
- }
- }
- try {
- const stepsExecuted: Step[] = [];
- while (true) {
- const step = steps.filter((s) => !s.disabled).find((s) => s.step === nextStep);
- if (!step) {
- traceError(`Step '${nextStep}' Not found`);
- throw new CancellationError();
- }
- nextStep = await step.run(state, token);
- if (nextStep === 'Before') {
- sendJupyterHubUrlNotAdded('back', step.step);
- return;
- }
- if (nextStep === 'After') {
- sendJupyterHubUrlAdded(state.baseUrl, state.hubVersion, id);
- await this.storage.addServerOrUpdate(
- {
- id,
- baseUrl: state.baseUrl,
- displayName: state.displayName,
- serverName: state.serverName
- },
- {
- username: state.auth.username,
- password: state.auth.password,
- token: state.auth.token,
- tokenId: state.auth.tokenId
- }
- );
- return {
- id,
- label: state.displayName
- };
- }
- if (nextStep) {
- // If nextStep is something that we have already executed in the past
- // then this means we're actually going back to that step.
- // So, remove everything from the stack that we have executed in the past.
- if (stepsExecuted.includes(nextStep)) {
- stepsExecuted.splice(stepsExecuted.indexOf(nextStep));
- continue;
- }
- if (step.canNavigateBackToThis) {
- stepsExecuted.push(step.step);
- }
- continue;
- }
- if (stepsExecuted.length) {
- nextStep = stepsExecuted.pop();
- continue;
- }
- sendJupyterHubUrlNotAdded('cancel', step.step);
- return;
- }
- } catch (ex) {
- if (ex instanceof CancellationError) {
- sendJupyterHubUrlNotAdded('cancel', '');
- } else {
- traceError('Failed to capture remote jupyter server', ex);
- sendJupyterHubUrlNotAdded('error', '');
- }
- throw ex;
- } finally {
- dispose(disposables);
- }
- }
-}
-type Step =
- | 'Before'
- | 'Get Url'
- | 'Get Username'
- | 'Get Password'
- | 'Verify Connection'
- | 'Server Selector'
- | 'Get Display Name'
- | 'After';
-
-interface MultiStep {
- step: Step;
- /**
- * Whether this step is disabled.
- * Can get disabled as a result of calling `run`.
- * Meaning, this step should be skipped in the future.
- */
- disabled?: boolean;
- canNavigateBackToThis: boolean;
- dispose(): void;
- run(state: State, token: CancellationToken): Promise;
-}
-type State = {
- displayNamesOfHandles: Map;
- urlWasPrePopulated: boolean;
- serverId: string;
- /**
- * Name of the server to start (named jupyter hub servers).
- */
- serverName: string | undefined;
- errorMessage: string;
- url: string;
- displayName: string;
- baseUrl: string;
- hubVersion: string;
- auth: {
- username: string;
- password: string;
- token: string;
- tokenId: string;
- };
-};
-
-class GetUrlStep extends DisposableStore implements MultiStep {
- step: Step = 'Get Url';
- canNavigateBackToThis = true;
- constructor(private readonly fetch: SimpleFetch) {
- super();
- }
- async run(state: State, token: CancellationToken) {
- if (!state.url) {
- try {
- // In web trying to read clipboard can be iffy, as users may get a prompt to allow that.
- // And that UX isn't great. So skip this for web.
- const text = isWebExtension() ? '' : await env.clipboard.readText();
- const parsedUri = new URL(text.trim());
- // Only display http/https uris.
- state.url = text && parsedUri && parsedUri.protocol.toLowerCase().startsWith('http') ? text : '';
- } catch {
- // We can ignore errors.
- }
- }
- const validationMessage = state.errorMessage;
- state.errorMessage = '';
- const url = await this.add(new WorkflowInputCapture()).getValue(
- {
- title: Localized.titleOfInputBoxToEnterUrl,
- placeholder: Localized.placeholderOfInputBoxToEnterUrl,
- value: state.url,
- validationMessage,
- validateInput: async (value) => {
- value = value.trim();
- if (!isValidUrl(value)) {
- return Localized.jupyterSelectURIInvalidURI;
- }
- try {
- await getJupyterHubBaseUrl(value, this.fetch, token);
- } catch (ex) {
- traceError(`Failed to determine base url for ${value}`, ex);
- return Localized.invalidJupyterHubUrl;
- }
- }
- },
- token
- );
-
- if (!url) {
- return;
- }
- state.url = url;
- state.baseUrl = await getJupyterHubBaseUrl(url, this.fetch, token);
- state.hubVersion = await getVersion(state.baseUrl, this.fetch, token);
- state.auth.username = state.auth.username || extractUserNameFromUrl(url) || '';
- state.auth.token = state.auth.token || extractTokenFromUrl(url) || '';
- return 'Get Username';
- }
-}
-class GetUserName extends DisposableStore implements MultiStep {
- step: Step = 'Get Username';
- canNavigateBackToThis = true;
- async run(state: State, token: CancellationToken) {
- const errorMessage = state.errorMessage;
- state.errorMessage = ''; // Never display this validation message again.
- const username = await this.add(new WorkflowInputCapture()).getValue(
- {
- title: Localized.captureUserNameTitle,
- value: state.auth.username || extractUserNameFromUrl(state.url),
- placeholder: Localized.captureUserNamePrompt,
- validationMessage: errorMessage,
- validateInput: async (value) => (value ? undefined : Localized.emptyUserNameErrorMessage)
- },
- token
- );
- if (!username) {
- return;
- }
- state.auth.username = username;
- return 'Get Password';
- }
-}
-class GetPassword extends DisposableStore implements MultiStep {
- step: Step = 'Get Password';
- canNavigateBackToThis = true;
- constructor(private readonly authenticator: IAuthenticator) {
- super();
- }
-
- async run(state: State, token: CancellationToken): Promise {
- // In vscode.dev or the like, username/password auth doesn't work
- // as JupyterHub doesn't support CORS. So we need to use API tokens.
- const input = this.add(new WorkflowInputCapture());
- const moreInfo: QuickInputButton = {
- iconPath: new ThemeIcon('info'),
- tooltip: Localized.authMethodApiTokenMoreInfoTooltip
- };
- const password = await input.getValue(
- {
- title: Localized.capturePasswordTitle,
- placeholder: Localized.capturePasswordPrompt,
- value: state.auth.password || state.auth.token || extractTokenFromUrl(state.url) || '',
- password: true,
- buttons: [moreInfo],
- onDidTriggerButton: (e) => {
- if (e === moreInfo) {
- env.openExternal(Uri.parse('https://aka.ms/vscodeJupyterHubApiToken')).then(noop, noop);
- }
- },
- validateInput: async (value) => {
- if (!value) {
- return Localized.emptyPasswordErrorMessage;
- }
- try {
- state.auth.password = value;
- const result = await this.authenticator.getJupyterAuthInfo(
- {
- baseUrl: state.baseUrl,
- authInfo: state.auth
- },
- token
- );
- state.auth.token = result.token || '';
- state.auth.tokenId = result.tokenId || '';
- traceDebug(
- `Got an Auth token = ${state.auth.token.length} && ${
- state.auth.token.trim().length
- }, tokenId = ${state.auth.tokenId.length} && ${state.auth.tokenId.trim().length} for ${
- state.baseUrl
- }`
- );
- } catch (err) {
- traceError('Failed to get Auth Info', err);
- if (err instanceof CancellationError) {
- throw err;
- } else if (isSelfCertsError(err)) {
- // We can skip this for now, as this will get verified again
- // First we need to check with user whether to allow insecure connections and untrusted certs.
- } else if (isSelfCertsExpiredError(err)) {
- // We can skip this for now, as this will get verified again
- // First we need to check with user whether to allow insecure connections and untrusted certs.
- } else {
- traceError(`Failed to validate username and password for ${state.baseUrl}`, err);
- return Localized.usernamePasswordAuthFailure;
- }
- }
- }
- },
- token
- );
- if (!password) {
- return;
- }
- state.auth.password = password;
- return 'Verify Connection';
- }
-}
-
-class VerifyConnection extends DisposableStore implements MultiStep {
- step: Step = 'Verify Connection';
- canNavigateBackToThis = false;
- constructor(
- private readonly jupyterConnection: JupyterHubConnectionValidator,
- private readonly authenticator: IAuthenticator
- ) {
- super();
- }
- async run(state: State, token: CancellationToken): Promise {
- try {
- await this.jupyterConnection.validateJupyterUri(state.baseUrl, state.auth, this.authenticator, token);
- } catch (err) {
- traceError('Uri verification error', err);
- if (err instanceof CancellationError) {
- throw err;
- } else if (isSelfCertsError(err)) {
- state.errorMessage = Localized.jupyterSelfCertFailErrorMessageOnly;
- return 'Get Url';
- } else if (isSelfCertsExpiredError(err)) {
- state.errorMessage = Localized.jupyterSelfCertExpiredErrorMessageOnly;
- return 'Get Url';
- } else {
- state.errorMessage = Localized.usernamePasswordAuthFailure;
- return 'Get Username';
- }
- }
- return 'Server Selector';
- }
-}
-
-function getServerStatus(server: ApiTypes.ServerInfo) {
- switch (server.pending) {
- case 'spawn':
- return l10n.t('Starting');
- case 'stop':
- return l10n.t('Shutting down');
- default:
- return server.ready ? l10n.t('Running') : l10n.t('Stopped');
- }
-}
-class ServerSelector extends DisposableStore implements MultiStep {
- step: Step = 'Server Selector';
- disabled?: boolean | undefined;
- canNavigateBackToThis = false;
- constructor(private readonly fetch: SimpleFetch) {
- super();
- }
- async run(state: State, token: CancellationToken): Promise {
- try {
- const servers = await listServers(state.baseUrl, state.auth.username, state.auth.token, this.fetch, token);
- if (servers.length === 0 || (servers.length === 1 && !servers[0].name)) {
- traceDebug('No servers found for the user');
- this.disabled = true;
- return 'Get Display Name';
- }
-
- interface ServerQuickPick extends QuickPickItem {
- server: ApiTypes.ServerInfo;
- }
-
- const quickPickItems: ServerQuickPick[] = servers.map((server) => ({
- label: server.name || 'Default Server',
- description: `(${getServerStatus(server)})`,
- server
- }));
- const selection = await new WorkflowInputCapture().pickValue(
- {
- title: l10n.t('Select a Server'),
- quickPickItems
- },
- token
- );
- if (!selection) {
- return;
- }
- state.serverName = selection.server.name;
- } catch (err) {
- if (err instanceof CancellationError) {
- throw err;
- }
- this.disabled = true;
- traceWarn("Failed to list all of the servers for the user, assuming there aren't any", err);
- }
- return 'Get Display Name';
- }
-}
-class GetDisplayName extends DisposableStore implements MultiStep {
- step: Step = 'Get Display Name';
- canNavigateBackToThis = false;
- constructor(private readonly storage: JupyterHubServerStorage) {
- super();
- }
- async run(state: State, token: CancellationToken): Promise {
- const suggestedDisplayName = getSuggestedDisplayName(
- state.url,
- state.serverName,
- this.storage.all.map((s) => s.displayName)
- );
- const displayName = await this.add(new WorkflowInputCapture()).getValue(
- {
- title: Localized.jupyterRenameServer,
- value: state.displayName || suggestedDisplayName
- },
- token
- );
- if (!displayName) {
- return;
- }
- state.displayName = displayName;
- return 'After';
- }
-}
-
-export function getSuggestedDisplayName(baseUrl: string, serverName: string | undefined, usedNames: string[]) {
- const usedNamesSet = new Set(usedNames.map((s) => s.toLowerCase()));
- usedNamesSet.add('localhost');
- usedNamesSet.add('');
- const isIPAddress = typeof parseInt(new URL(baseUrl).hostname.charAt(0), 10) === 'number';
- let hostName = isIPAddress ? 'JupyterHub' : new URL(baseUrl).hostname;
- hostName = serverName ? `${hostName} (${serverName})` : hostName;
- if (!isIPAddress && !usedNamesSet.has(hostName.toLowerCase())) {
- return hostName;
- }
- for (let i = 0; i < 10; i++) {
- const name = i === 0 ? hostName : `${hostName} ${i}`;
- if (!usedNamesSet.has(name.toLowerCase())) {
- return name;
- }
- }
- return 'JupyterHub';
-}
-
-function isValidUrl(value: string) {
- try {
- new URL(value);
- return true;
- } catch (err) {
- traceDebug(`Failed to parse URI`, err);
- return false;
- }
-}
diff --git a/src/utils.ts b/src/utils.ts
deleted file mode 100644
index 7096869..0000000
--- a/src/utils.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { extensions } from 'vscode';
-import { JUPYTER_EXTENSION_ID } from './common/constants';
-import { Jupyter } from '@vscode/jupyter-extension';
-
-export function appendUrlPath(baseUrl: string, path: string) {
- return new URL(path, baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`).toString();
-}
-
-let isWebExt = false;
-export function setIsWebExtension() {
- isWebExt = true;
-}
-export function isWebExtension() {
- return isWebExt;
-}
-
-export async function getJupyterApi() {
- const ext = extensions.getExtension(JUPYTER_EXTENSION_ID);
- if (!ext) {
- throw new Error('Jupyter Extension not installed');
- }
- if (!ext.isActive) {
- await ext.activate();
- }
- return ext;
-}
diff --git a/src/validator.ts b/src/validator.ts
deleted file mode 100644
index 1727648..0000000
--- a/src/validator.ts
+++ /dev/null
@@ -1,416 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { KernelSpecManager, KernelManager, ServerConnection, SessionManager } from '@jupyterlab/services';
-import {
- CancellationError,
- CancellationToken,
- CancellationTokenSource,
- ConfigurationTarget,
- Disposable,
- Progress,
- ProgressLocation,
- window
-} from 'vscode';
-import { raceCancellationError, raceTimeout, sleep } from './common/async';
-import { traceDebug, traceError } from './common/logging';
-import { DisposableStore, dispose } from './common/lifecycle';
-import { IJupyterHubConnectionValidator } from './types';
-import { workspace } from 'vscode';
-import { Localized } from './common/localize';
-import { SimpleFetch } from './common/request';
-import { createServerConnectSettings, getUserInfo, startServer } from './jupyterHubApi';
-import { IAuthenticator } from './types';
-import { StopWatch } from './common/stopwatch';
-import { ISpecModels } from '@jupyterlab/services/lib/kernelspec/restapi';
-import { solveCertificateProblem } from './common/telemetry';
-
-const TIMEOUT_FOR_SESSION_MANAGER_READY = 10_000;
-
-export class JupyterHubConnectionValidator implements IJupyterHubConnectionValidator {
- constructor(private readonly fetch: SimpleFetch) {}
- async validateJupyterUri(
- baseUrl: string,
- authInfo: {
- username: string;
- password: string;
- token: string;
- },
- authenticator: IAuthenticator,
- mainCancel: CancellationToken
- ): Promise {
- const disposable = new DisposableStore();
- const masterCancel = disposable.add(new CancellationTokenSource());
- const token = masterCancel.token;
- disposable.add(mainCancel.onCancellationRequested(() => masterCancel.cancel()));
- try {
- const info = await getUserInfo(baseUrl, authInfo.username, authInfo.token, this.fetch, token);
- if (info.name) {
- return;
- } else {
- traceError(`Failed to get user info, got ${JSON.stringify(info)}`);
- throw new Error('Failed to get user info');
- }
- } catch (err) {
- if (isSelfCertsError(err)) {
- const handled = await handleSelfCertsError(err.message);
- if (handled) {
- // Try again, there could be other errors.
- return await this.validateJupyterUri(baseUrl, authInfo, authenticator, token);
- }
- } else if (isSelfCertsExpiredError(err)) {
- const handled = await handleExpiredCertsError(err.message);
- if (handled) {
- // Try again, there could be other errors.
- return await this.validateJupyterUri(baseUrl, authInfo, authenticator, token);
- }
- }
- throw err;
- } finally {
- disposable.dispose();
- }
- }
- async ensureServerIsRunning(
- baseUrl: string,
- serverName: string | undefined,
- authInfo: {
- username: string;
- password: string;
- token: string;
- },
- authenticator: IAuthenticator,
- mainCancel: CancellationToken
- ): Promise {
- await window.withProgress(
- {
- location: ProgressLocation.Notification,
- title: Localized.ConnectingToJupyterServer,
- cancellable: true
- },
- async (progress, progressCancel) => {
- const disposable = new DisposableStore();
- const masterCancel = disposable.add(new CancellationTokenSource());
- const token = masterCancel.token;
- disposable.add(mainCancel.onCancellationRequested(() => masterCancel.cancel()));
- disposable.add(progressCancel.onCancellationRequested(() => masterCancel.cancel()));
- try {
- // Check if the server is running.
- const didStartServer = await this.startIfServerNotStarted(
- baseUrl,
- serverName,
- authInfo,
- progress,
- token
- ).catch((ex) => traceError(`Failed to start server`, ex));
- const started = new StopWatch();
- // Get the auth information again, as the previously held auth information does not seem to work when starting a jupyter server
- const jupyterAuth = await authenticator.getJupyterAuthInfo({ baseUrl, authInfo }, token);
- if (!jupyterAuth) {
- throw new Error('Failed to get Jupyter Auth Info');
- }
- let retries = 0;
- while (true) {
- // Attempt to list the running kernels. It will return empty if there are none, but will
- // throw if can't connect.
- const settings = await createServerConnectSettings(
- baseUrl,
- serverName,
- { username: authInfo.username, token: jupyterAuth.token },
- this.fetch,
- token
- );
- const gotKernelSpecs = await getKernelSpecs(settings, token);
- if (gotKernelSpecs) {
- return;
- }
- // If we started the Jupyter server, give it time to completely start up.
- // Theres a delay in APIs responding to requests.
- if (didStartServer == 'didStartServer') {
- // Wait for the server to start.
- await sleep(1000, token);
- if (retries > 0 && started.elapsed > TIMEOUT_FOR_SESSION_MANAGER_READY) {
- throw new Error('Failed to enumeration kernel Specs');
- } else {
- // Retry at least once before we give up.
- retries += 1;
- traceDebug(`Waiting for Jupyter Server to start ${baseUrl}`);
- continue;
- }
- } else {
- throw new Error('Failed to enumeration kernel Specs');
- }
- }
- } catch (err) {
- if (isSelfCertsError(err)) {
- const handled = await handleSelfCertsError(err.message);
- if (handled) {
- // Try again, there could be other errors.
- return await this.validateJupyterUri(baseUrl, authInfo, authenticator, token);
- }
- } else if (isSelfCertsExpiredError(err)) {
- const handled = await handleExpiredCertsError(err.message);
- if (handled) {
- // Try again, there could be other errors.
- return await this.validateJupyterUri(baseUrl, authInfo, authenticator, token);
- }
- }
- throw err;
- } finally {
- disposable.dispose();
- }
- }
- );
- }
- /**
- * If the Jupyter (lab/notebook) server has not already been started, then start it.
- * This is required, else we cannot connect to it (after all without a Jupyter Server running, there's nothing to connect to)
- */
- private async startIfServerNotStarted(
- baseUrl: string,
- serverName: string | undefined,
- authInfo: {
- username: string;
- password: string;
- token: string;
- },
- progress: Progress<{
- message?: string | undefined;
- increment?: number | undefined;
- }>,
- token: CancellationToken
- ) {
- const includeStoppedServers = !!serverName;
- try {
- const status = await getUserInfo(
- baseUrl,
- authInfo.username,
- authInfo.token,
- this.fetch,
- token,
- includeStoppedServers
- );
- if (!serverName && (status.servers || {})['']?.ready) {
- return;
- }
- if (serverName && (status.servers || {})[serverName]?.ready) {
- return;
- }
- } catch (ex) {
- traceError(`Failed to get user info`, ex);
- return;
- }
- progress.report({ message: Localized.startingJupyterServer });
- await startServer(baseUrl, authInfo.username, serverName, authInfo.token, this.fetch, token).catch((ex) =>
- ex instanceof CancellationError ? undefined : traceError(`Failed to start the Jupyter Server`, ex)
- );
- try {
- const started = Date.now();
- while (true) {
- const status = await getUserInfo(
- baseUrl,
- authInfo.username,
- authInfo.token,
- this.fetch,
- token,
- includeStoppedServers
- );
- if (!serverName && (status.servers || {})['']?.ready) {
- return 'didStartServer';
- }
- if (serverName && (status.servers || {})[serverName]?.ready) {
- return 'didStartServer';
- }
- if (Date.now() - started > TIMEOUT_FOR_SESSION_MANAGER_READY) {
- if (!serverName && status.server) {
- // Old behaviour of returning the currently running server as the default server.
- const server = (status.servers || {})[''];
- traceDebug(
- `Default server status used from status.server 5 ${
- status.server
- }, as server status is ${JSON.stringify(server)}`
- );
- return 'didStartServer';
- }
- traceError(`Timeout waiting for Jupyter Server to start, current status = ${status.pending}`);
- return;
- }
- await sleep(1000, token);
- }
- } catch (ex) {
- traceError(`Failed to get user info for user`, ex);
- return;
- }
- }
-}
-
-export async function getKernelSpecs(
- serverSettings: ServerConnection.ISettings,
- token: CancellationToken
-): Promise {
- const specsManager = new KernelSpecManager({ serverSettings });
- const kernelManager = new KernelManager({ serverSettings });
- const sessionManager = new SessionManager({
- serverSettings,
- kernelManager: kernelManager
- });
- const disposables: Disposable[] = [];
- try {
- const hasKernelSpecs = () => specsManager.specs && Object.keys(specsManager.specs.kernelspecs).length > 0;
- // Fetch the list the session manager already knows about. Refreshing may not work or could be very slow.
- if (hasKernelSpecs()) {
- return specsManager.specs;
- }
-
- // Wait for the session to be ready
- await raceCancellationError(token, raceTimeout(TIMEOUT_FOR_SESSION_MANAGER_READY, sessionManager.ready));
- if (hasKernelSpecs()) {
- return specsManager.specs;
- }
-
- // Ask the session manager to refresh its list of kernel specs. This might never
- // come back so only wait for ten seconds (learnt this in Jupyter extension).
- await raceCancellationError(token, raceTimeout(TIMEOUT_FOR_SESSION_MANAGER_READY, specsManager.refreshSpecs()));
- if (hasKernelSpecs()) {
- return specsManager.specs;
- }
-
- // At this point wait for the specs to change
- const promise = new Promise((resolve) => {
- specsManager.specsChanged.connect(resolve);
- disposables.push(
- new Disposable(() => {
- try {
- specsManager.specsChanged.disconnect(resolve);
- } catch {}
- })
- );
- });
-
- await raceCancellationError(
- token,
- raceTimeout(
- TIMEOUT_FOR_SESSION_MANAGER_READY,
- promise,
- specsManager.ready,
- specsManager.refreshSpecs(),
- sessionManager.ready
- )
- );
-
- if (hasKernelSpecs()) {
- return specsManager.specs;
- }
- traceError(
- `SessionManager cannot enumerate kernelSpecs. Specs ${JSON.stringify(specsManager.specs?.kernelspecs)}.`
- );
- return;
- } catch (e) {
- if (!(e instanceof CancellationError)) {
- traceError(`SessionManager:getKernelSpecs failure: `, e);
- }
- return;
- } finally {
- dispose(disposables);
- try {
- // Make sure it finishes startup.
- await raceTimeout(10_000, sessionManager.ready);
- } catch (e) {
- traceError(`Exception on session manager shutdown: `, e);
- } finally {
- try {
- sessionManager.dispose();
- } catch {}
- try {
- kernelManager.dispose();
- } catch {}
- try {
- specsManager.dispose();
- } catch {}
- }
- }
-}
-
-/**
- * Error thrown when a jupyter server is using an certificate that isn't recognized.
- * failed, reason: unable to get issuer certificate
- * type = system
- * errno = UNABLE_TO_GET_ISSUER_CERT
- * code = UNABLE_TO_GET_ISSUER_CERT
- */
-function isUnableToGetIssuerCertError(err: Error) {
- return (
- err.message.indexOf('reason: unable to get issuer certificate') >= 0 ||
- err.message.includes('UNABLE_TO_GET_ISSUER_CERT') ||
- err.name.includes('UNABLE_TO_GET_ISSUER_CERT') ||
- err.toString().includes('UNABLE_TO_GET_ISSUER_CERT')
- );
-}
-
-/**
- * Error thrown when a jupyter server is using an self signed certificate. This can be expected and we should ask if they want to allow it anyway.
- *
- * Cause:
- * User is connecting to a server that is using a self signed certificate that is not trusted. Detected by looking for a specific error message when connecting.
- *
- * Handled by:
- * The URI entry box when picking a server. It should ask the user if they want to allow it anyway.
- */
-export function isSelfCertsError(err: Error) {
- return err.message.indexOf('reason: self signed certificate') >= 0 || isUnableToGetIssuerCertError(err);
-}
-
-export async function handleSelfCertsError(message: string): Promise {
- // On a self cert error, warn the user and ask if they want to change the setting
- const enableOption: string = Localized.jupyterSelfCertEnable;
- const closeOption: string = Localized.jupyterSelfCertClose;
- const value = await window.showErrorMessage(
- Localized.jupyterSelfCertFail(message),
- { modal: true },
- enableOption,
- closeOption
- );
- if (value === enableOption) {
- solveCertificateProblem('self-signed', 'allow');
- await workspace
- .getConfiguration('jupyter')
- .update('allowUnauthorizedRemoteConnection', true, ConfigurationTarget.Workspace);
- return true;
- } else {
- solveCertificateProblem('self-signed', 'cancel');
- }
- return false;
-}
-
-/**
- * Error thrown when a jupyter server is using a self signed expired certificate. This can be expected and we should ask if they want to allow it anyway.
- *
- * Cause:
- * User is connecting to a server that is using a self signed certificate that is expired. Detected by looking for a specific error message when connecting.
- *
- * Handled by:
- * The URI entry box when picking a server. It should ask the user if they want to allow it anyway.
- */
-export function isSelfCertsExpiredError(err: Error) {
- return err.message.indexOf('reason: certificate has expired') >= 0;
-}
-export async function handleExpiredCertsError(message: string): Promise {
- // On a self cert error, warn the user and ask if they want to change the setting
- const enableOption: string = Localized.jupyterSelfCertEnable;
- const closeOption: string = Localized.jupyterSelfCertClose;
- const value = await window.showErrorMessage(
- Localized.jupyterExpiredCertFail(message),
- { modal: true },
- enableOption,
- closeOption
- );
- if (value === enableOption) {
- solveCertificateProblem('expired', 'allow');
- await workspace
- .getConfiguration('jupyter')
- .update('allowUnauthorizedRemoteConnection', true, ConfigurationTarget.Workspace);
- return true;
- } else {
- solveCertificateProblem('expired', 'cancel');
- }
- return false;
-}
diff --git a/webpack.config.js b/webpack.config.js
deleted file mode 100644
index 386fab9..0000000
--- a/webpack.config.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-/** @typedef {import('webpack').Configuration} WebpackConfig **/
-
-const path = require('path');
-const webpack = require('webpack');
-const tsconfig_paths_webpack_plugin = require('tsconfig-paths-webpack-plugin');
-
-/** @type WebpackConfig */
-const webExtensionConfig = {
- mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production')
- target: 'webworker', // extensions run in a webworker context
- entry: {
- 'test/suite/test.index.web': './src/test/suite/index.web.ts'
- },
- node: {
- __dirname: false,
- __filename: false
- },
- output: {
- filename: '[name].js',
- path: path.join(__dirname, './dist/web'),
- libraryTarget: 'commonjs',
- devtoolModuleFilenameTemplate: '../../[resource-path]'
- },
- resolve: {
- mainFields: ['browser', 'commonjs', 'module', 'main'], // look for `browser` entry point in imported node modules
- extensions: ['.ts', '.js'], // support ts-files and js-files
- alias: {
- // provides alternate implementation for node module and source files
- },
- fallback: {
- // Webpack 5 no longer polyfills Node.js core modules automatically.
- // see https://webpack.js.org/configuration/resolve/#resolvefallback
- // for the list of Node.js core module polyfills.
- assert: require.resolve('assert'),
- buffer: require.resolve('buffer'),
- process: require.resolve('process/browser'),
- stream: require.resolve('stream-browserify'),
- util: require.resolve('util')
- }
- },
- module: {
- rules: [
- {
- test: /\.ts$/,
- exclude: /node_modules/,
- use: [
- {
- loader: 'ts-loader',
- options: {
- configFile: 'tsconfig.json'
- }
- }
- ]
- }
- ]
- },
- plugins: [
- new webpack.optimize.LimitChunkCountPlugin({
- maxChunks: 1 // disable chunks by default since web extensions must be a single bundle
- }),
- new webpack.ProvidePlugin({
- Buffer: ['buffer', 'Buffer']
- }),
- new webpack.ProvidePlugin({
- process: 'process/browser' // provide a shim for the global `process` variable
- }),
- new webpack.DefinePlugin({
- // Definitions...
- BROWSER: JSON.stringify(true),
- process: {
- platform: JSON.stringify('web')
- }
- })
- ],
- resolve: {
- extensions: ['.ts', '.js'],
- mainFields: ['browser', 'module', 'main'], // look for `browser` entry point in imported node modules
- plugins: [
- new tsconfig_paths_webpack_plugin.TsconfigPathsPlugin({ configFile: 'tsconfig.json', logLevel: 'INFO' })
- ],
- alias: {
- sinon: path.join(__dirname, 'node_modules', 'sinon', 'lib', 'sinon.js')
- }
- },
- externals: ['vscode', 'commonjs', 'node:crypto'], // Don't bundle these
- performance: {
- hints: false
- },
- devtool: 'nosources-source-map', // create a source map that points to the original source file
- infrastructureLogging: {
- level: 'log' // enables logging required for problem matchers
- }
-};
-
-module.exports = [webExtensionConfig];