├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .npmignore ├── License.txt ├── README.md ├── SECURITY.md ├── azure-pipelines └── publish.yml ├── binding.gyp ├── lib └── index.ts ├── package.json ├── src └── winregistry.cc ├── test └── windowsregistry.test.ts ├── tsconfig.json └── yarn.lock /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | build: 11 | runs-on: ${{ matrix.os }} 12 | 13 | strategy: 14 | matrix: 15 | os: [windows-latest, macos-latest, ubuntu-latest] 16 | node-version: [18.x] 17 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 18 | 19 | steps: 20 | - uses: actions/checkout@v2 21 | - name: Use Node.js ${{ matrix.node-version }} 22 | uses: actions/setup-node@v2 23 | with: 24 | node-version: ${{ matrix.node-version }} 25 | cache: 'yarn' 26 | - run: yarn --frozen-lockfile 27 | - run: yarn compile 28 | - run: yarn run test 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | dist/ 3 | node_modules/ 4 | npm-debug.log 5 | yarn-error.log 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .github/ 2 | .vscode/ 3 | azure-pipelines/ 4 | node_modules/ 5 | build/ 6 | lib/ 7 | test/ 8 | .gitignore 9 | .npmignore 10 | tsconfig.json -------------------------------------------------------------------------------- /License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) Microsoft Corporation 2 | 3 | All rights reserved. 4 | 5 | MIT License 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 8 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 9 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software 10 | is furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 15 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 16 | BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT 17 | OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Native node module to access the Windows Registry 2 | This module only has what is needed to support VS Code and is intended to be a lightweight module. 3 | 4 | ## Installing 5 | 6 | ```sh 7 | npm install @vscode/windows-registry 8 | ``` 9 | 10 | ## Using 11 | 12 | ```javascript 13 | var vsWinReg = require('vscode-windows-registry'); 14 | console.log(vsWinReg.GetStringRegKey('HKEY_LOCAL_MACHINE', 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion', 'ProgramFilesPath'); 15 | ``` 16 | 17 | ## Development 18 | * `yarn` 19 | * `yarn node-gyp configure` 20 | * `yarn node-gyp build` 21 | * `yarn tsc` 22 | * `yarn test` 23 | 24 | ## License 25 | [MIT](https://github.com/Microsoft/vscode-windows-registry/blob/master/License.txt) 26 | 27 | 28 | # Contributing 29 | 30 | This project welcomes contributions and suggestions. Most contributions require you to agree to a 31 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 32 | the rights to use your contribution. For details, visit https://cla.microsoft.com. 33 | 34 | When you submit a pull request, a CLA-bot will automatically determine whether you need to provide 35 | a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions 36 | provided by the bot. You will only need to do this once across all repos using our CLA. 37 | 38 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 39 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 40 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 41 | 42 | -------------------------------------------------------------------------------- /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://aka.ms/opensource/security/definition), 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://aka.ms/opensource/security/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://aka.ms/opensource/security/pgpkey). 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://aka.ms/opensource/security/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://aka.ms/opensource/security/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://aka.ms/opensource/security/cvd). 40 | 41 | 42 | -------------------------------------------------------------------------------- /azure-pipelines/publish.yml: -------------------------------------------------------------------------------- 1 | name: $(Date:yyyyMMdd)$(Rev:.r) 2 | 3 | trigger: 4 | branches: 5 | include: 6 | - main 7 | pr: none 8 | 9 | resources: 10 | repositories: 11 | - repository: templates 12 | type: github 13 | name: microsoft/vscode-engineering 14 | ref: main 15 | endpoint: Monaco 16 | 17 | parameters: 18 | - name: publishPackage 19 | displayName: 🚀 Publish vscode-windows-registry 20 | type: boolean 21 | default: false 22 | 23 | extends: 24 | template: azure-pipelines/npm-package/pipeline.yml@templates 25 | parameters: 26 | npmPackages: 27 | - name: vscode-windows-registry 28 | 29 | buildSteps: 30 | - script: yarn --frozen-lockfile 31 | displayName: Install dependencies 32 | 33 | - script: yarn compile 34 | displayName: Compile 35 | 36 | # the rest of the build steps are part of the 'prepack' script, automatically run when the pipeline invokes 'yarn pack' 37 | 38 | testPlatforms: 39 | - name: Windows 40 | nodeVersions: 41 | - 18.x 42 | 43 | - name: macOS 44 | nodeVersions: 45 | - 18.x 46 | 47 | - name: linux 48 | nodeVersions: 49 | - 18.x 50 | 51 | testSteps: 52 | - script: yarn --frozen-lockfile 53 | displayName: Install dependencies 54 | 55 | - script: yarn compile 56 | displayName: Compile 57 | 58 | - script: yarn test 59 | displayName: Test npm package 60 | 61 | apiScanSoftwareName: 'vscode-windows-registry' 62 | apiScanSoftwareVersion: '1.1' 63 | 64 | publishPackage: ${{ parameters.publishPackage }} 65 | packagePlatform: Windows 66 | -------------------------------------------------------------------------------- /binding.gyp: -------------------------------------------------------------------------------- 1 | { 2 | "targets": [ 3 | { 4 | "target_name": "winregistry", 5 | "conditions": [ 6 | ['OS=="win"', { 7 | "sources": [ 8 | "src/winregistry.cc" 9 | ], 10 | "msvs_configuration_attributes": { 11 | "SpectreMitigation": "Spectre" 12 | }, 13 | "msvs_settings": { 14 | "VCCLCompilerTool": { 15 | "AdditionalOptions": [ 16 | "/guard:cf", 17 | "/we4244", 18 | "/we4267", 19 | "/ZH:SHA_256" 20 | ] 21 | }, 22 | "VCLinkerTool": { 23 | "AdditionalOptions": [ 24 | "/guard:cf" 25 | ] 26 | } 27 | }, 28 | }] 29 | ] 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /lib/index.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | const windowRegistry = process.platform === 'win32' ? require('../build/Release/winregistry.node') : null; 7 | 8 | export type HKEY = "HKEY_CURRENT_USER" | "HKEY_LOCAL_MACHINE" | "HKEY_CLASSES_ROOT" | "HKEY_USERS" | "HKEY_CURRENT_CONFIG"; 9 | 10 | export function GetStringRegKey(hive: HKEY, path: string, name: string): string | undefined { 11 | if (windowRegistry) { 12 | return windowRegistry.GetStringRegKey(hive, path, name); 13 | } 14 | 15 | throw new Error('GetStringRegKey is only available on Windows.'); 16 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@vscode/windows-registry", 3 | "version": "1.1.0", 4 | "description": "A native node module for accessing the windows registry", 5 | "main": "dist/index.js", 6 | "typings": "dist/index.d.ts", 7 | "scripts": { 8 | "compile": "tsc -p ./", 9 | "test": "mocha -r ts-node/register test/**/*.test.ts" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/Microsoft/vscode-windows-registry.git" 14 | }, 15 | "author": "Microsoft Corporation", 16 | "license": "MIT", 17 | "bugs": { 18 | "url": "https://github.com/Microsoft/vscode-windows-registry/issues" 19 | }, 20 | "homepage": "https://github.com/Microsoft/vscode-windows-registry#readme", 21 | "devDependencies": { 22 | "@types/mocha": "^10.0.1", 23 | "@types/node": "^16.11.7", 24 | "mocha": "^10.2.0", 25 | "ts-node": "^10.9.1", 26 | "typescript": "^4.4.4" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/winregistry.cc: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for 4 | *license information. 5 | *--------------------------------------------------------------------------------------------*/ 6 | 7 | #include 8 | #include 9 | 10 | #include 11 | 12 | namespace { 13 | 14 | HKEY GetHive(std::string hkey) { 15 | if (hkey == "HKEY_CURRENT_USER") { 16 | return HKEY_CURRENT_USER; 17 | } 18 | 19 | if (hkey == "HKEY_LOCAL_MACHINE") { 20 | return HKEY_LOCAL_MACHINE; 21 | } 22 | 23 | if (hkey == "HKEY_CLASSES_ROOT") { 24 | return HKEY_CLASSES_ROOT; 25 | } 26 | 27 | if (hkey == "HKEY_USERS") { 28 | return HKEY_USERS; 29 | } 30 | 31 | if (hkey == "HKEY_CURRENT_CONFIG") { 32 | return HKEY_CURRENT_CONFIG; 33 | } 34 | 35 | return NULL; 36 | } 37 | 38 | napi_value GetStringRegKey(napi_env env, napi_callback_info info) { 39 | napi_value argv[3]; 40 | size_t argc = 3; 41 | 42 | napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); 43 | 44 | // Check that we have 3 arguments - Hive, Path, Name 45 | if (argc < 3) { 46 | napi_throw_error(env, "EINVAL", "Wrong number of arguments"); 47 | return nullptr; 48 | } 49 | 50 | // Retrieve the 3 arguments 51 | for (int i = 0; i < 3; i++) { 52 | napi_valuetype value_type; 53 | napi_typeof(env, argv[i], &value_type); 54 | if (value_type != napi_string) { 55 | napi_throw_error(env, "EINVAL", "Expected string"); 56 | return nullptr; 57 | } 58 | } 59 | 60 | size_t str_len = 0; 61 | const int MAX_LEN = 16383; 62 | 63 | napi_get_value_string_utf8(env, argv[0], nullptr, 0, &str_len); 64 | if (str_len + 1 > MAX_LEN) { 65 | napi_throw_error(env, "EINVAL", "Arguments too long"); 66 | } 67 | std::string hive_arg; 68 | hive_arg.reserve(str_len + 1); 69 | hive_arg.resize(str_len); 70 | napi_get_value_string_utf8(env, argv[0], &hive_arg[0], hive_arg.capacity(), nullptr); 71 | HKEY hive = GetHive(hive_arg); 72 | 73 | napi_get_value_string_utf8(env, argv[1], nullptr, 0, &str_len); 74 | if (str_len + 1 > MAX_LEN) { 75 | napi_throw_error(env, "EINVAL", "Arguments too long"); 76 | } 77 | std::string path; 78 | path.reserve(str_len + 1); 79 | path.resize(str_len); 80 | napi_get_value_string_utf8(env, argv[1], &path[0], path.capacity(), nullptr); 81 | 82 | napi_get_value_string_utf8(env, argv[2], nullptr, 0, &str_len); 83 | if (str_len + 1 > MAX_LEN) { 84 | napi_throw_error(env, "EINVAL", "Arguments too long"); 85 | } 86 | std::string name; 87 | name.reserve(str_len + 1); 88 | name.resize(str_len); 89 | napi_get_value_string_utf8(env, argv[2], &name[0], name.capacity(), nullptr); 90 | 91 | if (hive == NULL) { 92 | napi_throw_error(env, nullptr, "Unable to open registry hive"); 93 | return nullptr; 94 | } 95 | 96 | std::string result; 97 | HKEY hKey; 98 | if (ERROR_SUCCESS != RegOpenKeyEx(hive, path.c_str(), 0, KEY_READ, &hKey)) { 99 | napi_throw_error(env, nullptr, "Unable to open registry key"); 100 | return nullptr; 101 | } 102 | 103 | char szBuffer[512]; 104 | DWORD dwBufferSize = sizeof(szBuffer); 105 | 106 | if (ERROR_SUCCESS == RegQueryValueEx(hKey, name.c_str(), 0, NULL, 107 | (LPBYTE)szBuffer, &dwBufferSize)) { 108 | result = szBuffer; 109 | } 110 | 111 | RegCloseKey(hKey); 112 | 113 | napi_value napi_result; 114 | napi_create_string_utf8(env, result.c_str(), result.length(), &napi_result); 115 | 116 | return napi_result; 117 | } 118 | 119 | napi_value Init(napi_env env, napi_value exports) { 120 | napi_value getStringRegKey; 121 | napi_create_function(env, "GetStringRegKey", NAPI_AUTO_LENGTH, 122 | GetStringRegKey, NULL, &getStringRegKey); 123 | napi_set_named_property(env, exports, "GetStringRegKey", getStringRegKey); 124 | 125 | return exports; 126 | } 127 | 128 | NAPI_MODULE(NODE_GYP_MODULE_NAME, Init); 129 | } // namespace -------------------------------------------------------------------------------- /test/windowsregistry.test.ts: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | import { GetStringRegKey } from '../dist/index'; 7 | import * as assert from 'assert'; 8 | 9 | describe('Windows Registry Tests', () => { 10 | if (process.platform === 'win32') { 11 | describe('@GetStringRegKey', () => { 12 | it('Retrieves the ProgramFilesPath registry value', () => { 13 | const prgmFilesPath = GetStringRegKey('HKEY_LOCAL_MACHINE', 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion', 'ProgramFilesPath'); 14 | assert(prgmFilesPath === '%ProgramFiles%'); 15 | }); 16 | 17 | it('Validates argument count', () => { 18 | assert.throws(() => (GetStringRegKey)()); 19 | assert.throws(() => ((GetStringRegKey)('HKEY_LOCAL_MACHINE'))); 20 | assert.throws(() => ((GetStringRegKey)('HKEY_LOCAL_MACHINE', 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion'))); 21 | }); 22 | 23 | it('Validates argument length', () => { 24 | let reallyLongString = 'areallystring'; 25 | while (reallyLongString.length < 17000) { 26 | reallyLongString += reallyLongString; 27 | } 28 | 29 | assert.throws(() => ((GetStringRegKey)( 30 | reallyLongString, 31 | 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion', 32 | 'ProgramFilesPath'))); 33 | 34 | assert.throws(() => ((GetStringRegKey)( 35 | 'HKEY_LOCAL_MACHINE', 36 | reallyLongString, 37 | 'ProgramFilesPath'))); 38 | 39 | assert.throws(() => ((GetStringRegKey)( 40 | 'HKEY_LOCAL_MACHINE', 41 | 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion', 42 | reallyLongString))); 43 | }); 44 | }); 45 | } else { 46 | describe('@GetStringRegKey', () => { 47 | it('Throws an error when not on Windows', () => { 48 | assert.throws(() => GetStringRegKey('HKEY_LOCAL_MACHINE', 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion', 'ProgramFilesPath')); 49 | }); 50 | }); 51 | } 52 | }); -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "moduleResolution": "node", 5 | "target": "es6", 6 | "noImplicitReturns": true, 7 | "noFallthroughCasesInSwitch": true, 8 | "noUnusedLocals": true, 9 | "strict": true, 10 | "sourceMap": true, 11 | "outDir": "./dist", 12 | "declaration": true, 13 | "types": ["node", "mocha"], 14 | "typeRoots": ["./node_modules/@types"] 15 | }, 16 | "exclude": ["node_modules", "build"], 17 | "include": ["lib/**/*.ts"] 18 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cspotcode/source-map-support@^0.8.0": 6 | version "0.8.1" 7 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 8 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 9 | dependencies: 10 | "@jridgewell/trace-mapping" "0.3.9" 11 | 12 | "@jridgewell/resolve-uri@^3.0.3": 13 | version "3.1.0" 14 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 15 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 16 | 17 | "@jridgewell/sourcemap-codec@^1.4.10": 18 | version "1.4.14" 19 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 20 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 21 | 22 | "@jridgewell/trace-mapping@0.3.9": 23 | version "0.3.9" 24 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 25 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 26 | dependencies: 27 | "@jridgewell/resolve-uri" "^3.0.3" 28 | "@jridgewell/sourcemap-codec" "^1.4.10" 29 | 30 | "@tsconfig/node10@^1.0.7": 31 | version "1.0.8" 32 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" 33 | integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== 34 | 35 | "@tsconfig/node12@^1.0.7": 36 | version "1.0.9" 37 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" 38 | integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== 39 | 40 | "@tsconfig/node14@^1.0.0": 41 | version "1.0.1" 42 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" 43 | integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== 44 | 45 | "@tsconfig/node16@^1.0.2": 46 | version "1.0.2" 47 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" 48 | integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== 49 | 50 | "@types/mocha@^10.0.1": 51 | version "10.0.1" 52 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" 53 | integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== 54 | 55 | "@types/node@^16.11.7": 56 | version "16.18.23" 57 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.23.tgz#b6e934fe427eb7081d0015aad070acb3373c3c90" 58 | integrity sha512-XAMpaw1s1+6zM+jn2tmw8MyaRDIJfXxqmIQIS0HfoGYPuf7dUWeiUKopwq13KFX9lEp1+THGtlaaYx39Nxr58g== 59 | 60 | acorn-walk@^8.1.1: 61 | version "8.2.0" 62 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 63 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 64 | 65 | acorn@^8.4.1: 66 | version "8.5.0" 67 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" 68 | integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== 69 | 70 | ansi-colors@4.1.1: 71 | version "4.1.1" 72 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 73 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 74 | 75 | ansi-regex@^5.0.1: 76 | version "5.0.1" 77 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 78 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 79 | 80 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 81 | version "4.3.0" 82 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 83 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 84 | dependencies: 85 | color-convert "^2.0.1" 86 | 87 | anymatch@~3.1.2: 88 | version "3.1.2" 89 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 90 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 91 | dependencies: 92 | normalize-path "^3.0.0" 93 | picomatch "^2.0.4" 94 | 95 | arg@^4.1.0: 96 | version "4.1.3" 97 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 98 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 99 | 100 | argparse@^2.0.1: 101 | version "2.0.1" 102 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 103 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 104 | 105 | balanced-match@^1.0.0: 106 | version "1.0.0" 107 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 108 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 109 | 110 | binary-extensions@^2.0.0: 111 | version "2.2.0" 112 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 113 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 114 | 115 | brace-expansion@^1.1.7: 116 | version "1.1.11" 117 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 118 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 119 | dependencies: 120 | balanced-match "^1.0.0" 121 | concat-map "0.0.1" 122 | 123 | brace-expansion@^2.0.1: 124 | version "2.0.1" 125 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 126 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 127 | dependencies: 128 | balanced-match "^1.0.0" 129 | 130 | braces@~3.0.2: 131 | version "3.0.3" 132 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 133 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 134 | dependencies: 135 | fill-range "^7.1.1" 136 | 137 | browser-stdout@1.3.1: 138 | version "1.3.1" 139 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 140 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 141 | 142 | camelcase@^6.0.0: 143 | version "6.3.0" 144 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 145 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 146 | 147 | chalk@^4.1.0: 148 | version "4.1.2" 149 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 150 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 151 | dependencies: 152 | ansi-styles "^4.1.0" 153 | supports-color "^7.1.0" 154 | 155 | chokidar@3.5.3: 156 | version "3.5.3" 157 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 158 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 159 | dependencies: 160 | anymatch "~3.1.2" 161 | braces "~3.0.2" 162 | glob-parent "~5.1.2" 163 | is-binary-path "~2.1.0" 164 | is-glob "~4.0.1" 165 | normalize-path "~3.0.0" 166 | readdirp "~3.6.0" 167 | optionalDependencies: 168 | fsevents "~2.3.2" 169 | 170 | cliui@^7.0.2: 171 | version "7.0.4" 172 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 173 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 174 | dependencies: 175 | string-width "^4.2.0" 176 | strip-ansi "^6.0.0" 177 | wrap-ansi "^7.0.0" 178 | 179 | color-convert@^2.0.1: 180 | version "2.0.1" 181 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 182 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 183 | dependencies: 184 | color-name "~1.1.4" 185 | 186 | color-name@~1.1.4: 187 | version "1.1.4" 188 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 189 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 190 | 191 | concat-map@0.0.1: 192 | version "0.0.1" 193 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 194 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 195 | 196 | create-require@^1.1.0: 197 | version "1.1.1" 198 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 199 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 200 | 201 | debug@4.3.4: 202 | version "4.3.4" 203 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 204 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 205 | dependencies: 206 | ms "2.1.2" 207 | 208 | decamelize@^4.0.0: 209 | version "4.0.0" 210 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 211 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 212 | 213 | diff@5.0.0: 214 | version "5.0.0" 215 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 216 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 217 | 218 | diff@^4.0.1: 219 | version "4.0.2" 220 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 221 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 222 | 223 | emoji-regex@^8.0.0: 224 | version "8.0.0" 225 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 226 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 227 | 228 | escalade@^3.1.1: 229 | version "3.1.1" 230 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 231 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 232 | 233 | escape-string-regexp@4.0.0: 234 | version "4.0.0" 235 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 236 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 237 | 238 | fill-range@^7.1.1: 239 | version "7.1.1" 240 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 241 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 242 | dependencies: 243 | to-regex-range "^5.0.1" 244 | 245 | find-up@5.0.0: 246 | version "5.0.0" 247 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 248 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 249 | dependencies: 250 | locate-path "^6.0.0" 251 | path-exists "^4.0.0" 252 | 253 | flat@^5.0.2: 254 | version "5.0.2" 255 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 256 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 257 | 258 | fs.realpath@^1.0.0: 259 | version "1.0.0" 260 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 261 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 262 | 263 | fsevents@~2.3.2: 264 | version "2.3.2" 265 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 266 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 267 | 268 | get-caller-file@^2.0.5: 269 | version "2.0.5" 270 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 271 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 272 | 273 | glob-parent@~5.1.2: 274 | version "5.1.2" 275 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 276 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 277 | dependencies: 278 | is-glob "^4.0.1" 279 | 280 | glob@7.2.0: 281 | version "7.2.0" 282 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 283 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 284 | dependencies: 285 | fs.realpath "^1.0.0" 286 | inflight "^1.0.4" 287 | inherits "2" 288 | minimatch "^3.0.4" 289 | once "^1.3.0" 290 | path-is-absolute "^1.0.0" 291 | 292 | has-flag@^4.0.0: 293 | version "4.0.0" 294 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 295 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 296 | 297 | he@1.2.0: 298 | version "1.2.0" 299 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 300 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 301 | 302 | inflight@^1.0.4: 303 | version "1.0.6" 304 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 305 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 306 | dependencies: 307 | once "^1.3.0" 308 | wrappy "1" 309 | 310 | inherits@2: 311 | version "2.0.3" 312 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 313 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 314 | 315 | is-binary-path@~2.1.0: 316 | version "2.1.0" 317 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 318 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 319 | dependencies: 320 | binary-extensions "^2.0.0" 321 | 322 | is-extglob@^2.1.1: 323 | version "2.1.1" 324 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 325 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 326 | 327 | is-fullwidth-code-point@^3.0.0: 328 | version "3.0.0" 329 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 330 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 331 | 332 | is-glob@^4.0.1, is-glob@~4.0.1: 333 | version "4.0.3" 334 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 335 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 336 | dependencies: 337 | is-extglob "^2.1.1" 338 | 339 | is-number@^7.0.0: 340 | version "7.0.0" 341 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 342 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 343 | 344 | is-plain-obj@^2.1.0: 345 | version "2.1.0" 346 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 347 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 348 | 349 | is-unicode-supported@^0.1.0: 350 | version "0.1.0" 351 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 352 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 353 | 354 | js-yaml@4.1.0: 355 | version "4.1.0" 356 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 357 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 358 | dependencies: 359 | argparse "^2.0.1" 360 | 361 | locate-path@^6.0.0: 362 | version "6.0.0" 363 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 364 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 365 | dependencies: 366 | p-locate "^5.0.0" 367 | 368 | log-symbols@4.1.0: 369 | version "4.1.0" 370 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 371 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 372 | dependencies: 373 | chalk "^4.1.0" 374 | is-unicode-supported "^0.1.0" 375 | 376 | make-error@^1.1.1: 377 | version "1.3.6" 378 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 379 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 380 | 381 | minimatch@5.0.1: 382 | version "5.0.1" 383 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" 384 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== 385 | dependencies: 386 | brace-expansion "^2.0.1" 387 | 388 | minimatch@^3.0.4: 389 | version "3.1.2" 390 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 391 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 392 | dependencies: 393 | brace-expansion "^1.1.7" 394 | 395 | mocha@^10.2.0: 396 | version "10.2.0" 397 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" 398 | integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== 399 | dependencies: 400 | ansi-colors "4.1.1" 401 | browser-stdout "1.3.1" 402 | chokidar "3.5.3" 403 | debug "4.3.4" 404 | diff "5.0.0" 405 | escape-string-regexp "4.0.0" 406 | find-up "5.0.0" 407 | glob "7.2.0" 408 | he "1.2.0" 409 | js-yaml "4.1.0" 410 | log-symbols "4.1.0" 411 | minimatch "5.0.1" 412 | ms "2.1.3" 413 | nanoid "3.3.3" 414 | serialize-javascript "6.0.0" 415 | strip-json-comments "3.1.1" 416 | supports-color "8.1.1" 417 | workerpool "6.2.1" 418 | yargs "16.2.0" 419 | yargs-parser "20.2.4" 420 | yargs-unparser "2.0.0" 421 | 422 | ms@2.1.2: 423 | version "2.1.2" 424 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 425 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 426 | 427 | ms@2.1.3: 428 | version "2.1.3" 429 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 430 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 431 | 432 | nanoid@3.3.3: 433 | version "3.3.3" 434 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" 435 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== 436 | 437 | normalize-path@^3.0.0, normalize-path@~3.0.0: 438 | version "3.0.0" 439 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 440 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 441 | 442 | once@^1.3.0: 443 | version "1.4.0" 444 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 445 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 446 | dependencies: 447 | wrappy "1" 448 | 449 | p-limit@^3.0.2: 450 | version "3.1.0" 451 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 452 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 453 | dependencies: 454 | yocto-queue "^0.1.0" 455 | 456 | p-locate@^5.0.0: 457 | version "5.0.0" 458 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 459 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 460 | dependencies: 461 | p-limit "^3.0.2" 462 | 463 | path-exists@^4.0.0: 464 | version "4.0.0" 465 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 466 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 467 | 468 | path-is-absolute@^1.0.0: 469 | version "1.0.1" 470 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 471 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 472 | 473 | picomatch@^2.0.4, picomatch@^2.2.1: 474 | version "2.3.1" 475 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 476 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 477 | 478 | randombytes@^2.1.0: 479 | version "2.1.0" 480 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 481 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 482 | dependencies: 483 | safe-buffer "^5.1.0" 484 | 485 | readdirp@~3.6.0: 486 | version "3.6.0" 487 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 488 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 489 | dependencies: 490 | picomatch "^2.2.1" 491 | 492 | require-directory@^2.1.1: 493 | version "2.1.1" 494 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 495 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 496 | 497 | safe-buffer@^5.1.0: 498 | version "5.2.1" 499 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 500 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 501 | 502 | serialize-javascript@6.0.0: 503 | version "6.0.0" 504 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 505 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 506 | dependencies: 507 | randombytes "^2.1.0" 508 | 509 | string-width@^4.1.0, string-width@^4.2.0: 510 | version "4.2.3" 511 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 512 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 513 | dependencies: 514 | emoji-regex "^8.0.0" 515 | is-fullwidth-code-point "^3.0.0" 516 | strip-ansi "^6.0.1" 517 | 518 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 519 | version "6.0.1" 520 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 521 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 522 | dependencies: 523 | ansi-regex "^5.0.1" 524 | 525 | strip-json-comments@3.1.1: 526 | version "3.1.1" 527 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 528 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 529 | 530 | supports-color@8.1.1: 531 | version "8.1.1" 532 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 533 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 534 | dependencies: 535 | has-flag "^4.0.0" 536 | 537 | supports-color@^7.1.0: 538 | version "7.2.0" 539 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 540 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 541 | dependencies: 542 | has-flag "^4.0.0" 543 | 544 | to-regex-range@^5.0.1: 545 | version "5.0.1" 546 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 547 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 548 | dependencies: 549 | is-number "^7.0.0" 550 | 551 | ts-node@^10.9.1: 552 | version "10.9.1" 553 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" 554 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== 555 | dependencies: 556 | "@cspotcode/source-map-support" "^0.8.0" 557 | "@tsconfig/node10" "^1.0.7" 558 | "@tsconfig/node12" "^1.0.7" 559 | "@tsconfig/node14" "^1.0.0" 560 | "@tsconfig/node16" "^1.0.2" 561 | acorn "^8.4.1" 562 | acorn-walk "^8.1.1" 563 | arg "^4.1.0" 564 | create-require "^1.1.0" 565 | diff "^4.0.1" 566 | make-error "^1.1.1" 567 | v8-compile-cache-lib "^3.0.1" 568 | yn "3.1.1" 569 | 570 | typescript@^4.4.4: 571 | version "4.4.4" 572 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" 573 | integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== 574 | 575 | v8-compile-cache-lib@^3.0.1: 576 | version "3.0.1" 577 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 578 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 579 | 580 | workerpool@6.2.1: 581 | version "6.2.1" 582 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" 583 | integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== 584 | 585 | wrap-ansi@^7.0.0: 586 | version "7.0.0" 587 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 588 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 589 | dependencies: 590 | ansi-styles "^4.0.0" 591 | string-width "^4.1.0" 592 | strip-ansi "^6.0.0" 593 | 594 | wrappy@1: 595 | version "1.0.2" 596 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 597 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 598 | 599 | y18n@^5.0.5: 600 | version "5.0.8" 601 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 602 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 603 | 604 | yargs-parser@20.2.4: 605 | version "20.2.4" 606 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 607 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 608 | 609 | yargs-parser@^20.2.2: 610 | version "20.2.9" 611 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 612 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 613 | 614 | yargs-unparser@2.0.0: 615 | version "2.0.0" 616 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 617 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 618 | dependencies: 619 | camelcase "^6.0.0" 620 | decamelize "^4.0.0" 621 | flat "^5.0.2" 622 | is-plain-obj "^2.1.0" 623 | 624 | yargs@16.2.0: 625 | version "16.2.0" 626 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 627 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 628 | dependencies: 629 | cliui "^7.0.2" 630 | escalade "^3.1.1" 631 | get-caller-file "^2.0.5" 632 | require-directory "^2.1.1" 633 | string-width "^4.2.0" 634 | y18n "^5.0.5" 635 | yargs-parser "^20.2.2" 636 | 637 | yn@3.1.1: 638 | version "3.1.1" 639 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 640 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 641 | 642 | yocto-queue@^0.1.0: 643 | version "0.1.0" 644 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 645 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 646 | --------------------------------------------------------------------------------