From b95f7fe3d6aba4e357b39d43e72ebe863685af55 Mon Sep 17 00:00:00 2001 From: Garth Long Date: Tue, 20 May 2025 15:20:33 -0700 Subject: [PATCH] OpenVINO Code Completion is no longer maintained. --- modules/openvino_code/.eslintignore | 8 - modules/openvino_code/.eslintrc.js | 48 - modules/openvino_code/.gitignore | 30 - modules/openvino_code/.prettierignore | 11 - modules/openvino_code/.prettierrc | 10 - modules/openvino_code/.vscodeignore | 9 - modules/openvino_code/DEVELOPER.md | 75 - modules/openvino_code/README.md | 75 - modules/openvino_code/jest.config.js | 8 - modules/openvino_code/media/logo.png | Bin 6667 -> 0 bytes modules/openvino_code/media/sidebar-icon.png | Bin 930 -> 0 bytes modules/openvino_code/package-lock.json | 7994 ----------------- modules/openvino_code/package.json | 354 - modules/openvino_code/server/README.md | 21 - modules/openvino_code/server/main.py | 24 - modules/openvino_code/server/pyproject.toml | 44 - modules/openvino_code/server/src/__init__.py | 0 modules/openvino_code/server/src/app.py | 165 - .../openvino_code/server/src/generators.py | 368 - modules/openvino_code/server/src/utils.py | 60 - modules/openvino_code/shared/device.ts | 25 - .../openvino_code/shared/extension-state.ts | 24 - modules/openvino_code/shared/features.ts | 7 - modules/openvino_code/shared/model.ts | 33 - modules/openvino_code/shared/server-state.ts | 24 - .../shared/side-panel-message.ts | 19 - .../openvino_code/side-panel-ui/.eslintrc.cjs | 27 - .../openvino_code/side-panel-ui/.gitignore | 24 - .../openvino_code/side-panel-ui/index.html | 12 - .../openvino_code/side-panel-ui/package.json | 28 - .../openvino_code/side-panel-ui/src/App.tsx | 43 - .../ActionsSection/ActionsSection.css | 5 - .../ActionsSection/ActionsSection.tsx | 28 - .../CompletionSection/CompletionSection.css | 8 - .../CompletionSection/CompletionSection.tsx | 35 - .../OverviewSection/OverviewSection.css | 3 - .../OverviewSection/OverviewSection.tsx | 17 - .../DeviceSelect/DeviceSelect.tsx | 41 - .../ServerSection/ModelSelect/ModelSelect.tsx | 42 - .../sections/ServerSection/ServerSection.css | 10 - .../sections/ServerSection/ServerSection.tsx | 104 - .../ServerStatus/ServerStatus.css | 10 - .../ServerStatus/ServerStatus.tsx | 51 - .../StartingStages/StartingStages.css | 12 - .../StartingStages/StartingStages.tsx | 62 - .../SummarizationSection.tsx | 14 - .../components/shared/Checkbox/Checkbox.css | 28 - .../components/shared/Checkbox/Checkbox.tsx | 21 - .../src/components/shared/Select/Select.css | 30 - .../src/components/shared/Select/Select.tsx | 42 - .../shared/VscodeIcon/VscodeIcon.css | 12 - .../shared/VscodeIcon/VscodeIcon.tsx | 14 - .../openvino_code/side-panel-ui/src/main.tsx | 10 - .../side-panel-ui/src/styles/vscode.css | 100 - .../side-panel-ui/src/use-extension-state.ts | 15 - .../side-panel-ui/src/utils/vscode.ts | 79 - .../side-panel-ui/src/vite-env.d.ts | 1 - .../openvino_code/side-panel-ui/tsconfig.json | 27 - .../side-panel-ui/tsconfig.node.json | 10 - .../side-panel-ui/vite.config.ts | 38 - modules/openvino_code/src/configuration.ts | 81 - modules/openvino_code/src/constants.ts | 34 - .../src/docstring/completion-item-provider.ts | 50 - .../docstring-template/docstring-factory.ts | 83 - .../docstring-template/docstring-parts.ts | 38 - .../docstring-template/get-template.ts | 21 - .../src/docstring/docstring-template/index.ts | 2 - .../docstring-template/template-data.ts | 144 - .../templates/default.mustache | 40 - .../templates/google.mustache | 35 - .../templates/google_summary_only.mustache | 2 - .../templates/numpy.mustache | 44 - .../templates/sphinx.mustache | 24 - .../src/docstring/generate-command.ts | 19 - .../src/docstring/generate-docstring.ts | 94 - modules/openvino_code/src/docstring/index.ts | 24 - .../docstring/parse/docstring-is-closed.ts | 89 - .../src/docstring/parse/get-body.ts | 49 - .../src/docstring/parse/get-definition.ts | 38 - .../parse/get-docstring-indentation.ts | 26 - .../src/docstring/parse/get-function-name.ts | 11 - .../src/docstring/parse/guess-type.ts | 181 - .../src/docstring/parse/index.ts | 11 - .../src/docstring/parse/parse-parameters.ts | 180 - .../src/docstring/parse/parse.ts | 17 - .../docstring/parse/tokenize-definition.ts | 97 - .../src/docstring/parse/utilities.ts | 40 - .../docstring/parse/valid-docstring-prefix.ts | 18 - .../src/extension-component.interface.ts | 6 - modules/openvino_code/src/extension.ts | 32 - .../command-inline-completion-provider.ts | 65 - .../inline-completion/completion.service.ts | 165 - .../src/inline-completion/index.ts | 39 - .../inline-completion-component.ts | 72 - ...ming-command-inline-completion-provider.ts | 113 - .../streaming-inline-completion-component.ts | 121 - .../src/inline-completion/tab.ts | 9 - .../openvino_code/src/lru-cache.decorator.ts | 45 - .../src/python-server/commands-runner.ts | 122 - .../src/python-server/detect-os.ts | 22 - .../src/python-server/detect-python.ts | 67 - .../openvino_code/src/python-server/pip.ts | 37 - .../openvino_code/src/python-server/proxy.ts | 50 - .../src/python-server/python-server-runner.ts | 169 - .../python-server/python-server.service.ts | 44 - .../src/python-server/server-log.ts | 68 - .../python-server/server-state-controller.ts | 51 - .../src/python-server/virtual-environment.ts | 72 - .../src/services/backend.service.ts | 147 - .../src/services/connection.service.ts | 75 - .../src/services/notification.service.ts | 62 - .../src/services/request/index.ts | 1 - .../src/services/request/streaming-request.ts | 67 - .../src/services/status-bar.service.ts | 89 - .../src/settings/settings.service.ts | 38 - modules/openvino_code/src/side-panel/index.ts | 16 - .../side-panel/side-panel-message-handler.ts | 31 - .../side-panel/side-panel-view-provider.ts | 173 - modules/openvino_code/src/state.ts | 90 - modules/openvino_code/tsconfig.json | 23 - modules/openvino_code/webpack.config.js | 73 - 121 files changed, 14185 deletions(-) delete mode 100644 modules/openvino_code/.eslintignore delete mode 100644 modules/openvino_code/.eslintrc.js delete mode 100644 modules/openvino_code/.gitignore delete mode 100644 modules/openvino_code/.prettierignore delete mode 100644 modules/openvino_code/.prettierrc delete mode 100644 modules/openvino_code/.vscodeignore delete mode 100644 modules/openvino_code/DEVELOPER.md delete mode 100644 modules/openvino_code/README.md delete mode 100644 modules/openvino_code/jest.config.js delete mode 100644 modules/openvino_code/media/logo.png delete mode 100644 modules/openvino_code/media/sidebar-icon.png delete mode 100644 modules/openvino_code/package-lock.json delete mode 100644 modules/openvino_code/package.json delete mode 100644 modules/openvino_code/server/README.md delete mode 100644 modules/openvino_code/server/main.py delete mode 100644 modules/openvino_code/server/pyproject.toml delete mode 100644 modules/openvino_code/server/src/__init__.py delete mode 100644 modules/openvino_code/server/src/app.py delete mode 100644 modules/openvino_code/server/src/generators.py delete mode 100644 modules/openvino_code/server/src/utils.py delete mode 100644 modules/openvino_code/shared/device.ts delete mode 100644 modules/openvino_code/shared/extension-state.ts delete mode 100644 modules/openvino_code/shared/features.ts delete mode 100644 modules/openvino_code/shared/model.ts delete mode 100644 modules/openvino_code/shared/server-state.ts delete mode 100644 modules/openvino_code/shared/side-panel-message.ts delete mode 100644 modules/openvino_code/side-panel-ui/.eslintrc.cjs delete mode 100644 modules/openvino_code/side-panel-ui/.gitignore delete mode 100644 modules/openvino_code/side-panel-ui/index.html delete mode 100644 modules/openvino_code/side-panel-ui/package.json delete mode 100644 modules/openvino_code/side-panel-ui/src/App.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ActionsSection/ActionsSection.css delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ActionsSection/ActionsSection.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/CompletionSection/CompletionSection.css delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/CompletionSection/CompletionSection.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/OverviewSection/OverviewSection.css delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/OverviewSection/OverviewSection.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/DeviceSelect/DeviceSelect.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ModelSelect/ModelSelect.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerSection.css delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerSection.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerStatus/ServerStatus.css delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerStatus/ServerStatus.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/StartingStages/StartingStages.css delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/StartingStages/StartingStages.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/sections/SummarizationSection/SummarizationSection.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/shared/Checkbox/Checkbox.css delete mode 100644 modules/openvino_code/side-panel-ui/src/components/shared/Checkbox/Checkbox.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/shared/Select/Select.css delete mode 100644 modules/openvino_code/side-panel-ui/src/components/shared/Select/Select.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/components/shared/VscodeIcon/VscodeIcon.css delete mode 100644 modules/openvino_code/side-panel-ui/src/components/shared/VscodeIcon/VscodeIcon.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/main.tsx delete mode 100644 modules/openvino_code/side-panel-ui/src/styles/vscode.css delete mode 100644 modules/openvino_code/side-panel-ui/src/use-extension-state.ts delete mode 100644 modules/openvino_code/side-panel-ui/src/utils/vscode.ts delete mode 100644 modules/openvino_code/side-panel-ui/src/vite-env.d.ts delete mode 100644 modules/openvino_code/side-panel-ui/tsconfig.json delete mode 100644 modules/openvino_code/side-panel-ui/tsconfig.node.json delete mode 100644 modules/openvino_code/side-panel-ui/vite.config.ts delete mode 100644 modules/openvino_code/src/configuration.ts delete mode 100644 modules/openvino_code/src/constants.ts delete mode 100644 modules/openvino_code/src/docstring/completion-item-provider.ts delete mode 100644 modules/openvino_code/src/docstring/docstring-template/docstring-factory.ts delete mode 100644 modules/openvino_code/src/docstring/docstring-template/docstring-parts.ts delete mode 100644 modules/openvino_code/src/docstring/docstring-template/get-template.ts delete mode 100644 modules/openvino_code/src/docstring/docstring-template/index.ts delete mode 100644 modules/openvino_code/src/docstring/docstring-template/template-data.ts delete mode 100644 modules/openvino_code/src/docstring/docstring-template/templates/default.mustache delete mode 100644 modules/openvino_code/src/docstring/docstring-template/templates/google.mustache delete mode 100644 modules/openvino_code/src/docstring/docstring-template/templates/google_summary_only.mustache delete mode 100644 modules/openvino_code/src/docstring/docstring-template/templates/numpy.mustache delete mode 100644 modules/openvino_code/src/docstring/docstring-template/templates/sphinx.mustache delete mode 100644 modules/openvino_code/src/docstring/generate-command.ts delete mode 100644 modules/openvino_code/src/docstring/generate-docstring.ts delete mode 100644 modules/openvino_code/src/docstring/index.ts delete mode 100644 modules/openvino_code/src/docstring/parse/docstring-is-closed.ts delete mode 100644 modules/openvino_code/src/docstring/parse/get-body.ts delete mode 100644 modules/openvino_code/src/docstring/parse/get-definition.ts delete mode 100644 modules/openvino_code/src/docstring/parse/get-docstring-indentation.ts delete mode 100644 modules/openvino_code/src/docstring/parse/get-function-name.ts delete mode 100644 modules/openvino_code/src/docstring/parse/guess-type.ts delete mode 100644 modules/openvino_code/src/docstring/parse/index.ts delete mode 100644 modules/openvino_code/src/docstring/parse/parse-parameters.ts delete mode 100644 modules/openvino_code/src/docstring/parse/parse.ts delete mode 100644 modules/openvino_code/src/docstring/parse/tokenize-definition.ts delete mode 100644 modules/openvino_code/src/docstring/parse/utilities.ts delete mode 100644 modules/openvino_code/src/docstring/parse/valid-docstring-prefix.ts delete mode 100644 modules/openvino_code/src/extension-component.interface.ts delete mode 100644 modules/openvino_code/src/extension.ts delete mode 100644 modules/openvino_code/src/inline-completion/command-inline-completion-provider.ts delete mode 100644 modules/openvino_code/src/inline-completion/completion.service.ts delete mode 100644 modules/openvino_code/src/inline-completion/index.ts delete mode 100644 modules/openvino_code/src/inline-completion/inline-completion-component.ts delete mode 100644 modules/openvino_code/src/inline-completion/streaming-command-inline-completion-provider.ts delete mode 100644 modules/openvino_code/src/inline-completion/streaming-inline-completion-component.ts delete mode 100644 modules/openvino_code/src/inline-completion/tab.ts delete mode 100644 modules/openvino_code/src/lru-cache.decorator.ts delete mode 100644 modules/openvino_code/src/python-server/commands-runner.ts delete mode 100644 modules/openvino_code/src/python-server/detect-os.ts delete mode 100644 modules/openvino_code/src/python-server/detect-python.ts delete mode 100644 modules/openvino_code/src/python-server/pip.ts delete mode 100644 modules/openvino_code/src/python-server/proxy.ts delete mode 100644 modules/openvino_code/src/python-server/python-server-runner.ts delete mode 100644 modules/openvino_code/src/python-server/python-server.service.ts delete mode 100644 modules/openvino_code/src/python-server/server-log.ts delete mode 100644 modules/openvino_code/src/python-server/server-state-controller.ts delete mode 100644 modules/openvino_code/src/python-server/virtual-environment.ts delete mode 100644 modules/openvino_code/src/services/backend.service.ts delete mode 100644 modules/openvino_code/src/services/connection.service.ts delete mode 100644 modules/openvino_code/src/services/notification.service.ts delete mode 100644 modules/openvino_code/src/services/request/index.ts delete mode 100644 modules/openvino_code/src/services/request/streaming-request.ts delete mode 100644 modules/openvino_code/src/services/status-bar.service.ts delete mode 100644 modules/openvino_code/src/settings/settings.service.ts delete mode 100644 modules/openvino_code/src/side-panel/index.ts delete mode 100644 modules/openvino_code/src/side-panel/side-panel-message-handler.ts delete mode 100644 modules/openvino_code/src/side-panel/side-panel-view-provider.ts delete mode 100644 modules/openvino_code/src/state.ts delete mode 100644 modules/openvino_code/tsconfig.json delete mode 100644 modules/openvino_code/webpack.config.js diff --git a/modules/openvino_code/.eslintignore b/modules/openvino_code/.eslintignore deleted file mode 100644 index 11c40204f..000000000 --- a/modules/openvino_code/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -# don't ever lint node_modules -node_modules -# don't lint build output (make sure it's set to your correct build folder name) -dist -out -# don't lint nyc coverage output -coverage -.eslintrc.js diff --git a/modules/openvino_code/.eslintrc.js b/modules/openvino_code/.eslintrc.js deleted file mode 100644 index bf72a974f..000000000 --- a/modules/openvino_code/.eslintrc.js +++ /dev/null @@ -1,48 +0,0 @@ -module.exports = { - root: true, - env: { - node: true, - es2021: true, - }, - extends: [ - 'airbnb-typescript/base', - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - 'plugin:import/errors', - 'plugin:import/typescript', - 'prettier', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname, - }, - plugins: ['@typescript-eslint', 'import'], - rules: { - 'no-console': ['error', { allow: ['warn', 'error'] }], - '@typescript-eslint/naming-convention': 'warn', - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], - '@typescript-eslint/lines-between-class-members': 'off', - '@typescript-eslint/restrict-template-expressions': 'error', - '@typescript-eslint/no-use-before-define': ['error', { functions: false, classes: false }], - 'import/no-unresolved': 'error', - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - }, - settings: { - 'import/resolver': { - typescript: { - alwaysTryTypes: true, - }, - }, - }, - overrides: [ - { - files: ['*.js'], - rules: { - '@typescript-eslint/no-var-requires': 'off', - }, - }, - ], - ignorePatterns: ['out', 'dist', 'server', '**/*.d.ts'], -}; diff --git a/modules/openvino_code/.gitignore b/modules/openvino_code/.gitignore deleted file mode 100644 index c0df97169..000000000 --- a/modules/openvino_code/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -**/node_modules -**/out -dist - -.vscode-test/ -**.DS_Store -binaries/* - -registration_key -auth -sig - - -.idea/ -*.iml - -**/assistant-cache -**/assistant-binaries -venv -.venv -/server/venv/ -/server/.venv/ -/server/models/ -/server/src/__pycache__ -**/build -/server/OVCodExtServer.egg-info/ -/server/src/OVCodExtServer.egg-info/ -/server/.ruff_cache/ - -!media/*.png diff --git a/modules/openvino_code/.prettierignore b/modules/openvino_code/.prettierignore deleted file mode 100644 index 9c808cded..000000000 --- a/modules/openvino_code/.prettierignore +++ /dev/null @@ -1,11 +0,0 @@ -# Ignore artifacts: -build -coverage -out -dist -./server/ -assets -binaries -node_modules -.vscode -.github \ No newline at end of file diff --git a/modules/openvino_code/.prettierrc b/modules/openvino_code/.prettierrc deleted file mode 100644 index 678d00cfe..000000000 --- a/modules/openvino_code/.prettierrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "printWidth": 120, - "trailingComma": "es5", - "useTabs": false, - "tabWidth": 2, - "semi": true, - "bracketSpacing": true, - "singleQuote": true, - "arrowParens": "always" -} diff --git a/modules/openvino_code/.vscodeignore b/modules/openvino_code/.vscodeignore deleted file mode 100644 index c103ff16d..000000000 --- a/modules/openvino_code/.vscodeignore +++ /dev/null @@ -1,9 +0,0 @@ -** -!media/logo.png -!media/sidebar-icon.png -!out/ -!out/extension.js -!side-panel-ui/dist/ -!package.json -!LICENSE -!README.md diff --git a/modules/openvino_code/DEVELOPER.md b/modules/openvino_code/DEVELOPER.md deleted file mode 100644 index 84a286ee0..000000000 --- a/modules/openvino_code/DEVELOPER.md +++ /dev/null @@ -1,75 +0,0 @@ -# OpenVINO Code - VSCode extension for AI code completion with OpenVINO™ - -VSCode extension for helping developers writing code with AI code assistant. OpenVINO Code is working with Large Language Model for Code (Code LLM) deployed on local or remote server. - -## Installing Extension - -VSCode extension can be installed from built `*.vsix` file: - -1. Open `Extensions` side bar in VSCode. -2. Click on the menu icon (three dots menu icon aka "meatballs" icon) in the top right corner of Extensions side panel. -3. Select "Instal from VSIX..." option and select extension file. - -For instructions on how to build extension `vsix` file please refer to the [Build Extension](#build-extension) section. - -## Extension Configuration - -To work with extension you should configure endpoint to server with Code LLM where requests will be sent: - -1. Open extension settings. -2. Fill `Server URL` parameter with server endpoint URL. - -For instructions on how to start server locally please refer to the [server README.md](./server/README.md). - -Also in extension settings you can configure special tokens. - -## Working with Extension - -TDB - -1. Create a new python file -2. Try typing `def main():` -3. Press shortcut buttons (TBD) for code completion - -### Checking output - -You can see input to and output from the code generation API: - -1. Open VSCode `OUTPUT` panel -2. Select extension output source from the dropdown menu - -## Developing - -> **Prerequisite:** You should have `Node.js` installed (v16 and above). - -#### Install dependencies - -To install dependencies run the following command from the project root directory: - -``` -npm install -``` - -#### Run Extension from Source & Debugging - -Open `Run and Debug` side bar in VSCode and click `Launch Extension` (or press `F5`). - -#### Build Extension - -To build extension and generate `*.vsix` file for further installation in VSCode, run the following command: - -``` -npm run vsce:package -``` - -#### Linting - -To perform linting with `ESLint`, execute the following command: - -``` -npm run lint -``` - -#### Testing - -TBD diff --git a/modules/openvino_code/README.md b/modules/openvino_code/README.md deleted file mode 100644 index 0188289a6..000000000 --- a/modules/openvino_code/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# OpenVINO Code - VSCode extension for AI code completion with OpenVINO™ - -VSCode extension for helping developers writing code with AI code assistant. -OpenVINO Code is working with Large Language Model for Code (Code LLM) deployed on local server -or remote server using [Remote Explorer](https://marketplace.visualstudio.com/items?itemName=ms-vscode.remote-explorer). - -OpenVINO Code provides the following features: - -- Inline Code Completion -- Summarization via Docstring -- Fill in the Middle Mode - -## Working with Extension - -### Starting Server - -On the extension side panel, choose your preferred model from the available options. -The features supported by the selected model, which will be displayed under the model selector. - -Once the server is up and running, you can access instructions for utilizing various functions available with selected model on the sidebar of the extension. -Now you can check the server's status and connection status. -Additionally, connection status shown on the VSCode Status Bar. -To check the connection manually, use the `Check Connection` button located on the side panel. - -### Code Completion - -![code_completion](https://github.com/apaniukov/openvino_contrib/assets/51917466/c3ba73bf-106b-4045-a36e-96440f8c804f) - -1. Create a new Python file or open an existing one. -1. Type `def main():` or place the cursor where you'd like code suggestions to be generated. -1. Press the keyboard shortcut `Ctrl+Alt+Space` (`Cmd+Alt+Space` for macOS) or click the `Generate Code Completion` button located in the side panel. -1. You can select the text then generate the related code. -1. You may also right-click on "Generate Inline Code Completion In New Tab" to generate code in a new tab. -1. Use the `Tab` key to accept the entire suggestion or `Ctrl`+`Right Arrow` to accept it word by word. To decline the suggestion, press `Esc`. - -You can customize the length of the generated code by adjusting `Max New Tokens` and `Min New Tokens` parameters in the extension settings. -The number of generated tokens is also influenced by the `Server Request Timeout` setting. - -To enable streaming generation mode, check the `Stream Inline Completion` checkbox in the extension settings. -This mode allows you to immediately receive model output and avoid problems with server response timeouts. - -### Summarization via Docstring Generation - -![summarization](https://github.com/apaniukov/openvino_contrib/assets/51917466/1d066b0e-cff7-4353-90f9-a53343d60b59) - -To generate function docstring start typing `"""` or `'''` right under function signature and choose `Generate Docstring`. -You can select the desired type of quotes in the extension settings. - -The model can generate docstring in Code Completion mode, but in this case it is impossible to control the result. -In the docstring generation mode, various popular templates are available in the settings that will guide the model output. - -### Fill in the Middle Mode - -![fill-in-the-middle](https://github.com/openvinotoolkit/openvino_contrib/assets/112030960/15ef3cbf-913b-46a5-b565-f1676ff7a0b7) - -1. Create a new Python file or open an existing one. -1. Place the cursor where you'd like middle text to be generated or a line of code to be generated. -1. Press the keyboard shortcut `Ctrl+Alt+Space` (`Cmd+Alt+Space` for macOS) or click the `Generate Code Completion` button located in the side panel. -1. You can select the text then generate the related code. -1. You may also right-click on "Generate Inline Code Completion In New Tab" to generate code in a new tab. -1. Use the `Tab` key to accept the entire suggestion or `Ctrl`+`Right Arrow` to accept it word by word. To decline the suggestion, press `Esc`. - -You can customize the length of the generated code by adjusting `Max New Tokens` and `Min New Tokens` parameters in the extension settings. -The number of generated tokens is also influenced by the `Server Request Timeout` setting. - -Fill in the middle mode brings in advanced code completion capabilities supporting fill-in-the-blank task, supporting project-level code completion and infilling tasks. - -To enable fill in the middle mode, check the `Fill In The Middle Mode` checkbox in the extension settings. - -### Monitoring Extension Output - -To examine the input and output from the code generation API, follow these steps: - -1. Open OpenVINO Code Side Panel -1. Choose between two options: `Show Server Log` or `Show Extension Log`. diff --git a/modules/openvino_code/jest.config.js b/modules/openvino_code/jest.config.js deleted file mode 100644 index cb1047120..000000000 --- a/modules/openvino_code/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - transform: { - "^.+\\.ts?$": "ts-jest", - }, - testRegex: "(/__tests__/.*|\\.(test|spec))\\.[tj]sx?$", - moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], - testEnvironment: "node", -}; diff --git a/modules/openvino_code/media/logo.png b/modules/openvino_code/media/logo.png deleted file mode 100644 index f12d9d0d52511daea5983e5ee628040828faaa98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6667 zcmbW6bxa)4v+s9tTbyExv=nIZq6Lb(OQEb-nvMQ5 z*v|5Lt^fco$$tO>(laUk1%a-ba*}{bIQZ{B2hCbSMFIe*iNk#~Lk9pTa}=Z{w7h^v zMwnjO+Kt9Q;%Rvs?AN)k355dbgPG(tB>IUcmUOvlV5oAD-|oHCf^OM#p%OJOgTF?{ zz_CW~wAE2?f>%|5#PV;jUj`G7ln1P|IjK61f|iH+U7vh+M>}?p5!d_nRUL8UAY5tR*Zu^U+{7x^YnQV=ORE(XW(_a*QgWV%mY!^Ax zc=>IcQiEFZPI4B8_O(R1Gc+|_3y{+$wL?(ro&iiikGR)k)v?ok=KFf|epzj66l?4$ z5^p{Wlpl>7#yijSqN%{KS|0W|{zDP=L5{Qqz0`jfb0b+}#4kNa<}@88Y6z#K*Qfgq z)0#Dw7-Q@>m3dG~f=o?ebzt9f!_y@!XI0fe7ORfxu5}Wiw%d*Ow0TqP?{h zY3Cw*ZBSy-B@Tn>R=g*F4N>Y-w&r|b=1WHQANQVkdGiYz4mOR*v%}Z1eq8#QG5~zW zYO}S!noMYbt@2%@?IKyCJMTJ}A1^-TK+s*+XS|@>CVXRA5oo7bG{!y{19k6z%{B)%?)61sxPGVG(Y?En zM{7JzWaan3HM)kG(0Fa-Ie{r)ZPQtlwXZ|u}bf{W*6Pa zSW(Du8gIbXJ0a%}*^W);zv8kZ3Icz^{#;Pw5=@7QJ?_*arD*o2!_@k}$2E~dMBHLU zjeaVcM7K)$Kin6Q@Om6`;8blW{a!m_d=URJPY%vedrIEFY#(;I${!*W8xhix4)C_; zp%F9C-M>*ZHlC^Vr$=5r4Y+wKzu~JSF}*ty!rdxFwYJqb$G-Qtz!n{3Tr}aC4C|z& zX12;mQu~l~P;6JG=i1(jIZ!3b zpw@Y*bkCD^Dp1kCOlvrb>Dozh>t5#Lo2I%@avr&x7Y!EF9@Zl1wa#LGT?`p;<7VXt zwLc$ooXFA=UAQj3jo08)cFz|PcOY%-sV>CLM@5U%{07h8UKqY4GwDzz;`1w!>7YNq zs+3mgMfn?a%Rh$n=O#FXG0t0&ui3F7850LYC{(80QHyoT2-9Z&6wA*RMUsn5kMlxA zg{#8-7t&OwIL4wYbw=Y>scEJ1tcuh(w$IbXoR7CAWb5<%J(HAc-?n~H*#jt4jofJc zcxbmo+QIsa(&zHGIo%7a#a2`UOah{f@4j#v?Oex?uq1alz)#|VSuMOj!IOu4 z*UUASHk6Y7qRHDAjcZ?QIqla&1^bkyR zqDmn$^TEZZn8#cEoL5eY<1kdqwTHMSA|c<03+&Mvox@vfk38rOQQ+nA>6}(FBekX& zq@So&*oEYG^OoDw=bFQ|5szKAvU;-LYST!kCuyF$p33S^r&d=2w(30lGx-=R`0Io5 z*6Pr=7iId3g)|nsC95FzHF74pBBg#yrMgQpr@hf8T1Y<=PrPA&4t(R%giEb_Ggm{- zKSeTVZB5eNW4D^nm`n~l4Pwe_6U^>V@Jssu-%uN_+9z!3D_ z4(c63l9=oh5u5!sA8@?h2{}*?A`D3LXxyHpY}6*tTzykXV~kL9(35W{O-eM87S?pN zr30(64urB->L4tNJgxs|Xq@rwFO|P&fKc?o4J^~Ts{gK2vV_`MI4lK(o^0W0TmQx- zqxvW&e{2*rGzo}|;(zCUHfz5;RWwBQ=us-JJkkM?>VKi;TZ|p^_(3MPpVAJ^E6Pec zwHGa`4xXRZ&Z_hIqgLFKK&9#~Zj|NDY(gSB>~)^i$-kC*(8$2(k$miOtB?zLcq;Ba zSl|*T7287|DPLpI2wTA&g>=-}5S>;czf)*C5f-QfTs>BmY#P>gAv%4(L(qDdp%s}8 zEXn${{CD2Ia<+9|N=!%cqXkob)CyR6{YxT(mjO}uBLVF6Un^4S5yYP@Mp_zZltkT9 zRt~9oMB=;|| zlevZ#C*^(rqe`$)nt^oXI*QW1N!Nmcm}-j>*12?5sP7T(C49P9HSU1IC{ci^nznKib z9ImUWzwK8|L1qx7^l_@d6vJZO%XBO`I#o>^g;aYBk&;HtkQ@b*BQkCL8M6W1TS+;k zp$O-_0~Z(HEb-O>4>xqBuU$?4g{f!u#S_$G5sJZD>pfjy5;+=OMtz3KCT{k{bjEp@ z%fCm*vXNmJ7jb%DodVM}h5p=$sHCBq&uL6xyo-&er+cRdDD0_doYt%aXx`5jnx9h^ zIt(O2UI)7ce>$9Hbr5oveR`<9^RD;#+uvr2vm-JexFbe4=x@Nf820z8oNBtVojR02 zX6Dr0i-sDbm}uSnE;FFSLf>m!vA_}q1`Y1RiY0wzcc*vVn$mS0*CR!F`c#t01P4J^q&_oxnwY?oP>AyY}^vHS|*L=5`NW;BLh-F2> zSF4sZe&uiJi zx>9ZkD4UUBy5r*=Qo!%Ri#ly{$trM{dZ~ z9c8lh)6ov`tZ4L4=4C1El-3PTzUss5K|D|7eM~_szO&}etkbm;m;k17r=+AYb)D0& z=)4C7!$rEoz66UvVY%AYC4uL> zC=w)n9Ln4Y_M{?*)NWw;d7OblKC#xgQ(y1M^O_NK(Td0w-2x@zy)$ibHxGg_lEK34 zxu9h9F@F4NoDHy`J!PhtQ_s)1y}m)Vm9X0L5QUAyhR@IFqPSUAehi7WKn?ywVJU&2 z37w*vyYjbiN{7c$)QqXby2izNgsjZ|eK#1cp{#_}cox=esMMIsOTnE?wBxY-Hnu(9 z*aM9kRL#z(Hp8Tzfqgo*l5qa@=osO4^GD^o8r+;OP9mIU*#m2^pgLRJcjA7g+t+O2 zs$=k6=_mE_9#(jymW@_g#HKPt5GD5d;_WyhHux(2C!I60U@__N%K}*ucl&Rf|1>?TNgg(MN7@1t}ZQmm$L~Hbg z--I&mgoG*5THIAJGa8l3jCxD_!AfXAmU!?bKD*pYz9Td0w4&UANr`fAk%#pK2YhR! z-(N%-yz|h3CQr&PQ!6}atK418?Z{*NFm6CJEOfEa({UfQFRzr6@+ zb|SA^7lI5Ih}hTOG_5Q+fej#uqAj2J# zI;G8qAJgdaJYEvO-VMmE;%D@LEnrt@SGeh7L3k}UfI?<-q#f^hS1!E?RISjJo-L~p zc&@=oyx|0{+?!eQ_a45P`JupQRsXJDLBvvwR8DDjcA{jI@gW;3rF!66^udr7y_{^r zwM#ici9OXP6$*3u!J!_jH9$o8Zl^ral?6dvmZK7Ts)i`iv-GuTyb<*<@q9&#E&4mI z1r)eRP_&6lArUbEa{aHSj1CV;$Qazm?jh;xKg*9`+DMt5lc3uhw?rLt zePVE+I`KVyCCAG6x4m765V>!uPS>Krj^BGc=_cCYf;MAhLW=6)D+O#qir|4AEV;#u zXTAh>%9%w=9)g`Tq zQ_{+Hvm9GLPq5Sh4+mE{;yagDpOn~wOUfYgFnqcfhSxbZHc5ke zbP6o$6ssijj(Nz^a%wT9YT+0Grytbnkg`5pX98oBE$G+tR?n44vvBvBn*S?yeV- zM{(d%+^={ZexN*6reG4^<)ZlSoXTT_$Ka(1#0mL~gN@~a_$`4lE(1`{M9ZCO9`<#-R5|DcUS_&OQ!~l| z`50isDgWt_04;7Bpm?wG0^`^C?QwW}9N`1vi(z(bh$j&Y|3=a6DeH6juK9^>YV1%v zpfhY#^UMNS=mrq&vzN*+Sdu`D)qVU1s^cm&F^_721sl|}mKi?We3P>UY+vT~0*kF| zfP@7f!uiw=*{c3R)u2tkf)*0V4}Y9{osko_{ir?I)T$-e=np8RG5#Lmp}(F=b8?-s zW>x;-6$IgmvrT2rr*yKc=#_*4Z4J9DFct#*Qrf%NpDIh;Kf2$bK^VrpMwG zyWU9zlYWu@RX9cr%CBEEsakD#_^+4Jfu?Zvy|AqrWDZT1`4S0)E!&ClgDmQs2GB0S z&vO1^(_kI*hZc@^r?;~P3P%0VX6FQ7_A?+Mej(Np_P*gt*cFw$=_lno&F(8RxN|ul zPpSE6*&+)HZ5}YG4pX5H(Y4Ki9#hA0 zd{sqQ3WHVz+m_RjP&qCDn8l4_X8*pUF^Ur!Z;GcQC8^BzHAa~=B_^Zkx0!HoNgu}>Aar|Fk2*Azt<#=65j#7%|`L%!%eVUD!^-KkE>XgaKSsM0xj1NgzbVS zM1!5+qfK0em@=+C#sNs#k_(U= z?4LNQt3#;wA(`R}y8IIqAdgWpQ+3X|-rrjj6jT`Vev&peQ;{Si^>t`oF0&LEvW&!z0L zPJv>I=I~xeZ{N_!L^%kP&{#qM&$L@K+8gk**Yy7-52o3JmB;mG5jE%yP*inrP6Qq6 zZ~SDB7cxfc$n@i#qnN2(?YO87KHdaN0FVL7 z!#mp=&s{IkkAKK(ccyNFse-EVtD>zpzIJXt6@HX(ENyVhh!hU}G0NQIuEG#fcrUj6 zqx5g0VOK#)53kzBKcO&q#9nrayc0p2y9%7!)!gmXMT`A-V|S9ajNZfzP^{6M{xVu| z?xB37lHmRrB5u2ger}iAXU3kN$5oBez>??KPRC$d++*-5o>Ar%g|<{@r+1D3om1&f zkAFQxz^nos^#BtNP`?VYdpWZkNbygx6oua|ewnOs{aS4Yh&$g{-LbTm_aXJ_EAuh0 z2sJl5xWK7Az2X=Zb?++m0L&*YNtW#f|LrzVSyC}%J(_W`Y5Pdw)^$r_igv`)g6n7r zeUmV9PDGdIUZc@74YXTFCnjp+)}=tzmodN&#@8SYdUj@UY4_kIA`Zg`Pre(QenDgZ zaj>aJYp`e^Sq`*SUQbXw@HuGdYy^j`of*wyb{`6Q``?Pr-K4#q?fLtKBigZax9={8 zvi>G=O5R9%loG*7<+5udD#eKHnc0|G~fm9 zA+hc>*)tCn?>DOn`=&ZJ9!sfx89nL;v@zVpRnP!8Z{&MlXlBa13smoEvJ5s6&GuD9CPSczf^9#fBy#zD!V-h*O zFwGd=dbfr|5gwduiHhlcj(-jHoj-r{!E;pe<1G!Cy}^q-issWmbDhm}g4MSZz|$N3#unnVTJI29LSZqvmve&MWkx~EN(U3%mCDejH_ z*#7E_+XcB0}lPS z2IkmnEQq+XTPX@y_$WF(1O2cnDXPvR-F{Bh?z}j!79w{Oy4&qCve*~kb+oUSKvW-E zYKhiUk?p$fGu*^xpqtBRR=r`DWvqAQ4uHLuk83;FseX^Pb9TiW=G`3Ice33a+A5%v z)jR9@RnpHiL={hh`3Lh_Kpl-i!o16F2hw=rFV6qbm90-$C0Oq>XbU~}z5zcdYt2i;Qi0p`^+V;rNMpe2}()8PZ E0fj}!GXMYp diff --git a/modules/openvino_code/media/sidebar-icon.png b/modules/openvino_code/media/sidebar-icon.png deleted file mode 100644 index 8996aab7cda5e0c1d6d08be91af57ec760b1f265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 930 zcmV;T16}-yP)5%ij3Seg@*_6agWHUs>s z7=v0cMrkE%glj~}|1s21;}M}?V*%$Yd%#PTwFe zgOFA+@t02U^~gsio>mGH@fGs%*>j=I)#Y#9g*BR}7z0x|jqCC4=}Mujy3X7)8FOyq z7e%1|yu)qdk4u?b!I{rdsu&$;o1dj*v@E;emcZ#&kB8jzqHpY3|~$=OjroeUi0h&eYCKK2r-04`>aNfL^Rf~pWddW zIrizTg&eqw-Rm*5hMeH~Jyk5Uaw^ygj2mhxMBUb}6+^ufI!U7hVBq#;3qdq_Pngb- zLqN`db5dZBqooV<`|~Udoha#&gHCj#`#iXl<~tL=0o)6ZR=e}IkpKVy07*qoM6N<$ Eg7Jr&VE_OC diff --git a/modules/openvino_code/package-lock.json b/modules/openvino_code/package-lock.json deleted file mode 100644 index 95b256e56..000000000 --- a/modules/openvino_code/package-lock.json +++ /dev/null @@ -1,7994 +0,0 @@ -{ - "name": "openvino-code-completion", - "version": "0.2.2", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "openvino-code-completion", - "version": "0.2.2", - "license": "https://github.com/openvinotoolkit/openvino_contrib/blob/master/LICENSE", - "workspaces": [ - "side-panel-ui" - ], - "dependencies": { - "lru-cache": "10.0.1", - "mustache": "4.2.0", - "node-fetch": "3.3.2" - }, - "devDependencies": { - "@types/glob": "8.1.0", - "@types/mocha": "10.0.1", - "@types/mustache": "4.2.2", - "@types/node": "^16.17.0", - "@types/vscode": "^1.79.0", - "@types/webpack-bundle-analyzer": "4.6.0", - "@typescript-eslint/eslint-plugin": "6.2.1", - "@typescript-eslint/parser": "6.2.1", - "@vscode/test-electron": "2.3.4", - "@vscode/vsce": "2.20.0", - "copy-webpack-plugin": "11.0.0", - "eslint": "8.46.0", - "eslint-config-airbnb-typescript": "17.1.0", - "eslint-config-prettier": "8.10.0", - "eslint-import-resolver-typescript": "3.5.5", - "eslint-plugin-import": "2.28.0", - "glob": "10.3.3", - "ncp": "2.0.0", - "ovsx": "0.8.2", - "prettier": "3.0.1", - "rimraf": "5.0.1", - "terser-webpack-plugin": "5.3.9", - "ts-loader": "9.4.4", - "typescript": "5.1.6", - "webpack": "^5.96.1", - "webpack-bundle-analyzer": "4.9.0", - "webpack-cli": "5.1.4" - }, - "engines": { - "vscode": "^1.79.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": 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", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", - "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.10", - "@babel/parser": "^7.22.10", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", - "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "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", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": 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", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.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/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "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.6.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.1.tgz", - "integrity": "sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", - "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", - "dev": true, - "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.46.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", - "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "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.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "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.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "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", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.5", - "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/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "dev": true - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", - "dev": true, - "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true - }, - "node_modules/@types/mustache": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/mustache/-/mustache-4.2.2.tgz", - "integrity": "sha512-MUSpfpW0yZbTgjekDbH0shMYBUD+X/uJJJMm9LXN1d5yjl5lCY1vN/eWKD6D1tOtjA6206K0zcIPnUaFMurdNA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.18.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", - "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.2.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.15.tgz", - "integrity": "sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", - "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@types/vscode": { - "version": "1.80.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.80.0.tgz", - "integrity": "sha512-qK/CmOdS2o7ry3k6YqU4zD3R2AYlJfbwBoSbKpBoP+GpXNE+0NEgJOli4n0bm0diK5kfBnchgCEj4igQz/44Hg==", - "dev": true - }, - "node_modules/@types/vscode-webview": { - "version": "1.57.1", - "resolved": "https://registry.npmjs.org/@types/vscode-webview/-/vscode-webview-1.57.1.tgz", - "integrity": "sha512-ghW5SfuDmsGDS2A4xkvGsLwDRNc3Vj5rS6rPOyPm/IryZuf3wceZKxgYaUoW+k9f0f/CB7y2c1rRsdOWZWn0PQ==", - "dev": true - }, - "node_modules/@types/webpack-bundle-analyzer": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.0.tgz", - "integrity": "sha512-XeQmQCCXdZdap+A/60UKmxW5Mz31Vp9uieGlHB3T4z/o2OLVLtTI3bvTuS6A2OWd/rbAAQiGGWIEFQACu16szA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "tapable": "^2.2.0", - "webpack": "^5" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.1.tgz", - "integrity": "sha512-iZVM/ALid9kO0+I81pnp1xmYiFyqibAHzrqX4q5YvvVEyJqY+e6rfTXSCsc2jUxGNqJqTfFSSij/NFkZBiBzLw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.2.1", - "@typescript-eslint/type-utils": "6.2.1", - "@typescript-eslint/utils": "6.2.1", - "@typescript-eslint/visitor-keys": "6.2.1", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "natural-compare-lite": "^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/parser": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.2.1.tgz", - "integrity": "sha512-Ld+uL1kYFU8e6btqBFpsHkwQ35rw30IWpdQxgOqOh4NfxSDH6uCkah1ks8R/RgQqI5hHPXMaLy9fbFseIe+dIg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.2.1", - "@typescript-eslint/types": "6.2.1", - "@typescript-eslint/typescript-estree": "6.2.1", - "@typescript-eslint/visitor-keys": "6.2.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.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.2.1.tgz", - "integrity": "sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.2.1", - "@typescript-eslint/visitor-keys": "6.2.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.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.2.1.tgz", - "integrity": "sha512-fTfCgomBMIgu2Dh2Or3gMYgoNAnQm3RLtRp+jP7A8fY+LJ2+9PNpi5p6QB5C4RSP+U3cjI0vDlI3mspAkpPVbQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.2.1", - "@typescript-eslint/utils": "6.2.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.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.1.tgz", - "integrity": "sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ==", - "dev": true, - "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.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.1.tgz", - "integrity": "sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.2.1", - "@typescript-eslint/visitor-keys": "6.2.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.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.2.1.tgz", - "integrity": "sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.2.1", - "@typescript-eslint/types": "6.2.1", - "@typescript-eslint/typescript-estree": "6.2.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.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.1.tgz", - "integrity": "sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.2.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/@vitejs/plugin-react": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.3.tgz", - "integrity": "sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.22.5", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0" - } - }, - "node_modules/@vscode/codicons": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.33.tgz", - "integrity": "sha512-VdgpnD75swH9hpXjd34VBgQ2w2quK63WljodlUcOoJDPKiV+rPjHrcUc2sjLCNKxhl6oKqmsZgwOWcDAY2GKKQ==" - }, - "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/vsce": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.20.0.tgz", - "integrity": "sha512-FR8Tq2WgGRi/Py5/9WUFG2DCxdqaHXyuhHXSP8hsNc1FsxNzAkqKqfvOUUGxA7gOytmc9s/000QA7wKVukMDbQ==", - "dev": true, - "dependencies": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "jsonc-parser": "^3.2.0", - "leven": "^3.1.0", - "markdown-it": "^12.3.2", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^7.5.2", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.5.0", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "bin": { - "vsce": "vsce" - }, - "engines": { - "node": ">= 14" - }, - "optionalDependencies": { - "keytar": "^7.7.0" - } - }, - "node_modules/@vscode/vsce/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vscode/vsce/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vscode/vsce/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@vscode/vsce/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@vscode/vsce/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@vscode/vsce/node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@vscode/vsce/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@vscode/vsce/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": 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/@vscode/vsce/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vscode/vsce/node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/@vscode/vsce/node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/@vscode/vsce/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vscode/vsce/node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "node_modules/@vscode/vsce/node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@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, - "license": "BSD-3-Clause" - }, - "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, - "license": "Apache-2.0" - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/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==", - "dev": true - }, - "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-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", - "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", - "dev": 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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": 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", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", - "dev": true, - "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/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/azure-devops-node-api": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", - "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", - "dev": true, - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "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" - } - ], - "optional": true - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24= sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "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, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "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" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", - "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", - "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" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "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/cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "dependencies": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "optional": true - }, - "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/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "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/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "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/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/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==", - "dev": true - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "optional": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "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/electron-to-chromium": { - "version": "1.5.65", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz", - "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "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, - "optional": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "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-iterator-helpers": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz", - "integrity": "sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==", - "dev": 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.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "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.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.1", - "@eslint/js": "^8.46.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.2", - "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-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-config-airbnb-typescript": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz", - "integrity": "sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==", - "dev": true, - "dependencies": { - "eslint-config-airbnb-base": "^15.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.13.0 || ^6.0.0", - "@typescript-eslint/parser": "^5.0.0 || ^6.0.0", - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - } - }, - "node_modules/eslint-import-resolver-node/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/eslint-import-resolver-typescript": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", - "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "get-tsconfig": "^4.5.0", - "globby": "^13.1.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.5" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/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/eslint-plugin-import": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", - "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", - "dev": true, - "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.12.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", - "resolve": "^1.22.3", - "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", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dev": 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", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": 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-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.3.tgz", - "integrity": "sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==", - "dev": true, - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": 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", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": 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", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "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.2", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", - "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "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/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "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/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "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", - "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/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "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.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "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, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": 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/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "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/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "optional": true - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.2.tgz", - "integrity": "sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true, - "optional": true - }, - "node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "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, - "license": "BSD-2-Clause" - }, - "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.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "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.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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" - } - ], - "optional": true - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "optional": true - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "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-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": 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.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "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, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "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", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": 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", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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/iterator.prototype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", - "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", - "dev": 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": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "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", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "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-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": 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", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/keytar": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", - "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" - } - }, - "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/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "optional": true - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true, - "optional": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "dev": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "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/node-abi": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz", - "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==", - "dev": true, - "optional": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "dev": true, - "optional": true - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, - "license": "MIT" - }, - "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", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", - "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": 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", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "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/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "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/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "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/ovsx": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ovsx/-/ovsx-0.8.2.tgz", - "integrity": "sha512-btDXZorXlmwN9+9Un3khrVygCXmhwbrtg8gifNXw92rZPXcRBAiLG/L09Kb6srhGEratsFt42AktfD8t9XhzoA==", - "dev": true, - "dependencies": { - "@vscode/vsce": "^2.19.0", - "commander": "^6.1.0", - "follow-redirects": "^1.15.4", - "is-ci": "^2.0.0", - "leven": "^3.1.0", - "semver": "^7.5.2", - "tmp": "^0.2.1" - }, - "bin": { - "ovsx": "lib/ovsx" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/ovsx/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "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/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg= sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", - "dev": true, - "dependencies": { - "semver": "^5.1.0" - } - }, - "node_modules/parse-semver/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA= sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "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/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dev": true, - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", - "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "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, - "optional": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/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/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "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/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/readable-stream/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/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", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", - "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", - "dev": 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/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "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-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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", - "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.12.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", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", - "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", - "dev": true, - "dependencies": { - "glob": "^10.2.5" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.29.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", - "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-copy": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", - "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^8.0.1", - "colorette": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "10.0.1", - "is-plain-object": "^3.0.0" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/rollup-plugin-copy/node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/rollup-plugin-copy/node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "node_modules/rollup-plugin-copy/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": 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/rollup-plugin-copy/node_modules/globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-copy/node_modules/is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/run-applescript/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/run-applescript/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-applescript/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", - "dev": true, - "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-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "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/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "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", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "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", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "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/side-panel-ui": { - "resolved": "side-panel-ui", - "link": true - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "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" - } - ], - "optional": true - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "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" - } - ], - "optional": true, - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "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-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "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/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/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/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-cjs/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/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.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "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", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": 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", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "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", - "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-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", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dev": true, - "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.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "optional": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", - "dev": true, - "license": "BSD-2-Clause", - "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/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": 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/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", - "dev": true, - "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/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", - "dev": true - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "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/typed-rest-client": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", - "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", - "dev": true, - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "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/underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", - "dev": true - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "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" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/vite": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.9.tgz", - "integrity": "sha512-qK9W4xjgD3gXbC0NmdNFFnVFLMWSNiR3swj957yutwzzN16xF/E7nmtAyp1rT9hviDroQANjE4HK3H4WqWdFtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "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.11", - "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.10", - "watchpack": "^2.4.1", - "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-bundle-analyzer": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz", - "integrity": "sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "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-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "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/webpack/node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "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/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": 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-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": 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", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "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.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "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/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/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", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "side-panel-ui": { - "version": "0.0.1", - "dependencies": { - "@vscode/codicons": "0.0.33", - "react": "18.2.0", - "react-dom": "18.2.0" - }, - "devDependencies": { - "@types/react": "18.2.15", - "@types/react-dom": "18.2.7", - "@types/vscode-webview": "1.57.1", - "@vitejs/plugin-react": "4.0.3", - "eslint-plugin-react": "7.33.2", - "eslint-plugin-react-hooks": "4.6.0", - "eslint-plugin-react-refresh": "0.4.3", - "rollup-plugin-copy": "3.4.0", - "vite": "^4.5.3" - } - } - } -} diff --git a/modules/openvino_code/package.json b/modules/openvino_code/package.json deleted file mode 100644 index 13f7c72a0..000000000 --- a/modules/openvino_code/package.json +++ /dev/null @@ -1,354 +0,0 @@ -{ - "publisher": "OpenVINO", - "name": "openvino-code-completion", - "version": "0.2.2", - "displayName": "OpenVINO Code Completion", - "description": "VSCode extension for AI code completion with OpenVINO", - "icon": "media/logo.png", - "author": "", - "contributors": [], - "license": "https://github.com/openvinotoolkit/openvino_contrib/blob/master/LICENSE", - "homepage": "https://docs.openvino.ai/", - "repository": { - "type": "git", - "url": "https://github.com/openvinotoolkit/openvino_contrib" - }, - "bugs": { - "url": "https://github.com/openvinotoolkit/openvino_contrib/issues" - }, - "engines": { - "vscode": "^1.79.0" - }, - "categories": [ - "Programming Languages", - "Snippets", - "Other" - ], - "keywords": [ - "ai", - "autocomplete", - "intellicode", - "intellisense", - "method completion", - "python", - "snippets", - "openvino", - "openvinotoolkit" - ], - "activationEvents": [ - "onStartupFinished" - ], - "main": "./out/extension", - "scripts": { - "analyze:bundle": "webpack --env analyzeBundle", - "vscode:prepublish": "npm run clear-out && npm run build:side-panel && webpack --mode production", - "watch": "webpack --mode development --watch", - "build": "webpack --mode development", - "start:side-panel": "npm run dev --workspace side-panel-ui", - "build:side-panel": "npm run build --workspace side-panel-ui", - "prettier": "prettier --write src/", - "prettier:check": "prettier --check src/", - "lint": "eslint . --max-warnings 0", - "lint:fix": "eslint . --fix", - "lint:side-panel": "npm run lint -w side-panel-ui", - "lint:all": "npm run lint && npm run lint --workspaces", - "test": "node ./out/test/runTest.js", - "vsce:package": "vsce package", - "vsce:publish": "vsce publish", - "ovsx:publish": "ovsx publish", - "clear-out": "rimraf ./out" - }, - "devDependencies": { - "@types/glob": "8.1.0", - "@types/mocha": "10.0.1", - "@types/mustache": "4.2.2", - "@types/node": "^16.17.0", - "@types/vscode": "^1.79.0", - "@types/webpack-bundle-analyzer": "4.6.0", - "@typescript-eslint/eslint-plugin": "6.2.1", - "@typescript-eslint/parser": "6.2.1", - "@vscode/test-electron": "2.3.4", - "@vscode/vsce": "2.20.0", - "copy-webpack-plugin": "11.0.0", - "eslint": "8.46.0", - "eslint-config-airbnb-typescript": "17.1.0", - "eslint-config-prettier": "8.10.0", - "eslint-import-resolver-typescript": "3.5.5", - "eslint-plugin-import": "2.28.0", - "glob": "10.3.3", - "ncp": "2.0.0", - "ovsx": "0.8.2", - "prettier": "3.0.1", - "rimraf": "5.0.1", - "terser-webpack-plugin": "5.3.9", - "ts-loader": "9.4.4", - "typescript": "5.1.6", - "webpack": "^5.96.1", - "webpack-bundle-analyzer": "4.9.0", - "webpack-cli": "5.1.4" - }, - "dependencies": { - "lru-cache": "10.0.1", - "mustache": "4.2.0", - "node-fetch": "3.3.2" - }, - "capabilities": { - "virtualWorkspaces": true, - "untrustedWorkspaces": { - "supported": true - } - }, - "contributes": { - "viewsContainers": { - "activitybar": [ - { - "id": "openvino-code-sidebar", - "title": "OpenVINO Code", - "icon": "media/sidebar-icon.png" - } - ] - }, - "views": { - "openvino-code-sidebar": [ - { - "id": "openvino-code-side-panel", - "name": "OpenVINO Code", - "type": "webview", - "contextualTitle": "OpenVINO Code" - } - ] - }, - "commands": [ - { - "command": "openvinoCode.generateInlineCompletion", - "category": "OpenVINO Code", - "title": "Generate Inline Code Completion" - }, - { - "command": "openvinoCode.generateInlineCompletionTab", - "category": "OpenVINO Code", - "title": "Generate Inline Code Completion In New Tab" - }, - { - "command": "openvinoCode.generateDocstring", - "category": "OpenVINO Code", - "title": "Generate Docstring", - "when": "editorLangId == python" - }, - { - "command": "openvinoCode.startServerNative", - "category": "OpenVINO Code", - "title": "Start Server Native" - }, - { - "command": "openvinoCode.stopServerNative", - "category": "OpenVINO Code", - "title": "Stop Server Native" - }, - { - "command": "openvinoCode.checkConnection", - "category": "OpenVINO Code", - "title": "Check Server Connection" - }, - { - "command": "openvinoCode.openSettings", - "category": "OpenVINO Code", - "title": "Show OpenVINO Code Settings", - "icon": "$(gear)" - } - ], - "menus": { - "view/title": [ - { - "command": "openvinoCode.openSettings", - "when": "view == openvino-code-side-panel", - "group": "navigation" - } - ], - "editor/context": [ - { - "command": "openvino-code-completion.toggle", - "group": "openvino-code-completion", - "when": "editorTextFocus && config.openvino-code-completion.showCommandsInContextMenu" - }, - { - "command": "openvinoCode.generateInlineCompletion", - "when": "editorFocus", - "group": "openvino-code-completion@1" - }, - { - "command": "openvinoCode.generateInlineCompletionTab", - "when": "editorFocus", - "group": "openvino-code-completion@2" - } - ] - }, - "configuration": [ - { - "title": "OpenVINO Code", - "properties": { - "openvinoCode.model": { - "order": 0, - "type": "string", - "default": "code-t5", - "enum": [ - "code-t5", - "decicoder-1b-openvino", - "stablecode-completion", - "deepseek-coder", - "phi-2" - ], - "description": "Which model to use for code generation." - }, - "openvinoCode.device": { - "order": 1, - "type": "string", - "default": "CPU", - "enum": [ - "CPU", - "GPU", - "NPU" - ], - "description": "Which device to use for code generation" - }, - "openvinoCode.serverUrl": { - "order": 1, - "type": "string", - "default": "http://127.0.0.1:8000", - "markdownDescription": "OpenVINO Code server URL with host and port (e.g. `http://127.0.0.1:8000`) where requests will be sent to." - }, - "openvinoCode.serverRequestTimeout": { - "order": 2, - "type": "integer", - "exclusiveMinimum": 0, - "default": 30, - "markdownDescription": "Server request timeout in seconds after which request will be aborted. Constrains the number of generated tokens in non-streaming mode." - }, - "openvinoCode.minNewTokens": { - "order": 3, - "type": "number", - "default": 1, - "description": "Minimum of new generated tokens." - }, - "openvinoCode.maxNewTokens": { - "order": 3, - "type": "number", - "default": 100, - "description": "Maximum of new generated tokens." - }, - "openvinoCode.streamInlineCompletion": { - "order": 3, - "type": "boolean", - "default": "false", - "description": "When checked inline complention will be generated in streaming mode" - }, - "openvinoCode.fillInTheMiddleMode": { - "order": 4, - "type": "boolean", - "default": "false", - "description": "When checked, text before (above) and after (below) the cursor will be used for completion generation. When unckecked, only text before (above) the cursor will be used." - }, - "openvinoCode.startToken": { - "order": 7, - "type": "string", - "default": "< |fim_begin| >", - "description": "String that is sent to server is in format: `{startToken}{text above cursor}{middleToken}{text below cursor if fillInTheMiddleMode=true}{endToken}`. Leave `startToken`, `middleToken`, or `endToken` empty if there is no special token for those placements." - }, - "openvinoCode.middleToken": { - "order": 8, - "type": "string", - "default": "<|fim▁hole|>", - "description": "String that is sent to server is in format: `{startToken}{text above cursor}{middleToken}{text below cursor if fillInTheMiddleMode=true}{endToken}`. Leave `startToken`, `middleToken`, or `endToken` empty if there is no special token for those placements." - }, - "openvinoCode.endToken": { - "order": 9, - "type": "string", - "default": "<|fim▁end|>", - "description": "String that is sent to server is in format: `{startToken}{text above cursor}{middleToken}{text below cursor if fillInTheMiddleMode=true}{endToken}`. Leave `startToken`, `middleToken`, or `endToken` empty if there is no special token for those placements." - }, - "openvinoCode.stopToken": { - "order": 10, - "type": "string", - "default": "<|endoftext|>", - "description": "(Optional) Stop token." - }, - "openvinoCode.temperature": { - "order": 4, - "type": "number", - "default": 0.2, - "description": "Non-zero value. The higher the value, the more diverse the code suggestions and the lower temperature emphasizes the most likely words." - }, - "openvinoCode.topK": { - "order": 4, - "type": "integer", - "default": 10, - "description": "Select the next word during suggestion generation from the top K candidates. Improves diversity of generated suggestions." - }, - "openvinoCode.topP": { - "order": 4, - "type": "number", - "default": 1, - "description": "A value between 0 and 1. Similar to Top K, it adjusts the number of candidate words based on their probability. Candidates will be added for selection until the cumulative probability exceeds P." - }, - "openvinoCode.repetitionPenalty": { - "order": 4, - "type": "number", - "default": 1, - "description": "A non-negative value that discourages the repetition of the same words. 1.0 means no penalty." - }, - "openvinoCode.quoteStyle": { - "order": 5, - "type": "string", - "default": "\"\"\"", - "enum": [ - "\"\"\"", - "'''" - ], - "description": "Style of quote used with generate docstring command" - }, - "openvinoCode.docstringFormat": { - "order": 6, - "type": "string", - "default": "google_summary_only", - "enum": [ - "google_summary_only", - "google", - "docblockr", - "sphinx", - "numpy" - ], - "description": "Which docstring format to use." - } - } - } - ], - "keybindings": [ - { - "command": "openvinoCode.generateInlineCompletion", - "key": "ctrl+alt+space", - "mac": "ctrl+alt+space", - "when": "editorTextFocus" - }, - { - "command": "openvinoCode.generateInlineCompletionTab", - "key": "ctrl+alt+shift+1", - "mac": "ctrl+alt+shift+1", - "when": "editorTextFocus" - }, - { - "command": "openvinoCode.stopGeneration", - "key": "escape", - "mac": "escape", - "when": "openvinoCode.generating" - }, - { - "command": "openvinoCode.acceptInlineCompletion", - "key": "tab", - "when": "inlineSuggestionVisible && !editorHoverFocused && !editorTabMovesFocus && !suggestWidgetVisible" - } - ] - }, - "workspaces": [ - "side-panel-ui" - ] -} diff --git a/modules/openvino_code/server/README.md b/modules/openvino_code/server/README.md deleted file mode 100644 index 3afd30605..000000000 --- a/modules/openvino_code/server/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# OpenVINO VSCode Server - -## Installation - -Execute the following commands from `./server` directory: - -```shell -python3 -m venv venv -source venv/bin/activate -pip install -U pip -pip install . -``` - -## Usage - -To start the server execute the following command from `./server` directory and **with activated** `venv`: -```shell -python main.py --model chgk13/decicoder-1b-openvino-int8 -``` - -Open `localhost:8000` or `localhost:8000/docs` for autogenerated OpenAPI specification. diff --git a/modules/openvino_code/server/main.py b/modules/openvino_code/server/main.py deleted file mode 100644 index 3d86194e6..000000000 --- a/modules/openvino_code/server/main.py +++ /dev/null @@ -1,24 +0,0 @@ -from src.utils import get_parser, setup_logger - - -# Logger should be set up before other imports to propagate logging config to other packages -setup_logger() - -import uvicorn # noqa: E402 - -from src.app import app, get_generator_dummy # noqa: E402 -from src.generators import get_generator_dependency # noqa: E402 - - -def main(): - args = get_parser().parse_args() - - # temporary solution for cli args passing - generator_dependency = get_generator_dependency(args.model, args.device, args.tokenizer_checkpoint, args.assistant) - app.dependency_overrides[get_generator_dummy] = generator_dependency - - uvicorn.run(app, host=args.host, port=args.port) - - -if __name__ == "__main__": - main() diff --git a/modules/openvino_code/server/pyproject.toml b/modules/openvino_code/server/pyproject.toml deleted file mode 100644 index 5e3c2ee52..000000000 --- a/modules/openvino_code/server/pyproject.toml +++ /dev/null @@ -1,44 +0,0 @@ -[project] -name = "OVCodExtServer" -version = "0.0.1" -requires-python = ">=3.8" - -dependencies = [ - 'fastapi==0.109.1', - 'uvicorn==0.23.2', - 'torch @ https://download.pytorch.org/whl/cpu-cxx11-abi/torch-2.0.1%2Bcpu.cxx11.abi-cp38-cp38-linux_x86_64.whl ; sys_platform=="linux" and python_version == "3.8"', - 'torch @ https://download.pytorch.org/whl/cpu-cxx11-abi/torch-2.0.1%2Bcpu.cxx11.abi-cp39-cp39-linux_x86_64.whl ; sys_platform=="linux" and python_version == "3.9"', - 'torch @ https://download.pytorch.org/whl/cpu-cxx11-abi/torch-2.0.1%2Bcpu.cxx11.abi-cp310-cp310-linux_x86_64.whl ; sys_platform=="linux" and python_version == "3.10"', - 'torch @ https://download.pytorch.org/whl/cpu-cxx11-abi/torch-2.0.1%2Bcpu.cxx11.abi-cp311-cp311-linux_x86_64.whl ; sys_platform=="linux" and python_version == "3.11"', - 'torch ; sys_platform != "linux"', - 'openvino==2024.6.0', - 'transformers==4.48.0', - 'optimum==1.23.3', - 'optimum-intel[openvino]==1.15.0', -] - -[project.optional-dependencies] -dev = ["black", "ruff"] - -[build-system] -requires = ["setuptools>=43.0.0", "wheel"] -build-backend = "setuptools.build_meta" - - -[tool.black] -line-length = 119 -target-version = ['py38', 'py39', 'py310', 'py311'] -unstable = true -preview = true - -[tool.ruff] -lint.ignore = ["C901", "E501", "E741", "W605", "F401", "W292"] -lint.select = ["C", "E", "F", "I", "W"] -lint.extend-safe-fixes = ["F601"] -lint.extend-unsafe-fixes = ["UP034"] -lint.fixable = ["F401"] -line-length = 119 - - -[tool.ruff.lint.isort] -lines-after-imports = 2 diff --git a/modules/openvino_code/server/src/__init__.py b/modules/openvino_code/server/src/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/modules/openvino_code/server/src/app.py b/modules/openvino_code/server/src/app.py deleted file mode 100644 index 56dfd8bf2..000000000 --- a/modules/openvino_code/server/src/app.py +++ /dev/null @@ -1,165 +0,0 @@ -from time import perf_counter -from typing import Dict, Optional, Union - -from fastapi import Depends, FastAPI, Request -from fastapi.responses import RedirectResponse, StreamingResponse -from pydantic import BaseModel, Field, TypeAdapter - -from src.generators import GeneratorFunctor -from src.utils import get_logger - - -logger = get_logger(__name__) - - -class GenerationParameters(BaseModel): - temperature: float = 1.0 - top_k: int = 50 - top_p: float = 1.0 - - max_new_tokens: int = 60 - min_new_tokens: int = 0 - - timeout: Optional[int] = None - repetition_penalty: float = 1.0 - - -class GenerationRequest(BaseModel): - inputs: str - parameters: GenerationParameters - - -class GenerationDocStringRequest(BaseModel): - inputs: str = Field( - ..., - description="Function or Class body", - example=( - "def fibonacci(n):\n if n == 0:\n return 0\n elif n == 1:\n" - " return 1\n else:\n return fibonacci(n-1) + fibonacci(n-2)" - ), - ) - template: str = Field( - ..., - description=( - "Doc string template with tab stops in format ${tab_stop_number:value[type | int | str | description]}" - ), - example=( - ' """\n ${1:}\n\n Parameters\n ----------\n n : ${2:int}\n' - " ${3:[description]}\n\n Returns\n -------\n ${4:[type]}\n" - ' ${5:[description]}\n """' - ), - ) - format: str = Field( - ..., - description="Doc string format passed from extension settings [google | numpy | sphinx | dockblockr | ...]", - example="numpy", - ) - definition: str = Field("", description="Function signature", example="def fibonacci(n):") - parameters: GenerationParameters - - -class GenerationResponse(BaseModel): - generated_text: str - - -app = FastAPI() - - -def get_generator_dummy(): - pass - - -@app.on_event("startup") -async def startup_event(): - # This print is a anchor for vs code extension to track that server is started - SERVER_STARTED_STDOUT_ANCHOR = "OpenVINO Code Server started" - logger.info(SERVER_STARTED_STDOUT_ANCHOR) - - -@app.get("/", include_in_schema=False) -def docs_redirect() -> RedirectResponse: - return RedirectResponse("/docs") - - -@app.get("/api/health", status_code=200) -def health_check() -> Dict: - return {} - - -@app.post("/api/generate", status_code=200, response_model=GenerationResponse) -async def generate( - request: GenerationRequest, - generator: GeneratorFunctor = Depends(get_generator_dummy), -) -> Dict[str, Union[int, str]]: - logger.info(f"Request:\n{request}") - - start = perf_counter() - generated_text: str = generator(request.inputs, request.parameters.model_dump()) - stop = perf_counter() - - if (elapsed := stop - start) > 1.5: - logger.warning(f"Elapsed: {elapsed:.3f}s") - else: - logger.info(f"Elapsed: {elapsed:.3f}s") - - logger.info(f"Response:\n{generated_text}") - return {"generated_text": generated_text} - - -@app.post("/api/generate_stream", status_code=200) -async def generate_stream( - request: Request, - generator: GeneratorFunctor = Depends(get_generator_dummy), -) -> StreamingResponse: - generation_request = TypeAdapter(GenerationRequest).validate_python(await request.json()) - logger.info(generation_request) - return StreamingResponse( - generator.generate_stream( - generation_request.inputs, - generation_request.parameters.model_dump(), - request, - ) - ) - - -@app.post("/api/summarize", status_code=200, response_model=GenerationResponse) -async def summarize( - request: GenerationDocStringRequest, - generator: GeneratorFunctor = Depends(get_generator_dummy), -): - logger.info(request) - - start = perf_counter() - generated_text: str = generator.summarize( - request.inputs, - request.template, - request.definition, - request.format, - request.parameters.model_dump(), - ) - stop = perf_counter() - - if (elapsed := stop - start) > 1.5: - logger.warning(f"Elapsed: {elapsed:.3f}s") - else: - logger.info(f"Elapsed: {elapsed:.3f}s") - - logger.info(f"Response: {generated_text}") - return {"generated_text": generated_text} - - -@app.post("/api/summarize_stream", status_code=200) -async def summarize_stream( - request: GenerationDocStringRequest, - generator: GeneratorFunctor = Depends(get_generator_dummy), -) -> StreamingResponse: - logger.info(request) - return StreamingResponse( - generator.summarize_stream( - request.inputs, - request.template, - request.definition, - request.format, - request.parameters.model_dump(), - ) - ) diff --git a/modules/openvino_code/server/src/generators.py b/modules/openvino_code/server/src/generators.py deleted file mode 100644 index 4acc7fbb3..000000000 --- a/modules/openvino_code/server/src/generators.py +++ /dev/null @@ -1,368 +0,0 @@ -import asyncio -import re -from functools import lru_cache -from io import StringIO -from pathlib import Path -from threading import Thread -from time import time -from typing import ( - Any, - Callable, - Container, - Dict, - Generator, - List, - Optional, - Type, - Union, -) - -import torch -from fastapi import Request -from huggingface_hub.utils import EntryNotFoundError -from optimum.intel import OVModelForCausalLM, OVModelForSeq2SeqLM -from transformers import ( - AutoConfig, - AutoTokenizer, - GenerationConfig, - StoppingCriteria, - StoppingCriteriaList, - TextIteratorStreamer, -) - -from src.utils import get_logger - - -logger = get_logger(__name__) - -OVModel = Union[OVModelForSeq2SeqLM, OVModelForCausalLM] - -model_dir = Path("models") -model_dir.mkdir(exist_ok=True) - -SUMMARIZE_INSTRUCTION = "{function}\n\n# The function with {style} style docstring\n\n{signature}\n" -SUMMARIZE_STOP_TOKENS = ("\r\n", "\n") - - -def get_model_class(checkpoint: Union[str, Path]) -> Type[OVModel]: - config = AutoConfig.from_pretrained(checkpoint) - architecture: str = config.architectures[0] - if architecture.endswith("ConditionalGeneration") or architecture.endswith("Seq2SeqLM"): - return OVModelForSeq2SeqLM - - return OVModelForCausalLM - - -def get_model(checkpoint: str, device: str = "CPU") -> OVModel: - ov_config = {"PERFORMANCE_HINT": "LATENCY", "NUM_STREAMS": "1"} - model_path = model_dir / Path(checkpoint) - if model_path.exists(): - model_class = get_model_class(model_path) - model = model_class.from_pretrained(model_path, ov_config=ov_config, compile=False, device=device) - else: - model_class = get_model_class(checkpoint) - try: - model = model_class.from_pretrained( - checkpoint, - ov_config=ov_config, - compile=False, - device=device, - trust_remote_code=True, - ) - except EntryNotFoundError: - model = model_class.from_pretrained( - checkpoint, - ov_config=ov_config, - export=True, - compile=False, - device=device, - trust_remote_code=True, - ) - model.save_pretrained(model_path) - model.compile() - return model - - -# TODO: generator needs running flag or cancellation on new generation request -# generator cannot handle concurrent requests - fails and stalls process -# RuntimeError: Exception from src/inference/src/infer_request.cpp:189: -# [ REQUEST_BUSY ] -class GeneratorFunctor: - def __call__(self, input_text: str, parameters: Dict[str, Any]) -> str: - raise NotImplementedError - - async def generate_stream(self, input_text: str, parameters: Dict[str, Any], request: Request): - raise NotImplementedError - - def summarize( - self, - input_text: str, - template: str, - signature: str, - style: str, - parameters: Dict[str, Any], - ): - raise NotImplementedError - - def summarize_stream( - self, - input_text: str, - template: str, - signature: str, - style: str, - parameters: Dict[str, Any], - ): - raise NotImplementedError - - -class OVGenerator(GeneratorFunctor): - def __init__( - self, - checkpoint: str, - device: str = "CPU", - tokenizer_checkpoint: Optional[str] = None, - assistant_checkpoint: Optional[str] = None, - summarize_stop_tokens: Optional[Container[str]] = SUMMARIZE_STOP_TOKENS, - ) -> None: - self.device = device - self.model = get_model(checkpoint, device) - - self.tokenizer: AutoTokenizer = AutoTokenizer.from_pretrained( - tokenizer_checkpoint if tokenizer_checkpoint is not None else checkpoint, - trust_remote_code=True, - ) - self.tokenizer.truncation_side = "left" - self.tokenizer.truncation = True - - self.generation_config = GenerationConfig.from_model_config(self.model.config) - self.generation_config.pad_token_id = self.tokenizer.eos_token_id - - self.assistant_model_config = {} - if assistant_checkpoint is not None: - self.assistant_model = get_model(assistant_checkpoint, device) - self.assistant_model_config["assistant_model"] = self.assistant_model - - self.summarize_stopping_criteria = None - if summarize_stop_tokens: - stop_tokens = [] - for token_id in self.tokenizer.vocab.values(): - if any(stop_word in self.tokenizer.decode(token_id) for stop_word in summarize_stop_tokens): - stop_tokens.append(token_id) - self.summarize_stopping_criteria = StoppingCriteriaList([StopOnTokens(stop_tokens)]) - - def __call__(self, input_text: str, parameters: Dict[str, Any]) -> str: - input_ids = self.tokenizer.encode(input_text, return_tensors="pt") - - stopping_criteria = None - if (timeout := parameters.pop("timeout", None)) is not None: - stop_on_time = StopOnTime(timeout) - stopping_criteria = StoppingCriteriaList([stop_on_time]) - - prompt_len = input_ids.shape[-1] - config = GenerationConfig.from_dict({**self.generation_config.to_dict(), **parameters}) - output_ids = self.model.generate( - input_ids, - generation_config=config, - stopping_criteria=stopping_criteria, - **self.assistant_model_config, - )[0][prompt_len:] - logger.info(f"Number of input tokens: {prompt_len}; generated {len(output_ids)} tokens") - return self.tokenizer.decode(output_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False) - - async def generate_stream( - self, - input_text: str, - parameters: Dict[str, Any], - request: Optional[Request] = None, - ) -> Generator[str, None, None]: - input_ids = self.tokenizer.encode(input_text, return_tensors="pt") - streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True) - parameters["streamer"] = streamer - config = GenerationConfig.from_dict({**self.generation_config.to_dict(), **parameters}) - - stop_on_tokens = StopOnTokens([]) - - generation_kwargs = dict( - input_ids=input_ids, - streamer=streamer, - stopping_criteria=StoppingCriteriaList([stop_on_tokens]), - **config.to_dict(), - ) - - # listen disconnect event so generation can be stopped - def listen_for_disconnect(): - async def listen(): - message = await request.receive() - if message.get("type") == "http.disconnect": - stop_on_tokens.cancelled = True - - asyncio.create_task(listen()) - - listen_thread = Thread(target=listen_for_disconnect) - # thread.run doesn't actually start a new thread - # it runs the thread function in current thread context - # thread.start() doesn't work here - listen_thread.run() - - thread = Thread(target=self.model.generate, kwargs=generation_kwargs) - thread.start() - - for token in streamer: - await asyncio.sleep(0.01) - yield token - - thread.join() - - def generate_between( - self, - input_parts: List[str], - parameters: Dict[str, Any], - stopping_criteria: Optional[StoppingCriteriaList] = None, - ) -> str: - config = GenerationConfig.from_dict({**self.generation_config.to_dict(), **parameters}) - - prompt = torch.tensor([[]], dtype=torch.int64) - buffer = StringIO() - for text_input in input_parts[:-1]: - buffer.write(text_input) - - tokenized_input = self.tokenizer.encode(text_input, return_tensors="pt") - prompt = torch.concat((prompt, tokenized_input), dim=1) - prev_len = prompt.shape[-1] - - prompt = self.model.generate( - prompt, - generation_config=config, - stopping_criteria=stopping_criteria, - **self.assistant_model_config, - )[ - :, :-1 - ] # skip the last token - stop token - - decoded = self.tokenizer.decode(prompt[0, prev_len:], skip_special_tokens=True) - buffer.write(decoded.lstrip(" ")) # hack to delete leadding spaces if there are any - buffer.write(input_parts[-1]) - return buffer.getvalue() - - async def generate_between_stream( - self, - input_parts: List[str], - parameters: Dict[str, Any], - stopping_criteria: Optional[StoppingCriteriaList] = None, - ) -> Generator[str, None, None]: - config = GenerationConfig.from_dict({**self.generation_config.to_dict(), **parameters}) - - prompt = self.tokenizer.encode(input_parts[0], return_tensors="pt") - for text_input in input_parts[1:-1]: - yield text_input - - tokenized_input = self.tokenizer.encode(text_input, return_tensors="pt") - prompt = torch.concat((prompt, tokenized_input), dim=1) - prev_len = prompt.shape[-1] - - prompt = self.model.generate( - prompt, - generation_config=config, - stopping_criteria=stopping_criteria, - **self.assistant_model_config, - )[ - :, :-1 - ] # skip the last token - stop token - - decoded = self.tokenizer.decode(prompt[0, prev_len:], skip_special_tokens=True) - yield decoded.lstrip(" ") # hack to delete leadding spaces if there are any - - yield input_parts[-1] - - @staticmethod - def summarization_input(function: str, signature: str, style: str) -> str: - return SUMMARIZE_INSTRUCTION.format( - function=function, - style=style, - signature=signature, - ) - - def summarize( - self, - input_text: str, - template: str, - signature: str, - style: str, - parameters: Dict[str, Any], - ) -> str: - prompt = self.summarization_input(input_text, signature, style) - splited_template = re.split(r"\$\{.*\}", template) - splited_template[0] = prompt + splited_template[0] - - return self.generate_between( - splited_template, - parameters, - stopping_criteria=self.summarize_stopping_criteria, - )[len(prompt) :] - - async def summarize_stream( - self, - input_text: str, - template: str, - signature: str, - style: str, - parameters: Dict[str, Any], - ): - prompt = self.summarization_input(input_text, signature, style) - splited_template = re.split(r"\$\{.*\}", template) - splited_template = [prompt] + splited_template - - async for token in self.generate_between_stream( - splited_template, - parameters, - stopping_criteria=self.summarize_stopping_criteria, - ): - yield token - - -def get_generator_dependency( - checkpoint: str, - device: str = "CPU", - tokenizer_checkpoint: Optional[str] = None, - assistant: Optional[str] = None, -) -> Callable[[], GeneratorFunctor]: - generator = OVGenerator(checkpoint, device, tokenizer_checkpoint, assistant) - - @lru_cache(1) - def inner() -> GeneratorFunctor: - return generator - - return inner - - -class StopOnTokens(StoppingCriteria): - def __init__(self, token_ids: List[int]) -> None: - self.cancelled = False - self.token_ids = torch.tensor(token_ids, requires_grad=False) - - def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool: - if self.cancelled: - return True - return torch.any(torch.eq(input_ids[0, -1], self.token_ids)).item() - - -class StopOnTime(StoppingCriteria): - def __init__(self, timeout: float, budget_reduction: float = 0.99) -> None: - self.time = time() - self.stop_until = self.time + timeout * budget_reduction - self.time_for_prev_token = 0.0 - self.grow_factor = 0.0 - - def __call__(self, *args, **kwargs) -> bool: - current_time = time() - if current_time > self.stop_until: - return True - - elapsed = current_time - self.time - if self.time_for_prev_token > 0: - self.grow_factor = elapsed / self.time_for_prev_token - - self.time_for_prev_token = elapsed - self.time = current_time - - return self.stop_until < current_time + self.time_for_prev_token * self.grow_factor diff --git a/modules/openvino_code/server/src/utils.py b/modules/openvino_code/server/src/utils.py deleted file mode 100644 index c119b4a91..000000000 --- a/modules/openvino_code/server/src/utils.py +++ /dev/null @@ -1,60 +0,0 @@ -import argparse -import logging -import sys - - -def get_parser() -> argparse.ArgumentParser: - parser = argparse.ArgumentParser() - parser.add_argument("--host", type=str, default="localhost") - parser.add_argument("--port", type=int, default="8000") - - parser.add_argument("--model", type=str, required=True) - parser.add_argument("--tokenizer_checkpoint", type=str, required=False, default=None) - parser.add_argument("--device", type=str, required=False, default="CPU") - parser.add_argument("--assistant", type=str, required=False, default=None) - parser.add_argument("--summarization-endpoint", action="store_true") - - return parser - - -def setup_logger(): - logging.setLoggerClass(ServerLogger) - _set_uvicorn_log_format(ServerLogger.default_formatter._fmt) - - -def get_logger( - name: str, - level: int = logging.DEBUG, -) -> logging.Logger: - logger = logging.getLogger(name) - logger.setLevel(level) - return logger - - -class ServerLogger(logging.Logger): - _server_log_prefix = "[OpenVINO Code Server Log]" - - default_formatter = logging.Formatter(f"{_server_log_prefix} %(asctime)s %(levelname)s %(message)s") - - def __init__(self, name): - super(ServerLogger, self).__init__(name) - - self.propagate = False - - stdout_handler = logging.StreamHandler(sys.stdout) - stdout_handler.addFilter(lambda record: record.levelno <= logging.WARNING) - stdout_handler.setFormatter(self.default_formatter) - - stderr_handler = logging.StreamHandler(sys.stderr) - stderr_handler.setLevel(logging.ERROR) - stderr_handler.setFormatter(self.default_formatter) - - self.addHandler(stdout_handler) - self.addHandler(stderr_handler) - - -def _set_uvicorn_log_format(format: str): - from uvicorn.config import LOGGING_CONFIG - - LOGGING_CONFIG["formatters"]["access"]["fmt"] = format - LOGGING_CONFIG["formatters"]["default"]["fmt"] = format diff --git a/modules/openvino_code/shared/device.ts b/modules/openvino_code/shared/device.ts deleted file mode 100644 index 508fa5330..000000000 --- a/modules/openvino_code/shared/device.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Features } from './features'; - -enum DeviceId { - CPU = 'CPU', - GPU = 'GPU', - NPU = 'NPU', - } - -export enum DeviceName { - CPU = 'CPU', - GPU = 'GPU', - NPU = 'NPU', - } - -export const DEVICE_NAME_TO_ID_MAP: Record = { - [DeviceName.CPU]: DeviceId.CPU, - [DeviceName.GPU]: DeviceId.GPU, - [DeviceName.NPU]: DeviceId.NPU, -}; - -export const DEVICE_SUPPORTED_FEATURES: Record = { - [DeviceName.CPU]: [Features.CODE_COMPLETION, Features.SUMMARIZATION, Features.FIM], - [DeviceName.GPU]: [Features.CODE_COMPLETION, Features.SUMMARIZATION, Features.FIM], - [DeviceName.NPU]: [Features.CODE_COMPLETION, Features.SUMMARIZATION, Features.FIM], -}; diff --git a/modules/openvino_code/shared/extension-state.ts b/modules/openvino_code/shared/extension-state.ts deleted file mode 100644 index 8e6d64594..000000000 --- a/modules/openvino_code/shared/extension-state.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ExtensionConfiguration } from '../src/configuration'; -import { Features } from './features'; -import { ServerState } from './server-state'; - -export enum ConnectionStatus { - NOT_AVAILABLE = 'NOT_AVAILABLE', - AVAILABLE = 'AVAILABLE', - PENDING = 'PENDING', -} - -interface IStateFeatures { - get supportedList(): Features[]; - get isSummarizationSupported(): boolean; -} - -export interface IExtensionState { - isLoading: boolean; - connectionStatus: ConnectionStatus; - server: ServerState; - get isServerAvailable(): boolean; - get config(): ExtensionConfiguration; - features: IStateFeatures; - platform: NodeJS.Platform; -} diff --git a/modules/openvino_code/shared/features.ts b/modules/openvino_code/shared/features.ts deleted file mode 100644 index a66c6ba3b..000000000 --- a/modules/openvino_code/shared/features.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum Features { - CODE_COMPLETION = 'Code Completion', - SUMMARIZATION = 'Summarization', - FIM = 'Fill-in-the-middle', - QA_FORMAT = 'QA Format', - CHAT_FORMAT = 'Chat Format', -} diff --git a/modules/openvino_code/shared/model.ts b/modules/openvino_code/shared/model.ts deleted file mode 100644 index 19f163b1e..000000000 --- a/modules/openvino_code/shared/model.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Features } from './features'; - -enum ModelId { - CODE_T5_220M = 'Salesforce/codet5p-220m-py', - DECICODER_1B_OPENVINO_INT8 = 'chgk13/decicoder-1b-openvino-int8', - STABLECODE_COMPLETION_ALPHA_3B_4K_OPENVINO_INT8 = 'chgk13/stablecode-completion-alpha-3b-4k-openvino-int8', - DEEPSEEK_CODER_1_3B = 'Intel/deepseek-coder-1.3b_base_ov_int8', - PHI_2_2_7B = 'Intel/phi-2-ov-quantized', -} - -export enum ModelName { - CODE_T5_220M = 'code-t5', - DECICODER_1B_OPENVINO_INT8 = 'decicoder-1b-openvino', - STABLECODE_COMPLETION_ALPHA_3B_4K_OPENVINO_INT8 = 'stablecode-completion', - DEEPSEEK_CODER_1_3B = 'deepseek-coder', - PHI_2_2_7B = 'phi-2', -} - -export const MODEL_NAME_TO_ID_MAP: Record = { - [ModelName.CODE_T5_220M]: ModelId.CODE_T5_220M, - [ModelName.DECICODER_1B_OPENVINO_INT8]: ModelId.DECICODER_1B_OPENVINO_INT8, - [ModelName.STABLECODE_COMPLETION_ALPHA_3B_4K_OPENVINO_INT8]: ModelId.STABLECODE_COMPLETION_ALPHA_3B_4K_OPENVINO_INT8, - [ModelName.DEEPSEEK_CODER_1_3B]: ModelId.DEEPSEEK_CODER_1_3B, - [ModelName.PHI_2_2_7B]: ModelId.PHI_2_2_7B, -}; - -export const MODEL_SUPPORTED_FEATURES: Record = { - [ModelName.CODE_T5_220M]: [Features.CODE_COMPLETION], - [ModelName.DECICODER_1B_OPENVINO_INT8]: [Features.CODE_COMPLETION, Features.SUMMARIZATION], - [ModelName.STABLECODE_COMPLETION_ALPHA_3B_4K_OPENVINO_INT8]: [Features.CODE_COMPLETION, Features.SUMMARIZATION], - [ModelName.DEEPSEEK_CODER_1_3B]: [Features.CODE_COMPLETION, Features.SUMMARIZATION, Features.FIM], - [ModelName.PHI_2_2_7B]: [Features.CODE_COMPLETION, Features.SUMMARIZATION, Features.QA_FORMAT, Features.CHAT_FORMAT], -}; diff --git a/modules/openvino_code/shared/server-state.ts b/modules/openvino_code/shared/server-state.ts deleted file mode 100644 index 9b985442a..000000000 --- a/modules/openvino_code/shared/server-state.ts +++ /dev/null @@ -1,24 +0,0 @@ -export enum ServerStatus { - STOPPED = 'STOPPED', - STARTING = 'STARTING', - STARTED = 'STARTED', -} - -export enum ServerStartingStage { - DETECT_SYSTEM_PYTHON, - CREATE_VENV, - CHECK_VENV_ACTIVATION, - UPGRADE_PIP, - INSTALL_REQUIREMENTS, - START_SERVER, -} - -export interface ServerState { - status: ServerStatus; - stage: ServerStartingStage | null; -} - -export const INITIAL_SERVER_STATE: ServerState = { - status: ServerStatus.STOPPED, - stage: null, -}; diff --git a/modules/openvino_code/shared/side-panel-message.ts b/modules/openvino_code/shared/side-panel-message.ts deleted file mode 100644 index 2ebdf20b6..000000000 --- a/modules/openvino_code/shared/side-panel-message.ts +++ /dev/null @@ -1,19 +0,0 @@ -const sidePanelMessagePrefix = 'side-panel.message'; - -export enum SidePanelMessageTypes { - GET_EXTENSION_STATE = `${sidePanelMessagePrefix}.getExtensionState`, - START_SERVER_CLICK = `${sidePanelMessagePrefix}.startServerClick`, - STOP_SERVER_CLICK = `${sidePanelMessagePrefix}.stopServerClick`, - SHOW_SERVER_LOG_CLICK = `${sidePanelMessagePrefix}.showServerLogClick`, - SHOW_EXTENSION_LOG_CLICK = `${sidePanelMessagePrefix}.showExtensionLogClick`, - CHECK_CONNECTION_CLICK = `${sidePanelMessagePrefix}.checkConnectionClick`, - GENERATE_COMPLETION_CLICK = `${sidePanelMessagePrefix}.generateCompletionClick`, - SETTINGS_CLICK = `${sidePanelMessagePrefix}.settingsClick`, - MODEL_CHANGE = `${sidePanelMessagePrefix}.modelChange`, - DEVICE_CHANGE = `${sidePanelMessagePrefix}.deviceChange`, -} - -export interface ISidePanelMessage

{ - type: SidePanelMessageTypes; - payload?: P; -} diff --git a/modules/openvino_code/side-panel-ui/.eslintrc.cjs b/modules/openvino_code/side-panel-ui/.eslintrc.cjs deleted file mode 100644 index 786d5f480..000000000 --- a/modules/openvino_code/side-panel-ui/.eslintrc.cjs +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, es2020: true }, - extends: ['plugin:react/recommended', 'plugin:react-hooks/recommended', '../.eslintrc.js'], - ignorePatterns: ['dist', '.eslintrc.cjs'], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 'latest', - ecmaFeatures: { - jsx: true, - }, - sourceType: 'module', - project: ['./tsconfig.json', './tsconfig.node.json'], - tsconfigRootDir: __dirname, - }, - plugins: ['react', 'react-hooks', 'react-refresh'], - settings: { - react: { - version: 'detect', - }, - }, - rules: { - 'react/react-in-jsx-scope': 'off', - 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }], - 'import/no-extraneous-dependencies': ['off'], - }, -}; diff --git a/modules/openvino_code/side-panel-ui/.gitignore b/modules/openvino_code/side-panel-ui/.gitignore deleted file mode 100644 index a547bf36d..000000000 --- a/modules/openvino_code/side-panel-ui/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/modules/openvino_code/side-panel-ui/index.html b/modules/openvino_code/side-panel-ui/index.html deleted file mode 100644 index cd85136b6..000000000 --- a/modules/openvino_code/side-panel-ui/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - OpenVINO Code - Side Panel - - -

- - - diff --git a/modules/openvino_code/side-panel-ui/package.json b/modules/openvino_code/side-panel-ui/package.json deleted file mode 100644 index d31cbe4a7..000000000 --- a/modules/openvino_code/side-panel-ui/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "side-panel-ui", - "private": true, - "version": "0.0.1", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" - }, - "dependencies": { - "@vscode/codicons": "0.0.33", - "react": "18.2.0", - "react-dom": "18.2.0" - }, - "devDependencies": { - "@types/react": "18.2.15", - "@types/react-dom": "18.2.7", - "@types/vscode-webview": "1.57.1", - "@vitejs/plugin-react": "4.0.3", - "eslint-plugin-react": "7.33.2", - "eslint-plugin-react-hooks": "4.6.0", - "eslint-plugin-react-refresh": "0.4.3", - "rollup-plugin-copy": "3.4.0", - "vite": "^4.5.3" - } -} diff --git a/modules/openvino_code/side-panel-ui/src/App.tsx b/modules/openvino_code/side-panel-ui/src/App.tsx deleted file mode 100644 index 1120ae0a7..000000000 --- a/modules/openvino_code/side-panel-ui/src/App.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { ServerStatus } from '@shared/server-state'; -import { CompletionSection } from './components/sections/CompletionSection/CompletionSection'; -import { OverviewSection } from './components/sections/OverviewSection/OverviewSection'; -import { ServerSection } from './components/sections/ServerSection/ServerSection'; -import { SummarizationSection } from './components/sections/SummarizationSection/SummarizationSection'; -import { useExtensionState } from './use-extension-state'; -import { vscode } from './utils/vscode'; -import { SidePanelMessageTypes } from '@shared/side-panel-message'; -import { ActionsSection } from './components/sections/ActionsSection/ActionsSection'; - -const initApp = (): void => { - void vscode.postMessage({ type: SidePanelMessageTypes.GET_EXTENSION_STATE }); -}; - -initApp(); - -function App(): JSX.Element { - const [state] = useExtensionState(); - // TODO Check if state is defined to prevent nested optional chaining - - const isServerStopped = state?.server.status === ServerStatus.STOPPED; - const isServerStarted = state?.server.status === ServerStatus.STARTED; - const isSummarizationSupported = state?.features.isSummarizationSupported; - - return ( - <> -

OpenVINO AI Code Completion

- {isServerStopped && } - - {isServerStarted && ( - <> - - {isSummarizationSupported && ( - - )} - - )} - - - ); -} - -export default App; diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ActionsSection/ActionsSection.css b/modules/openvino_code/side-panel-ui/src/components/sections/ActionsSection/ActionsSection.css deleted file mode 100644 index b6a171679..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ActionsSection/ActionsSection.css +++ /dev/null @@ -1,5 +0,0 @@ -.actions-section { - display: flex; - gap: 1rem; - margin-top: 1rem; -} \ No newline at end of file diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ActionsSection/ActionsSection.tsx b/modules/openvino_code/side-panel-ui/src/components/sections/ActionsSection/ActionsSection.tsx deleted file mode 100644 index 9396d232a..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ActionsSection/ActionsSection.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { SidePanelMessageTypes } from '@shared/side-panel-message'; -import { vscode } from '../../../utils/vscode'; -import './ActionsSection.css'; - -const hangleShowLogClick = () => { - vscode.postMessage({ - type: SidePanelMessageTypes.SHOW_EXTENSION_LOG_CLICK, - }); -}; - -const hangleSettingsClick = () => { - vscode.postMessage({ - type: SidePanelMessageTypes.SETTINGS_CLICK, - }); -}; - -export function ActionsSection(): JSX.Element { - return ( -
- - Show Extension Log - - - Extension Settings - -
- ); -} diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/CompletionSection/CompletionSection.css b/modules/openvino_code/side-panel-ui/src/components/sections/CompletionSection/CompletionSection.css deleted file mode 100644 index c98a4661d..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/CompletionSection/CompletionSection.css +++ /dev/null @@ -1,8 +0,0 @@ -.completion-section .generate-button { - margin-top: 1rem; -} - -.completion-section .generate-button .codicon { - margin-right: 0.5rem; - vertical-align: middle; -} \ No newline at end of file diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/CompletionSection/CompletionSection.tsx b/modules/openvino_code/side-panel-ui/src/components/sections/CompletionSection/CompletionSection.tsx deleted file mode 100644 index 86fa5ec19..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/CompletionSection/CompletionSection.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { SidePanelMessageTypes } from '@shared/side-panel-message'; -import { vscode } from '../../../utils/vscode'; -import './CompletionSection.css'; -import { VscodeIcon } from '../../shared/VscodeIcon/VscodeIcon'; - -interface CompletionSectionProps { - isLoading: boolean; - platform: NodeJS.Platform; -} - -export function CompletionSection({ isLoading, platform }: CompletionSectionProps): JSX.Element { - const handleGenerateClick = () => { - vscode.postMessage({ - type: SidePanelMessageTypes.GENERATE_COMPLETION_CLICK, - }); - }; - - const platformKeyBinding = platform === 'darwin' ? 'Cmd+Alt+Space' : 'Ctrl+Alt+Space'; - - return ( -
-

Code Completion

- - {/* TODO Consider getting keybinding from package.json */} - To generate inline code completion use combination {platformKeyBinding} or press the button below. - -
- -
-
- ); -} diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/OverviewSection/OverviewSection.css b/modules/openvino_code/side-panel-ui/src/components/sections/OverviewSection/OverviewSection.css deleted file mode 100644 index 544e82c48..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/OverviewSection/OverviewSection.css +++ /dev/null @@ -1,3 +0,0 @@ -.checkbox { - margin-top: 0.4rem -} diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/OverviewSection/OverviewSection.tsx b/modules/openvino_code/side-panel-ui/src/components/sections/OverviewSection/OverviewSection.tsx deleted file mode 100644 index a785538eb..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/OverviewSection/OverviewSection.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import './OverviewSection.css'; - -export function OverviewSection(): JSX.Element { - return ( -
- - OpenVINO Code provides the following features: -
    -
  • Inline Code Completion
  • -
  • Summarization via docstring
  • -
  • Fill in the Middle Mode
  • -
- To use OpenVINO Code please start the server. -
-
- ); -} diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/DeviceSelect/DeviceSelect.tsx b/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/DeviceSelect/DeviceSelect.tsx deleted file mode 100644 index 6532fe926..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/DeviceSelect/DeviceSelect.tsx +++ /dev/null @@ -1,41 +0,0 @@ -//import { ModelName } from '@shared/model'; -import { DeviceName } from '@shared/device'; -import { Select, SelectOptionProps } from '../../../shared/Select/Select'; -import { ServerStatus } from '@shared/server-state'; -import { Features } from '@shared/features'; - -const options: SelectOptionProps[] = [ - { value: DeviceName.CPU }, - { value: DeviceName.GPU }, - { value: DeviceName.NPU }, -]; - -interface DeviceSelectProps { - disabled: boolean; - selectedDeviceName: DeviceName; - onChange: (deviceName: DeviceName) => void; - supportedFeatures: Features[]; - serverStatus: ServerStatus; -} - -export const DeviceSelect = ({ - disabled, - selectedDeviceName, - onChange, - supportedFeatures, - serverStatus, -}: DeviceSelectProps): JSX.Element => { - const isServerStopped = serverStatus === ServerStatus.STOPPED; - return ( - <> - - {isServerStopped && Supported Features: {supportedFeatures.join(', ')}} - - ); -}; diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ModelSelect/ModelSelect.tsx b/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ModelSelect/ModelSelect.tsx deleted file mode 100644 index 0d7a073fe..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ModelSelect/ModelSelect.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { ModelName } from '@shared/model'; -import { Select, SelectOptionProps } from '../../../shared/Select/Select'; -import { ServerStatus } from '@shared/server-state'; -import { Features } from '@shared/features'; - -const options: SelectOptionProps[] = [ - { value: ModelName.CODE_T5_220M }, - { value: ModelName.DECICODER_1B_OPENVINO_INT8 }, - { value: ModelName.STABLECODE_COMPLETION_ALPHA_3B_4K_OPENVINO_INT8 }, - { value: ModelName.DEEPSEEK_CODER_1_3B }, - { value: ModelName.PHI_2_2_7B }, -]; - -interface ModelSelectProps { - disabled: boolean; - selectedModelName: ModelName; - onChange: (modelName: ModelName) => void; - supportedFeatures: Features[]; - serverStatus: ServerStatus; -} - -export const ModelSelect = ({ - disabled, - selectedModelName, - onChange, - supportedFeatures, - serverStatus, -}: ModelSelectProps): JSX.Element => { - const isServerStopped = serverStatus === ServerStatus.STOPPED; - return ( - <> - - {isServerStopped && Supported Features: {supportedFeatures.join(', ')}} - - ); -}; diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerSection.css b/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerSection.css deleted file mode 100644 index 0459349c8..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerSection.css +++ /dev/null @@ -1,10 +0,0 @@ -.server-section .button-group { - display: flex; - flex-direction: row; - gap: 1rem; - margin: 1rem 0; -} - -.server-section .select-container { - margin: 0.8rem 0; -} diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerSection.tsx b/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerSection.tsx deleted file mode 100644 index 5895fcf52..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerSection.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { SidePanelMessageTypes } from '@shared/side-panel-message'; -import { vscode } from '../../../utils/vscode'; -import { IExtensionState } from '@shared/extension-state'; -import { ServerStatus as ServerStatusEnum } from '@shared/server-state'; -import { StartingStages } from './StartingStages/StartingStages'; -import { ServerStatus } from './ServerStatus/ServerStatus'; -import './ServerSection.css'; -import { ModelSelect } from './ModelSelect/ModelSelect'; -import { ModelName } from '@shared/model'; -import { DeviceSelect } from './DeviceSelect/DeviceSelect'; -import { DeviceName } from '@shared/device'; - -interface ServerSectionProps { - state: IExtensionState | null; -} - -export function ServerSection({ state }: ServerSectionProps): JSX.Element { - const handleStartServerClick = () => { - vscode.postMessage({ - type: SidePanelMessageTypes.START_SERVER_CLICK, - }); - }; - - const handleStopServerClick = () => { - vscode.postMessage({ - type: SidePanelMessageTypes.STOP_SERVER_CLICK, - }); - }; - - const handleShowServerLogClick = () => { - vscode.postMessage({ - type: SidePanelMessageTypes.SHOW_SERVER_LOG_CLICK, - }); - }; - - const handleCheckConnectionClick = () => { - vscode.postMessage({ - type: SidePanelMessageTypes.CHECK_CONNECTION_CLICK, - }); - }; - - const handleModelChange = (modelName: ModelName) => { - vscode.postMessage({ - type: SidePanelMessageTypes.MODEL_CHANGE, - payload: { - modelName, - }, - }); - }; - - const handleDeviceChange = (deviceName: DeviceName) => { - vscode.postMessage({ - type: SidePanelMessageTypes.DEVICE_CHANGE, - payload: { - deviceName, - }, - }); - }; - - if (!state) { - return <>Extension state is not available; - } - - const isServerStopped = state.server.status === ServerStatusEnum.STOPPED; - const isServerStarting = state.server.status === ServerStatusEnum.STARTING; - - return ( -
-

OpenVINO Code Server

- - - - {isServerStarting && } -
- {isServerStopped && } - {!isServerStopped && ( - - )} -
- -
- ); -} diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerStatus/ServerStatus.css b/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerStatus/ServerStatus.css deleted file mode 100644 index 0b9ba6f31..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerStatus/ServerStatus.css +++ /dev/null @@ -1,10 +0,0 @@ -.server-status { - display: flex; - align-items: center; - gap: 1rem;; -} - -.server-status .server-status-item { - display: flex; - align-items: center; -} \ No newline at end of file diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerStatus/ServerStatus.tsx b/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerStatus/ServerStatus.tsx deleted file mode 100644 index 252a75261..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/ServerStatus/ServerStatus.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { ServerStatus as ServerStausEnum } from '@shared/server-state'; -import { VscodeIcon } from '../../../shared/VscodeIcon/VscodeIcon'; -import { ConnectionStatus } from '@shared/extension-state'; -import './ServerStatus.css'; - -const serverStatusLabelsMap = { - [ServerStausEnum.STOPPED]: 'Stopped', - [ServerStausEnum.STARTING]: 'Starting', - [ServerStausEnum.STARTED]: 'Running', -}; - -const serverStatusIconsMap = { - [ServerStausEnum.STOPPED]: 'circle-slash', - [ServerStausEnum.STARTING]: 'loading', - [ServerStausEnum.STARTED]: 'vm-running', -}; - -const connectionStatusLabelsMap = { - [ConnectionStatus.NOT_AVAILABLE]: 'Not Connected', - [ConnectionStatus.PENDING]: 'Pending', - [ConnectionStatus.AVAILABLE]: 'Connected', -}; - -const connectionStatusIconsMap = { - [ConnectionStatus.NOT_AVAILABLE]: 'debug-disconnect', - [ConnectionStatus.PENDING]: 'loading', - [ConnectionStatus.AVAILABLE]: 'pass', -}; - -interface ServerStatusProps { - status: ServerStausEnum; - connectionStatus: ConnectionStatus; -} - -export const ServerStatus = ({ status, connectionStatus }: ServerStatusProps): JSX.Element => ( -
- - -   - {serverStatusLabelsMap[status]} - - - -   - {connectionStatusLabelsMap[connectionStatus]} - -
-); diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/StartingStages/StartingStages.css b/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/StartingStages/StartingStages.css deleted file mode 100644 index 136dcc873..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/StartingStages/StartingStages.css +++ /dev/null @@ -1,12 +0,0 @@ -.starting-stages { - padding: 0.5rem; - background-color: var(--vscode-editor-background); - display: flex; - flex-direction: column; -} - -.starting-stage-item { - display: flex; - align-items: center; - padding: 0.3rem 0; -} \ No newline at end of file diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/StartingStages/StartingStages.tsx b/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/StartingStages/StartingStages.tsx deleted file mode 100644 index 0ccae5f68..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/ServerSection/StartingStages/StartingStages.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { ServerStartingStage } from '@shared/server-state'; -import { ReactElement } from 'react'; -import { VscodeIcon } from '../../../shared/VscodeIcon/VscodeIcon'; -import './StartingStages.css'; - -const startingStages = [ - ServerStartingStage.DETECT_SYSTEM_PYTHON, - ServerStartingStage.CREATE_VENV, - ServerStartingStage.CHECK_VENV_ACTIVATION, - ServerStartingStage.UPGRADE_PIP, - ServerStartingStage.INSTALL_REQUIREMENTS, - ServerStartingStage.START_SERVER, -]; - -const startingStagesLabelsMap = { - [ServerStartingStage.DETECT_SYSTEM_PYTHON]: 'Detecting system Python', - [ServerStartingStage.CREATE_VENV]: 'Creating virtual environment', - [ServerStartingStage.CHECK_VENV_ACTIVATION]: 'Activating virtual environment', - [ServerStartingStage.UPGRADE_PIP]: 'Upgrading pip', - [ServerStartingStage.INSTALL_REQUIREMENTS]: 'Installing dependencies', - [ServerStartingStage.START_SERVER]: 'Starting server', -}; - -interface StartingStageProps { - stage: ServerStartingStage; - icon: ReactElement; -} - -const StartingStage = ({ stage, icon }: StartingStageProps): JSX.Element => { - return ( - - {icon} {startingStagesLabelsMap[stage]} - - ); -}; - -const getStageIcon = ( - itemStage: ServerStartingStage, - currentStage: StartingStagesProps['currentStage'] -): ReactElement => { - if (currentStage === itemStage) { - return ; - } else if (currentStage && currentStage > itemStage) { - return ; - } else { - return ; - } -}; - -interface StartingStagesProps { - currentStage: ServerStartingStage | null; -} - -export const StartingStages = ({ currentStage }: StartingStagesProps): JSX.Element => { - return ( -
-      {startingStages.map((itemStage) => (
-        
-      ))}
-    
- ); -}; diff --git a/modules/openvino_code/side-panel-ui/src/components/sections/SummarizationSection/SummarizationSection.tsx b/modules/openvino_code/side-panel-ui/src/components/sections/SummarizationSection/SummarizationSection.tsx deleted file mode 100644 index 4f85bcb80..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/sections/SummarizationSection/SummarizationSection.tsx +++ /dev/null @@ -1,14 +0,0 @@ -interface SummarizationSectionProps { - quoteStyle: string; -} - -export function SummarizationSection({ quoteStyle }: SummarizationSectionProps): JSX.Element { - return ( -
-

Summarization

- - To use summarization for docstrings, start typing docstring quotes ({quoteStyle}). - -
- ); -} diff --git a/modules/openvino_code/side-panel-ui/src/components/shared/Checkbox/Checkbox.css b/modules/openvino_code/side-panel-ui/src/components/shared/Checkbox/Checkbox.css deleted file mode 100644 index 962b94c56..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/shared/Checkbox/Checkbox.css +++ /dev/null @@ -1,28 +0,0 @@ -.checkbox { - display: flex; - padding: 0.2rem 0; -} - -.vscode-checkbox { - height: 18px; - width: 18px; - border: 1px solid transparent; - border-radius: 3px; - margin-right: 9px; - margin-left: 0; - padding: 0; - - background-color: var(--vscode-settings-checkboxBackground); - color: var(--vscode-settings-checkboxForeground); - border-color: var(--vscode-settings-checkboxBorder); - - cursor: pointer; - overflow: hidden; - box-sizing: border-box; -} - -.checkbox-label { - margin-top: -1px; - color: var(--vscode-foreground); - opacity: .9; -} diff --git a/modules/openvino_code/side-panel-ui/src/components/shared/Checkbox/Checkbox.tsx b/modules/openvino_code/side-panel-ui/src/components/shared/Checkbox/Checkbox.tsx deleted file mode 100644 index 8daad1be2..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/shared/Checkbox/Checkbox.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { ReactNode } from 'react'; -import './Checkbox.css'; - -interface CheckboxProps { - checked?: boolean; - children: ReactNode; - onChange: (isChecked: boolean) => void; -} - -export const Checkbox = ({ checked, children, onChange }: CheckboxProps): JSX.Element => { - const classNames = ['vscode-checkbox', 'codicon']; - if (checked) { - classNames.push('codicon-check'); - } - return ( -
-
onChange(!checked)}>
- {children} -
- ); -}; diff --git a/modules/openvino_code/side-panel-ui/src/components/shared/Select/Select.css b/modules/openvino_code/side-panel-ui/src/components/shared/Select/Select.css deleted file mode 100644 index ccb5383b2..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/shared/Select/Select.css +++ /dev/null @@ -1,30 +0,0 @@ -.select-container { - display: flex; - align-items: center; - gap: 0.5rem; -} - -.select-container .select { - background-color: var(--vscode-settings-dropdownBackground); - color: var(--vscode-settings-dropdownForeground); - border-color: var(--vscode-settings-dropdownBorder); - - flex-grow: 1; - font: inherit; - height: 26px; - padding: 2px; - - cursor: pointer; - border-radius: 2px; - - box-sizing: border-box; -} - -.select-container[aria-disabled="true"] { - cursor: not-allowed; - opacity: 0.6; -} - -.select-container[aria-disabled="true"] * { - cursor: not-allowed; -} diff --git a/modules/openvino_code/side-panel-ui/src/components/shared/Select/Select.tsx b/modules/openvino_code/side-panel-ui/src/components/shared/Select/Select.tsx deleted file mode 100644 index 695e364e2..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/shared/Select/Select.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import './Select.css'; - -export interface SelectOptionProps { - value: V; - label?: L; -} - -const SelectOption = ({ value, label }: SelectOptionProps): JSX.Element => ( - -); - -interface SelectProps { - label: string; - options: SelectOptionProps[]; - selectedValue: V; - disabled?: boolean; - onChange?: (value: V) => void; -} - -export const Select = ({ - label, - options, - disabled, - onChange, - selectedValue, -}: SelectProps): JSX.Element => { - return ( -
- - -
- ); -}; diff --git a/modules/openvino_code/side-panel-ui/src/components/shared/VscodeIcon/VscodeIcon.css b/modules/openvino_code/side-panel-ui/src/components/shared/VscodeIcon/VscodeIcon.css deleted file mode 100644 index 709234053..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/shared/VscodeIcon/VscodeIcon.css +++ /dev/null @@ -1,12 +0,0 @@ -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.codicon-spin { - animation: spin 2s infinite linear; -} diff --git a/modules/openvino_code/side-panel-ui/src/components/shared/VscodeIcon/VscodeIcon.tsx b/modules/openvino_code/side-panel-ui/src/components/shared/VscodeIcon/VscodeIcon.tsx deleted file mode 100644 index 0d447d44e..000000000 --- a/modules/openvino_code/side-panel-ui/src/components/shared/VscodeIcon/VscodeIcon.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import './VscodeIcon.css'; - -interface VscodeIconProps { - iconName: string; - spin?: boolean; -} - -export const VscodeIcon = ({ iconName, spin }: VscodeIconProps): JSX.Element => { - const classNames = ['codicon', `codicon-${iconName}`]; - if (spin) { - classNames.push('codicon-spin'); - } - return
; -}; diff --git a/modules/openvino_code/side-panel-ui/src/main.tsx b/modules/openvino_code/side-panel-ui/src/main.tsx deleted file mode 100644 index 5c614b1a6..000000000 --- a/modules/openvino_code/side-panel-ui/src/main.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import App from './App'; -import './styles/vscode.css'; - -ReactDOM.createRoot(document.getElementById('root')!).render( - - - -); diff --git a/modules/openvino_code/side-panel-ui/src/styles/vscode.css b/modules/openvino_code/side-panel-ui/src/styles/vscode.css deleted file mode 100644 index 9facbd1f1..000000000 --- a/modules/openvino_code/side-panel-ui/src/styles/vscode.css +++ /dev/null @@ -1,100 +0,0 @@ -:root { - --container-paddding: 20px; - --input-padding-vertical: 6px; - --input-padding-horizontal: 4px; - --input-margin-vertical: 4px; - --input-margin-horizontal: 0; -} - -body { - padding: 0 var(--container-paddding); - color: var(--vscode-foreground); - font-size: var(--vscode-font-size); - font-weight: var(--vscode-font-weight); - font-family: var(--vscode-font-family); - background-color: var(--vscode-sideBar-background); -} - -ol, -ul { - padding-left: var(--container-paddding); -} - -body > *, -form > * { - margin-block-start: var(--input-margin-vertical); - margin-block-end: var(--input-margin-vertical); -} - -*:focus { - outline-color: var(--vscode-focusBorder) !important; -} - -a { - color: var(--vscode-textLink-foreground); -} - -a:hover, -a:active { - color: var(--vscode-textLink-activeForeground); -} - -code { - font-size: var(--vscode-editor-font-size); - font-family: var(--vscode-editor-font-family); -} - -button { - border: none; - padding: var(--input-padding-vertical) var(--input-padding-horizontal); - width: 100%; - text-align: center; - outline: 1px solid transparent; - outline-offset: 2px !important; - color: var(--vscode-button-foreground); - background: var(--vscode-button-background); -} - -button:hover { - cursor: pointer; - background: var(--vscode-button-hoverBackground); -} - -button:focus { - outline-color: var(--vscode-focusBorder); -} - -button[disabled] { - cursor: not-allowed; - opacity: 0.6; -} - -button[disabled]:hover { - background: var(--vscode-button-background); -} - -button.secondary { - color: var(--vscode-button-secondaryForeground); - background: var(--vscode-button-secondaryBackground); -} - -button.secondary:hover { - background: var(--vscode-button-secondaryHoverBackground); -} - -input:not([type='checkbox']), -textarea { - display: block; - width: 100%; - border: none; - font-family: var(--vscode-font-family); - padding: var(--input-padding-vertical) var(--input-padding-horizontal); - color: var(--vscode-input-foreground); - outline-color: var(--vscode-input-border); - background-color: var(--vscode-input-background); -} - -input::placeholder, -textarea::placeholder { - color: var(--vscode-input-placeholderForeground); -} diff --git a/modules/openvino_code/side-panel-ui/src/use-extension-state.ts b/modules/openvino_code/side-panel-ui/src/use-extension-state.ts deleted file mode 100644 index a16725d7e..000000000 --- a/modules/openvino_code/side-panel-ui/src/use-extension-state.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { IExtensionState } from '@shared/extension-state'; -import { useEffect, useState } from 'react'; - -export const useExtensionState = () => { - const [state, setState] = useState(null); - const eventType = 'message'; - useEffect(() => { - const listener = ({ data }: MessageEvent) => setState(data); - window.addEventListener(eventType, listener); - return () => { - window.removeEventListener(eventType, listener); - }; - }, [eventType]); - return [state]; -}; diff --git a/modules/openvino_code/side-panel-ui/src/utils/vscode.ts b/modules/openvino_code/side-panel-ui/src/utils/vscode.ts deleted file mode 100644 index bb7fe64a6..000000000 --- a/modules/openvino_code/side-panel-ui/src/utils/vscode.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { WebviewApi } from 'vscode-webview'; -import { ISidePanelMessage } from '@shared/side-panel-message'; - -/** - * A utility wrapper around the acquireVsCodeApi() function, which enables - * message passing and state management between the webview and extension - * contexts. - * - * This utility also enables webview code to be run in a web browser-based - * dev server by using native web browser features that mock the functionality - * enabled by acquireVsCodeApi. - */ -class VSCodeAPIWrapper { - private readonly _vsCodeApi: WebviewApi | undefined; - - constructor() { - // Check if the acquireVsCodeApi function exists in the current development - // context (i.e. VS Code development window or web browser) - if (typeof acquireVsCodeApi === 'function') { - this._vsCodeApi = acquireVsCodeApi(); - } - } - - /** - * Post a message (i.e. send arbitrary data) to the owner of the webview. - * - * @remarks When running webview code inside a web browser, postMessage will instead - * log the given message to the console. - * - * @param message Abitrary data (must be JSON serializable) to send to the extension context. - */ - public postMessage(message: ISidePanelMessage) { - if (this._vsCodeApi) { - this._vsCodeApi.postMessage(message); - } else { - console.warn('VS Code API was not found globally.'); - console.warn('Posted message:', message); - } - } - - /** - * Get the persistent state stored for this webview. - * - * @remarks When running webview source code inside a web browser, getState will retrieve state - * from local storage (https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). - * - * @return The current state or `undefined` if no state has been set. - */ - public getState(): unknown { - if (this._vsCodeApi) { - return this._vsCodeApi.getState(); - } else { - const state = localStorage.getItem('vscodeState'); - return state ? JSON.parse(state) : undefined; - } - } - - /** - * Set the persistent state stored for this webview. - * - * @remarks When running webview source code inside a web browser, setState will set the given - * state using local storage (https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). - * - * @param newState New persisted state. This must be a JSON serializable object. Can be retrieved - * using {@link getState}. - * - * @return The new state. - */ - public setState(newState: T): T { - if (this._vsCodeApi) { - return this._vsCodeApi.setState(newState); - } else { - localStorage.setItem('vscodeState', JSON.stringify(newState)); - return newState; - } - } -} - -export const vscode = new VSCodeAPIWrapper(); diff --git a/modules/openvino_code/side-panel-ui/src/vite-env.d.ts b/modules/openvino_code/side-panel-ui/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a..000000000 --- a/modules/openvino_code/side-panel-ui/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/modules/openvino_code/side-panel-ui/tsconfig.json b/modules/openvino_code/side-panel-ui/tsconfig.json deleted file mode 100644 index b1bb3d70f..000000000 --- a/modules/openvino_code/side-panel-ui/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - - /* Linting */ - "strict": true, - "noFallthroughCasesInSwitch": true, - "paths": { - "@shared/*": ["../shared/*"] - } - }, - "include": ["./src", "./vite.config.ts", "../shared", "../src/state.ts"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/modules/openvino_code/side-panel-ui/tsconfig.node.json b/modules/openvino_code/side-panel-ui/tsconfig.node.json deleted file mode 100644 index 42872c59f..000000000 --- a/modules/openvino_code/side-panel-ui/tsconfig.node.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "skipLibCheck": true, - "module": "ESNext", - "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/modules/openvino_code/side-panel-ui/vite.config.ts b/modules/openvino_code/side-panel-ui/vite.config.ts deleted file mode 100644 index 45541d6a0..000000000 --- a/modules/openvino_code/side-panel-ui/vite.config.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { defineConfig } from 'vite'; -import { fileURLToPath } from 'url'; -import react from '@vitejs/plugin-react'; -import copy from 'rollup-plugin-copy'; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react()], - resolve: { - alias: { - '@shared': fileURLToPath(new URL('../shared', import.meta.url)), - }, - }, - build: { - outDir: 'dist', - rollupOptions: { - output: { - entryFileNames: `assets/[name].js`, - chunkFileNames: `assets/[name].js`, - assetFileNames: `assets/[name].[ext]`, - }, - plugins: [ - copy({ - targets: [ - { - src: [ - '../node_modules/@vscode/codicons/dist/codicon.css', - '../node_modules/@vscode/codicons/dist/codicon.ttf', - ], - dest: 'dist/assets', - }, - ], - hook: 'generateBundle', - }), - ], - }, - }, -}); diff --git a/modules/openvino_code/src/configuration.ts b/modules/openvino_code/src/configuration.ts deleted file mode 100644 index e41e4bc5f..000000000 --- a/modules/openvino_code/src/configuration.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { ModelName } from '@shared/model'; -import { DeviceName } from '@shared/device'; -import { WorkspaceConfiguration, workspace } from 'vscode'; -import { CONFIG_KEY } from './constants'; - -/** - * Extension configuration should match `contributes.configuration` properties in package.json - */ -export type CustomConfiguration = { - model: ModelName; - device: DeviceName; - serverUrl: string; - serverRequestTimeout: number; - streamInlineCompletion: boolean; - fillInTheMiddleMode: boolean; - temperature: number; - topK: number; - topP: number; - repetitionPenalty: number; - minNewTokens: number; - maxNewTokens: number; - startToken: string; - middleToken: string; - endToken: string; - stopToken: string; -} & { - quoteStyle: string; - docstringFormat: string; -}; - -export type ExtensionConfiguration = WorkspaceConfiguration & CustomConfiguration; - -const hiddenConfigurations = { - 'openvinoCode.fillInTheMiddleMode': { - order: 4, - type: 'boolean', - default: false, - markdownDescription: - 'When checked, text before (above) and after (below) the cursor will be used for completion generation. When unckecked, only text before (above) the cursor will be used.', - }, - 'openvinoCode.startToken': { - order: 7, - type: 'string', - default: '', - markdownDescription: - 'String that is sent to server is in format: `{startToken}{text above cursor}{middleToken}{text below cursor if fillInTheMiddleMode=true}{endToken}`. Leave `startToken`, `middleToken`, or `endToken` empty if there is no special token for those placements.', - }, - 'openvinoCode.middleToken': { - order: 8, - type: 'string', - default: '', - markdownDescription: - 'String that is sent to server is in format: `{startToken}{text above cursor}{middleToken}{text below cursor if fillInTheMiddleMode=true}{endToken}`. Leave `startToken`, `middleToken`, or `endToken` empty if there is no special token for those placements.', - }, - 'openvinoCode.endToken': { - order: 9, - type: 'string', - default: '', - markdownDescription: - 'String that is sent to server is in format: `{startToken}{text above cursor}{middleToken}{text below cursor if fillInTheMiddleMode=true}{endToken}`. Leave `startToken`, `middleToken`, or `endToken` empty if there is no special token for those placements.', - }, - 'openvinoCode.stopToken': { - order: 10, - type: 'string', - default: '<|endoftext|>', - description: '(Optional) Stop token.', - }, -}; - -const configurationDefaults: Partial = { - fillInTheMiddleMode: hiddenConfigurations['openvinoCode.fillInTheMiddleMode'].default, - startToken: hiddenConfigurations['openvinoCode.startToken'].default, - middleToken: hiddenConfigurations['openvinoCode.middleToken'].default, - endToken: hiddenConfigurations['openvinoCode.endToken'].default, - stopToken: hiddenConfigurations['openvinoCode.stopToken'].default, -}; - -export const getConfig = () => ({ - ...configurationDefaults, - ...(workspace.getConfiguration(CONFIG_KEY) as ExtensionConfiguration), -}); diff --git a/modules/openvino_code/src/constants.ts b/modules/openvino_code/src/constants.ts deleted file mode 100644 index 230c1250d..000000000 --- a/modules/openvino_code/src/constants.ts +++ /dev/null @@ -1,34 +0,0 @@ -export const EXTENSION_PACKAGE = { - publisher: 'OpenVINO', - name: 'openvino-code-completion', - get fullName(): string { - return `${this.publisher}.${this.name}`; - }, -}; - -export const EXTENSION_DISPLAY_NAME = 'OpenVINO Code'; -export const EXTENSION_SERVER_DISPLAY_NAME = 'OpenVINO Code Server'; - -export const CONFIG_KEY = 'openvinoCode'; - -export const SIDE_PANEL_VIEW_ID = 'openvino-code-side-panel'; - -export const COMMANDS = { - STATUS_BAR: 'openvinoCode.statusBar', - FOCUS_SIDE_PANEL: `${SIDE_PANEL_VIEW_ID}.focus`, - OPEN_SETTINGS: 'openvinoCode.openSettings', - GENERATE_INLINE_COPMLETION: 'openvinoCode.generateInlineCompletion', - GENERATE_INLINE_COPMLETION_TAB: 'openvinoCode.generateInlineCompletionTab', - ACCEPT_INLINE_COMPLETION: 'openvinoCode.acceptInlineCompletion', - GENERATE_DOC_STRING: 'openvinoCode.generateDocstring', - CHECK_CONNECTION: 'openvinoCode.checkConnection', - START_SERVER_NATIVE: 'openvinoCode.startServerNative', - STOP_SERVER_NATIVE: 'openvinoCode.stopServerNative', - SHOW_SERVER_LOG: 'openvinoCode.showServerLog', - SHOW_EXTENSION_LOG: 'openvinoCode.showExtensionLog', - STOP_GENERATION: 'openvinoCode.stopGeneration', -}; - -export const EXTENSION_CONTEXT_STATE = { - GENERATING: 'openvinoCode.generating', -}; diff --git a/modules/openvino_code/src/docstring/completion-item-provider.ts b/modules/openvino_code/src/docstring/completion-item-provider.ts deleted file mode 100644 index c00999156..000000000 --- a/modules/openvino_code/src/docstring/completion-item-provider.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { CompletionItemProvider, CompletionItem, TextDocument, Position, CompletionItemKind, Range } from 'vscode'; -import { validDocstringPrefix, docstringIsClosed } from './parse'; -import { extensionState } from '../state'; -import { COMMANDS } from '../constants'; - -export const completionItemProvider: CompletionItemProvider = { - provideCompletionItems: (document: TextDocument, position: Position) => { - const { isSummarizationSupported } = extensionState.state.features; - if (isSummarizationSupported && validEnterActivation(document, position)) { - return [new AutoDocstringCompletionItem(document, position)]; - } - return; - }, -}; - -/** - * Checks that the preceding characters of the position is a valid docstring prefix - * and that the prefix is not part of an already closed docstring - */ -function validEnterActivation(document: TextDocument, position: Position): boolean { - const docString = document.getText(); - const quoteStyle = getQuoteStyle(); - return ( - validDocstringPrefix(docString, position.line, position.character, quoteStyle) && - !docstringIsClosed(docString, position.line, position.character, quoteStyle) - ); -} - -/** - * Completion item to trigger generate docstring command on docstring prefix - */ -class AutoDocstringCompletionItem extends CompletionItem { - constructor(_: TextDocument, position: Position) { - super('Generate Docstring', CompletionItemKind.Snippet); - this.insertText = ''; - this.filterText = getQuoteStyle(); - this.sortText = '\0'; - - this.range = new Range(new Position(position.line, 0), position); - - this.command = { - command: COMMANDS.GENERATE_DOC_STRING, - title: 'Generate Docstring', - }; - } -} - -function getQuoteStyle(): string { - return extensionState.config.quoteStyle || '"""'; -} diff --git a/modules/openvino_code/src/docstring/docstring-template/docstring-factory.ts b/modules/openvino_code/src/docstring/docstring-template/docstring-factory.ts deleted file mode 100644 index e9e9c88c1..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/docstring-factory.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Context, render } from "mustache"; -import { DocstringParts } from "./docstring-parts"; -import { TemplateData } from "./template-data"; - -export class DocstringFactory { - private template: string; - private quoteStyle: string; - private startOnNewLine: boolean; - private includeDescription: boolean; - private includeName: boolean; - private guessTypes: boolean; - - constructor( - template: string, - quoteStyle = '"""', - startOnNewLine = false, - includeDescription = true, - includeName = false, - guessTypes = true - ) { - this.quoteStyle = quoteStyle; - this.startOnNewLine = startOnNewLine; - this.guessTypes = guessTypes; - this.includeName = includeName; - this.includeDescription = includeDescription; - this.template = template; - } - - public generateDocstring(docstringParts: DocstringParts, indentation = ""): string { - const templateData = new TemplateData( - docstringParts, - this.guessTypes, - this.includeName, - this.includeDescription - ); - - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call - let docstring: string = render(this.template, (templateData as unknown) as Context); - - docstring = this.addSnippetPlaceholders(docstring); - docstring = this.condenseNewLines(docstring); - docstring = this.condenseTrailingNewLines(docstring); - docstring = this.commentText(docstring); - docstring = this.indentDocstring(docstring, indentation); - - return docstring; - } - - private addSnippetPlaceholders(snippetString: string): string { - let placeholderNumber = 0; - snippetString = snippetString.replace(/@@@/g, () => (++placeholderNumber).toString()); - - return snippetString; - } - - private condenseNewLines(snippet: string): string { - return snippet.replace(/\n{3,}/gm, "\n\n"); - } - - private condenseTrailingNewLines(snippet: string): string { - return snippet.replace(/\n+$/g, "\n"); - } - - private commentText(snippet: string): string { - if (this.startOnNewLine) { - snippet = `\n${snippet}`; - } - - return this.quoteStyle + snippet + this.quoteStyle; - } - - private indentDocstring(snippet: string, indentation: string): string { - const snippetLines = snippet.split("\n"); - - snippetLines.forEach((line, index) => { - if (line !== "") { - snippetLines[index] = indentation + line; - } - }); - - return snippetLines.join("\n"); - } -} diff --git a/modules/openvino_code/src/docstring/docstring-template/docstring-parts.ts b/modules/openvino_code/src/docstring/docstring-template/docstring-parts.ts deleted file mode 100644 index 9ae171d18..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/docstring-parts.ts +++ /dev/null @@ -1,38 +0,0 @@ -export interface Decorator { - name: string; -} - -export interface Argument { - var: string; - type?: string; -} - -export interface KeywordArgument { - default: string; - var: string; - type?: string; -} - -export interface Exception { - type?: string; -} - -export interface Returns { - type?: string; -} - -export interface Yields { - type?: string; -} - -export interface DocstringParts { - name: string; - summary?: string; - decorators: Decorator[]; - args: Argument[]; - kwargs: KeywordArgument[]; - exceptions: Exception[]; - returns?: Returns; - yields?: Yields; - code: string[]; -} diff --git a/modules/openvino_code/src/docstring/docstring-template/get-template.ts b/modules/openvino_code/src/docstring/docstring-template/get-template.ts deleted file mode 100644 index ea2bdf563..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/get-template.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { readFileSync } from "fs"; - -export function getTemplate(docstringFormat?: string): string { - switch (docstringFormat) { - case "google_summary_only": - return getTemplateFile("google_summary_only.mustache"); - case "google": - return getTemplateFile("google.mustache"); - case "sphinx": - return getTemplateFile("sphinx.mustache"); - case "numpy": - return getTemplateFile("numpy.mustache"); - default: - return getTemplateFile("default.mustache"); - } -} - -function getTemplateFile(fileName: string): string { - const filePath = __dirname + "/doc_string/templates/" + fileName; - return readFileSync(filePath, "utf8"); -} diff --git a/modules/openvino_code/src/docstring/docstring-template/index.ts b/modules/openvino_code/src/docstring/docstring-template/index.ts deleted file mode 100644 index fe4dee566..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { DocstringFactory } from "./docstring-factory"; -export { getTemplate } from "./get-template"; diff --git a/modules/openvino_code/src/docstring/docstring-template/template-data.ts b/modules/openvino_code/src/docstring/docstring-template/template-data.ts deleted file mode 100644 index ad3f33c5f..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/template-data.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { Argument, Decorator, DocstringParts, Exception, KeywordArgument, Returns, Yields } from './docstring-parts'; - -export class TemplateData { - public name: string; - public summary: string; - public decorators: Decorator[]; - public args: Argument[]; - public kwargs: KeywordArgument[]; - public exceptions: Exception[]; - public returns?: Returns; - public yields?: Yields; - public code: string[]; - - private includeName: boolean; - private includeExtendedSummary: boolean; - type: string | undefined = undefined; - private static DEFAULT_TYPE_PLACEHOLDER = '[type]'; - - constructor( - docstringParts: DocstringParts, - guessTypes: boolean, - includeName: boolean, - includeExtendedSummary: boolean - ) { - this.name = docstringParts.name; - this.summary = docstringParts.summary || ''; - this.decorators = docstringParts.decorators; - this.args = docstringParts.args; - this.kwargs = docstringParts.kwargs; - this.exceptions = docstringParts.exceptions; - this.returns = docstringParts.returns; - this.yields = docstringParts.yields; - this.code = docstringParts.code; - - this.includeName = includeName; - this.includeExtendedSummary = includeExtendedSummary; - - if (!guessTypes) { - this.removeTypes(); - } - - this.addDefaultTypePlaceholders(TemplateData.DEFAULT_TYPE_PLACEHOLDER); - } - - public placeholder() { - return (text: string, render: (text: string) => string) => { - return '${@@@:' + render(text) + '}'; - }; - } - - public summaryPlaceholder(): string { - if (this.includeName) { - return this.name + ' ${@@@:' + this.summary + '}'; - } - - return '${@@@:' + this.summary + '}'; - } - - public extendedSummaryPlaceholder(): string { - if (this.includeExtendedSummary) { - return '${@@@:[extended_summary]}'; - } - - return ''; - } - - public typePlaceholder(): string { - // skip tabstop for guessed types - if (this.type === TemplateData.DEFAULT_TYPE_PLACEHOLDER) { - return '${@@@:' + this.type + '}'; - } - return `${this.type}`; - } - - public descriptionPlaceholder(): string { - return '${@@@:[description]}'; - } - - public argsExist(): boolean { - return this.args.length > 0; - } - - public kwargsExist(): boolean { - return this.kwargs.length > 0; - } - - public parametersExist(): boolean { - return this.args.length > 0 || this.kwargs.length > 0; - } - - public exceptionsExist(): boolean { - return this.exceptions.length > 0; - } - - public returnsExist(): boolean { - return this.returns !== undefined; - } - - public yieldsExist(): boolean { - return this.yields != undefined; - } - - private removeTypes(): void { - for (const arg of this.args) { - arg.type = undefined; - } - - for (const kwarg of this.kwargs) { - kwarg.type = undefined; - } - - if (this.yields != undefined) { - this.yields.type = undefined; - } - - if (this.returns !== undefined) { - this.returns.type = undefined; - } - } - - private addDefaultTypePlaceholders(placeholder: string): void { - for (const arg of this.args) { - if (arg.type === undefined) { - arg.type = placeholder; - } - } - - for (const kwarg of this.kwargs) { - if (kwarg.type === undefined) { - kwarg.type = placeholder; - } - } - - const returns = this.returns; - if (returns !== undefined && returns.type === undefined) { - returns.type = placeholder; - } - - const yields = this.yields; - if (yields != undefined && yields.type == undefined) { - yields.type = placeholder; - } - } -} diff --git a/modules/openvino_code/src/docstring/docstring-template/templates/default.mustache b/modules/openvino_code/src/docstring/docstring-template/templates/default.mustache deleted file mode 100644 index 211197fb3..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/templates/default.mustache +++ /dev/null @@ -1,40 +0,0 @@ -{{! Default Docstring Template }} -{{=<% %>=}} -<%summaryPlaceholder%> - -<%extendedSummaryPlaceholder%> - -<%#argsExist%> -Arguments: -<%#args%> - <%var%> {<%&typePlaceholder%>} -- <%descriptionPlaceholder%> -<%/args%> -<%/argsExist%> - -<%#kwargsExist%> -Keyword Arguments: -<%#kwargs%> - <%var%> {<%&typePlaceholder%>} -- <%descriptionPlaceholder%> (default: {<%&default%>}) -<%/kwargs%> -<%/kwargsExist%> - -<%#exceptionsExist%> -Raises: -<%#exceptions%> - <%type%>: <%descriptionPlaceholder%> -<%/exceptions%> -<%/exceptionsExist%> - -<%#returnsExist%> -Returns: -<%#returns%> - <%&typePlaceholder%> -- <%descriptionPlaceholder%> -<%/returns%> -<%/returnsExist%> - -<%#yieldsExist%> -Yields: -<%#yields%> - <%&typePlaceholder%> -- <%descriptionPlaceholder%> -<%/yields%> -<%/yieldsExist%> diff --git a/modules/openvino_code/src/docstring/docstring-template/templates/google.mustache b/modules/openvino_code/src/docstring/docstring-template/templates/google.mustache deleted file mode 100644 index 9595533fa..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/templates/google.mustache +++ /dev/null @@ -1,35 +0,0 @@ -{{! Google Docstring Template }} -{{summaryPlaceholder}} - -{{extendedSummaryPlaceholder}} - -{{#parametersExist}} -Args: -{{#args}} - {{var}} ({{&typePlaceholder}}): {{descriptionPlaceholder}} -{{/args}} -{{#kwargs}} - {{var}} ({{&typePlaceholder}}, optional): {{descriptionPlaceholder}}. Defaults to {{&default}}. -{{/kwargs}} -{{/parametersExist}} - -{{#exceptionsExist}} -Raises: -{{#exceptions}} - {{type}}: {{descriptionPlaceholder}} -{{/exceptions}} -{{/exceptionsExist}} - -{{#returnsExist}} -Returns: -{{#returns}} - {{&typePlaceholder}}: {{descriptionPlaceholder}} -{{/returns}} -{{/returnsExist}} - -{{#yieldsExist}} -Yields: -{{#yields}} - {{&typePlaceholder}}: {{descriptionPlaceholder}} -{{/yields}} -{{/yieldsExist}} diff --git a/modules/openvino_code/src/docstring/docstring-template/templates/google_summary_only.mustache b/modules/openvino_code/src/docstring/docstring-template/templates/google_summary_only.mustache deleted file mode 100644 index 4968d3a9b..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/templates/google_summary_only.mustache +++ /dev/null @@ -1,2 +0,0 @@ -{{! Google Docstring Template }} -{{summaryPlaceholder}} diff --git a/modules/openvino_code/src/docstring/docstring-template/templates/numpy.mustache b/modules/openvino_code/src/docstring/docstring-template/templates/numpy.mustache deleted file mode 100644 index fea72e0cc..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/templates/numpy.mustache +++ /dev/null @@ -1,44 +0,0 @@ -{{! Numpy Docstring Template }} -{{summaryPlaceholder}} - -{{extendedSummaryPlaceholder}} - -{{#parametersExist}} -Parameters ----------- -{{#args}} -{{var}} : {{&typePlaceholder}} - {{descriptionPlaceholder}} -{{/args}} -{{#kwargs}} -{{var}} : {{&typePlaceholder}}, optional - {{descriptionPlaceholder}}, by default {{&default}} -{{/kwargs}} -{{/parametersExist}} - -{{#returnsExist}} -Returns -------- -{{#returns}} -{{&typePlaceholder}} - {{descriptionPlaceholder}} -{{/returns}} -{{/returnsExist}} - -{{#yieldsExist}} -Yields -------- -{{#yields}} -{{&typePlaceholder}} - {{descriptionPlaceholder}} -{{/yields}} -{{/yieldsExist}} - -{{#exceptionsExist}} -Raises ------- -{{#exceptions}} -{{type}} - {{descriptionPlaceholder}} -{{/exceptions}} -{{/exceptionsExist}} diff --git a/modules/openvino_code/src/docstring/docstring-template/templates/sphinx.mustache b/modules/openvino_code/src/docstring/docstring-template/templates/sphinx.mustache deleted file mode 100644 index 0b1a110be..000000000 --- a/modules/openvino_code/src/docstring/docstring-template/templates/sphinx.mustache +++ /dev/null @@ -1,24 +0,0 @@ -{{! Sphinx Docstring Template }} -{{summaryPlaceholder}} - -{{extendedSummaryPlaceholder}} - -{{#args}} -:param {{var}}: {{descriptionPlaceholder}} -:type {{var}}: {{&typePlaceholder}} -{{/args}} -{{#kwargs}} -:param {{var}}: {{descriptionPlaceholder}}, defaults to {{&default}} -:type {{var}}: {{&typePlaceholder}}, optional -{{/kwargs}} -{{#exceptions}} -:raises {{type}}: {{descriptionPlaceholder}} -{{/exceptions}} -{{#returns}} -:return: {{descriptionPlaceholder}} -:rtype: {{&typePlaceholder}} -{{/returns}} -{{#yields}} -:yield: {{descriptionPlaceholder}} -:rtype: {{&typePlaceholder}} -{{/yields}} diff --git a/modules/openvino_code/src/docstring/generate-command.ts b/modules/openvino_code/src/docstring/generate-command.ts deleted file mode 100644 index b7e612b3e..000000000 --- a/modules/openvino_code/src/docstring/generate-command.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { window } from 'vscode'; -import { AutoDocstring } from './generate-docstring'; -import { extensionState } from '../state'; - -export function generateCommandHandler() { - const { isSummarizationSupported } = extensionState.state.features; - const editor = window.activeTextEditor; - if (!isSummarizationSupported || !editor) { - return; - } - - try { - const autoDocstring = new AutoDocstring(editor); - return autoDocstring.generate(); - } catch (error) { - // todo: add proper logger - console.error(error); - } -} diff --git a/modules/openvino_code/src/docstring/generate-docstring.ts b/modules/openvino_code/src/docstring/generate-docstring.ts deleted file mode 100644 index a2f3813e7..000000000 --- a/modules/openvino_code/src/docstring/generate-docstring.ts +++ /dev/null @@ -1,94 +0,0 @@ -import * as vs from 'vscode'; -import { DocstringFactory } from './docstring-template/docstring-factory'; -import { getTemplate } from './docstring-template/get-template'; -import { getDocstringIndentation, getDefaultIndentation, parse } from './parse'; -import { DocstringParts } from './docstring-template/docstring-parts'; -import { backendService } from '../services/backend.service'; -import { extensionState } from '../state'; - -export class AutoDocstring { - private editor: vs.TextEditor; - - constructor(editor: vs.TextEditor) { - this.editor = editor; - } - - public generate() { - extensionState.set('isLoading', true); - - const position = this.editor.selection.active; - const document = this.editor.document.getText(); - - const defaultIndentation = getDefaultIndentation( - this.editor.options.insertSpaces as boolean, - this.editor.options.tabSize as number - ); - const { docstringParts, definition } = parse(document, position.line, defaultIndentation.length); - const indentation = getDocstringIndentation(document, position.line, defaultIndentation); - - return this._insertGenerationPlaceholder(indentation) - .then(() => this._generateDocstring(docstringParts, definition, indentation, position)) - .then( - () => extensionState.set('isLoading', false), - () => extensionState.set('isLoading', false) - ); - } - - private _insertGenerationPlaceholder(indentation: string) { - const position = this.editor.selection.active; - const insertPosition = position.with(position.line, 0); - - const quoteStyle = extensionState.config.quoteStyle || '"""'; - const generationPlaceholderSnippet = new vs.SnippetString( - `${indentation}${quoteStyle} Generating summarization ${quoteStyle}` - ); - return this.editor.insertSnippet(generationPlaceholderSnippet, insertPosition); - } - - private _removeGenerationPlaceholder(position: vs.Position) { - return this.editor.edit((builder) => { - builder.delete(this.editor.document.lineAt(position).range); - }); - } - - private _generateDocstring( - docstringParts: DocstringParts, - definition: string, - indentation: string, - position: vs.Position - ) { - const template = this.generateTemplate(docstringParts, indentation); - - return backendService - .generateSummarization({ - inputs: docstringParts.code.join('\n'), - template: template, - definition: definition, - format: extensionState.config.docstringFormat, - parameters: { - temperature: extensionState.config.temperature, - top_k: extensionState.config.topK, - top_p: extensionState.config.topP, - min_new_tokens: extensionState.config.minNewTokens, - max_new_tokens: extensionState.config.maxNewTokens, - timeout: extensionState.config.serverRequestTimeout, - repetition_penalty: extensionState.config.repetitionPenalty, - }, - }) - .then((response) => { - const docstringSnippet = new vs.SnippetString(response?.generated_text); - - return this._removeGenerationPlaceholder(position).then(() => - this.editor.insertSnippet(docstringSnippet, position.with(position.line, 0)) - ); - }); - } - - private generateTemplate(docstringParts: DocstringParts, indentation: string): string { - const { quoteStyle, docstringFormat } = extensionState.config; - - const docstringFactory = new DocstringFactory(getTemplate(docstringFormat), quoteStyle, true, false, false, true); - - return docstringFactory.generateDocstring(docstringParts, indentation); - } -} diff --git a/modules/openvino_code/src/docstring/index.ts b/modules/openvino_code/src/docstring/index.ts deleted file mode 100644 index 44e740863..000000000 --- a/modules/openvino_code/src/docstring/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ExtensionContext, commands, languages } from 'vscode'; -import { IExtensionComponent } from '../extension-component.interface'; -import { COMMANDS } from '../constants'; -import { generateCommandHandler } from './generate-command'; -import { completionItemProvider } from './completion-item-provider'; - -class DocString implements IExtensionComponent { - activate(context: ExtensionContext): void { - const commandDisposable = commands.registerCommand(COMMANDS.GENERATE_DOC_STRING, generateCommandHandler); - - const providerDisposable = languages.registerCompletionItemProvider( - 'python', - completionItemProvider, - '"', - "'", - '#' - ); - - context.subscriptions.push(commandDisposable, providerDisposable); - } - deactivate(): void {} -} - -export const docString = new DocString(); diff --git a/modules/openvino_code/src/docstring/parse/docstring-is-closed.ts b/modules/openvino_code/src/docstring/parse/docstring-is-closed.ts deleted file mode 100644 index c58fd2248..000000000 --- a/modules/openvino_code/src/docstring/parse/docstring-is-closed.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { blankLine, indentationOf } from "./utilities"; - -export function docstringIsClosed( - document: string, - linePosition: number, - charPosition: number, - quoteStyle: string -): boolean { - const lines = document.split("\n"); - - if (quotesCloseExistingDocstring(lines, linePosition, charPosition, quoteStyle)) { - return true; - } - - if (quotesOpenExistingDocstring(lines, linePosition, charPosition, quoteStyle)) { - return true; - } - - return false; -} - -function quotesCloseExistingDocstring( - lines: string[], - linePosition: number, - charPosition: number, - quoteStyle: string -): boolean { - const linesBeforePosition = sliceUpToPosition(lines, linePosition, charPosition); - let numberOfTripleQuotes = 0; - - for (const line of linesBeforePosition.reverse()) { - if (line.includes("def ") || line.includes("class ")) { - break; - } - - numberOfTripleQuotes += occurrences(line, quoteStyle); - } - - return numberOfTripleQuotes % 2 === 0; -} - -function quotesOpenExistingDocstring( - lines: string[], - linePosition: number, - charPosition: number, - quoteStyle: string -): boolean { - const linesAfterPosition = sliceFromPosition(lines, linePosition, charPosition); - const originalIndentation = indentationOf(lines[linePosition]); - - // Need to check first line separately because indentation was sliced off - if (linesAfterPosition[0].includes(quoteStyle)) { - return true; - } - - for (const line of linesAfterPosition.slice(1)) { - if (line.includes(quoteStyle)) { - return true; - } - - if ( - (!blankLine(line) && indentationOf(line) < originalIndentation) || - line.includes("def ") || - line.includes("class ") - ) { - return false; - } - } - - return false; -} - -function sliceUpToPosition(lines: string[], linePosition: number, charPosition: number): string[] { - const slicedDocument = lines.slice(0, linePosition); - slicedDocument.push(lines[linePosition].slice(0, charPosition)); - - return slicedDocument; -} - -function sliceFromPosition(lines: string[], linePosition: number, charPosition: number): string[] { - let slicedDocument = [lines[linePosition].slice(charPosition)]; - slicedDocument = slicedDocument.concat(lines.slice(linePosition + 1)); - - return slicedDocument; -} - -function occurrences(str: string, word: string): number { - return str.split(word).length - 1; -} diff --git a/modules/openvino_code/src/docstring/parse/get-body.ts b/modules/openvino_code/src/docstring/parse/get-body.ts deleted file mode 100644 index ef265dcaa..000000000 --- a/modules/openvino_code/src/docstring/parse/get-body.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { blankLine, filterComments, indentationOf } from './utilities'; - -export function getBody(document: string, linePosition: number, defaultIndentation: number): string[] { - const lines = document.split('\n'); - const body = []; - - let currentLineNum = linePosition; - const bodyBaseIndentation = getBodyBaseIndentation(lines, linePosition); - - while (currentLineNum < lines.length) { - const line = lines[currentLineNum]; - - if (blankLine(line)) { - currentLineNum++; - continue; - } - - if (indentationOf(line) < bodyBaseIndentation) { - break; - } - - body.push(line.slice(bodyBaseIndentation - defaultIndentation)); - currentLineNum++; - } - - return filterComments(body); -} - -function getBodyBaseIndentation(lines: string[], linePosition: number): number { - let currentLineNum = linePosition; - const functionDefRegex = /\s*def \w+/; - - while (currentLineNum < lines.length) { - const line = lines[currentLineNum]; - - if (blankLine(line)) { - currentLineNum++; - continue; - } - - if (functionDefRegex.test(line)) { - break; - } - - return indentationOf(line); - } - - return 10000; -} diff --git a/modules/openvino_code/src/docstring/parse/get-definition.ts b/modules/openvino_code/src/docstring/parse/get-definition.ts deleted file mode 100644 index 0922bd815..000000000 --- a/modules/openvino_code/src/docstring/parse/get-definition.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { blankLine, preprocessLines } from "./utilities"; - -export function getDefinition(document: string, linePosition: number): string { - const precedingLines = getPrecedingLines(document, linePosition); - const precedingText = precedingLines.join(" "); - - // Don't parse if the preceding line is blank - const precedingLine = precedingLines[precedingLines.length - 1]; - - // fixme: this code relies on implicit type conversion for non strict comparison - if (precedingLine == undefined || blankLine(precedingLine)) { - return ""; - } - - const pattern = /\b(((async\s+)?\s*def)|\s*class)\b/g; - - // Get starting index of last def match in the preceding text - let index: number | null = null; - while (pattern.test(precedingText)) { - index = pattern.lastIndex - RegExp.lastMatch.length; - } - - if (index == null) { - return ""; - } - - const lastFunctionDef = precedingText.slice(index); - return lastFunctionDef.trim(); -} - -function getPrecedingLines(document: string, linePosition: number): string[] { - const lines = document.split("\n"); - const rawPrecedingLines = lines.slice(0, linePosition); - - const precedingLines = preprocessLines(rawPrecedingLines); - - return precedingLines; -} diff --git a/modules/openvino_code/src/docstring/parse/get-docstring-indentation.ts b/modules/openvino_code/src/docstring/parse/get-docstring-indentation.ts deleted file mode 100644 index 3b2779efd..000000000 --- a/modules/openvino_code/src/docstring/parse/get-docstring-indentation.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { blankLine, getIndentation } from "./utilities"; - -export function getDocstringIndentation( - document: string, - linePosition: number, - defaultIndentation: string -): string { - const lines = document.split("\n"); - const definitionPattern = /\b(((async\s+)?\s*def)|\s*class)\b/g; - - let currentLineNum = linePosition; - - while (currentLineNum >= 0) { - const currentLine = lines[currentLineNum]; - - if (!blankLine(currentLine)) { - if (definitionPattern.test(currentLine)) { - return getIndentation(currentLine) + defaultIndentation; - } - } - - currentLineNum--; - } - - return defaultIndentation; -} diff --git a/modules/openvino_code/src/docstring/parse/get-function-name.ts b/modules/openvino_code/src/docstring/parse/get-function-name.ts deleted file mode 100644 index 7ff23be4a..000000000 --- a/modules/openvino_code/src/docstring/parse/get-function-name.ts +++ /dev/null @@ -1,11 +0,0 @@ -export function getFunctionName(functionDefinition: string): string { - const pattern = /(?:def|class)\s+(\w+)\s*\(/; - - const match = pattern.exec(functionDefinition); - - if (match == undefined || match[1] == undefined) { - return ""; - } - - return match[1]; -} diff --git a/modules/openvino_code/src/docstring/parse/guess-type.ts b/modules/openvino_code/src/docstring/parse/guess-type.ts deleted file mode 100644 index cef8034d2..000000000 --- a/modules/openvino_code/src/docstring/parse/guess-type.ts +++ /dev/null @@ -1,181 +0,0 @@ -/* eslint-disable no-useless-escape */ -export function guessType(parameter: string): string | undefined { - parameter = parameter.trim(); - - if (hasTypeHint(parameter)) { - return getTypeFromTypeHint(parameter); - } - - if (isKwarg(parameter)) { - return guessTypeFromDefaultValue(parameter); - } - - return guessTypeFromName(parameter); -} - -function getTypeFromTypeHint(parameter: string): string | undefined { - const sections = parameter.split(':'); - if (sections.length !== 2) { - return undefined; - } - const typeHint = sections[1]; - - const pattern = /\s*(['"]?[^=]+['"]?)\s*(=.*)?/; - const typeHintRegex = pattern.exec(typeHint); - - if (typeHintRegex == null) { - return undefined; - } - - // Remove enclosing quotes - let type = typeHintRegex[1].trim(); - type = type.replace(/^['"]|['"]$/g, ''); - - return type; -} - -function guessTypeFromDefaultValue(parameter: string): string | undefined { - const pattern = /\w+\s*(?::[\w\[\], \.]+)?=\s*(.+)/; - const defaultValueMatch = pattern.exec(parameter); - - if (defaultValueMatch == null || defaultValueMatch.length !== 2) { - return undefined; - } - - const defaultValue = defaultValueMatch[1]; - - if (isInteger(defaultValue)) { - return 'int'; - } - - if (isFloat(defaultValue)) { - return 'float'; - } - - if (isHexadecimal(defaultValue)) { - return 'hexadecimal'; - } - - if (isString(defaultValue)) { - return 'str'; - } - - if (isBool(defaultValue)) { - return 'bool'; - } - - if (isList(defaultValue)) { - return 'list'; - } - - if (isTuple(defaultValue)) { - return 'tuple'; - } - - if (isDict(defaultValue)) { - return 'dict'; - } - - if (isRegexp(defaultValue)) { - return 'regexp'; - } - - if (isUnicode(defaultValue)) { - return 'unicode'; - } - - if (isBytes(defaultValue)) { - return 'bytes'; - } - - if (isFunction(defaultValue)) { - return 'function'; - } - - return undefined; -} - -function guessTypeFromName(parameter: string): string | undefined { - if (parameter.startsWith('is') || parameter.startsWith('has')) { - return 'bool'; - } - - if (inArray(parameter, ['cb', 'callback', 'done', 'next', 'fn'])) { - return 'function'; - } - - return undefined; -} - -function hasTypeHint(parameter: string): boolean { - const pattern = /^\w+\s*:/; - return pattern.test(parameter); -} - -function isKwarg(parameter: string): boolean { - return parameter.includes('='); -} - -function isInteger(value: string): boolean { - const pattern = /^[-+]?[0-9]+$/; - return pattern.test(value); -} - -function isFloat(value: string): boolean { - const pattern = /^[-+]?[0-9]*\.[0-9]+$/; - return pattern.test(value); -} - -function isHexadecimal(value: string): boolean { - const pattern = /^[-+]?0x[0-9abcdef]+/; - return pattern.test(value); -} - -function isString(value: string): boolean { - const pattern = /^\".*\"$|^\'.*\'$/; - return pattern.test(value); -} - -function isBool(value: string): boolean { - const pattern = /^True$|^False$/; - return pattern.test(value); -} - -function isList(value: string): boolean { - const pattern = /^\[.*\]$/; - return pattern.test(value); -} - -function isTuple(value: string): boolean { - const pattern = /^\(.*\)$/; - return pattern.test(value); -} - -function isDict(value: string): boolean { - const pattern = /^\{.*\}$/; - return pattern.test(value); -} - -function isRegexp(value: string): boolean { - const pattern = /^[rR]/; - return pattern.test(value) && isString(value.substr(1)); -} - -function isUnicode(value: string): boolean { - const pattern = /^[uU]/; - return pattern.test(value) && isString(value.substr(1)); -} - -function isBytes(value: string): boolean { - const pattern = /^[bB]/; - return pattern.test(value) && isString(value.substr(1)); -} - -function isFunction(value: string): boolean { - const pattern = /^lambda /; - return pattern.test(value); -} - -export function inArray(item: T, array: T[]) { - return array.some((x) => item === x); -} diff --git a/modules/openvino_code/src/docstring/parse/index.ts b/modules/openvino_code/src/docstring/parse/index.ts deleted file mode 100644 index 6f6b8ff6e..000000000 --- a/modules/openvino_code/src/docstring/parse/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { docstringIsClosed } from "./docstring-is-closed"; -export { getBody } from "./get-body"; -export { getDefinition } from "./get-definition"; -export { getDocstringIndentation } from "./get-docstring-indentation"; -export { getFunctionName } from "./get-function-name"; -export { guessType } from "./guess-type"; -export { validDocstringPrefix } from "./valid-docstring-prefix"; -export { parse } from "./parse"; -export { parseParameters } from "./parse-parameters"; -export { tokenizeDefinition } from "./tokenize-definition"; -export { getDefaultIndentation } from "./utilities"; diff --git a/modules/openvino_code/src/docstring/parse/parse-parameters.ts b/modules/openvino_code/src/docstring/parse/parse-parameters.ts deleted file mode 100644 index 01d22d234..000000000 --- a/modules/openvino_code/src/docstring/parse/parse-parameters.ts +++ /dev/null @@ -1,180 +0,0 @@ -/* eslint-disable no-useless-escape */ -import { guessType } from '.'; -import { - Argument, - Decorator, - DocstringParts, - Exception, - KeywordArgument, - Returns, - Yields, -} from '../docstring-template/docstring-parts'; -import { preprocessLines } from './utilities'; - -export function parseParameters( - parameterTokens: string[], - body: string[], - functionName: string, - code: string[] = [] -): DocstringParts { - const bodyWithoutIndentation = preprocessLines(body); - return { - name: functionName, - decorators: parseDecorators(parameterTokens), - args: parseArguments(parameterTokens), - kwargs: parseKeywordArguments(parameterTokens), - returns: parseReturn(parameterTokens, bodyWithoutIndentation), - yields: parseYields(parameterTokens, bodyWithoutIndentation), - exceptions: parseExceptions(bodyWithoutIndentation), - code: code, - }; -} - -function parseDecorators(parameters: string[]): Decorator[] { - const decorators: Decorator[] = []; - const pattern = /^@(\w+)/; - - for (const param of parameters) { - const match = param.trim().match(pattern); - - if (match == null) { - continue; - } - - decorators.push({ - name: match[1], - }); - } - - return decorators; -} - -function parseArguments(parameters: string[]): Argument[] { - const args: Argument[] = []; - const excludedArgs = ['self', 'cls']; - const pattern = /^(\w+)/; - - for (const param of parameters) { - const match = param.trim().match(pattern); - - if (match == null || param.includes('=') || inArray(param, excludedArgs)) { - continue; - } - - args.push({ - var: match[1], - type: guessType(param), - }); - } - - return args; -} - -function parseKeywordArguments(parameters: string[]): KeywordArgument[] { - const kwargs: KeywordArgument[] = []; - const pattern = /^(\w+)(?:\s*:[^=]+)?\s*=\s*(.+)/; - - for (const param of parameters) { - const match = param.trim().match(pattern); - - if (match == null) { - continue; - } - - kwargs.push({ - var: match[1], - default: match[2], - type: guessType(param), - }); - } - - return kwargs; -} - -function parseReturn(parameters: string[], body: string[]): Returns | undefined { - const returnType = parseReturnFromDefinition(parameters); - - if (returnType == null || (returnType.type && isIterator(returnType.type))) { - return parseFromBody(body, /return /); - } - - return returnType; -} - -function parseYields(parameters: string[], body: string[]): Yields | undefined { - const returnType = parseReturnFromDefinition(parameters); - - if (returnType != null && returnType.type && isIterator(returnType.type)) { - return returnType as Yields; - } - - // To account for functions that yield but don't have a yield signature - const yieldType = returnType ? returnType.type : undefined; - const yieldInBody = parseFromBody(body, /yield /); - - if (yieldInBody != null && yieldType != undefined) { - yieldInBody.type = `Iterator[${yieldType}]`; - } - - return yieldInBody; -} - -function parseReturnFromDefinition(parameters: string[]): Returns | null { - const pattern = /^->\s*([\w\[\], \.]*)/; - - for (const param of parameters) { - const match = param.trim().match(pattern); - - if (match == null) { - continue; - } - - // Skip "-> None" annotations - return match[1] === 'None' ? null : { type: match[1] }; - } - - return null; -} - -function parseExceptions(body: string[]): Exception[] { - const exceptions: Exception[] = []; - const pattern = /(?(item: T, array: T[]) { - return array.some((x) => item === x); -} - -function parseFromBody(body: string[], pattern: RegExp): Returns | Yields | undefined { - for (const line of body) { - const match = line.match(pattern); - - if (match == null) { - continue; - } - - return { type: undefined }; - } - - return undefined; -} - -/** - * Check whether the annotated type is an iterator. - * @param type The annotated type - */ -function isIterator(type: string): boolean { - return type.startsWith('Generator') || type.startsWith('Iterator'); -} diff --git a/modules/openvino_code/src/docstring/parse/parse.ts b/modules/openvino_code/src/docstring/parse/parse.ts deleted file mode 100644 index b16f68d0d..000000000 --- a/modules/openvino_code/src/docstring/parse/parse.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { getBody, getDefinition, getFunctionName, parseParameters, tokenizeDefinition } from '.'; -import { DocstringParts } from '../docstring-template/docstring-parts'; - -export function parse( - document: string, - positionLine: number, - defaultIndentation: number -): { docstringParts: DocstringParts; definition: string } { - const definition = getDefinition(document, positionLine); - const body = getBody(document, positionLine, defaultIndentation); - - const parameterTokens = tokenizeDefinition(definition); - const functionName = getFunctionName(definition); - const code = [definition, ...body]; - - return { docstringParts: parseParameters(parameterTokens, body, functionName, code), definition }; -} diff --git a/modules/openvino_code/src/docstring/parse/tokenize-definition.ts b/modules/openvino_code/src/docstring/parse/tokenize-definition.ts deleted file mode 100644 index c9b8e1746..000000000 --- a/modules/openvino_code/src/docstring/parse/tokenize-definition.ts +++ /dev/null @@ -1,97 +0,0 @@ -/* eslint-disable no-useless-escape */ -export function tokenizeDefinition(functionDefinition: string): string[] { - const definitionPattern = /(?:def|class)\s+\w+\s*\(([\s\S]*)\)\s*(->\s*[\w\[\], \.]*)?:\s*(?:#.*)?$/; - - const match = definitionPattern.exec(functionDefinition); - // fixme: this code relies on implicit type conversion for non strict comparison - if (match == undefined || match[1] == undefined) { - return []; - } - - const tokens = tokenizeParameterString(match[1]); - - if (match[2] != undefined) { - tokens.push(match[2]); - } - - return tokens; -} - -function tokenizeParameterString(parameterString: string): string[] { - const stack = []; - const parameters = []; - let arg = ""; - - let position = parameterString.length - 1; - - while (position >= 0) { - const top = stack[stack.length - 1]; - const char = parameterString.charAt(position); - - /* todo - '<' char, - error management - */ - switch (true) { - // 1. Check for top level comma and push arg to array - case char === "," && stack.length === 0: - parameters.unshift(arg); - arg = ""; - position -= 1; - continue; - - // 2. Check for closing double or single quote of string - case char === '"' && top === '"': - case char === "'" && top === "'": - stack.pop(); - break; - - // 3. Do nothing if quote at the top of stack - case top === '"': - case top === "'": - break; - - // 4. Push single and double quotes to stack - case char === '"': - case char === "'": - stack.push(char); - break; - - // 5. Check for closing of tuples, arrays, or dicts - case char === "(" && top === ")": - case char === "[" && top === "]": - case char === "{" && top === "}": - stack.pop(); - break; - - // 6. Do nothing if closing char but no matching char on stack - case char === "(": - case char === "[": - case char === "{": - break; - - // 7. Push opening char to stack - case char === ")": - case char === "]": - case char === "}": - stack.push(char); - break; - - // 8. Disregard whitespace at top level of stack - case char === " " && stack.length === 0: - case char === "\n" && stack.length === 0: - case char === "\t" && stack.length === 0: - position -= 1; - continue; - } - - arg = char + arg; - position -= 1; - } - - if (arg.length > 0) { - parameters.unshift(arg); - } - - return parameters; -} diff --git a/modules/openvino_code/src/docstring/parse/utilities.ts b/modules/openvino_code/src/docstring/parse/utilities.ts deleted file mode 100644 index b2eb4c93a..000000000 --- a/modules/openvino_code/src/docstring/parse/utilities.ts +++ /dev/null @@ -1,40 +0,0 @@ -export function getIndentation(line: string): string { - const whiteSpaceMatches = line.match(/^[^\S\r]+/); - - // fixme: this code relies on implicit type conversion for non strict comparison - if (whiteSpaceMatches == undefined) { - return ""; - } - - return whiteSpaceMatches[0]; -} - -/** - * Preprocess an array of lines. - * For example trim spaces and discard comments - * @param lines The lines to preprocess. - */ -export function preprocessLines(lines: string[]): string[] { - return lines.map((line) => line.trim()).filter((line) => !line.startsWith("#")); -} - -export function filterComments(lines: string[]): string[] { - return lines.filter((line) => !line.startsWith("#")); -} - -export function indentationOf(line: string): number { - return getIndentation(line).length; -} - -export function blankLine(line: string): boolean { - // fixme: this code relies on implicit type conversion for non strict comparison - return line.match(/[^\s]/) == undefined; -} - -export function getDefaultIndentation(useSpaces: boolean, tabSize: number): string { - if (!useSpaces) { - return "\t"; - } - - return " ".repeat(tabSize); -} diff --git a/modules/openvino_code/src/docstring/parse/valid-docstring-prefix.ts b/modules/openvino_code/src/docstring/parse/valid-docstring-prefix.ts deleted file mode 100644 index 73ef37c90..000000000 --- a/modules/openvino_code/src/docstring/parse/valid-docstring-prefix.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Checks whether the 3 characters proceeding the position are the correct start - * to a docstring and that there are no other characters on the line. - */ -export function validDocstringPrefix( - document: string, - linePosition: number, - charPosition: number, - quoteStyle: string -): boolean { - const lines = document.split(/\r?\n/); - const line = lines[linePosition]; - const prefix = line.slice(0, charPosition + 1); - - const regex = RegExp("^[^\\S\\r]*" + quoteStyle + "$"); - - return regex.test(line) && regex.test(prefix); -} diff --git a/modules/openvino_code/src/extension-component.interface.ts b/modules/openvino_code/src/extension-component.interface.ts deleted file mode 100644 index a933e0c53..000000000 --- a/modules/openvino_code/src/extension-component.interface.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ExtensionContext } from 'vscode'; - -export interface IExtensionComponent { - activate(context: ExtensionContext): void; - deactivate(): void; -} diff --git a/modules/openvino_code/src/extension.ts b/modules/openvino_code/src/extension.ts deleted file mode 100644 index 9ea97b5ba..000000000 --- a/modules/openvino_code/src/extension.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { ExtensionContext } from 'vscode'; -import { statusBarService } from './services/status-bar.service'; -import { extensionState } from './state'; -import { docString } from './docstring'; -import { connectionService } from './services/connection.service'; -import { pythonServerService } from './python-server/python-server.service'; -import { sidePanel } from './side-panel'; -import { settingsService } from './settings/settings.service'; -import { inlineCompletion } from './inline-completion'; - -const components = [ - extensionState, - statusBarService, - settingsService, - inlineCompletion, - docString, - pythonServerService, - sidePanel, - connectionService, -]; - -export function activate(context: ExtensionContext): void { - for (const component of components) { - component.activate(context); - } -} - -export function deactivate() { - for (const component of components) { - component.deactivate(); - } -} diff --git a/modules/openvino_code/src/inline-completion/command-inline-completion-provider.ts b/modules/openvino_code/src/inline-completion/command-inline-completion-provider.ts deleted file mode 100644 index c9b32e18a..000000000 --- a/modules/openvino_code/src/inline-completion/command-inline-completion-provider.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { - InlineCompletionItem, - InlineCompletionItemProvider, - InlineCompletionList, - Position, - TextDocument, - commands, - window, -} from 'vscode'; -import { EventEmitter } from 'stream'; -import completionService from './completion.service'; -import { EXTENSION_DISPLAY_NAME } from '../constants'; - -interface ICommandInlineCompletionItemProvider extends InlineCompletionItemProvider { - triggerCompletion(onceCompleted: () => void): void; -} - -export class CommandInlineCompletionItemProvider implements ICommandInlineCompletionItemProvider { - private _isCommandRunning = false; - - private _completionItems: InlineCompletionItem[] | InlineCompletionList = []; - - private readonly _emitter = new EventEmitter().setMaxListeners(1); - - private readonly _commandCompletedEvent = 'CommandInlineCompletionItemProvider:completed'; - - private _beforeComplete(): void { - this._isCommandRunning = false; - this._emitter.emit(this._commandCompletedEvent); - } - - async triggerCompletion(onceCompleted: () => void): Promise { - this._emitter.once(this._commandCompletedEvent, onceCompleted); - - if (!window.activeTextEditor) { - void window.showInformationMessage(`Please open a file first to use ${EXTENSION_DISPLAY_NAME}.`); - this._beforeComplete(); - return; - } - - this._isCommandRunning = true; - - await commands.executeCommand('workbench.action.focusStatusBar'); - await window.showTextDocument(window.activeTextEditor.document); - await commands.executeCommand('editor.action.inlineSuggest.trigger'); - } - - async provideInlineCompletionItems(document: TextDocument, position: Position) { - if (!this._isCommandRunning) { - this._beforeComplete(); - return this._completionItems; - } - - const completionItems = await completionService.getCompletion(document, position); - - if (!completionItems?.length) { - this._beforeComplete(); - return []; - } - - this._completionItems = completionItems; - this._beforeComplete(); - return this._completionItems; - } -} diff --git a/modules/openvino_code/src/inline-completion/completion.service.ts b/modules/openvino_code/src/inline-completion/completion.service.ts deleted file mode 100644 index 4f17827a6..000000000 --- a/modules/openvino_code/src/inline-completion/completion.service.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { InlineCompletionItem, Position, Range, TextDocument, window } from 'vscode'; -import { EXTENSION_DISPLAY_NAME } from '../constants'; -import { IGenerateRequest, backendService } from '../services/backend.service'; -import { extensionState } from '../state'; -import * as vscode from 'vscode'; -import { getIsGeneralTabActive } from './tab'; - -const outputChannel = window.createOutputChannel(EXTENSION_DISPLAY_NAME, { log: true }); -const logCompletionInput = (input: string): void => outputChannel.append(`Completion input:\n${input}\n\n`); -const logCompletionOutput = (output: string): void => outputChannel.append(`Completion output:\n${output}\n\n`); - -class CompletionService { - private readonly _contextCharactersLength = 4_000; - - private _getTextBeforeCursor(document: TextDocument, position: Position): string { - const offset = document.offsetAt(position); - const startOffset = Math.max(0, offset - this._contextCharactersLength); - const startPosition = document.positionAt(startOffset); - return document.getText(new Range(startPosition, position)); - } - - private _getTextAfterCursor(document: TextDocument, position: Position): string { - const offset = document.offsetAt(position); - const endOffset = offset + this._contextCharactersLength; - const endPosition = document.positionAt(endOffset); - return document.getText(new Range(position, endPosition)); - } - - private _prepareCompletionInput(textBeforeCursor: string, textAfterCursor: string): string { - const { fillInTheMiddleMode, startToken, middleToken, endToken } = extensionState.config; - - // Use FIM (fill-in-the-middle) mode if it is enabled in settings and if `textAfterCursor` is not empty - if (fillInTheMiddleMode && textAfterCursor.trim()) { - return `${startToken}${textBeforeCursor}${middleToken}${textAfterCursor}${endToken}`; - } - - const editor = window.activeTextEditor; - if (!editor) { - return ``; // No open text editor - } - - if (getIsGeneralTabActive() === true){ - const text = editor.document.getText(); - const currentPosition = editor.selection.active; - const selectedText = editor.document.getText(editor.selection); - //const logContent = `Cursor Position: Line ${currentPosition.line + 1}, Character ${currentPosition.character + 1}\nSelected Text: ${selectedText}`; - - vscode.workspace.openTextDocument({ content: text }).then(doc => { - vscode.window.showTextDocument(doc, { viewColumn: vscode.ViewColumn.Beside }).then(TabTextEditor => { - const newPosition = new vscode.Position((currentPosition.line + 1), (currentPosition.character + 1)); - const newSelection = new vscode.Selection(newPosition, newPosition); - TabTextEditor.selection = newSelection; - }, - error => { - // Failed to open the document - console.error('Error:', error); - } - ); - }, - error => { - // Failed to open the document - console.error('Error:', error); - } - ); - - if (selectedText !== ``){ - return selectedText; - } else { - return textBeforeCursor; - } - } - - if (!editor.selection.isEmpty) { - const selectedText = editor.document.getText(editor.selection) - return selectedText; - } - return textBeforeCursor; - } - - async getCompletion(document: TextDocument, position: Position): Promise { - const textBeforeCursor = this._getTextBeforeCursor(document, position); - const textAfterCursor = this._getTextAfterCursor(document, position); - const completionInput = this._prepareCompletionInput(textBeforeCursor, textAfterCursor); - logCompletionInput(completionInput); - - const { - temperature, - stopToken, - middleToken, - topK, - topP, - minNewTokens, - maxNewTokens, - serverRequestTimeout, - repetitionPenalty, - } = extensionState.config; - - const response = await backendService.generateCompletion({ - inputs: completionInput, - parameters: { - temperature, - top_k: topK, - top_p: topP, - min_new_tokens: minNewTokens, - max_new_tokens: maxNewTokens, - timeout: serverRequestTimeout, - repetition_penalty: repetitionPenalty, - }, - }); - - if (!response) { - return []; - } - - let generatedText = response.generated_text; - if (generatedText.startsWith(completionInput)) { - generatedText = generatedText.slice(completionInput.length); - } - logCompletionOutput(generatedText); - generatedText = generatedText.replace(stopToken, '').replace(middleToken, ''); - - const completionItem = new InlineCompletionItem(generatedText, new Range(position, position.translate(0, 1))); - return [completionItem]; - } - - async getCompletionStream( - document: TextDocument, - position: Position, - onDataChunk: (chunk: string) => unknown, - signal?: AbortSignal - ) { - const textBeforeCursor = this._getTextBeforeCursor(document, position); - const textAfterCursor = this._getTextAfterCursor(document, position); - const completionInput = this._prepareCompletionInput(textBeforeCursor, textAfterCursor); - logCompletionInput(completionInput); - - const { temperature, topK, topP, minNewTokens, maxNewTokens, serverRequestTimeout, repetitionPenalty } = - extensionState.config; - - const request: IGenerateRequest = { - inputs: completionInput, - parameters: { - temperature, - top_k: topK, - top_p: topP, - min_new_tokens: minNewTokens, - max_new_tokens: maxNewTokens, - timeout: serverRequestTimeout, - repetition_penalty: repetitionPenalty, - }, - }; - - outputChannel.append(`Completion output:\n`); - return backendService.generateCompletionStream( - request, - (chunk) => { - outputChannel.append(chunk); - onDataChunk(chunk); - }, - signal - ); - } -} - -export default new CompletionService(); diff --git a/modules/openvino_code/src/inline-completion/index.ts b/modules/openvino_code/src/inline-completion/index.ts deleted file mode 100644 index cd0d08781..000000000 --- a/modules/openvino_code/src/inline-completion/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { IExtensionState } from '@shared/extension-state'; -import { ExtensionContext } from 'vscode'; -import { IExtensionComponent } from '../extension-component.interface'; -import { extensionState } from '../state'; -import { inlineCompletion as baseInlineCompletion } from './inline-completion-component'; -import { streamingInlineCompletion } from './streaming-inline-completion-component'; - -class InlineCompletion implements IExtensionComponent { - private _context: ExtensionContext | null = null; - private _listener = ({ config }: IExtensionState) => this.activateCompletion(config.streamInlineCompletion); - - activate(context: ExtensionContext): void { - this._context = context; - this.activateCompletion(extensionState.config.streamInlineCompletion); - extensionState.subscribe(this._listener); - } - - deactivate(): void { - streamingInlineCompletion.deactivate(); - baseInlineCompletion.deactivate(); - extensionState.unsubscribe(this._listener); - } - - activateCompletion(streaming: boolean) { - if (!this._context) { - return; - } - baseInlineCompletion.deactivate(); - streamingInlineCompletion.deactivate(); - - if (streaming) { - streamingInlineCompletion.activate(this._context); - } else { - baseInlineCompletion.activate(this._context); - } - } -} - -export const inlineCompletion = new InlineCompletion(); diff --git a/modules/openvino_code/src/inline-completion/inline-completion-component.ts b/modules/openvino_code/src/inline-completion/inline-completion-component.ts deleted file mode 100644 index 140f771d7..000000000 --- a/modules/openvino_code/src/inline-completion/inline-completion-component.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Disposable, ExtensionContext, commands, window, languages } from 'vscode'; -import { COMMANDS } from '../constants'; -import { IExtensionComponent } from '../extension-component.interface'; -import { notificationService } from '../services/notification.service'; -import { extensionState } from '../state'; -import { CommandInlineCompletionItemProvider } from './command-inline-completion-provider'; -import { setIsGeneralTabActive } from './tab'; - -class InlineCompletion implements IExtensionComponent { - private _disposables: Disposable[] = []; - - activate(context: ExtensionContext): void { - // Register Inline Completion triggered by command - const commandInlineCompletionProvider = new CommandInlineCompletionItemProvider(); - - let commandInlineCompletionDisposable: Disposable; - - function generateFunction(): void { - if (!extensionState.get('isServerAvailable')) { - notificationService.showServerNotAvailableMessage(extensionState.state); - return; - } - if (extensionState.get('isLoading') && window.activeTextEditor) { - void window.showTextDocument(window.activeTextEditor.document); - return; - } - - extensionState.set('isLoading', true); - - if (commandInlineCompletionDisposable) { - commandInlineCompletionDisposable.dispose(); - } - - commandInlineCompletionDisposable = languages.registerInlineCompletionItemProvider( - { pattern: '**' }, - commandInlineCompletionProvider - ); - - void commandInlineCompletionProvider.triggerCompletion(() => { - commandInlineCompletionDisposable.dispose(); - extensionState.set('isLoading', false); - }); - } - - const acceptCommandDisposable = commands.registerCommand(COMMANDS.ACCEPT_INLINE_COMPLETION, () => { - void commands.executeCommand('editor.action.inlineSuggest.commit'); - }); - - const generateCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION, () => { - setIsGeneralTabActive(false); - generateFunction(); - }); - context.subscriptions.push(generateCommandDisposable, acceptCommandDisposable); - this._disposables.push(generateCommandDisposable, acceptCommandDisposable); - - const generateTabCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION_TAB, () => { - setIsGeneralTabActive(true); - generateFunction(); - }); - context.subscriptions.push(generateTabCommandDisposable, acceptCommandDisposable); - this._disposables.push(generateTabCommandDisposable, acceptCommandDisposable); - } - - deactivate(): void { - this._disposables.forEach((disposable) => { - disposable.dispose(); - }); - this._disposables = []; - } -} - -export const inlineCompletion = new InlineCompletion(); diff --git a/modules/openvino_code/src/inline-completion/streaming-command-inline-completion-provider.ts b/modules/openvino_code/src/inline-completion/streaming-command-inline-completion-provider.ts deleted file mode 100644 index eb0a7fbf9..000000000 --- a/modules/openvino_code/src/inline-completion/streaming-command-inline-completion-provider.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { EventEmitter as NodeEventEmitter } from 'stream'; -import { - InlineCompletionItem, - InlineCompletionItemProvider, - Position, - Range, - TextDocument, - commands, - window, -} from 'vscode'; -import { EXTENSION_DISPLAY_NAME } from '../constants'; -import completionService from './completion.service'; - -interface ICommandInlineCompletionItemProvider extends InlineCompletionItemProvider { - triggerCompletion(onceCompleted: () => void): void; -} - -/** - * Trigger {@link ICommandInlineCompletionItemProvider.provideInlineCompletionItems}. - * Executing editor.action.inlineSuggest.trigger command doesn't trigger inline completion when inlineSuggestionVisible context key is set. - * Executing editor.action.inlineSuggest.hide before editor.action.inlineSuggest.trigger will make inline completion text bliks. - * Replacing previous character before trigger seems to do the job. - */ -async function triggerInlineCompletionProvider(): Promise { - const editor = window.activeTextEditor; - if (!editor) { - return; - } - - const document = editor.document; - const activePosition = editor.selection.active; - const activeOffset = document.offsetAt(activePosition); - - if (activeOffset === 0) { - return; - } - - const prevCharPosition = document.positionAt(activeOffset - 1); - const replaceRange = new Range(prevCharPosition, activePosition); - const value = document.getText(replaceRange); - - await editor.edit((edit) => edit.replace(replaceRange, value)); - await commands.executeCommand('editor.action.inlineSuggest.trigger'); -} - -export class StreamingCommandInlineCompletionItemProvider implements ICommandInlineCompletionItemProvider { - private _isCommandRunning = false; - - private readonly _emitter = new NodeEventEmitter().setMaxListeners(1); - - private _streamBuffer: string = ''; - - private readonly _commandCompletedEvent = 'CommandInlineCompletionItemProvider:completed'; - - private _abortController = new AbortController(); - - private _beforeComplete(): void { - this._isCommandRunning = false; - this._streamBuffer = ''; - this._abortController.abort(); - this._abortController = new AbortController(); - this._emitter.emit(this._commandCompletedEvent); - } - - async triggerCompletion(onceCompleted: () => void) { - this._emitter.once(this._commandCompletedEvent, onceCompleted); - - if (!window.activeTextEditor) { - void window.showInformationMessage(`Please open a file first to use ${EXTENSION_DISPLAY_NAME}.`); - this._beforeComplete(); - return; - } - - if (this._isCommandRunning) { - return; - } - - this._isCommandRunning = true; - - void commands.executeCommand('workbench.action.focusStatusBar'); - void window.showTextDocument(window.activeTextEditor.document); - - await completionService.getCompletionStream( - window.activeTextEditor.document, - window.activeTextEditor.selection.active, - async (chunk) => { - this._streamBuffer += chunk; - await triggerInlineCompletionProvider(); - }, - this._abortController.signal - ); - - this._isCommandRunning = false; - await triggerInlineCompletionProvider(); - } - - stopGeneration() { - this._abortController.abort(); - } - - cancelGeneration() { - this._beforeComplete(); - } - - provideInlineCompletionItems(document: TextDocument, position: Position) { - const buffer = this._streamBuffer; - if (!this._isCommandRunning) { - this._beforeComplete(); - } - - return [new InlineCompletionItem(`${buffer}`, new Range(position, position.translate(0, 1)))]; - } -} diff --git a/modules/openvino_code/src/inline-completion/streaming-inline-completion-component.ts b/modules/openvino_code/src/inline-completion/streaming-inline-completion-component.ts deleted file mode 100644 index 84277a454..000000000 --- a/modules/openvino_code/src/inline-completion/streaming-inline-completion-component.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { - Disposable, - ExtensionContext, - Position, - TextEditorSelectionChangeEvent, - commands, - languages, - window, -} from 'vscode'; -import { COMMANDS, EXTENSION_CONTEXT_STATE } from '../constants'; -import { IExtensionComponent } from '../extension-component.interface'; -import { extensionState } from '../state'; -import { StreamingCommandInlineCompletionItemProvider } from './streaming-command-inline-completion-provider'; -import { notificationService } from '../services/notification.service'; -import { setIsGeneralTabActive } from './tab'; - -class StreamingInlineCompletion implements IExtensionComponent { - private _disposables: Disposable[] = []; - - activate(context: ExtensionContext): void { - // Register Inline Completion triggered by command - const commandInlineCompletionProvider = new StreamingCommandInlineCompletionItemProvider(); - - let generationDisposables: Disposable[] = []; - - function disposeGenerationDisposables() { - generationDisposables?.forEach((disposable) => { - disposable.dispose(); - }); - generationDisposables = []; - } - - function generateFunction(): void { - if (!extensionState.get('isServerAvailable')) { - notificationService.showServerNotAvailableMessage(extensionState.state); - return; - } - if (extensionState.get('isLoading') && window.activeTextEditor) { - void window.showTextDocument(window.activeTextEditor.document); - return; - } - - extensionState.set('isLoading', true); - - disposeGenerationDisposables(); - - const detectPositionChange = getPositionChangeDetector( - window.activeTextEditor!.document.fileName, - window.activeTextEditor!.selection.active - ); - - generationDisposables.push( - commands.registerCommand(COMMANDS.STOP_GENERATION, () => { - commandInlineCompletionProvider.stopGeneration(); - }), - window.onDidChangeTextEditorSelection((change) => { - if (!detectPositionChange(change)) { - return; - } - commandInlineCompletionProvider.cancelGeneration(); - }), - languages.registerInlineCompletionItemProvider({ pattern: '**' }, commandInlineCompletionProvider) - ); - - void commands.executeCommand('setContext', EXTENSION_CONTEXT_STATE.GENERATING, true); - - void commandInlineCompletionProvider.triggerCompletion(() => { - disposeGenerationDisposables(); - extensionState.set('isLoading', false); - // TODO: handle unsetting context on error thrown from triggerCompletion - void commands.executeCommand('setContext', EXTENSION_CONTEXT_STATE.GENERATING, false); - }); - } - - const acceptCommandDisposable = commands.registerCommand(COMMANDS.ACCEPT_INLINE_COMPLETION, () => { - void commands.executeCommand('editor.action.inlineSuggest.commit'); - }); - - const generateCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION, () => { - // Update the boolean variable - setIsGeneralTabActive(false); - generateFunction(); - }); - context.subscriptions.push(generateCommandDisposable, acceptCommandDisposable); - this._disposables.push(generateCommandDisposable, acceptCommandDisposable); - - const generateTabCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION_TAB, () => { - setIsGeneralTabActive(true); - generateFunction(); - }); - context.subscriptions.push(generateTabCommandDisposable, acceptCommandDisposable); - this._disposables.push(generateTabCommandDisposable, acceptCommandDisposable); - } - - deactivate(): void { - this._disposables.forEach((disposable) => { - disposable.dispose(); - }); - this._disposables = []; - } -} - -export const streamingInlineCompletion = new StreamingInlineCompletion(); - -function getPositionChangeDetector(fileName: string, initialPosition: Position) { - let prevPosition: Position = initialPosition; - return (change: TextEditorSelectionChangeEvent) => { - if (fileName !== change.textEditor.document.fileName) { - return false; - } - - const currentPosition = change.selections[0].active; - - if (prevPosition.isEqual(currentPosition)) { - return false; - } - - prevPosition = currentPosition; - return true; - }; -} diff --git a/modules/openvino_code/src/inline-completion/tab.ts b/modules/openvino_code/src/inline-completion/tab.ts deleted file mode 100644 index 33bfbd2cd..000000000 --- a/modules/openvino_code/src/inline-completion/tab.ts +++ /dev/null @@ -1,9 +0,0 @@ -let isGeneralTabActiveInternal: boolean = false; - -export function setIsGeneralTabActive(value: boolean): void { - isGeneralTabActiveInternal = value; -} - -export function getIsGeneralTabActive(): boolean { - return isGeneralTabActiveInternal; -} \ No newline at end of file diff --git a/modules/openvino_code/src/lru-cache.decorator.ts b/modules/openvino_code/src/lru-cache.decorator.ts deleted file mode 100644 index 29632aef4..000000000 --- a/modules/openvino_code/src/lru-cache.decorator.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { LRUCache } from 'lru-cache'; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const CACHES = [] as LRUCache[]; - -export const clearLruCache = (): void => { - for (const cache of CACHES) { - cache.clear(); - } -}; - -type AsyncMethodType = (this: unknown, ...args: unknown[]) => Promise; - -interface ILRUCacheConfig { - skipAddToCache?: (result: R) => boolean; -} - -export function lruCache( - config?: ILRUCacheConfig -): (target: unknown, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor { - return (target: unknown, propertyKey: string, descriptor: PropertyDescriptor) => { - const originalMethod = descriptor.value as AsyncMethodType; - - const cache = new LRUCache({ max: 100 }); - CACHES.push(cache); - - descriptor.value = async function (data: object): Promise { - const key = JSON.stringify(data) as K; - - if (cache.has(key)) { - return cache.get(key)!; - } - - const result: V | null = await originalMethod.apply(this, [data]); - - if (result && !config?.skipAddToCache?.(result)) { - cache.set(key, result); - } - - return result; - }; - - return descriptor; - }; -} diff --git a/modules/openvino_code/src/python-server/commands-runner.ts b/modules/openvino_code/src/python-server/commands-runner.ts deleted file mode 100644 index 4ee10fa6b..000000000 --- a/modules/openvino_code/src/python-server/commands-runner.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { ChildProcess, spawn, exec } from 'child_process'; -import { LogOutputChannel } from 'vscode'; -import { logServerMessage } from './server-log'; - -export interface RunCommandOptions { - cwd?: string; - env?: NodeJS.ProcessEnv; - abortSignal?: AbortSignal; - logger: LogOutputChannel | null; - listeners?: Listeners; -} - -interface Listeners { - stdout: (data: string) => void; -} - -export const isAbortError = (error: Error): boolean => error.name === 'AbortError'; - -const pidMessagePrefixer = (pid?: number) => (message: string) => `[Process: ${pid}] ${message}`; - -export function spawnCommand(command: string, args: string[], options: RunCommandOptions) { - const { env, cwd, abortSignal, logger, listeners } = options; - - if (abortSignal?.aborted) { - logger?.debug(`running command: ${command} ${args ? args?.join(' ') : ''} is skipped. Received stop signal`); - return; - } - - logger?.debug(`running command: ${command} ${args ? args?.join(' ') : ''}`); - - const process = spawn(command, args, { - cwd, - env, - signal: abortSignal, - }); - - return waitForChildProcess(process, logger, abortSignal, listeners); -} - -export function execCommand(command: string, options: RunCommandOptions) { - const { env, cwd, abortSignal, logger, listeners } = options; - - if (abortSignal?.aborted) { - logger?.debug(`running command: ${command} is skipped. Received stop signal`); - return; - } - - logger?.debug(`running command: ${command}`); - - const process = exec(command, { - cwd, - env, - signal: abortSignal, - }); - - return waitForChildProcess(process, logger, abortSignal, listeners); -} - -async function waitForChildProcess( - process: ChildProcess, - logger: RunCommandOptions['logger'], - abortSignal?: AbortSignal, - listeners?: Listeners -) { - let result: string = ''; - let error: Error | null = null; - const prefixMessage = pidMessagePrefixer(process.pid); - - const stopSignalHandler = () => { - logger?.debug(prefixMessage('killing process')); - // TODO Consider removing explicit process kill and rely on AbortSignal only - process.kill(); - }; - - abortSignal?.addEventListener('abort', stopSignalHandler, { once: true }); - - return new Promise((resolve, reject) => { - process.stdout?.on('data', (data) => { - const textData = String(data).trim(); - - if (logger) { - logServerMessage(logger, textData, prefixMessage); - } - - if (listeners?.stdout) { - listeners?.stdout(textData); - } else { - // do not accumulate logs if stdout listener passed - result += data; - } - }); - - process.stderr?.on('data', (data) => { - const textData = String(data).trim(); - logger?.error(prefixMessage(textData)); - if (!error) { - error = new Error(textData); - } - }); - - process.on('error', (err) => { - if (isAbortError(err)) { - logger?.debug(prefixMessage(err.message)); - } else { - logger?.error(prefixMessage(err.message)); - } - error = err; - }); - - process.on('close', (code, signal) => { - logger?.debug(prefixMessage(`exited with code: ${code} and signal: ${signal}`)); - - abortSignal?.removeEventListener('abort', stopSignalHandler); - - if (code === 0) { - resolve(result); - } else { - reject(error); - } - }); - }); -} diff --git a/modules/openvino_code/src/python-server/detect-os.ts b/modules/openvino_code/src/python-server/detect-os.ts deleted file mode 100644 index 33b33d819..000000000 --- a/modules/openvino_code/src/python-server/detect-os.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { platform } from 'os'; - -export enum OS { - MAC_OS = 'darwin', - LINUX = 'linux', - WINDOWS = 'win32', -} - -export function detectOs(): OS { - const detectedPlatform = platform(); - if (detectedPlatform === OS.WINDOWS) { - return OS.WINDOWS; - } - if (detectedPlatform === OS.LINUX) { - return OS.LINUX; - } - if (detectedPlatform === OS.MAC_OS) { - return OS.MAC_OS; - } - // as a fallback try linux - return OS.LINUX; -} diff --git a/modules/openvino_code/src/python-server/detect-python.ts b/modules/openvino_code/src/python-server/detect-python.ts deleted file mode 100644 index 584f50a91..000000000 --- a/modules/openvino_code/src/python-server/detect-python.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { LogOutputChannel } from 'vscode'; -import { execCommand } from './commands-runner'; - -export type PythonExecutable = 'python' | 'python3'; -export type Version = [major: string | number, minor: string | number]; - -export async function getPythonExecutable( - requriedVersion: Version, - logger: LogOutputChannel -): Promise { - logger.info('Finding Python executable...'); - - const executables: [PythonExecutable, PythonExecutable] = ['python', 'python3']; - let result: PythonExecutable | null = null; - const errors: unknown[] = []; - - for (const executable of executables) { - try { - await verifyPythonVersion(executable, requriedVersion); - result = executable; - } catch (e) { - errors.push(e); - } - } - - if (result) { - logger.info(`Python executable: ${result}`); - return result; - } - - const errorMessage = ['Cannot find python executable.']; - if (errors.length) { - errorMessage.push(' Next error(s) occured:\n'); - for (const error of errors) { - errorMessage.push(`${String(error)}\n`); - } - } - - throw new Error(errorMessage.join('')); -} - -async function verifyPythonVersion(executable: PythonExecutable, requriedVersion: Version): Promise { - const command = `${executable} --version`; - - const commandResult = await execCommand(command, { - logger: null, // Prevent showing stderr output for `python --version` command (e.g. "/bin/sh: 1: python: not found") - }); - - if (!commandResult) { - throw new Error(`Cannot execute command: ${command}`); - } - - const versionRegex = /[\d.]+/; - const match = commandResult.match(versionRegex); - if (!match) { - throw new Error(`Cannot find python version`); - } - - const [major, minor] = match[0].split('.'); - if (!isVersionCorrect([major, minor], requriedVersion)) { - throw new Error(`Required python version: ${requriedVersion.join('.')}. Actual: ${match[0]}`); - } -} - -function isVersionCorrect(actual: Version, required: Version): boolean { - return Number(actual[0]) >= Number(required[0]) && Number(actual[1]) >= Number(required[1]); -} diff --git a/modules/openvino_code/src/python-server/pip.ts b/modules/openvino_code/src/python-server/pip.ts deleted file mode 100644 index 2769729b4..000000000 --- a/modules/openvino_code/src/python-server/pip.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { execCommand } from './commands-runner'; -import type { PythonServerConfiguration } from './python-server-runner'; -import { getVenvActivateCommand } from './virtual-environment'; - -export async function upgradePip(config: PythonServerConfiguration) { - const { python, serverDir, proxyEnv, abortSignal, logger } = config; - logger.info('Upgrading pip version...'); - - const activateCommand = getVenvActivateCommand(config); - const upgradeCommand = `${python} -m pip install --upgrade pip`; - const command = `${activateCommand} && ${upgradeCommand}`; - await execCommand(command, { - logger, - cwd: serverDir, - abortSignal, - env: { ...proxyEnv }, - }); - - logger.info('Pip version upgraded'); -} - -export async function installRequirements(config: PythonServerConfiguration) { - const { serverDir, proxyEnv, abortSignal, logger } = config; - logger.info('Installing python requirements...'); - - const activateCommand = getVenvActivateCommand(config); - const installCommand = `pip install .`; - const command = `${activateCommand} && ${installCommand}`; - await execCommand(command, { - logger, - cwd: serverDir, - abortSignal, - env: { ...proxyEnv }, - }); - - logger.info('Python requirements installed'); -} diff --git a/modules/openvino_code/src/python-server/proxy.ts b/modules/openvino_code/src/python-server/proxy.ts deleted file mode 100644 index 461772b88..000000000 --- a/modules/openvino_code/src/python-server/proxy.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { workspace } from 'vscode'; - -export interface ProxyEnv { - http_proxy?: string; - https_proxy?: string; - no_proxy?: string; - PIP_PROXY?: string; -} - -export function getProxyEnv(): ProxyEnv | undefined { - return getVSCodeProxyEnv() || getSystemProxyEnv(); -} - -function getVSCodeProxyEnv(): ProxyEnv | undefined { - const httpProxy = workspace.getConfiguration().get('http.proxy'); - - if (!httpProxy) { - return; - } - - return { - http_proxy: httpProxy, - https_proxy: httpProxy, - PIP_PROXY: httpProxy, - }; -} - -function getSystemProxyEnv(): ProxyEnv | undefined { - const settings: ProxyEnv = { - http_proxy: getSystemEnv('http_proxy'), - https_proxy: getSystemEnv('https_proxy'), - no_proxy: getSystemEnv('no_proxy'), - PIP_PROXY: getSystemEnv('http_proxy'), - }; - - const nonEmptySettings: ProxyEnv = {}; - for (const [name, value] of Object.entries(settings)) { - if (value) { - nonEmptySettings[name as keyof ProxyEnv] = value as string; - } - } - if (!Object.keys(nonEmptySettings).length) { - return; - } - return nonEmptySettings; -} - -function getSystemEnv(name: string): string | undefined { - return process.env[name.toLowerCase()] || process.env[name.toUpperCase()]; -} diff --git a/modules/openvino_code/src/python-server/python-server-runner.ts b/modules/openvino_code/src/python-server/python-server-runner.ts deleted file mode 100644 index a13f82dc7..000000000 --- a/modules/openvino_code/src/python-server/python-server-runner.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { isAbortError, spawnCommand } from './commands-runner'; -import { getVenvPythonPath } from './virtual-environment'; -import { PythonExecutable, Version, getPythonExecutable } from './detect-python'; -import { OS, detectOs } from './detect-os'; -import { createVenv, checkActivatedVenv } from './virtual-environment'; -import { upgradePip, installRequirements } from './pip'; -import { ProxyEnv, getProxyEnv } from './proxy'; -import { ServerStateController } from './server-state-controller'; -import { ServerStatus, ServerStartingStage } from '@shared/server-state'; -import { EXTENSION_SERVER_DISPLAY_NAME } from '../constants'; -import { LogOutputChannel, window } from 'vscode'; -import { join } from 'path'; -import { MODEL_NAME_TO_ID_MAP, ModelName } from '@shared/model'; -import { extensionState } from '../state'; -import { clearLruCache } from '../lru-cache.decorator'; -import { DEVICE_NAME_TO_ID_MAP, DeviceName } from '@shared/device'; - -const SERVER_STARTED_STDOUT_ANCHOR = 'OpenVINO Code Server started'; - -interface ServerHooks { - onStarted: () => void; -} - -async function runServer(modelName: ModelName, deviceName: DeviceName, config: PythonServerConfiguration, hooks?: ServerHooks) { - const { serverDir, proxyEnv, abortSignal, logger } = config; - logger.info('Starting server...'); - - const venvPython = await getVenvPythonPath(config); - let started = false; - - function stdoutListener(data: string) { - if (started) { - return; - } - - if (data.includes(SERVER_STARTED_STDOUT_ANCHOR)) { - hooks?.onStarted(); - started = true; - logger.info('Server started'); - } - } - - const model = MODEL_NAME_TO_ID_MAP[modelName]; - const device = DEVICE_NAME_TO_ID_MAP[deviceName]; - - await spawnCommand(venvPython, ['main.py', '--model', model, '--device', device], { - logger, - cwd: serverDir, - abortSignal, - env: { ...proxyEnv }, - listeners: { stdout: stdoutListener }, - }); -} - -const logger = window.createOutputChannel(EXTENSION_SERVER_DISPLAY_NAME, { log: true }); - -const SERVER_DIR = join(__dirname, 'server'); - -export interface PythonServerConfiguration { - python: PythonExecutable; - os: OS; - venvDirName: string; - serverDir: string; - proxyEnv?: ProxyEnv; - abortSignal: AbortSignal; - logger: LogOutputChannel; -} - -export class NativePythonServerRunner { - static readonly REQUIRED_PYTHON_VERSION: Version = [3, 8]; - static readonly VENV_DIR_NAME = '.venv'; - - private _abortController = new AbortController(); - - private readonly _stateController = new ServerStateController(); - get stateReporter() { - return this._stateController.reporter; - } - - async start() { - if (this._stateController.state.status === ServerStatus.STARTED) { - logger.info('Server is already started. Skipping start command'); - return; - } - - this._stateController.setStatus(ServerStatus.STARTING); - - try { - logger.info('Starting Server using python virtual environment...'); - await this._start(); - } catch (e) { - const error = e instanceof Error ? e : new Error(String(e)); - if (isAbortError(error)) { - logger.debug('Server launch was aborted'); - return; - } - logger.error(`Server stopped with error:`); - logger.error(error); - } finally { - this._stateController.setStage(null); - this._stateController.setStatus(ServerStatus.STOPPED); - logger.info('Server stopped'); - } - } - - async _start() { - clearLruCache(); - - const os = detectOs(); - logger.info(`System detected: ${os}`); - - this._stateController.setStage(ServerStartingStage.DETECT_SYSTEM_PYTHON); - - const python: PythonExecutable = await getPythonExecutable( - NativePythonServerRunner.REQUIRED_PYTHON_VERSION, - logger - ); - - const proxyEnv = getProxyEnv(); - if (proxyEnv) { - logger.info('Applying proxy settings:'); - logger.info(JSON.stringify(proxyEnv, null, 2)); - } - - const config: PythonServerConfiguration = { - python, - os, - proxyEnv, - serverDir: SERVER_DIR, - venvDirName: NativePythonServerRunner.VENV_DIR_NAME, - abortSignal: this._abortController.signal, - logger, - }; - - this._stateController.setStage(ServerStartingStage.CREATE_VENV); - - await createVenv(config); - - this._stateController.setStage(ServerStartingStage.CHECK_VENV_ACTIVATION); - - await checkActivatedVenv(config); - - this._stateController.setStage(ServerStartingStage.UPGRADE_PIP); - - await upgradePip(config); - - this._stateController.setStage(ServerStartingStage.INSTALL_REQUIREMENTS); - - await installRequirements(config); - - this._stateController.setStage(ServerStartingStage.START_SERVER); - - const modelName = extensionState.config.model; - const deviceName = extensionState.config.device; - - await runServer(modelName, deviceName, config, { - onStarted: () => { - this._stateController.setStatus(ServerStatus.STARTED); - this._stateController.setStage(null); - }, - }); - } - - stop() { - logger.info('Stopping...'); - this._abortController.abort(); - this._abortController = new AbortController(); - } -} diff --git a/modules/openvino_code/src/python-server/python-server.service.ts b/modules/openvino_code/src/python-server/python-server.service.ts deleted file mode 100644 index 60aa698cf..000000000 --- a/modules/openvino_code/src/python-server/python-server.service.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { ExtensionContext, commands } from 'vscode'; - -import { COMMANDS, EXTENSION_PACKAGE, EXTENSION_SERVER_DISPLAY_NAME } from '../constants'; -import { IExtensionComponent } from '../extension-component.interface'; -import { NativePythonServerRunner } from './python-server-runner'; -import { extensionState } from '../state'; - -class PythonServerService implements IExtensionComponent { - private _pythonServer = new NativePythonServerRunner(); - - activate(context: ExtensionContext): void { - const startCommandDisposable = commands.registerCommand(COMMANDS.START_SERVER_NATIVE, async () => { - void commands.executeCommand(COMMANDS.SHOW_SERVER_LOG); - await this._pythonServer.start(); - }); - - const stopCommandDisposable = commands.registerCommand(COMMANDS.STOP_SERVER_NATIVE, () => - this._pythonServer.stop() - ); - - const showLogCommandDisposable = commands.registerCommand(COMMANDS.SHOW_SERVER_LOG, () => { - void commands.executeCommand( - `workbench.action.output.show.${EXTENSION_PACKAGE.fullName}.${EXTENSION_SERVER_DISPLAY_NAME}` - ); - }); - - const stateSubscriptionDisposable = this._pythonServer.stateReporter.subscribeToStateChange((serverState) => { - extensionState.set('server', serverState); - }); - - context.subscriptions.push( - startCommandDisposable, - stopCommandDisposable, - showLogCommandDisposable, - stateSubscriptionDisposable - ); - } - - deactivate() { - this._pythonServer.stop(); - } -} - -export const pythonServerService = new PythonServerService(); diff --git a/modules/openvino_code/src/python-server/server-log.ts b/modules/openvino_code/src/python-server/server-log.ts deleted file mode 100644 index 37d6c694d..000000000 --- a/modules/openvino_code/src/python-server/server-log.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { LogOutputChannel } from 'vscode'; - -enum LogLevel { - TRACE = 'TRACE', - DEBUG = 'DEBUG', - INFO = 'INFO', - WARNING = 'WARNING', - ERROR = 'ERROR', - CRITICAL = 'CRITICAL', -} - -const serverLogPrefix = '[OpenVINO Code Server Log] '; -const timestampPattern = '\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3}'; -const logLevelPattern = Object.values(LogLevel).join('|'); - -const serverLogRegExp = new RegExp(`^${timestampPattern} (?${logLevelPattern}) (?(?:.|\\n|\\r)+)`); - -interface IServerLog { - level: LogLevel; - message: string; -} - -const parseServerLogs = (output: string): (IServerLog | null)[] => { - const serverLogs = output.split(serverLogPrefix).filter(Boolean); - - return serverLogs.map((log) => { - const match = serverLogRegExp.exec(log); - - const level = match?.groups?.level as LogLevel | undefined; - const message = match?.groups?.message; - - if (!level || !message) { - return null; - } - - return { - level, - message, - }; - }); -}; - -export const logServerMessage = ( - logger: LogOutputChannel, - message: string, - prefixer: (message: string) => string -): void => { - const logLevelToMethodMap: Record = { - [LogLevel.TRACE]: logger.trace.bind(logger), - [LogLevel.DEBUG]: logger.debug.bind(logger), - [LogLevel.INFO]: logger.info.bind(logger), - [LogLevel.WARNING]: logger.warn.bind(logger), - [LogLevel.ERROR]: logger.error.bind(logger), - [LogLevel.CRITICAL]: logger.error.bind(logger), - }; - - const serverLogs = parseServerLogs(message); - - for (const serverLog of serverLogs) { - if (!serverLog) { - logger.debug(message); - } else { - const loggerMethod = logLevelToMethodMap[serverLog.level]; - - loggerMethod(prefixer(serverLog.message)); - } - } -}; diff --git a/modules/openvino_code/src/python-server/server-state-controller.ts b/modules/openvino_code/src/python-server/server-state-controller.ts deleted file mode 100644 index 8c692bfcd..000000000 --- a/modules/openvino_code/src/python-server/server-state-controller.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { EventEmitter } from 'node:events'; -import { ServerState, ServerStatus, ServerStartingStage, INITIAL_SERVER_STATE } from '@shared/server-state'; -import { Disposable } from 'vscode'; - -const changeEventName = 'change'; - -// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging -declare interface ServerStateReporter { - on(eventName: typeof changeEventName, listener: (serverState: ServerState) => void): this; - off(eventName: typeof changeEventName, listener: (serverState: ServerState) => void): this; -} - -// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging -class ServerStateReporter extends EventEmitter { - constructor(private _controller: ServerStateController) { - super(); - } - - get state() { - return this._controller.state; - } - - subscribeToStateChange(listener: (serverState: ServerState) => void): Disposable { - this.on(changeEventName, listener); - return new Disposable(() => this.off('change', listener)); - } -} - -export class ServerStateController { - private _state: ServerState = INITIAL_SERVER_STATE; - - get state() { - return this._state; - } - - readonly reporter = new ServerStateReporter(this); - - setStatus(status: ServerStatus) { - this._state.status = status; - this._emitChange(); - } - - setStage(stage: ServerStartingStage | null) { - this._state.stage = stage; - this._emitChange(); - } - - private _emitChange() { - this.reporter.emit(changeEventName, this._state); - } -} diff --git a/modules/openvino_code/src/python-server/virtual-environment.ts b/modules/openvino_code/src/python-server/virtual-environment.ts deleted file mode 100644 index 466f83e25..000000000 --- a/modules/openvino_code/src/python-server/virtual-environment.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { join } from 'path'; -import { execCommand } from './commands-runner'; -import { OS } from './detect-os'; -import type { PythonServerConfiguration } from './python-server-runner'; -import { stat } from 'fs/promises'; - -export async function createVenv(config: PythonServerConfiguration) { - const { logger, python, serverDir, venvDirName, abortSignal } = config; - logger.info('Creating virtual environment...'); - - const command = `${python} -m venv ${venvDirName}`; - await execCommand(command, { - cwd: serverDir, - logger, - abortSignal, - }); - - logger.info('Virtual environment created'); -} - -export async function checkActivatedVenv(config: PythonServerConfiguration) { - const activateCommand = getVenvActivateCommand(config); - await execCommand(activateCommand, { - cwd: config.serverDir, - logger: config.logger, - abortSignal: config.abortSignal, - }); -} - -export function getVenvActivateCommand({ os, venvDirName, serverDir }: PythonServerConfiguration) { - if (os === OS.WINDOWS) { - return join(serverDir, venvDirName, 'Scripts', 'activate'); - } - const venvPath = join(serverDir, venvDirName, 'bin', 'activate'); - return `. ${venvPath}`; -} - -export async function getVenvPythonPath({ python, os, venvDirName, serverDir, logger }: PythonServerConfiguration) { - /** - * On windows machine it is possible that in venv could be only 'python' executable even for creation 'python3' was used - */ - - const binariesDir = join(serverDir, venvDirName, os === OS.WINDOWS ? 'Scripts' : 'bin'); - const extension = os === OS.WINDOWS ? '.exe' : ''; - - try { - const venvPythonPath = join(binariesDir, `${python}${extension}`); - await stat(venvPythonPath); - return venvPythonPath; - } catch (e) { - logger.debug(`python executable with system matching name ${python} not found in venv`); - } - - // get other 'python' name - const candidates = new Set(['python', 'python3']); - candidates.delete(python); - const candidate = Array.from(candidates.values())[0]; - - logger.debug(`Checking "${candidate}" in venv`); - const candidateVenvPath = join(binariesDir, `${candidate}${extension}`); - await stat(candidateVenvPath); - - logger.debug(`"${candidate}" found in venv`); - return candidateVenvPath; -} - -export function getVenvPip({ os, venvDirName, serverDir }: PythonServerConfiguration) { - if (os === OS.WINDOWS) { - return join(serverDir, venvDirName, 'Scripts', 'pip'); - } - return join(serverDir, venvDirName, 'bin', 'pip'); -} diff --git a/modules/openvino_code/src/services/backend.service.ts b/modules/openvino_code/src/services/backend.service.ts deleted file mode 100644 index 92741669f..000000000 --- a/modules/openvino_code/src/services/backend.service.ts +++ /dev/null @@ -1,147 +0,0 @@ -import fetch, { AbortError, FetchError, RequestInit } from 'node-fetch'; -import { extensionState } from '../state'; -import { notificationService } from './notification.service'; -import { lruCache } from '../lru-cache.decorator'; -import { ConnectionStatus } from '@shared/extension-state'; -import { streamingRequest } from './request'; - -export interface IGenerateRequest { - inputs: string; - parameters: { - temperature: number; - top_k: number; - top_p: number; - min_new_tokens: number; - max_new_tokens: number; - timeout: number; - repetition_penalty: number; - }; -} - -interface IGenerateDocStringRequest { - inputs: string; - template: string; - definition: string; - format?: string; - parameters: { - temperature: number; - top_k: number; - top_p: number; - min_new_tokens: number; - max_new_tokens: number; - timeout: number; - repetition_penalty: number; - }; -} - -interface IGenerateResponse { - generated_text: string; -} - -type RequestMethodType = 'GET' | 'POST'; - -interface RequestOptions { - timeout: number; -} - -class ServerError extends Error {} - -const skipEmptyGeneratedText = (response: IGenerateResponse | null) => !response?.generated_text.trim(); - -class BackendService { - private readonly _apiSlug = 'api'; - - private get _apiUrl(): string { - return `${extensionState.config.serverUrl}/${this._apiSlug}`; - } - - private get _endpoints() { - return { - health: `${this._apiUrl}/health`, - generate: `${this._apiUrl}/generate`, - summarize: `${this._apiUrl}/summarize`, - }; - } - - private readonly _headers = { - 'Content-Type': 'application/json', - Authorization: '', - }; - - private get _requestTimeoutMs(): number { - return extensionState.config.serverRequestTimeout * 1000; - } - - async healthCheck(): Promise { - return this._sendRequest(this._endpoints.health, 'GET', null, { timeout: this._requestTimeoutMs * 2 }); - } - - @lruCache({ skipAddToCache: skipEmptyGeneratedText }) - async generateCompletion(data: IGenerateRequest): Promise { - return this._sendRequest(this._endpoints.generate, 'POST', data); - } - - async generateCompletionStream( - data: IGenerateRequest, - onDataChunk: (chunk: string) => void, - signal?: AbortSignal - ): Promise { - return streamingRequest(`${this._apiUrl}/generate_stream`, onDataChunk, { - method: 'POST', - timeout: this._requestTimeoutMs, - headers: this._headers, - body: data, - signal: signal, - }); - } - - async generateSummarization(data: IGenerateDocStringRequest): Promise { - return this._sendRequest(this._endpoints.summarize, 'POST', data); - } - - private async _sendRequest( - url: string, - method: RequestMethodType, - data?: T, - options: RequestOptions = { timeout: this._requestTimeoutMs } - ): Promise { - const controller = new AbortController(); - - const abortTimeout = setTimeout(() => { - controller.abort(); - }, options.timeout); - - return fetch(url, { - method, - headers: this._headers, - body: data ? JSON.stringify(data) : null, - signal: controller.signal as unknown as RequestInit['signal'], - }) - .then(async (response) => { - if (!response.ok) { - throw new ServerError(`Error during sending request to ${url} (${response.status} ${response.statusText})`); - } - return (await response.json()) as R; - }) - .catch((error) => { - if (error instanceof AbortError) { - console.error('Request was timed out.'); - notificationService.showRequestTimeoutMessage(); - } - if (error instanceof FetchError && url !== this._endpoints.health) { - extensionState.set('connectionStatus', ConnectionStatus.NOT_AVAILABLE); - notificationService.showServerNotAvailableMessage(extensionState.state); - } - if (error instanceof ServerError) { - notificationService.showWarningMessage(error.message); - } - console.error(error); - return null; - }) - .finally(() => { - clearTimeout(abortTimeout); - }); - } -} - -export const backendService = new BackendService(); diff --git a/modules/openvino_code/src/services/connection.service.ts b/modules/openvino_code/src/services/connection.service.ts deleted file mode 100644 index 914d970e3..000000000 --- a/modules/openvino_code/src/services/connection.service.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { ExtensionContext, commands } from 'vscode'; -import { backendService } from './backend.service'; -import { extensionState } from '../state'; -import { COMMANDS } from '../constants'; -import { notificationService } from './notification.service'; -import { IExtensionComponent } from '../extension-component.interface'; -import { ConnectionStatus } from '@shared/extension-state'; -import { ServerStatus } from '@shared/server-state'; - -class ConnectionService implements IExtensionComponent { - private static readonly _checkIntervalMs = 60_000; - - private _intervalTimeout: NodeJS.Timeout | null = null; - - private async _checkConnection({ showNotification } = { showNotification: false }): Promise { - const wasAvailable = extensionState.get('isServerAvailable'); - extensionState.set('connectionStatus', ConnectionStatus.PENDING); - - const isAvailable = await backendService.healthCheck(); - - extensionState.set('connectionStatus', isAvailable ? ConnectionStatus.AVAILABLE : ConnectionStatus.NOT_AVAILABLE); - - if (!isAvailable && (showNotification || wasAvailable)) { - notificationService.showServerNotAvailableMessage(extensionState.state); - } - } - - private _registerCheckConnectionCommand(context: ExtensionContext): void { - const commandDisposable = commands.registerCommand(COMMANDS.CHECK_CONNECTION, () => { - void this._checkConnection({ showNotification: true }); - }); - context.subscriptions.push(commandDisposable); - } - - private _enableConnectionCheck(): void { - if (this._intervalTimeout) { - console.error('Check connection interval already exists.'); - return; - } - - this._intervalTimeout = setInterval(() => { - void this._checkConnection(); - }, ConnectionService._checkIntervalMs); - } - - private _disableConnectionCheck(): void { - if (this._intervalTimeout) { - clearInterval(this._intervalTimeout); - this._intervalTimeout = null; - } - } - - activate(context: ExtensionContext): void { - this._registerCheckConnectionCommand(context); - - // Enable interval connection check when server is started and disable when it is stopped - extensionState.subscribe((state) => { - if (!this._intervalTimeout && state.server.status === ServerStatus.STARTED) { - this._enableConnectionCheck(); - void this._checkConnection({ showNotification: true }); - return; - } - if (this._intervalTimeout && state.server.status === ServerStatus.STOPPED) { - this._disableConnectionCheck(); - void this._checkConnection({ showNotification: false }); - } - }); - } - - deactivate(): void { - this._disableConnectionCheck(); - } -} - -export const connectionService = new ConnectionService(); diff --git a/modules/openvino_code/src/services/notification.service.ts b/modules/openvino_code/src/services/notification.service.ts deleted file mode 100644 index f0344e549..000000000 --- a/modules/openvino_code/src/services/notification.service.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { commands, window } from 'vscode'; -import { COMMANDS, EXTENSION_DISPLAY_NAME } from '../constants'; -import { extensionState } from '../state'; -import { settingsService } from '../settings/settings.service'; -import { IExtensionState } from '@shared/extension-state'; -import { ServerStatus } from '@shared/server-state'; - -class NotificationService { - private static readonly _actions = { - startServer: 'Start Server', - configureSettings: 'Configure in Settings', - tryAgain: 'Check Connection', - }; - - showServerNotAvailableMessage(state: IExtensionState): void { - if (state.server.status === ServerStatus.STOPPED) { - const message = `${EXTENSION_DISPLAY_NAME}: Server is stopped.`; - const { startServer } = NotificationService._actions; - void window.showWarningMessage(message, startServer).then((selection) => { - if (!selection) { - return; - } - if (selection === startServer) { - void commands.executeCommand(COMMANDS.START_SERVER_NATIVE); - } - }); - return; - } - - const message = `${EXTENSION_DISPLAY_NAME}: Server (${extensionState.config.serverUrl}) is not available.`; - const { configureSettings, tryAgain } = NotificationService._actions; - - void window.showWarningMessage(message, configureSettings, tryAgain).then((selection) => { - if (!selection) { - return; - } - if (selection === configureSettings) { - settingsService.openSettings('serverUrl'); - } else if (selection === tryAgain) { - void commands.executeCommand(COMMANDS.CHECK_CONNECTION); - } - }); - } - - showWarningMessage(message: string): void { - const warningMessage = `${EXTENSION_DISPLAY_NAME}: ${message}`; - void window.showWarningMessage(warningMessage); - } - - showRequestTimeoutMessage(): void { - const message = `${EXTENSION_DISPLAY_NAME}: Request to server was aborted due to timeout.`; - const { configureSettings } = NotificationService._actions; - - void window.showErrorMessage(message, configureSettings).then((selection) => { - if (selection === configureSettings) { - settingsService.openSettings('serverRequestTimeout'); - } - }); - } -} - -export const notificationService = new NotificationService(); diff --git a/modules/openvino_code/src/services/request/index.ts b/modules/openvino_code/src/services/request/index.ts deleted file mode 100644 index 3e681ed48..000000000 --- a/modules/openvino_code/src/services/request/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './streaming-request'; diff --git a/modules/openvino_code/src/services/request/streaming-request.ts b/modules/openvino_code/src/services/request/streaming-request.ts deleted file mode 100644 index ca3293492..000000000 --- a/modules/openvino_code/src/services/request/streaming-request.ts +++ /dev/null @@ -1,67 +0,0 @@ -import * as http from 'node:http'; - -interface StreamingRequestOptions { - method: 'GET' | 'POST'; - headers?: Record; - timeout?: number; - body?: T; - signal?: AbortSignal; -} - -function toNodeRequestOptions(url: string, options: StreamingRequestOptions): http.RequestOptions { - const requestUrl = new URL(url); - - return { - protocol: requestUrl.protocol, - hostname: requestUrl.hostname, - port: requestUrl.port, - path: requestUrl.pathname, - method: options.method, - headers: options.headers, - timeout: options.timeout, - }; -} - -enum StatusCode { - OK = 200, -} - -export function streamingRequest( - url: string, - onDataChunk: (chunk: R) => void, - options: StreamingRequestOptions -) { - const requestOptions = toNodeRequestOptions(url, options); - let error: Error | null = null; - - return new Promise((resolve, reject) => { - const request = http.request(requestOptions, (response) => { - if (response.statusCode !== StatusCode.OK) { - reject(response.statusMessage); - return; - } - - response.setEncoding('utf8'); - response.on('data', onDataChunk); - response.once('error', (err) => (error = err)); - response.once('close', () => response.removeAllListeners()); - }); - - request.once('error', (err) => (error = err)); - - request.once('close', () => { - if (error) { - reject(error); - return; - } - resolve(); - }); - - request.write(JSON.stringify(options.body)); - request.end(); - - if (options.signal) { - options.signal.onabort = () => request.destroy(); - } - }); -} diff --git a/modules/openvino_code/src/services/status-bar.service.ts b/modules/openvino_code/src/services/status-bar.service.ts deleted file mode 100644 index 5fd53c05f..000000000 --- a/modules/openvino_code/src/services/status-bar.service.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { StatusBarAlignment, window, commands, ExtensionContext } from 'vscode'; -import { COMMANDS, EXTENSION_DISPLAY_NAME } from '../constants'; -import { extensionState } from '../state'; -import { IExtensionState, ConnectionStatus } from '@shared/extension-state'; -import { IExtensionComponent } from '../extension-component.interface'; - -class StatusBarContent { - private _innerText: string; - set innerText(value: StatusBarContent['_innerText']) { - this._innerText = value; - this._onUpdate?.(this.text); - } - - private _suffixIcon: string | null = null; - set suffixIcon(value: StatusBarContent['_suffixIcon']) { - this._suffixIcon = value; - this._onUpdate?.(this.text); - } - - private _onUpdate: (text: string) => void; - - constructor(innerText: string, onUpdate: StatusBarContent['_onUpdate']) { - this._onUpdate = onUpdate; - this._innerText = innerText; - } - - get text(): string { - return `${this._innerText} ${this._suffixIcon ?? ''}`; - } -} - -class StatusBarService implements IExtensionComponent { - private _statusBar = window.createStatusBarItem(StatusBarAlignment.Left, -1); - - private readonly _statusBarContent = new StatusBarContent(EXTENSION_DISPLAY_NAME, (text: string) => { - this._statusBar.text = text; - }); - - private static readonly _icons = { - loading: '$(loading~spin)', - disconnect: '$(debug-disconnect)', - pass: '$(pass)', - }; - - private static readonly _statusToIconMap: Record = { - [ConnectionStatus.NOT_AVAILABLE]: StatusBarService._icons.disconnect, - [ConnectionStatus.PENDING]: StatusBarService._icons.loading, - [ConnectionStatus.AVAILABLE]: StatusBarService._icons.pass, - }; - - constructor() { - this._statusBarContent.suffixIcon = StatusBarService._icons.disconnect; - this._statusBar.tooltip = `Show ${EXTENSION_DISPLAY_NAME} Side Panel`; - this._statusBar.command = COMMANDS.STATUS_BAR; - this._statusBar.show(); - this._subscribeToStateChange(); - } - - private static _registerStatusBarCommand(context: ExtensionContext): void { - const commandDisposable = commands.registerCommand(COMMANDS.STATUS_BAR, () => { - void commands.executeCommand(COMMANDS.FOCUS_SIDE_PANEL); - }); - context.subscriptions.push(commandDisposable); - } - - private _subscribeToStateChange(): void { - extensionState.subscribe((state) => { - this._setSuffixIcon(state); - }); - } - - private _setSuffixIcon({ isLoading, connectionStatus }: IExtensionState): void { - const icon = - isLoading || connectionStatus === ConnectionStatus.PENDING - ? StatusBarService._icons.loading - : StatusBarService._statusToIconMap[connectionStatus]; - - this._statusBarContent.suffixIcon = icon; - } - - activate(context: ExtensionContext): void { - context.subscriptions.push(this._statusBar); - StatusBarService._registerStatusBarCommand(context); - } - - deactivate(): void {} -} - -export const statusBarService = new StatusBarService(); diff --git a/modules/openvino_code/src/settings/settings.service.ts b/modules/openvino_code/src/settings/settings.service.ts deleted file mode 100644 index 62c38151a..000000000 --- a/modules/openvino_code/src/settings/settings.service.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { ConfigurationTarget, ExtensionContext, commands } from 'vscode'; -import { COMMANDS, CONFIG_KEY, EXTENSION_PACKAGE, EXTENSION_DISPLAY_NAME } from '../constants'; -import { CustomConfiguration } from '../configuration'; -import { IExtensionComponent } from '../extension-component.interface'; -import { extensionState } from '../state'; - -class SettingsService implements IExtensionComponent { - activate(context: ExtensionContext): void { - const settingsCommandDisposable = commands.registerCommand( - COMMANDS.OPEN_SETTINGS, - (key?: keyof CustomConfiguration) => { - this.openSettings(key); - } - ); - - const showLogCommandDisposable = commands.registerCommand(COMMANDS.SHOW_EXTENSION_LOG, () => { - void commands.executeCommand( - `workbench.action.output.show.${EXTENSION_PACKAGE.fullName}.${EXTENSION_DISPLAY_NAME}` - ); - }); - - context.subscriptions.push(settingsCommandDisposable, showLogCommandDisposable); - } - - deactivate(): void {} - - openSettings(key?: keyof CustomConfiguration): void { - const configKey = key ? [CONFIG_KEY, key].join('.') : CONFIG_KEY; - void commands.executeCommand('workbench.action.openSettings', configKey); - } - - updateSetting(key: K, value: CustomConfiguration[K]): void { - // FIXME, TODO: model selection configuration update doesn't work if configuration is in .vscode/settings.json - void extensionState.config.update(key, value, ConfigurationTarget.Global); - } -} - -export const settingsService = new SettingsService(); diff --git a/modules/openvino_code/src/side-panel/index.ts b/modules/openvino_code/src/side-panel/index.ts deleted file mode 100644 index 660bf636e..000000000 --- a/modules/openvino_code/src/side-panel/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ExtensionContext, ExtensionMode, window } from 'vscode'; -import { SidePanelViewProvider } from './side-panel-view-provider'; -import { IExtensionComponent } from '../extension-component.interface'; - -class SidePanel implements IExtensionComponent { - activate(context: ExtensionContext): void { - const isProductionMode = context.extensionMode === ExtensionMode.Production; - const sidePanelViewProvider = new SidePanelViewProvider(context.extensionUri, isProductionMode); - - context.subscriptions.push(window.registerWebviewViewProvider(SidePanelViewProvider.viewId, sidePanelViewProvider)); - } - - deactivate(): void {} -} - -export const sidePanel = new SidePanel(); diff --git a/modules/openvino_code/src/side-panel/side-panel-message-handler.ts b/modules/openvino_code/src/side-panel/side-panel-message-handler.ts deleted file mode 100644 index 55a63639c..000000000 --- a/modules/openvino_code/src/side-panel/side-panel-message-handler.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ISidePanelMessage, SidePanelMessageTypes } from '@shared/side-panel-message'; -import { extensionState } from '../state'; -import { Webview, commands } from 'vscode'; -import { settingsService } from '../settings/settings.service'; -import { COMMANDS } from '../constants'; -import { ModelName } from '@shared/model'; -import { DeviceName } from '@shared/device'; - -type SidePanelMessageHandlerType = (webview: Webview, payload?: ISidePanelMessage['payload']) => void; - -const sidePanelMessageHandlers: Record = { - [SidePanelMessageTypes.GET_EXTENSION_STATE]: (webview) => void webview.postMessage(extensionState.state), - [SidePanelMessageTypes.SETTINGS_CLICK]: () => settingsService.openSettings(), - [SidePanelMessageTypes.MODEL_CHANGE]: (_, payload) => - settingsService.updateSetting('model', (payload as { modelName: ModelName }).modelName), - [SidePanelMessageTypes.DEVICE_CHANGE]: (_, payload) => - settingsService.updateSetting('device', (payload as { deviceName: DeviceName }).deviceName), - [SidePanelMessageTypes.START_SERVER_CLICK]: () => void commands.executeCommand(COMMANDS.START_SERVER_NATIVE), - [SidePanelMessageTypes.STOP_SERVER_CLICK]: () => void commands.executeCommand(COMMANDS.STOP_SERVER_NATIVE), - [SidePanelMessageTypes.SHOW_SERVER_LOG_CLICK]: () => void commands.executeCommand(COMMANDS.SHOW_SERVER_LOG), - [SidePanelMessageTypes.SHOW_EXTENSION_LOG_CLICK]: () => void commands.executeCommand(COMMANDS.SHOW_EXTENSION_LOG), - [SidePanelMessageTypes.CHECK_CONNECTION_CLICK]: () => void commands.executeCommand(COMMANDS.CHECK_CONNECTION), - [SidePanelMessageTypes.GENERATE_COMPLETION_CLICK]: () => - void commands.executeCommand(COMMANDS.GENERATE_INLINE_COPMLETION), -}; - -export function handleSidePanelMessage(message: M, webview: Webview): void { - const { type, payload } = message; - const handler = sidePanelMessageHandlers[type]; - handler(webview, payload); -} diff --git a/modules/openvino_code/src/side-panel/side-panel-view-provider.ts b/modules/openvino_code/src/side-panel/side-panel-view-provider.ts deleted file mode 100644 index b27063a7e..000000000 --- a/modules/openvino_code/src/side-panel/side-panel-view-provider.ts +++ /dev/null @@ -1,173 +0,0 @@ -import { - CancellationToken, - Disposable, - Uri, - Webview, - WebviewView, - WebviewViewProvider, - WebviewViewResolveContext, -} from 'vscode'; -import { SIDE_PANEL_VIEW_ID } from '../constants'; -import { ISidePanelMessage } from '@shared/side-panel-message'; -import { extensionState } from '../state'; -import { IExtensionState } from '@shared/extension-state'; -import { handleSidePanelMessage } from './side-panel-message-handler'; - -export class SidePanelViewProvider implements WebviewViewProvider { - static viewId = SIDE_PANEL_VIEW_ID; - - private _view?: WebviewView; - private _disposables: Disposable[] = []; - - constructor( - private readonly _extensionUri: Uri, - private readonly _isProductionMode: boolean - ) {} - - resolveWebviewView( - webviewView: WebviewView, - _context: WebviewViewResolveContext, - _token: CancellationToken - ): void | Thenable { - this._view = webviewView; - this._view.webview.options = { - enableScripts: true, - localResourceRoots: this._getLocalResourceRoots(this._isProductionMode), - }; - this._view.webview.html = this._getHtmlForWebview(this._view.webview, this._isProductionMode); - - this._view.onDidDispose(() => this._disposeView(), null, this._disposables); - - this._subscribeToWebviewMessages(this._view.webview); - this._enablePostingToWebview(this._view.webview); - } - - private _getLocalResourceRoots(isProductionMode: boolean): Uri[] { - const localResourceRoots = [ - Uri.joinPath(this._extensionUri, 'out'), - Uri.joinPath(this._extensionUri, 'side-panel-ui', 'dist'), - ]; - - if (!isProductionMode) { - const devCodiconsDistUri = Uri.joinPath(this._extensionUri, 'node_modules', '@vscode', 'codicons', 'dist'); - localResourceRoots.push(devCodiconsDistUri); - } - - return localResourceRoots; - } - - private _disposeView(): void { - while (this._disposables.length) { - const disposable = this._disposables.pop(); - if (disposable) { - disposable.dispose(); - } - } - } - - private _enablePostingToWebview(webview: Webview): void { - const stateChangeListener = (state: IExtensionState) => { - void webview.postMessage(state); - }; - extensionState.subscribe(stateChangeListener); - const stateChangeDisposable = new Disposable(() => { - extensionState.unsubscribe(stateChangeListener); - }); - this._disposables.push(stateChangeDisposable); - } - - private _subscribeToWebviewMessages(webview: Webview): void { - webview.onDidReceiveMessage( - (message: M) => { - handleSidePanelMessage(message, webview); - }, - null, - this._disposables - ); - } - - private _getHtmlForWebview(webview: Webview, isProductionMode: boolean): string { - return isProductionMode ? this._getProductionHtml(webview) : this._getDevelopmentHtml(webview); - } - - private _getDevelopmentHtml(webview: Webview): string { - const viteDevServerUrl = 'http://localhost:5173'; - const codiconsUri = webview.asWebviewUri( - Uri.joinPath(this._extensionUri, 'node_modules', '@vscode', 'codicons', 'dist', 'codicon.css') - ); - - return ` - - - - - - - - - - -
- Vite dev server is not running. -
- Run npm run start:side-panel
- - - `; - } - - private _getProductionHtml(webview: Webview): string { - const sidePanelAssetsPathList = ['side-panel-ui', 'dist', 'assets']; - const scriptUri = getUri(webview, this._extensionUri, [...sidePanelAssetsPathList, 'index.js']); - const stylesUri = getUri(webview, this._extensionUri, [...sidePanelAssetsPathList, 'index.css']); - const codiconUri = getUri(webview, this._extensionUri, [...sidePanelAssetsPathList, 'codicon.css']); - - const nonce = getNonce(); - - return ` - - - - - - - - - - - - - OpenVINO Code - Side Panel - - -
- - - `; - } -} - -function getNonce(): string { - let text = ''; - const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - for (let i = 0; i < 32; i++) { - text += possible.charAt(Math.floor(Math.random() * possible.length)); - } - return text; -} - -function getUri(webview: Webview, extensionUri: Uri, pathList: string[]) { - return webview.asWebviewUri(Uri.joinPath(extensionUri, ...pathList)); -} diff --git a/modules/openvino_code/src/state.ts b/modules/openvino_code/src/state.ts deleted file mode 100644 index f2c9fea5c..000000000 --- a/modules/openvino_code/src/state.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { EventEmitter } from 'stream'; -import { ExtensionContext, workspace } from 'vscode'; -import { ExtensionConfiguration, getConfig } from './configuration'; -import { CONFIG_KEY } from './constants'; -import { IExtensionComponent } from './extension-component.interface'; -import { IExtensionState, ConnectionStatus } from '@shared/extension-state'; -import { INITIAL_SERVER_STATE, ServerStatus } from '@shared/server-state'; -import { MODEL_SUPPORTED_FEATURES } from '@shared/model'; -import { Features } from '@shared/features'; -import { platform } from 'process'; - -class ExtensionState implements IExtensionComponent { - private readonly _state: IExtensionState = { - isLoading: false, - connectionStatus: ConnectionStatus.NOT_AVAILABLE, - server: INITIAL_SERVER_STATE, - get isServerAvailable(): boolean { - return this.server.status === ServerStatus.STARTED && this.connectionStatus === ConnectionStatus.AVAILABLE; - }, - get config(): ExtensionConfiguration { - return getConfig(); - }, - features: { - get supportedList(): Features[] { - const config = getConfig(); - return MODEL_SUPPORTED_FEATURES[config.model]; - }, - get isSummarizationSupported(): boolean { - return this.supportedList.includes(Features.SUMMARIZATION); - }, - }, - platform, - }; - - private _emitter = new EventEmitter(); - - private static readonly _stateChangedEvent = 'ExtensionState:stateChanged'; - - private _extensionContext: ExtensionContext | null = null; - - get state(): IExtensionState { - return this._state; - } - - get config(): ExtensionConfiguration { - return this._state.config; - } - - activate(extensionContext: ExtensionContext): void { - // Might be used to store configuration in `extensionContext.globalState` - this._extensionContext = extensionContext; - - workspace.onDidChangeConfiguration( - (event) => { - if (event.affectsConfiguration(CONFIG_KEY)) { - this._emitCurrentState(); - } - }, - null, - extensionContext.subscriptions - ); - } - - private _emitCurrentState(): void { - this._emitter.emit(ExtensionState._stateChangedEvent, this._state); - } - - set(key: K, value: IExtensionState[K]): void { - this._state[key] = value; - this._emitCurrentState(); - } - - get(key: K): IExtensionState[K] { - return this._state[key]; - } - - subscribe(listener: (state: IExtensionState) => void): void { - this._emitter.on(ExtensionState._stateChangedEvent, listener); - } - - unsubscribe(listener: (state: IExtensionState) => void): void { - this._emitter.removeListener(ExtensionState._stateChangedEvent, listener); - } - - deactivate(): void { - this._emitter.removeAllListeners(); - } -} - -export const extensionState = new ExtensionState(); diff --git a/modules/openvino_code/tsconfig.json b/modules/openvino_code/tsconfig.json deleted file mode 100644 index 60f58bd71..000000000 --- a/modules/openvino_code/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es2018", - "lib": ["es2018", "WebWorker"], - "outDir": "out", - "sourceMap": true, - "strict": true, - "alwaysStrict": true, - "strictNullChecks": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "noImplicitAny": true, - "noImplicitThis": true, - "noFallthroughCasesInSwitch": true, - "allowSyntheticDefaultImports": true, - "experimentalDecorators": true, - "paths": { - "@shared/*": ["./shared/*"] - } - }, - "exclude": ["node_modules", "side-panel-ui"] -} diff --git a/modules/openvino_code/webpack.config.js b/modules/openvino_code/webpack.config.js deleted file mode 100644 index 9c701defd..000000000 --- a/modules/openvino_code/webpack.config.js +++ /dev/null @@ -1,73 +0,0 @@ -// @ts-check -const path = require('path'); -const CopyPlugin = require('copy-webpack-plugin'); -const TerserPlugin = require('terser-webpack-plugin'); -const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); - -/** @typedef {import('webpack').Configuration} WebpackConfig **/ - -/** @type WebpackConfig */ -const config = { - target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ - - entry: { - extension: './src/extension.ts', - }, // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ - output: { - // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ - path: path.resolve(__dirname, 'out'), - filename: `[name].js`, - libraryTarget: 'commonjs2', - devtoolModuleFilenameTemplate: '../[resource-path]', - }, - node: { - __dirname: false, // leave the __dirname behavior intact - }, - devtool: 'source-map', - externals: { - vscode: 'commonjs vscode', // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ - }, - resolve: { - // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader - extensions: ['.ts', '.js'], - alias: { - '@shared': path.resolve(__dirname, 'shared'), - }, - }, - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: [ - { - loader: 'ts-loader', - }, - ], - }, - ], - }, - plugins: [ - new CopyPlugin({ - patterns: [ - { from: './src/docstring/docstring-template/templates', to: './doc_string/templates' }, - { from: './server', to: './server', globOptions: { gitignore: true } }, - ], - }), - ], - optimization: { - minimizer: [new TerserPlugin({ extractComments: false })], - }, -}; - -/** - * @typedef {Function} - * @param {{ analyzeBundle: boolean }} env - * */ -module.exports = (env) => { - if (env.analyzeBundle) { - config.plugins?.push(new BundleAnalyzerPlugin()); - } - - return [config]; -};