├── .eslintrc.js ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── .yarnrc ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── SECURITY.md ├── SUPPORT.md ├── ci.yml ├── package.json ├── pipeline.yml ├── src ├── extension.ts ├── optIn.ts ├── testConverter.ts └── testConverterFactory.ts ├── tsconfig.json └── yarn.lock /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | ignorePatterns: ['**/*.d.ts', '**/*.test.ts', '**/*.js'], 3 | parser: '@typescript-eslint/parser', 4 | extends: ['plugin:@typescript-eslint/recommended'], 5 | plugins: ['header'], 6 | parserOptions: { 7 | ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features 8 | sourceType: 'module', // Allows for the use of imports 9 | }, 10 | rules: { 11 | '@typescript-eslint/no-use-before-define': 'off', 12 | '@typescript-eslint/explicit-function-return-type': 'off', 13 | '@typescript-eslint/no-non-null-assertion': 'off', 14 | '@typescript-eslint/explicit-module-boundary-types': 'off', 15 | 'header/header': [ 16 | 'error', 17 | 'block', 18 | '---------------------------------------------------------\n * Copyright (C) Microsoft Corporation. All rights reserved.\n *--------------------------------------------------------', 19 | ], 20 | // Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs 21 | // e.g. "@typescript-eslint/explicit-function-return-type": "off", 22 | }, 23 | }; 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | node_modules 4 | .vscode-test/ 5 | *.vsix 6 | 7 | /vscode.proposed.d.ts 8 | /vscode.d.ts 9 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "dbaeumer.vscode-eslint", 6 | "esbenp.prettier-vscode", 7 | "connor4312.esbuild-problem-matchers" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/out/**/*.js" 17 | ], 18 | "preLaunchTask": "npm: watch" 19 | }, 20 | { 21 | "name": "Extension Tests", 22 | "type": "extensionHost", 23 | "request": "launch", 24 | "args": [ 25 | "--extensionDevelopmentPath=${workspaceFolder}", 26 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" 27 | ], 28 | "outFiles": [ 29 | "${workspaceFolder}/out/test/**/*.js" 30 | ], 31 | "preLaunchTask": "${defaultBuildTask}" 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "editor.formatOnSave": true, 4 | "editor.defaultFormatter": "esbenp.prettier-vscode", 5 | "editor.codeActionsOnSave": { 6 | "source.organizeImports": "explicit" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "type": "npm", 6 | "script": "watch", 7 | "group": "build", 8 | "problemMatcher": "$esbuild-watch", 9 | "isBackground": true, 10 | "label": "npm: watch", 11 | }, 12 | { 13 | "type": "npm", 14 | "script": "build", 15 | "group": "build", 16 | "problemMatcher": "$esbuild", 17 | "label": "npm: build", 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/test/** 4 | src/** 5 | .gitignore 6 | .yarnrc 7 | vsc-extension-quickstart.md 8 | **/tsconfig.json 9 | **/.eslintrc.json 10 | **/*.map 11 | **/*.ts 12 | -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | --ignore-engines true -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "test-adapter-converter" extension will be documented in this file. 4 | 5 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 6 | 7 | ## [Unreleased] 8 | 9 | - Initial release -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vscode-test-adapter-converter 2 | 3 | This is an extension that converts from the [Test Explorer UI](https://marketplace.visualstudio.com/items?itemName=hbenl.vscode-test-explorer) API into native VS Code testing. You can use this by setting `testExplorer.useNativeTesting: true` in your user settings. 4 | 5 | ## Contributing 6 | 7 | This project welcomes contributions and suggestions. Most contributions require you to agree to a 8 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 9 | the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. 10 | 11 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide 12 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions 13 | provided by the bot. You will only need to do this once across all repos using our CLA. 14 | 15 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 16 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 17 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 18 | 19 | ## Trademarks 20 | 21 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft 22 | trademarks or logos is subject to and must follow 23 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). 24 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. 25 | Any use of third-party trademarks or logos are subject to those third-party's policies. 26 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). 40 | 41 | -------------------------------------------------------------------------------- /SUPPORT.md: -------------------------------------------------------------------------------- 1 | # TODO: The maintainer of this repo has not yet edited this file 2 | 3 | **REPO OWNER**: Do you want Customer Service & Support (CSS) support for this product/project? 4 | 5 | - **No CSS support:** Fill out this template with information about how to file issues and get help. 6 | - **Yes CSS support:** Fill out an intake form at [aka.ms/spot](https://aka.ms/spot). CSS will work with/help you to determine next steps. More details also available at [aka.ms/onboardsupport](https://aka.ms/onboardsupport). 7 | - **Not sure?** Fill out a SPOT intake as though the answer were "Yes". CSS will help you decide. 8 | 9 | *Then remove this first heading from this SUPPORT.MD file before publishing your repo.* 10 | 11 | # Support 12 | 13 | ## How to file issues and get help 14 | 15 | This project uses GitHub Issues to track bugs and feature requests. Please search the existing 16 | issues before filing new issues to avoid duplicates. For new issues, file your bug or 17 | feature request as a new Issue. 18 | 19 | For help and questions about using this project, please **REPO MAINTAINER: INSERT INSTRUCTIONS HERE 20 | FOR HOW TO ENGAGE REPO OWNERS OR COMMUNITY FOR HELP. COULD BE A STACK OVERFLOW TAG OR OTHER 21 | CHANNEL. WHERE WILL YOU HELP PEOPLE?**. 22 | 23 | ## Microsoft Support Policy 24 | 25 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above. 26 | -------------------------------------------------------------------------------- /ci.yml: -------------------------------------------------------------------------------- 1 | trigger: 2 | branches: 3 | include: 4 | - main 5 | pr: none 6 | 7 | resources: 8 | repositories: 9 | - repository: templates 10 | type: github 11 | name: microsoft/vscode-engineering 12 | ref: main 13 | endpoint: Monaco 14 | 15 | parameters: 16 | - name: publishExtension 17 | displayName: 🚀 Publish Extension 18 | type: boolean 19 | default: false 20 | 21 | extends: 22 | template: azure-pipelines/extension/stable.yml@templates 23 | parameters: 24 | buildSteps: 25 | - script: yarn install --frozen-lockfile 26 | displayName: Install dependencies 27 | 28 | - script: yarn run vscode:prepublish 29 | displayName: Compile 30 | 31 | tsa: 32 | enabled: true 33 | options: 34 | codebaseName: 'devdiv_$(Build.Repository.Name)' 35 | serviceTreeID: 'c8cb03c6-176e-40dd-90a5-518de08666dc' 36 | instanceUrl: 'https://devdiv.visualstudio.com/defaultcollection' 37 | projectName: 'DevDiv' 38 | areaPath: 'DevDiv\\VS Code (compliance tracking only)\\Visual Studio Code Miscellaneous Extensions' 39 | notificationAliases: 40 | - 'stbatt@microsoft.com' 41 | - 'lszomoru@microsoft.com' 42 | - 'copeet@microsoft.com' 43 | 44 | publishExtension: ${{ parameters.publishExtension }} 45 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-adapter-converter", 3 | "displayName": "Test Adapter Converter", 4 | "description": "Converter extension from the Test Adapter UI to native VS Code testing", 5 | "publisher": "ms-vscode", 6 | "version": "0.2.1", 7 | "engines": { 8 | "vscode": "^1.93.0" 9 | }, 10 | "capabilities": { 11 | "untrustedWorkspaces": { 12 | "supported": true 13 | } 14 | }, 15 | "categories": [ 16 | "Other" 17 | ], 18 | "activationEvents": [ 19 | "onCommand:test-explorer.run", 20 | "onCommand:test-explorer.run-all" 21 | ], 22 | "main": "./out/extension.js", 23 | "contributes": { 24 | "commands": [ 25 | { 26 | "command": "testExplorerConverter.useNativeTesting", 27 | "title": "Use Native Testing" 28 | }, 29 | { 30 | "command": "testExplorerConverter.activate", 31 | "title": "Activate Test Adapter Converter" 32 | } 33 | ], 34 | "menus": { 35 | "commandPalette": [ 36 | { 37 | "command": "testExplorerConverter.activate", 38 | "when": "false" 39 | }, 40 | { 41 | "command": "testExplorerConverter.useNativeTesting", 42 | "when": "false" 43 | } 44 | ] 45 | } 46 | }, 47 | "repository": { 48 | "type": "git", 49 | "url": "git+https://github.com/microsoft/vscode-test-adapter-converter.git" 50 | }, 51 | "author": "Connor Peet ", 52 | "license": "MIT", 53 | "bugs": { 54 | "url": "https://github.com/microsoft/vscode-test-adapter-converter/issues" 55 | }, 56 | "homepage": "https://github.com/microsoft/vscode-test-adapter-converter#readme", 57 | "scripts": { 58 | "vscode:prepublish": "npm run -S esbuild-base -- --minify", 59 | "esbuild-base": "rimraf out && esbuild ./src/extension.ts --bundle --outfile=out/extension.js --external:vscode --format=cjs --platform=node --target=node20", 60 | "build": "npm run -S esbuild-base -- --sourcemap", 61 | "watch": "npm run -S esbuild-base -- --sourcemap --watch", 62 | "fmt": "prettier --write \"src/**/*.ts\"&& npm run test -- --fix", 63 | "test": "eslint src --ext ts && tsc --noEmit" 64 | }, 65 | "devDependencies": { 66 | "@types/vscode": "^1.93.0", 67 | "@typescript-eslint/eslint-plugin": "^5.47.1", 68 | "@typescript-eslint/parser": "^5.47.1", 69 | "esbuild": "^0.23.1", 70 | "eslint": "^8.30.0", 71 | "eslint-plugin-header": "^3.1.1", 72 | "prettier": "^2.8.1", 73 | "rimraf": "^3.0.2", 74 | "typescript": "^5.6.2", 75 | "vscode-test-adapter-api": "^1.9.0" 76 | }, 77 | "prettier": { 78 | "printWidth": 100, 79 | "singleQuote": true, 80 | "tabWidth": 2, 81 | "arrowParens": "avoid" 82 | }, 83 | "dependencies": { 84 | "ansi-colors": "^4.1.3", 85 | "stacktrace-parser": "^0.1.10" 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /pipeline.yml: -------------------------------------------------------------------------------- 1 | trigger: 2 | branches: 3 | include: 4 | - main 5 | pr: none 6 | 7 | resources: 8 | repositories: 9 | - repository: templates 10 | type: github 11 | name: microsoft/vscode-engineering 12 | ref: main 13 | endpoint: Monaco 14 | 15 | parameters: 16 | - name: publishExtension 17 | displayName: 🚀 Publish Extension 18 | type: boolean 19 | default: false 20 | 21 | extends: 22 | template: azure-pipelines/extension/stable.yml@templates 23 | parameters: 24 | buildSteps: 25 | - script: yarn install --frozen-lockfile 26 | displayName: Install dependencies 27 | 28 | - script: yarn test 29 | displayName: Test 30 | 31 | - script: yarn run vscode:prepublish 32 | displayName: Compile 33 | 34 | tsa: 35 | config: 36 | areaPath: 'Visual Studio Code Miscellaneous Extensions' 37 | serviceTreeID: 'c8cb03c6-176e-40dd-90a5-518de08666dc' 38 | enabled: true 39 | 40 | publishExtension: ${{ parameters.publishExtension }} 41 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------- 2 | * Copyright (C) Microsoft Corporation. All rights reserved. 3 | *--------------------------------------------------------*/ 4 | 5 | import * as vscode from 'vscode'; 6 | import { testExplorerExtensionId, TestHub } from 'vscode-test-adapter-api'; 7 | import { 8 | OptInController, 9 | switchToNativeTesting, 10 | useNativeTestingConfig, 11 | usingNativeTesting, 12 | } from './optIn'; 13 | import { TestConverterFactory } from './testConverterFactory'; 14 | 15 | export function activate(context: vscode.ExtensionContext) { 16 | let factory: TestConverterFactory | undefined; 17 | 18 | const optIn = new OptInController(context); 19 | if (optIn.shouldPrompt()) { 20 | setTimeout(() => { 21 | const testHub = vscode.extensions.getExtension(testExplorerExtensionId)?.exports; 22 | 23 | if (!testHub) { 24 | return; 25 | } 26 | 27 | testHub.registerTestController(optIn); 28 | context.subscriptions.push({ 29 | dispose() { 30 | testHub.unregisterTestController(optIn); 31 | }, 32 | }); 33 | }, 2000); 34 | } 35 | 36 | context.subscriptions.push( 37 | vscode.commands.registerCommand('testExplorerConverter.activate', () => { 38 | const testHub = vscode.extensions.getExtension(testExplorerExtensionId)?.exports; 39 | if (!testHub) { 40 | return; 41 | } 42 | 43 | factory = new TestConverterFactory(); 44 | context.subscriptions.push(factory); 45 | 46 | testHub.registerTestController(factory); 47 | context.subscriptions.push({ 48 | dispose() { 49 | testHub.unregisterTestController(factory!); 50 | }, 51 | }); 52 | }), 53 | 54 | vscode.workspace.onDidChangeConfiguration(e => { 55 | if (!e.affectsConfiguration(useNativeTestingConfig)) { 56 | return; 57 | } 58 | 59 | if (!usingNativeTesting()) { 60 | factory?.dispose(); 61 | factory = undefined; 62 | } 63 | }), 64 | 65 | vscode.commands.registerCommand('testExplorerConverter.useNativeTesting', () => 66 | switchToNativeTesting() 67 | ), 68 | 69 | vscode.commands.registerCommand('testExplorerConverter.showError', controllerId => { 70 | const error = factory?.getByControllerId(controllerId)?.error; 71 | if (error) { 72 | openUntitledEditor(error); 73 | } 74 | }) 75 | ); 76 | } 77 | 78 | const openUntitledEditor = async (contents: string) => { 79 | const untitledDoc = await vscode.workspace.openTextDocument({ content: contents }); 80 | await vscode.window.showTextDocument(untitledDoc); 81 | }; 82 | -------------------------------------------------------------------------------- /src/optIn.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------- 2 | * Copyright (C) Microsoft Corporation. All rights reserved. 3 | *--------------------------------------------------------*/ 4 | 5 | import * as vscode from 'vscode'; 6 | import { TestAdapter, TestController as TestAdapterController } from 'vscode-test-adapter-api'; 7 | 8 | const didGloballyEnableKey = 'didAutoGloballyEnable'; 9 | const promptStorageKey = 'promptedToUseNative2'; 10 | let promptedThisSession = false; 11 | export const useNativeTestingConfig = 'testExplorer.useNativeTesting'; 12 | 13 | export const usingNativeTesting = () => 14 | !!vscode.workspace.getConfiguration().get(useNativeTestingConfig, false); 15 | 16 | export const switchToNativeTesting = (target = vscode.ConfigurationTarget.Global, silent = false) => { 17 | const config = vscode.workspace.getConfiguration(); 18 | config.update(useNativeTestingConfig, true, target); 19 | if (!silent) { 20 | vscode.window.showInformationMessage( 21 | 'Thanks for taking native testing for a spin! If you run into problems, you can turn the new experience off with the "testExplorer.useNativeTesting" setting.' 22 | ); 23 | } 24 | }; 25 | 26 | export const shouldPromptForNativeTesting = () => !usingNativeTesting(); 27 | 28 | export class OptInController implements TestAdapterController { 29 | constructor(private readonly context: vscode.ExtensionContext) {} 30 | 31 | /** @inheritdoc */ 32 | public registerTestAdapter(adapter: TestAdapter): void { 33 | if (!this.shouldPrompt()) { 34 | return; 35 | } 36 | 37 | if (!this.context.globalState.get(didGloballyEnableKey) && !usingNativeTesting()) { 38 | this.context.globalState.update(didGloballyEnableKey, true); 39 | switchToNativeTesting(undefined, true); 40 | } 41 | 42 | adapter.testStates(evt => { 43 | if (evt.type === 'started') { 44 | this.promptToUseNativeTesting(); 45 | } 46 | }); 47 | } 48 | 49 | /** @inheritdoc */ 50 | public unregisterTestAdapter(): void { 51 | // no-op 52 | } 53 | 54 | public shouldPrompt() { 55 | return ( 56 | !promptedThisSession && 57 | !usingNativeTesting() && 58 | !this.context.globalState.get(promptStorageKey) 59 | ); 60 | } 61 | 62 | private async promptToUseNativeTesting() { 63 | if (!this.shouldPrompt()) { 64 | return; 65 | } 66 | 67 | const yes = 'Yes'; 68 | const workspace = 'Only in this Workspace'; 69 | const no = 'No'; 70 | 71 | promptedThisSession = true; 72 | const result = await vscode.window.showInformationMessage( 73 | "Would you like to try out VS Code's new native UI for testing?", 74 | no, 75 | yes, 76 | workspace 77 | ); 78 | 79 | if (!result) { 80 | return; 81 | } 82 | 83 | if (result === yes) { 84 | switchToNativeTesting(vscode.ConfigurationTarget.Global); 85 | } else if (result === workspace) { 86 | switchToNativeTesting(vscode.ConfigurationTarget.Workspace); 87 | } else if (result === no) { 88 | this.context.globalState.update(promptStorageKey, true); 89 | } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/testConverter.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------- 2 | * Copyright (C) Microsoft Corporation. All rights reserved. 3 | *--------------------------------------------------------*/ 4 | 5 | import * as ansiColors from 'ansi-colors'; 6 | import { parse as parseStack } from 'stacktrace-parser'; 7 | import * as vscode from 'vscode'; 8 | import { 9 | TestAdapter, 10 | TestEvent, 11 | TestInfo, 12 | TestLoadFinishedEvent, 13 | TestSuiteEvent, 14 | TestSuiteInfo, 15 | } from 'vscode-test-adapter-api'; 16 | 17 | export const metadata = new WeakMap(); 18 | 19 | export interface ITestMetadata { 20 | isSuite: boolean; 21 | converter: TestConverter; 22 | } 23 | 24 | const unique = (arr: readonly T[], project: (v: T) => R): T[] => { 25 | const seen = new Set(); 26 | return arr.filter(t => { 27 | const r = project(t); 28 | if (seen.has(r)) { 29 | return false; 30 | } 31 | 32 | seen.add(r); 33 | return true; 34 | }); 35 | }; 36 | 37 | const testViewId = 'workbench.view.extension.test'; 38 | let nextControllerId = 1; 39 | 40 | const getControllerName = () => { 41 | /* The test explorer extension doesn't tell us the name of the controller 42 | creating the profiles. But, it is in the stacktrace! So try to parse it out. Example: 43 | 44 | Error: 45 | at eval (eval-5a7aa349.repl:1:1) 46 | at new TestConverter (c:\\Users\\conno\\Github\\vscode-test-adapter-converter\\out\\extension.js:142:5) 47 | at TestConverterFactory.registerTestAdapter (c:\\Users\\conno\\Github\\vscode-test-adapter-converter\\out\\extension.js:415:34) 48 | at TestHub.registerTestAdapter (c:\\Users\\conno\\.vscode-insiders\\extensions\\hbenl.vscode-test-explorer-2.22.1\\out\\hub\\testHub.js:42:24) 49 | at Object.registerTestAdapter (c:\\Users\\conno\\.vscode-insiders\\extensions\\hbenl.vscode-test-explorer-2.22.1\\out\\main.js:106:45) 50 | at TestAdapterRegistrar.add (c:\\Users\\conno\\.vscode-insiders\\extensions\\hbenl.vscode-mocha-test-adapter-2.14.1\\node_modules\\vscode-test-adapter-util\\out\\registrar.js:48:22) 51 | at new TestAdapterRegistrar (c:\\Users\\conno\\.vscode-insiders\\extensions\\hbenl.vscode-mocha-test-adapter-2.14.1\\node_modules\\vscode-test-adapter-util\\out\\registrar.js:19:22) 52 | */ 53 | 54 | const stack = parseStack(new Error().stack || ''); 55 | for (const frame of stack) { 56 | if (!frame.file) { 57 | continue; 58 | } 59 | 60 | const parts = frame.file.split(/[\\/]/g); 61 | const extensionsIndex = parts.indexOf('extensions'); 62 | if (extensionsIndex === -1) { 63 | continue; 64 | } 65 | 66 | const extensionAndVersionPart = parts[extensionsIndex + 1]; 67 | const extensionId = extensionAndVersionPart.replace(/-[\d.]+$/, ''); 68 | if ( 69 | extensionId.includes('vscode-test-explorer') || 70 | extensionId.includes('test-adapter-converter') 71 | ) { 72 | continue; 73 | } 74 | 75 | return extensionId; 76 | } 77 | 78 | return 'Test Adapter Converter'; 79 | }; 80 | 81 | interface IRunningTaskData { 82 | task: vscode.TestRun; 83 | announcedTests: Set; 84 | } 85 | 86 | export class TestConverter implements vscode.Disposable { 87 | private readonly controller: vscode.TestController; 88 | private doneDiscovery?: () => void; 89 | private readonly itemsById = new Map(); 90 | private readonly tasksByRunId = new Map(); 91 | private readonly runningSuiteByRunId = new Map(); 92 | private readonly disposables: vscode.Disposable[] = []; 93 | private _error?: string; 94 | 95 | public get error() { 96 | return this._error; 97 | } 98 | 99 | public get controllerId() { 100 | return this.controller.id; 101 | } 102 | 103 | constructor(private readonly adapter: TestAdapter) { 104 | this.controller = vscode.tests.createTestController( 105 | `test-adapter-ctrl-${nextControllerId++}`, 106 | getControllerName() 107 | ); 108 | this.controller.refreshHandler = () => this.adapter.load(); 109 | this.disposables.push(this.controller); 110 | 111 | const makeRunHandler = 112 | (debug: boolean) => (request: vscode.TestRunRequest, token: vscode.CancellationToken) => { 113 | if (request.continuous && adapter.retire) { 114 | const disposables = [ 115 | adapter.retire(evt => { 116 | runOrDebug( 117 | debug, 118 | request, 119 | evt.tests?.map(id => this.itemsById.get(id)).filter(d => !!d), 120 | token 121 | ); 122 | }), 123 | token.onCancellationRequested(() => disposables.forEach(d => d.dispose())), 124 | ]; 125 | } else { 126 | runOrDebug(debug, request, request.include, token); 127 | } 128 | }; 129 | 130 | const runOrDebug = ( 131 | debug: boolean, 132 | request: vscode.TestRunRequest, 133 | include: readonly vscode.TestItem[] | undefined, 134 | token: vscode.CancellationToken 135 | ) => { 136 | if (!include) { 137 | this.run(this.controller.createTestRun(request), include, debug, token); 138 | return; 139 | } 140 | 141 | const involved = new Map(); 142 | for (const test of include) { 143 | const converter = metadata.get(test)!.converter; 144 | const i = involved.get(converter); 145 | if (i) { 146 | i.push(test); 147 | } else { 148 | involved.set(converter, [test]); 149 | } 150 | } 151 | 152 | for (const [converter, tests] of involved) { 153 | converter.run(this.controller.createTestRun(request), tests, debug, token); 154 | } 155 | }; 156 | 157 | const run = this.controller.createRunProfile( 158 | 'Run', 159 | vscode.TestRunProfileKind.Run, 160 | makeRunHandler(false), 161 | true 162 | ); 163 | run.supportsContinuousRun = !!adapter.retire; 164 | 165 | const debug = this.controller.createRunProfile( 166 | 'Debug', 167 | vscode.TestRunProfileKind.Debug, 168 | makeRunHandler(true), 169 | true 170 | ); 171 | debug.supportsContinuousRun = !!adapter.retire; 172 | 173 | this.disposables.push( 174 | adapter.tests(evt => { 175 | switch (evt.type) { 176 | case 'finished': 177 | this.doneDiscovery?.(); 178 | this.doneDiscovery = undefined; 179 | this.itemsById.clear(); 180 | this.syncTopLevel(evt); 181 | break; 182 | 183 | case 'started': 184 | if (!this.doneDiscovery) { 185 | vscode.window.withProgress( 186 | { title: `An adapter is discovering tests`, location: { viewId: testViewId } }, 187 | () => 188 | new Promise(resolve => { 189 | this.doneDiscovery = resolve; 190 | // Avoid showing "busy" if discovery is blocked, e.g. on a notification 191 | // See https://github.com/microsoft/vscode/issues/178232 192 | setTimeout(resolve, 30_000); 193 | }) 194 | ); 195 | } 196 | break; 197 | } 198 | }), 199 | adapter.testStates(evt => { 200 | const data = this.tasksByRunId.get(evt.testRunId ?? ''); 201 | if (!data) { 202 | return; 203 | } 204 | 205 | switch (evt.type) { 206 | case 'test': 207 | return this.onTestEvent(data, evt); 208 | case 'suite': 209 | return this.onTestSuiteEvent(evt); 210 | case 'finished': 211 | this.tasksByRunId.delete(evt.testRunId ?? ''); 212 | return data.task.end(); 213 | } 214 | }) 215 | ); 216 | if (adapter.retire) { 217 | this.disposables.push( 218 | adapter.retire(evt => { 219 | if (evt.tests) { 220 | const items = evt.tests.map(test => this.itemsById.get(test)).filter(item => !!item); 221 | this.controller.invalidateTestResults(items); 222 | } else { 223 | this.controller.invalidateTestResults(); 224 | } 225 | }) 226 | ); 227 | } 228 | } 229 | 230 | public dispose() { 231 | this.disposables.forEach(d => d.dispose()); 232 | } 233 | 234 | public async run( 235 | run: vscode.TestRun, 236 | testsToRun: readonly vscode.TestItem[] | undefined, 237 | debug: boolean, 238 | token: vscode.CancellationToken 239 | ): Promise { 240 | if (!this.controller) { 241 | return; 242 | } 243 | 244 | if (!testsToRun) { 245 | testsToRun = gatherChildren(this.controller.items); 246 | } 247 | 248 | const listener = this.adapter.testStates(evt => { 249 | if (evt.type !== 'started') { 250 | return; 251 | } 252 | 253 | const queue: Iterable[] = [testsToRun!]; 254 | while (queue.length) { 255 | for (const test of queue.pop()!) { 256 | if (!metadata.get(test)?.isSuite) { 257 | run.enqueued(test); 258 | } 259 | queue.push(gatherChildren(test.children)); 260 | } 261 | } 262 | 263 | this.tasksByRunId.set(evt.testRunId ?? '', { task: run, announcedTests: new Set() }); 264 | token.onCancellationRequested(() => this.adapter.cancel()); 265 | listener.dispose(); 266 | }); 267 | 268 | if (!debug) { 269 | this.adapter.run(testsToRun!.map(t => t.id)); 270 | } else if (this.adapter.debug) { 271 | this.adapter.debug(testsToRun!.map(t => t.id)); 272 | } else { 273 | listener.dispose(); 274 | } 275 | } 276 | 277 | private syncTopLevel(evt: TestLoadFinishedEvent) { 278 | vscode.commands.executeCommand('setContext', 'hasTestConverterTests', true); 279 | if (evt.suite) { 280 | this.controller.label = this.adapter.workspaceFolder 281 | ? `${this.adapter.workspaceFolder.name} - ${evt.suite.label}` 282 | : evt.suite.label; 283 | this.syncItemChildren(this.controller.items, evt.suite.children); 284 | } else if (evt.errorMessage) { 285 | const test = this.controller.createTestItem('error', 'Test discovery failed'); 286 | this._error = 287 | evt.errorMessage + '\n\n\n' + new Error().stack?.replace('Error:', 'Stacktrace:'); 288 | test.error = new vscode.MarkdownString( 289 | `[View details](command:testExplorerConverter.showError?${encodeURIComponent( 290 | JSON.stringify([this.controllerId]) 291 | )})` 292 | ); 293 | test.error.isTrusted = true; 294 | this.controller.items.replace([test]); 295 | } 296 | } 297 | 298 | /** 299 | * Ensures the given children are set as the children of the test item. 300 | */ 301 | private syncItemChildren( 302 | collection: vscode.TestItemCollection, 303 | children: (TestSuiteInfo | TestInfo)[], 304 | defaultUri?: vscode.Uri 305 | ) { 306 | collection.replace(unique(children, c => c.id).map(item => this.createTest(item, defaultUri))); 307 | } 308 | 309 | private createTest(item: TestSuiteInfo | TestInfo, defaultUri?: vscode.Uri) { 310 | const test = this.controller.createTestItem( 311 | item.id, 312 | item.label, 313 | item.file ? fileToUri(item.file) : defaultUri 314 | ); 315 | metadata.set(test, { isSuite: item.type === 'suite', converter: this }); 316 | this.itemsById.set(item.id, test); 317 | test.description = item.description; 318 | 319 | if (item.line !== undefined) { 320 | test.range = new vscode.Range(item.line, 0, item.line + 1, 0); 321 | } 322 | 323 | if (item.errored) { 324 | test.error = item.message; 325 | } 326 | 327 | if ('children' in item) { 328 | this.syncItemChildren(test.children, item.children); 329 | } 330 | 331 | return test; 332 | } 333 | 334 | private onTestSuiteEvent(evt: TestSuiteEvent) { 335 | const runId = evt.testRunId ?? ''; 336 | const runningSuite = this.runningSuiteByRunId.get(runId); 337 | const suiteId = typeof evt.suite === 'string' ? evt.suite : evt.suite.id; 338 | if (evt.state === 'running') { 339 | if (!this.itemsById.has(suiteId) && typeof evt.suite === 'object' && runningSuite) { 340 | runningSuite.children.add(this.createTest(evt.suite)); 341 | } 342 | if (this.itemsById.has(suiteId)) { 343 | this.runningSuiteByRunId.set(runId, this.itemsById.get(suiteId)!); 344 | } 345 | } else { 346 | if (runningSuite && runningSuite.id === suiteId) { 347 | if (runningSuite.parent) { 348 | this.runningSuiteByRunId.set(runId, runningSuite.parent); 349 | } else { 350 | this.runningSuiteByRunId.delete(runId); 351 | } 352 | } 353 | } 354 | } 355 | 356 | /** 357 | * TestEvent handler. 358 | */ 359 | private onTestEvent({ task, announcedTests }: IRunningTaskData, evt: TestEvent) { 360 | const runningSuite = this.runningSuiteByRunId.get(evt.testRunId ?? ''); 361 | const testId = typeof evt.test === 'string' ? evt.test : evt.test.id; 362 | if ( 363 | evt.state === 'running' && 364 | !this.itemsById.has(testId) && 365 | typeof evt.test === 'object' && 366 | runningSuite 367 | ) { 368 | runningSuite.children.add(this.createTest(evt.test)); 369 | } 370 | const vscodeTest = this.itemsById.get(testId); 371 | if (!vscodeTest) { 372 | return; 373 | } 374 | 375 | switch (evt.state) { 376 | case 'skipped': 377 | this.appendState(task, vscodeTest, '○', ansiColors.yellow, ansiColors.dim); 378 | task.skipped(vscodeTest); 379 | break; 380 | case 'running': 381 | task.started(vscodeTest); 382 | break; 383 | case 'passed': 384 | this.ensureChainAnnounced(task, announcedTests, vscodeTest); 385 | this.appendState(task, vscodeTest, '✔', ansiColors.green); 386 | task.passed(vscodeTest); 387 | break; 388 | case 'errored': 389 | case 'failed': 390 | this.ensureChainAnnounced(task, announcedTests, vscodeTest); 391 | this.appendState(task, vscodeTest, '✖', ansiColors.red, ansiColors.red); 392 | 393 | const messages: vscode.TestMessage[] = []; 394 | if (evt.message) { 395 | task.appendOutput(evt.message.replace(/\r?\n/g, '\r\n'), undefined, vscodeTest); 396 | if (!evt.decorations?.length) { 397 | const message = new vscode.TestMessage(evt.message); 398 | messages.push(message); 399 | } 400 | } 401 | 402 | for (const decoration of evt.decorations ?? []) { 403 | const message = new vscode.TestMessage(decoration.message); 404 | const uri = decoration.file ? fileToUri(decoration.file) : vscodeTest.uri; 405 | if (uri) { 406 | message.location = new vscode.Location(uri, new vscode.Position(decoration.line, 0)); 407 | } 408 | 409 | messages.push(message); 410 | } 411 | 412 | task[evt.state](vscodeTest, messages); 413 | break; 414 | } 415 | 416 | if (evt.message && ((evt.state !== 'errored' && evt.state !== 'failed') || !vscodeTest.uri)) { 417 | task.appendOutput(evt.message.replace(/\r?\n/g, '\r\n')); 418 | } 419 | } 420 | 421 | private ensureChainAnnounced( 422 | task: vscode.TestRun, 423 | announcedTests: Set, 424 | leafTest: vscode.TestItem 425 | ) { 426 | const chain: vscode.TestItem[] = []; 427 | for ( 428 | let item: vscode.TestItem | undefined = leafTest; 429 | item && !announcedTests.has(item); 430 | item = item.parent 431 | ) { 432 | chain.unshift(item); 433 | } 434 | 435 | for (const item of chain) { 436 | announcedTests.add(item); 437 | if (item.children.size) { 438 | this.appendState(task, item, '▼', ansiColors.green); 439 | } 440 | } 441 | } 442 | 443 | private appendState( 444 | task: vscode.TestRun, 445 | vscodeTest: vscode.TestItem, 446 | symbol: string, 447 | symbolColor: (s: string) => string, 448 | textColor: (s: string) => string = s => s 449 | ) { 450 | let indent = ''; 451 | for (let parent = vscodeTest.parent; parent; parent = parent.parent) { 452 | indent += ' '; 453 | } 454 | task.appendOutput(indent + symbolColor(symbol) + textColor(` ${vscodeTest.label}\r\n`)); 455 | } 456 | } 457 | 458 | const gatherChildren = (col: vscode.TestItemCollection) => { 459 | const children: vscode.TestItem[] = []; 460 | col.forEach(child => children.push(child)); 461 | return children; 462 | }; 463 | 464 | const schemeMatcher = /^[a-z][a-z0-9+-.]+:/; 465 | const fileToUri = (file: string) => 466 | schemeMatcher.test(file) ? vscode.Uri.parse(file) : vscode.Uri.file(file); 467 | -------------------------------------------------------------------------------- /src/testConverterFactory.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------- 2 | * Copyright (C) Microsoft Corporation. All rights reserved. 3 | *--------------------------------------------------------*/ 4 | 5 | import * as vscode from 'vscode'; 6 | import { TestController as AdapterTestController, TestAdapter } from 'vscode-test-adapter-api'; 7 | import { TestConverter } from './testConverter'; 8 | 9 | export class TestConverterFactory implements AdapterTestController, vscode.Disposable { 10 | private readonly converters = new Map(); 11 | 12 | /** 13 | * @inheritdoc 14 | */ 15 | public registerTestAdapter(adapter: TestAdapter): void { 16 | this.converters.set(adapter, new TestConverter(adapter)); 17 | } 18 | 19 | /** 20 | * @inheritdoc 21 | */ 22 | public unregisterTestAdapter(adapter: TestAdapter): void { 23 | this.converters.get(adapter)?.dispose(); 24 | this.converters.delete(adapter); 25 | } 26 | 27 | /** 28 | * Gets a TestConverter by its controller ID. 29 | */ 30 | public getByControllerId(id: string) { 31 | for (const converter of this.converters.values()) { 32 | if (converter.controllerId === id) { 33 | return converter; 34 | } 35 | } 36 | 37 | return undefined; 38 | } 39 | 40 | /** 41 | * @inheritdoc 42 | */ 43 | public dispose() { 44 | for (const disposables of this.converters.values()) { 45 | disposables.dispose(); 46 | } 47 | 48 | vscode.commands.executeCommand('setContext', 'hasTestConverterTests', false); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2022", 5 | "outDir": "out", 6 | "lib": ["ES2023", "WebWorker"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true /* enable all strict type-checking options */, 10 | "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, 11 | "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, 12 | "noUnusedParameters": true /* Report errors on unused parameters. */ 13 | }, 14 | "exclude": ["node_modules", ".vscode-test"] 15 | } 16 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@esbuild/aix-ppc64@0.23.1": 6 | version "0.23.1" 7 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" 8 | integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== 9 | 10 | "@esbuild/android-arm64@0.23.1": 11 | version "0.23.1" 12 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" 13 | integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== 14 | 15 | "@esbuild/android-arm@0.23.1": 16 | version "0.23.1" 17 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" 18 | integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== 19 | 20 | "@esbuild/android-x64@0.23.1": 21 | version "0.23.1" 22 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" 23 | integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== 24 | 25 | "@esbuild/darwin-arm64@0.23.1": 26 | version "0.23.1" 27 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" 28 | integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== 29 | 30 | "@esbuild/darwin-x64@0.23.1": 31 | version "0.23.1" 32 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" 33 | integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== 34 | 35 | "@esbuild/freebsd-arm64@0.23.1": 36 | version "0.23.1" 37 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" 38 | integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== 39 | 40 | "@esbuild/freebsd-x64@0.23.1": 41 | version "0.23.1" 42 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" 43 | integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== 44 | 45 | "@esbuild/linux-arm64@0.23.1": 46 | version "0.23.1" 47 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" 48 | integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== 49 | 50 | "@esbuild/linux-arm@0.23.1": 51 | version "0.23.1" 52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" 53 | integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== 54 | 55 | "@esbuild/linux-ia32@0.23.1": 56 | version "0.23.1" 57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" 58 | integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== 59 | 60 | "@esbuild/linux-loong64@0.23.1": 61 | version "0.23.1" 62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" 63 | integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== 64 | 65 | "@esbuild/linux-mips64el@0.23.1": 66 | version "0.23.1" 67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" 68 | integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== 69 | 70 | "@esbuild/linux-ppc64@0.23.1": 71 | version "0.23.1" 72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" 73 | integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== 74 | 75 | "@esbuild/linux-riscv64@0.23.1": 76 | version "0.23.1" 77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" 78 | integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== 79 | 80 | "@esbuild/linux-s390x@0.23.1": 81 | version "0.23.1" 82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" 83 | integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== 84 | 85 | "@esbuild/linux-x64@0.23.1": 86 | version "0.23.1" 87 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" 88 | integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== 89 | 90 | "@esbuild/netbsd-x64@0.23.1": 91 | version "0.23.1" 92 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" 93 | integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== 94 | 95 | "@esbuild/openbsd-arm64@0.23.1": 96 | version "0.23.1" 97 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" 98 | integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== 99 | 100 | "@esbuild/openbsd-x64@0.23.1": 101 | version "0.23.1" 102 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" 103 | integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== 104 | 105 | "@esbuild/sunos-x64@0.23.1": 106 | version "0.23.1" 107 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" 108 | integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== 109 | 110 | "@esbuild/win32-arm64@0.23.1": 111 | version "0.23.1" 112 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" 113 | integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== 114 | 115 | "@esbuild/win32-ia32@0.23.1": 116 | version "0.23.1" 117 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" 118 | integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== 119 | 120 | "@esbuild/win32-x64@0.23.1": 121 | version "0.23.1" 122 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" 123 | integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== 124 | 125 | "@eslint/eslintrc@^1.4.0": 126 | version "1.4.0" 127 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.0.tgz#8ec64e0df3e7a1971ee1ff5158da87389f167a63" 128 | integrity sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A== 129 | dependencies: 130 | ajv "^6.12.4" 131 | debug "^4.3.2" 132 | espree "^9.4.0" 133 | globals "^13.19.0" 134 | ignore "^5.2.0" 135 | import-fresh "^3.2.1" 136 | js-yaml "^4.1.0" 137 | minimatch "^3.1.2" 138 | strip-json-comments "^3.1.1" 139 | 140 | "@humanwhocodes/config-array@^0.11.8": 141 | version "0.11.8" 142 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" 143 | integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== 144 | dependencies: 145 | "@humanwhocodes/object-schema" "^1.2.1" 146 | debug "^4.1.1" 147 | minimatch "^3.0.5" 148 | 149 | "@humanwhocodes/module-importer@^1.0.1": 150 | version "1.0.1" 151 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 152 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 153 | 154 | "@humanwhocodes/object-schema@^1.2.1": 155 | version "1.2.1" 156 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 157 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 158 | 159 | "@nodelib/fs.scandir@2.1.4": 160 | version "2.1.4" 161 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" 162 | integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== 163 | dependencies: 164 | "@nodelib/fs.stat" "2.0.4" 165 | run-parallel "^1.1.9" 166 | 167 | "@nodelib/fs.scandir@2.1.5": 168 | version "2.1.5" 169 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 170 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 171 | dependencies: 172 | "@nodelib/fs.stat" "2.0.5" 173 | run-parallel "^1.1.9" 174 | 175 | "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": 176 | version "2.0.4" 177 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" 178 | integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== 179 | 180 | "@nodelib/fs.stat@2.0.5": 181 | version "2.0.5" 182 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 183 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 184 | 185 | "@nodelib/fs.walk@^1.2.3": 186 | version "1.2.6" 187 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" 188 | integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== 189 | dependencies: 190 | "@nodelib/fs.scandir" "2.1.4" 191 | fastq "^1.6.0" 192 | 193 | "@nodelib/fs.walk@^1.2.8": 194 | version "1.2.8" 195 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 196 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 197 | dependencies: 198 | "@nodelib/fs.scandir" "2.1.5" 199 | fastq "^1.6.0" 200 | 201 | "@types/json-schema@^7.0.9": 202 | version "7.0.11" 203 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 204 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 205 | 206 | "@types/semver@^7.3.12": 207 | version "7.3.13" 208 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" 209 | integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== 210 | 211 | "@types/vscode@^1.93.0": 212 | version "1.93.0" 213 | resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.93.0.tgz#1cd7573e0272aef9c357bafc635b6177c154013e" 214 | integrity sha512-kUK6jAHSR5zY8ps42xuW89NLcBpw1kOabah7yv38J8MyiYuOHxLQBi0e7zeXbQgVefDy/mZZetqEFC+Fl5eIEQ== 215 | 216 | "@typescript-eslint/eslint-plugin@^5.47.1": 217 | version "5.47.1" 218 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.47.1.tgz#50cc5085578a7fa22cd46a0806c2e5eae858af02" 219 | integrity sha512-r4RZ2Jl9kcQN7K/dcOT+J7NAimbiis4sSM9spvWimsBvDegMhKLA5vri2jG19PmIPbDjPeWzfUPQ2hjEzA4Nmg== 220 | dependencies: 221 | "@typescript-eslint/scope-manager" "5.47.1" 222 | "@typescript-eslint/type-utils" "5.47.1" 223 | "@typescript-eslint/utils" "5.47.1" 224 | debug "^4.3.4" 225 | ignore "^5.2.0" 226 | natural-compare-lite "^1.4.0" 227 | regexpp "^3.2.0" 228 | semver "^7.3.7" 229 | tsutils "^3.21.0" 230 | 231 | "@typescript-eslint/parser@^5.47.1": 232 | version "5.47.1" 233 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.47.1.tgz#c4bf16f8c3c7608ce4bf8ff804b677fc899f173f" 234 | integrity sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw== 235 | dependencies: 236 | "@typescript-eslint/scope-manager" "5.47.1" 237 | "@typescript-eslint/types" "5.47.1" 238 | "@typescript-eslint/typescript-estree" "5.47.1" 239 | debug "^4.3.4" 240 | 241 | "@typescript-eslint/scope-manager@5.47.1": 242 | version "5.47.1" 243 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.47.1.tgz#0d302b3c2f20ab24e4787bf3f5a0d8c449b823bd" 244 | integrity sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw== 245 | dependencies: 246 | "@typescript-eslint/types" "5.47.1" 247 | "@typescript-eslint/visitor-keys" "5.47.1" 248 | 249 | "@typescript-eslint/type-utils@5.47.1": 250 | version "5.47.1" 251 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.47.1.tgz#aee13314f840ab336c1adb49a300856fd16d04ce" 252 | integrity sha512-/UKOeo8ee80A7/GJA427oIrBi/Gd4osk/3auBUg4Rn9EahFpevVV1mUK8hjyQD5lHPqX397x6CwOk5WGh1E/1w== 253 | dependencies: 254 | "@typescript-eslint/typescript-estree" "5.47.1" 255 | "@typescript-eslint/utils" "5.47.1" 256 | debug "^4.3.4" 257 | tsutils "^3.21.0" 258 | 259 | "@typescript-eslint/types@5.47.1": 260 | version "5.47.1" 261 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.47.1.tgz#459f07428aec5a8c4113706293c2ae876741ac8e" 262 | integrity sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A== 263 | 264 | "@typescript-eslint/typescript-estree@5.47.1": 265 | version "5.47.1" 266 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.1.tgz#b9d8441308aca53df7f69b2c67a887b82c9ed418" 267 | integrity sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA== 268 | dependencies: 269 | "@typescript-eslint/types" "5.47.1" 270 | "@typescript-eslint/visitor-keys" "5.47.1" 271 | debug "^4.3.4" 272 | globby "^11.1.0" 273 | is-glob "^4.0.3" 274 | semver "^7.3.7" 275 | tsutils "^3.21.0" 276 | 277 | "@typescript-eslint/utils@5.47.1": 278 | version "5.47.1" 279 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.47.1.tgz#595f25ac06e9ee28c339fd43c709402820b13d7b" 280 | integrity sha512-l90SdwqfmkuIVaREZ2ykEfCezepCLxzWMo5gVfcJsJCaT4jHT+QjgSkYhs5BMQmWqE9k3AtIfk4g211z/sTMVw== 281 | dependencies: 282 | "@types/json-schema" "^7.0.9" 283 | "@types/semver" "^7.3.12" 284 | "@typescript-eslint/scope-manager" "5.47.1" 285 | "@typescript-eslint/types" "5.47.1" 286 | "@typescript-eslint/typescript-estree" "5.47.1" 287 | eslint-scope "^5.1.1" 288 | eslint-utils "^3.0.0" 289 | semver "^7.3.7" 290 | 291 | "@typescript-eslint/visitor-keys@5.47.1": 292 | version "5.47.1" 293 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.1.tgz#d35c2da544dbb685db9c5b5b85adac0a1d74d1f2" 294 | integrity sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig== 295 | dependencies: 296 | "@typescript-eslint/types" "5.47.1" 297 | eslint-visitor-keys "^3.3.0" 298 | 299 | acorn-jsx@^5.3.2: 300 | version "5.3.2" 301 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 302 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 303 | 304 | acorn@^8.8.0: 305 | version "8.8.1" 306 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" 307 | integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== 308 | 309 | ajv@^6.10.0, ajv@^6.12.4: 310 | version "6.12.6" 311 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 312 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 313 | dependencies: 314 | fast-deep-equal "^3.1.1" 315 | fast-json-stable-stringify "^2.0.0" 316 | json-schema-traverse "^0.4.1" 317 | uri-js "^4.2.2" 318 | 319 | ansi-colors@^4.1.3: 320 | version "4.1.3" 321 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" 322 | integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== 323 | 324 | ansi-regex@^5.0.1: 325 | version "5.0.1" 326 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 327 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 328 | 329 | ansi-styles@^4.1.0: 330 | version "4.3.0" 331 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 332 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 333 | dependencies: 334 | color-convert "^2.0.1" 335 | 336 | argparse@^2.0.1: 337 | version "2.0.1" 338 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 339 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 340 | 341 | array-union@^2.1.0: 342 | version "2.1.0" 343 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 344 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 345 | 346 | balanced-match@^1.0.0: 347 | version "1.0.2" 348 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 349 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 350 | 351 | brace-expansion@^1.1.7: 352 | version "1.1.11" 353 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 354 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 355 | dependencies: 356 | balanced-match "^1.0.0" 357 | concat-map "0.0.1" 358 | 359 | braces@^3.0.3: 360 | version "3.0.3" 361 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 362 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 363 | dependencies: 364 | fill-range "^7.1.1" 365 | 366 | callsites@^3.0.0: 367 | version "3.1.0" 368 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 369 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 370 | 371 | chalk@^4.0.0: 372 | version "4.1.0" 373 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 374 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 375 | dependencies: 376 | ansi-styles "^4.1.0" 377 | supports-color "^7.1.0" 378 | 379 | color-convert@^2.0.1: 380 | version "2.0.1" 381 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 382 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 383 | dependencies: 384 | color-name "~1.1.4" 385 | 386 | color-name@~1.1.4: 387 | version "1.1.4" 388 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 389 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 390 | 391 | concat-map@0.0.1: 392 | version "0.0.1" 393 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 394 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 395 | 396 | cross-spawn@^7.0.2: 397 | version "7.0.3" 398 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 399 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 400 | dependencies: 401 | path-key "^3.1.0" 402 | shebang-command "^2.0.0" 403 | which "^2.0.1" 404 | 405 | debug@^4.1.1: 406 | version "4.3.1" 407 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 408 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 409 | dependencies: 410 | ms "2.1.2" 411 | 412 | debug@^4.3.2, debug@^4.3.4: 413 | version "4.3.4" 414 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 415 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 416 | dependencies: 417 | ms "2.1.2" 418 | 419 | deep-is@^0.1.3: 420 | version "0.1.3" 421 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 422 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 423 | 424 | dir-glob@^3.0.1: 425 | version "3.0.1" 426 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 427 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 428 | dependencies: 429 | path-type "^4.0.0" 430 | 431 | doctrine@^3.0.0: 432 | version "3.0.0" 433 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 434 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 435 | dependencies: 436 | esutils "^2.0.2" 437 | 438 | esbuild@^0.23.1: 439 | version "0.23.1" 440 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" 441 | integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== 442 | optionalDependencies: 443 | "@esbuild/aix-ppc64" "0.23.1" 444 | "@esbuild/android-arm" "0.23.1" 445 | "@esbuild/android-arm64" "0.23.1" 446 | "@esbuild/android-x64" "0.23.1" 447 | "@esbuild/darwin-arm64" "0.23.1" 448 | "@esbuild/darwin-x64" "0.23.1" 449 | "@esbuild/freebsd-arm64" "0.23.1" 450 | "@esbuild/freebsd-x64" "0.23.1" 451 | "@esbuild/linux-arm" "0.23.1" 452 | "@esbuild/linux-arm64" "0.23.1" 453 | "@esbuild/linux-ia32" "0.23.1" 454 | "@esbuild/linux-loong64" "0.23.1" 455 | "@esbuild/linux-mips64el" "0.23.1" 456 | "@esbuild/linux-ppc64" "0.23.1" 457 | "@esbuild/linux-riscv64" "0.23.1" 458 | "@esbuild/linux-s390x" "0.23.1" 459 | "@esbuild/linux-x64" "0.23.1" 460 | "@esbuild/netbsd-x64" "0.23.1" 461 | "@esbuild/openbsd-arm64" "0.23.1" 462 | "@esbuild/openbsd-x64" "0.23.1" 463 | "@esbuild/sunos-x64" "0.23.1" 464 | "@esbuild/win32-arm64" "0.23.1" 465 | "@esbuild/win32-ia32" "0.23.1" 466 | "@esbuild/win32-x64" "0.23.1" 467 | 468 | escape-string-regexp@^4.0.0: 469 | version "4.0.0" 470 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 471 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 472 | 473 | eslint-plugin-header@^3.1.1: 474 | version "3.1.1" 475 | resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6" 476 | integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg== 477 | 478 | eslint-scope@^5.1.1: 479 | version "5.1.1" 480 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 481 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 482 | dependencies: 483 | esrecurse "^4.3.0" 484 | estraverse "^4.1.1" 485 | 486 | eslint-scope@^7.1.1: 487 | version "7.1.1" 488 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 489 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 490 | dependencies: 491 | esrecurse "^4.3.0" 492 | estraverse "^5.2.0" 493 | 494 | eslint-utils@^3.0.0: 495 | version "3.0.0" 496 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 497 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 498 | dependencies: 499 | eslint-visitor-keys "^2.0.0" 500 | 501 | eslint-visitor-keys@^2.0.0: 502 | version "2.0.0" 503 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" 504 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== 505 | 506 | eslint-visitor-keys@^3.3.0: 507 | version "3.3.0" 508 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 509 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 510 | 511 | eslint@^8.30.0: 512 | version "8.30.0" 513 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.30.0.tgz#83a506125d089eef7c5b5910eeea824273a33f50" 514 | integrity sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ== 515 | dependencies: 516 | "@eslint/eslintrc" "^1.4.0" 517 | "@humanwhocodes/config-array" "^0.11.8" 518 | "@humanwhocodes/module-importer" "^1.0.1" 519 | "@nodelib/fs.walk" "^1.2.8" 520 | ajv "^6.10.0" 521 | chalk "^4.0.0" 522 | cross-spawn "^7.0.2" 523 | debug "^4.3.2" 524 | doctrine "^3.0.0" 525 | escape-string-regexp "^4.0.0" 526 | eslint-scope "^7.1.1" 527 | eslint-utils "^3.0.0" 528 | eslint-visitor-keys "^3.3.0" 529 | espree "^9.4.0" 530 | esquery "^1.4.0" 531 | esutils "^2.0.2" 532 | fast-deep-equal "^3.1.3" 533 | file-entry-cache "^6.0.1" 534 | find-up "^5.0.0" 535 | glob-parent "^6.0.2" 536 | globals "^13.19.0" 537 | grapheme-splitter "^1.0.4" 538 | ignore "^5.2.0" 539 | import-fresh "^3.0.0" 540 | imurmurhash "^0.1.4" 541 | is-glob "^4.0.0" 542 | is-path-inside "^3.0.3" 543 | js-sdsl "^4.1.4" 544 | js-yaml "^4.1.0" 545 | json-stable-stringify-without-jsonify "^1.0.1" 546 | levn "^0.4.1" 547 | lodash.merge "^4.6.2" 548 | minimatch "^3.1.2" 549 | natural-compare "^1.4.0" 550 | optionator "^0.9.1" 551 | regexpp "^3.2.0" 552 | strip-ansi "^6.0.1" 553 | strip-json-comments "^3.1.0" 554 | text-table "^0.2.0" 555 | 556 | espree@^9.4.0: 557 | version "9.4.1" 558 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" 559 | integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== 560 | dependencies: 561 | acorn "^8.8.0" 562 | acorn-jsx "^5.3.2" 563 | eslint-visitor-keys "^3.3.0" 564 | 565 | esquery@^1.4.0: 566 | version "1.4.0" 567 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 568 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 569 | dependencies: 570 | estraverse "^5.1.0" 571 | 572 | esrecurse@^4.3.0: 573 | version "4.3.0" 574 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 575 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 576 | dependencies: 577 | estraverse "^5.2.0" 578 | 579 | estraverse@^4.1.1: 580 | version "4.3.0" 581 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 582 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 583 | 584 | estraverse@^5.1.0, estraverse@^5.2.0: 585 | version "5.2.0" 586 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 587 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 588 | 589 | esutils@^2.0.2: 590 | version "2.0.3" 591 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 592 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 593 | 594 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 595 | version "3.1.3" 596 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 597 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 598 | 599 | fast-glob@^3.2.9: 600 | version "3.2.11" 601 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" 602 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 603 | dependencies: 604 | "@nodelib/fs.stat" "^2.0.2" 605 | "@nodelib/fs.walk" "^1.2.3" 606 | glob-parent "^5.1.2" 607 | merge2 "^1.3.0" 608 | micromatch "^4.0.4" 609 | 610 | fast-json-stable-stringify@^2.0.0: 611 | version "2.1.0" 612 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 613 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 614 | 615 | fast-levenshtein@^2.0.6: 616 | version "2.0.6" 617 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 618 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 619 | 620 | fastq@^1.6.0: 621 | version "1.11.0" 622 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" 623 | integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== 624 | dependencies: 625 | reusify "^1.0.4" 626 | 627 | file-entry-cache@^6.0.1: 628 | version "6.0.1" 629 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 630 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 631 | dependencies: 632 | flat-cache "^3.0.4" 633 | 634 | fill-range@^7.1.1: 635 | version "7.1.1" 636 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 637 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 638 | dependencies: 639 | to-regex-range "^5.0.1" 640 | 641 | find-up@^5.0.0: 642 | version "5.0.0" 643 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 644 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 645 | dependencies: 646 | locate-path "^6.0.0" 647 | path-exists "^4.0.0" 648 | 649 | flat-cache@^3.0.4: 650 | version "3.0.4" 651 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 652 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 653 | dependencies: 654 | flatted "^3.1.0" 655 | rimraf "^3.0.2" 656 | 657 | flatted@^3.1.0: 658 | version "3.1.1" 659 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" 660 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== 661 | 662 | fs.realpath@^1.0.0: 663 | version "1.0.0" 664 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 665 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 666 | 667 | glob-parent@^5.1.2: 668 | version "5.1.2" 669 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 670 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 671 | dependencies: 672 | is-glob "^4.0.1" 673 | 674 | glob-parent@^6.0.2: 675 | version "6.0.2" 676 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 677 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 678 | dependencies: 679 | is-glob "^4.0.3" 680 | 681 | glob@^7.1.3: 682 | version "7.1.6" 683 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 684 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 685 | dependencies: 686 | fs.realpath "^1.0.0" 687 | inflight "^1.0.4" 688 | inherits "2" 689 | minimatch "^3.0.4" 690 | once "^1.3.0" 691 | path-is-absolute "^1.0.0" 692 | 693 | globals@^13.19.0: 694 | version "13.19.0" 695 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" 696 | integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== 697 | dependencies: 698 | type-fest "^0.20.2" 699 | 700 | globby@^11.1.0: 701 | version "11.1.0" 702 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 703 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 704 | dependencies: 705 | array-union "^2.1.0" 706 | dir-glob "^3.0.1" 707 | fast-glob "^3.2.9" 708 | ignore "^5.2.0" 709 | merge2 "^1.4.1" 710 | slash "^3.0.0" 711 | 712 | grapheme-splitter@^1.0.4: 713 | version "1.0.4" 714 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 715 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 716 | 717 | has-flag@^4.0.0: 718 | version "4.0.0" 719 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 720 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 721 | 722 | ignore@^5.2.0: 723 | version "5.2.0" 724 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 725 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 726 | 727 | import-fresh@^3.0.0, import-fresh@^3.2.1: 728 | version "3.3.0" 729 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 730 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 731 | dependencies: 732 | parent-module "^1.0.0" 733 | resolve-from "^4.0.0" 734 | 735 | imurmurhash@^0.1.4: 736 | version "0.1.4" 737 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 738 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 739 | 740 | inflight@^1.0.4: 741 | version "1.0.6" 742 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 743 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 744 | dependencies: 745 | once "^1.3.0" 746 | wrappy "1" 747 | 748 | inherits@2: 749 | version "2.0.4" 750 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 751 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 752 | 753 | is-extglob@^2.1.1: 754 | version "2.1.1" 755 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 756 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 757 | 758 | is-glob@^4.0.0, is-glob@^4.0.1: 759 | version "4.0.1" 760 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 761 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 762 | dependencies: 763 | is-extglob "^2.1.1" 764 | 765 | is-glob@^4.0.3: 766 | version "4.0.3" 767 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 768 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 769 | dependencies: 770 | is-extglob "^2.1.1" 771 | 772 | is-number@^7.0.0: 773 | version "7.0.0" 774 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 775 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 776 | 777 | is-path-inside@^3.0.3: 778 | version "3.0.3" 779 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 780 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 781 | 782 | isexe@^2.0.0: 783 | version "2.0.0" 784 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 785 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 786 | 787 | js-sdsl@^4.1.4: 788 | version "4.2.0" 789 | resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" 790 | integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== 791 | 792 | js-yaml@^4.1.0: 793 | version "4.1.0" 794 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 795 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 796 | dependencies: 797 | argparse "^2.0.1" 798 | 799 | json-schema-traverse@^0.4.1: 800 | version "0.4.1" 801 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 802 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 803 | 804 | json-stable-stringify-without-jsonify@^1.0.1: 805 | version "1.0.1" 806 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 807 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 808 | 809 | levn@^0.4.1: 810 | version "0.4.1" 811 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 812 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 813 | dependencies: 814 | prelude-ls "^1.2.1" 815 | type-check "~0.4.0" 816 | 817 | locate-path@^6.0.0: 818 | version "6.0.0" 819 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 820 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 821 | dependencies: 822 | p-locate "^5.0.0" 823 | 824 | lodash.merge@^4.6.2: 825 | version "4.6.2" 826 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 827 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 828 | 829 | lru-cache@^6.0.0: 830 | version "6.0.0" 831 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 832 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 833 | dependencies: 834 | yallist "^4.0.0" 835 | 836 | merge2@^1.3.0, merge2@^1.4.1: 837 | version "1.4.1" 838 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 839 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 840 | 841 | micromatch@^4.0.4: 842 | version "4.0.8" 843 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 844 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 845 | dependencies: 846 | braces "^3.0.3" 847 | picomatch "^2.3.1" 848 | 849 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: 850 | version "3.1.2" 851 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 852 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 853 | dependencies: 854 | brace-expansion "^1.1.7" 855 | 856 | ms@2.1.2: 857 | version "2.1.2" 858 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 859 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 860 | 861 | natural-compare-lite@^1.4.0: 862 | version "1.4.0" 863 | resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" 864 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 865 | 866 | natural-compare@^1.4.0: 867 | version "1.4.0" 868 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 869 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 870 | 871 | once@^1.3.0: 872 | version "1.4.0" 873 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 874 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 875 | dependencies: 876 | wrappy "1" 877 | 878 | optionator@^0.9.1: 879 | version "0.9.1" 880 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 881 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 882 | dependencies: 883 | deep-is "^0.1.3" 884 | fast-levenshtein "^2.0.6" 885 | levn "^0.4.1" 886 | prelude-ls "^1.2.1" 887 | type-check "^0.4.0" 888 | word-wrap "^1.2.3" 889 | 890 | p-limit@^3.0.2: 891 | version "3.1.0" 892 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 893 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 894 | dependencies: 895 | yocto-queue "^0.1.0" 896 | 897 | p-locate@^5.0.0: 898 | version "5.0.0" 899 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 900 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 901 | dependencies: 902 | p-limit "^3.0.2" 903 | 904 | parent-module@^1.0.0: 905 | version "1.0.1" 906 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 907 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 908 | dependencies: 909 | callsites "^3.0.0" 910 | 911 | path-exists@^4.0.0: 912 | version "4.0.0" 913 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 914 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 915 | 916 | path-is-absolute@^1.0.0: 917 | version "1.0.1" 918 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 919 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 920 | 921 | path-key@^3.1.0: 922 | version "3.1.1" 923 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 924 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 925 | 926 | path-type@^4.0.0: 927 | version "4.0.0" 928 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 929 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 930 | 931 | picomatch@^2.3.1: 932 | version "2.3.1" 933 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 934 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 935 | 936 | prelude-ls@^1.2.1: 937 | version "1.2.1" 938 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 939 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 940 | 941 | prettier@^2.8.1: 942 | version "2.8.1" 943 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" 944 | integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== 945 | 946 | punycode@^2.1.0: 947 | version "2.1.1" 948 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 949 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 950 | 951 | queue-microtask@^1.2.2: 952 | version "1.2.3" 953 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 954 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 955 | 956 | regexpp@^3.2.0: 957 | version "3.2.0" 958 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 959 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 960 | 961 | resolve-from@^4.0.0: 962 | version "4.0.0" 963 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 964 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 965 | 966 | reusify@^1.0.4: 967 | version "1.0.4" 968 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 969 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 970 | 971 | rimraf@^3.0.2: 972 | version "3.0.2" 973 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 974 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 975 | dependencies: 976 | glob "^7.1.3" 977 | 978 | run-parallel@^1.1.9: 979 | version "1.2.0" 980 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 981 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 982 | dependencies: 983 | queue-microtask "^1.2.2" 984 | 985 | semver@^7.3.7: 986 | version "7.5.3" 987 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" 988 | integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== 989 | dependencies: 990 | lru-cache "^6.0.0" 991 | 992 | shebang-command@^2.0.0: 993 | version "2.0.0" 994 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 995 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 996 | dependencies: 997 | shebang-regex "^3.0.0" 998 | 999 | shebang-regex@^3.0.0: 1000 | version "3.0.0" 1001 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1002 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1003 | 1004 | slash@^3.0.0: 1005 | version "3.0.0" 1006 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1007 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1008 | 1009 | stacktrace-parser@^0.1.10: 1010 | version "0.1.10" 1011 | resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" 1012 | integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== 1013 | dependencies: 1014 | type-fest "^0.7.1" 1015 | 1016 | strip-ansi@^6.0.1: 1017 | version "6.0.1" 1018 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1019 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1020 | dependencies: 1021 | ansi-regex "^5.0.1" 1022 | 1023 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1024 | version "3.1.1" 1025 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1026 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1027 | 1028 | supports-color@^7.1.0: 1029 | version "7.2.0" 1030 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1031 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1032 | dependencies: 1033 | has-flag "^4.0.0" 1034 | 1035 | text-table@^0.2.0: 1036 | version "0.2.0" 1037 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1038 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1039 | 1040 | to-regex-range@^5.0.1: 1041 | version "5.0.1" 1042 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1043 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1044 | dependencies: 1045 | is-number "^7.0.0" 1046 | 1047 | tslib@^1.8.1: 1048 | version "1.14.1" 1049 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1050 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1051 | 1052 | tsutils@^3.21.0: 1053 | version "3.21.0" 1054 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1055 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1056 | dependencies: 1057 | tslib "^1.8.1" 1058 | 1059 | type-check@^0.4.0, type-check@~0.4.0: 1060 | version "0.4.0" 1061 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1062 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1063 | dependencies: 1064 | prelude-ls "^1.2.1" 1065 | 1066 | type-fest@^0.20.2: 1067 | version "0.20.2" 1068 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1069 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1070 | 1071 | type-fest@^0.7.1: 1072 | version "0.7.1" 1073 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" 1074 | integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== 1075 | 1076 | typescript@^5.6.2: 1077 | version "5.6.2" 1078 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" 1079 | integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== 1080 | 1081 | uri-js@^4.2.2: 1082 | version "4.4.1" 1083 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1084 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1085 | dependencies: 1086 | punycode "^2.1.0" 1087 | 1088 | vscode-test-adapter-api@^1.9.0: 1089 | version "1.9.0" 1090 | resolved "https://registry.yarnpkg.com/vscode-test-adapter-api/-/vscode-test-adapter-api-1.9.0.tgz#0fd15fed9f26159670996cb3df8f5618900a0079" 1091 | integrity sha512-lltjehUP0J9H3R/HBctjlqeUCwn2t9Lbhj2Y500ib+j5Y4H3hw+hVTzuSsfw16LtxY37knlU39QIlasa7svzOQ== 1092 | 1093 | which@^2.0.1: 1094 | version "2.0.2" 1095 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1096 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1097 | dependencies: 1098 | isexe "^2.0.0" 1099 | 1100 | word-wrap@^1.2.3: 1101 | version "1.2.4" 1102 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" 1103 | integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== 1104 | 1105 | wrappy@1: 1106 | version "1.0.2" 1107 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1108 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1109 | 1110 | yallist@^4.0.0: 1111 | version "4.0.0" 1112 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1113 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1114 | 1115 | yocto-queue@^0.1.0: 1116 | version "0.1.0" 1117 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1118 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1119 | --------------------------------------------------------------------------------