├── .github ├── CODEOWNERS └── workflows │ ├── checks.yml │ └── publish.yml ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── LICENSE ├── README.md ├── eslint.config.js ├── package-lock.json ├── package.json ├── src ├── deps.ts ├── index.ts ├── log.ts ├── missing.d.ts └── proc.ts ├── test ├── index.test.ts └── tsconfig.json └── tsconfig.json /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @raphael-theriault-swi @solarwindscloud/eng-apm-instrumentation 2 | 3 | # placeholder for GH EMU where this will move to new org for public repos 4 | # * @solarwinds/eng-pub-apm-instrumentation 5 | -------------------------------------------------------------------------------- /.github/workflows/checks.yml: -------------------------------------------------------------------------------- 1 | name: Checks 2 | on: [pull_request] 3 | 4 | jobs: 5 | checks: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v4 9 | - uses: actions/setup-node@v3 10 | with: 11 | node-version: 18 12 | cache: npm 13 | - run: npm ci 14 | 15 | - run: npm run build 16 | - run: npm run lint 17 | - run: npm run test 18 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | on: 3 | workflow_dispatch: 4 | inputs: 5 | version: 6 | description: Version to publish 7 | required: true 8 | 9 | jobs: 10 | publish: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - name: configure git 15 | run: | 16 | git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" 17 | git config --global user.name "github-actions[bot]" 18 | 19 | - uses: actions/setup-node@v3 20 | with: 21 | node-version: 18 22 | registry-url: https://registry.npmjs.org 23 | - run: npm ci 24 | 25 | - run: npm run build 26 | - run: npm run lint 27 | - run: npm run test 28 | 29 | - run: npm version ${{ inputs.version }} 30 | - run: git push origin main --follow-tags 31 | - run: npm publish 32 | env: 33 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | node_modules/ 3 | dist/ 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "tabWidth": 2, 4 | "semi": false, 5 | "singleQuote": false, 6 | "quoteProps": "as-needed", 7 | "trailingComma": "all", 8 | "bracketSpacing": true, 9 | "arrowParens": "always", 10 | "endOfLine": "lf" 11 | } 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | © 2023 SolarWinds Worldwide, LLC. All rights reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # zig-build 2 | 3 | Node.js native addon build and cross-compile library using Zig 4 | 5 | - [Usage](#usage) 6 | - [Custom Node headers version](#custom-node-headers-version) 7 | - [Preprocessor defines](#preprocessor-defines) 8 | - [Linking libraries](#linking-libraries) 9 | - [Custom flags](#custom-flags) 10 | - [Custom glibc version](#custom-glibc-version) 11 | - [Caveats](#caveats) 12 | - [Contributing](#contributing) 13 | - [License](./LICENSE) 14 | 15 | `zig-build` provides an interface for building native C/C++ Node-API addons or any native code. Unlike `node-gyp` and `cmake-js`, it is not a wrapper around a build system and directly calls the compiler. It doesn't depend on the system compiler and instead downloads a copy of Zig and uses its [Clang wrapper](https://andrewkelley.me/post/zig-cc-powerful-drop-in-replacement-gcc-clang.html), and benefits from its many features. 16 | 17 | - First class cross-compilation support 18 | - Automatic build caching 19 | - Statically linked libc++ to use any C++ standard on any target 20 | - Custom glibc version targeting 21 | 22 | `zig-build` aims to be a modern alternative to `node-gyp`, and as such only offers first-class support for Node-API (previously NAPI) addons and not legacy NAN ones. Node headers for the current version are downloaded and added to the include path as Node-API is version agnostic, and automatically downloading version-specific headers is a non-goal. `zig-build` will also detect and automatically include `node-addon-api` if it is present. 23 | 24 | Also following this focus on modern approaches, `zig-build` doesn't provide any way to download native addons at install time. We instead recommend using [`optionalDependencies`](https://docs.npmjs.com/cli/v8/configuring-npm/package-json#optionaldependencies) with [`os`](https://docs.npmjs.com/cli/v8/configuring-npm/package-json#os) and [`cpu`](https://docs.npmjs.com/cli/v8/configuring-npm/package-json#cpu) specific npm packages containing their respective native addons, which are supported by all modern package managers, provide a much better user experience and reduce the amount of runtime dependencies. 25 | 26 | ## Usage 27 | 28 | Unlike `node-gyp`, `zig-build` is provided as a library and not a CLI. You will need to create a script file and import the `build` function, with the upside that the build configuration can profit from the expressivity of JavaScript. Another difference is that `zig-build` focuses on cross-compilation, and the compilation target will not be implied to be the current machine and must be specified explicitly. 29 | 30 | Many options are available, for a full reference see [`index.ts`](./src/index.ts). 31 | 32 | ```sh 33 | # using npm 34 | npm install --save-dev zig-build 35 | # optional 36 | npm install --save-dev node-addon-api 37 | 38 | # using yarn 39 | yarn add --dev zig-build 40 | # optional 41 | yarn add --dev node-addon-api 42 | ``` 43 | 44 | ```js 45 | import { build } from "zig-build" 46 | 47 | const config = { 48 | sources: ["addon.cc", "util.cc"], 49 | std: "c++17", 50 | } 51 | 52 | await build({ 53 | windows: { 54 | target: "x86_64-windows", 55 | output: "windows/addon.node", 56 | ...config, 57 | }, 58 | "linux-x64": { 59 | target: "x86_64-linux-gnu", 60 | output: "linux-x64/addon.node", 61 | ...config, 62 | }, 63 | "linux-arm64": { 64 | target: "aarch64-linux-gnu", 65 | output: "linux-arm64/addon.node", 66 | ...config, 67 | }, 68 | }) 69 | ``` 70 | 71 | ### Custom Node headers version 72 | 73 | ```js 74 | await build({ 75 | addon: { 76 | target: "x86_64-linux-gnu", 77 | sources: ["addon.cc"], 78 | output: "addon.node", 79 | nodeVersion: "18.0.0", 80 | }, 81 | }) 82 | ``` 83 | 84 | ### Preprocessor defines 85 | 86 | ```js 87 | await build({ 88 | addon: { 89 | target: "x86_64-linux-gnu", 90 | sources: ["addon.cc"], 91 | output: "addon.node", 92 | defines: { 93 | TARGET_NODE: true, // -DTARGET_NODE 94 | ADDON_VERSION: "1.2.3", // -DADDON_VERSION=1.2.3 95 | ADDON_REV: 4, // -DADDON_REV=4 96 | }, 97 | }, 98 | }) 99 | ``` 100 | 101 | ### Linking libraries 102 | 103 | ```js 104 | await build({ 105 | addon: { 106 | target: "x86_64-linux-gnu", 107 | sources: ["addon.cc"], 108 | output: "addon.node", 109 | libraries: ["z", "private"], // -lz -lprivate 110 | librariesSearch: ["libprivate-vendored"], // -Llibprivate-vendored 111 | rpath: "$ORIGIN", // -Wl,-rpath,$ORIGIN 112 | }, 113 | }) 114 | ``` 115 | 116 | ### Custom flags 117 | 118 | ```js 119 | await build({ 120 | addon: { 121 | target: "x86_64-linux-gnu", 122 | sources: ["addon.cc"], 123 | output: "addon.node", 124 | cflags: ["-Wl,-soname,napiaddon"], 125 | }, 126 | }) 127 | ``` 128 | 129 | ### Custom glibc version 130 | 131 | Thanks to Zig, Linux `gnu` targets support specifying a custom glibc version, which makes it possible to run the addon on older Linux distribution, which bundle older glibc versions, even if it was built against a much more recent version of glibc. 132 | 133 | ```js 134 | await build({ 135 | addon: { 136 | target: "x86_64-linux-gnu", 137 | glibc: "2.17", 138 | sources: ["addon.cc"], 139 | output: "addon.node", 140 | }, 141 | }) 142 | ``` 143 | 144 | ## Caveats 145 | 146 | While it inherits Zig's upsides, `zig-build` also inherits its caveats. 147 | 148 | - [Incompatibility with `g++` and `clang++`](https://github.com/ziglang/zig/issues/9832). This generally applies to any C++ code; all objects should be built with the same compiler. 149 | - Incompatibility with MSVC. Since this is a cross-compiler which needs to run on any target, Windows targets use `mingw`. 150 | - Statically linking `libc++`. This is often useful but not always desirable and there are reasons to prefer dynamically linking against the system `libstdc++`. 151 | - Not using the system compiler. There a many reasons to need or prefer using the system compiler, in which cases `zig-build` is simply not appropriate. 152 | 153 | ## Contributing 154 | 155 | Contributions are welcome ! For major changes, please first open an issue to discuss before opening a PR. 156 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | const path = require("node:path") 2 | const fs = require("node:fs") 3 | 4 | const eslint = require("@eslint/js") 5 | const globals = require("globals") 6 | const prettier = require("eslint-config-prettier") 7 | const typescriptParser = require("@typescript-eslint/parser") 8 | const typescriptPlugin = require("@typescript-eslint/eslint-plugin") 9 | const tsdocPlugin = require("eslint-plugin-tsdoc") 10 | const importsPlugin = require("eslint-plugin-simple-import-sort") 11 | const headerPlugin = require("eslint-plugin-header") 12 | 13 | const license = fs.readFileSync(path.join(__dirname, "LICENSE"), "utf8") 14 | 15 | module.exports = [ 16 | { ignores: ["dist/**"] }, 17 | eslint.configs.recommended, 18 | { 19 | files: ["**/*.js"], 20 | languageOptions: { 21 | ecmaVersion: 11, 22 | globals: { ...globals.es2020, ...globals.commonjs, ...globals.node }, 23 | }, 24 | }, 25 | { 26 | files: ["**/*.ts"], 27 | languageOptions: { 28 | parser: typescriptParser, 29 | parserOptions: { project: true }, 30 | }, 31 | plugins: { 32 | "@typescript-eslint": typescriptPlugin, 33 | tsdoc: tsdocPlugin, 34 | imports: importsPlugin, 35 | }, 36 | rules: { 37 | ...typescriptPlugin.configs["eslint-recommended"].overrides[0].rules, 38 | ...typescriptPlugin.configs["strict-type-checked"].rules, 39 | ...typescriptPlugin.configs["stylistic-type-checked"].rules, 40 | "@typescript-eslint/no-non-null-assertion": "off", 41 | "@typescript-eslint/consistent-type-imports": [ 42 | "warn", 43 | { prefer: "type-imports", fixStyle: "inline-type-imports" }, 44 | ], 45 | "tsdoc/syntax": "warn", 46 | "imports/imports": "warn", 47 | }, 48 | }, 49 | { 50 | files: ["src/**"], 51 | plugins: { header: headerPlugin }, 52 | rules: { 53 | "header/header": ["error", "block", `\n${license.trim()}\n`], 54 | }, 55 | }, 56 | prettier, 57 | ] 58 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zig-build", 3 | "version": "0.3.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "zig-build", 9 | "version": "0.3.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "chalk": "^4.1.2" 13 | }, 14 | "devDependencies": { 15 | "@eslint/js": "^8.50.0", 16 | "@solarwinds-apm/test": "^1.0.0-pre.3", 17 | "@types/node": "^16.0.0", 18 | "@types/shimmer": "^1.0.2", 19 | "@types/sinon": "^10.0.16", 20 | "@typescript-eslint/eslint-plugin": "^6.7.2", 21 | "@typescript-eslint/parser": "^6.7.2", 22 | "eslint": "^8.49.0", 23 | "eslint-config-prettier": "^9.0.0", 24 | "eslint-plugin-header": "^3.1.1", 25 | "eslint-plugin-simple-import-sort": "^10.0.0", 26 | "eslint-plugin-tsdoc": "^0.2.17", 27 | "globals": "^13.22.0", 28 | "prettier": "^3.0.3", 29 | "shimmer": "^1.2.1", 30 | "sinon": "^16.0.0", 31 | "typescript": "^5.2.2" 32 | }, 33 | "engines": { 34 | "node": ">= 16.0.0" 35 | }, 36 | "peerDependencies": { 37 | "node-addon-api": "*" 38 | }, 39 | "peerDependenciesMeta": { 40 | "node-addon-api": { 41 | "optional": true 42 | } 43 | } 44 | }, 45 | "node_modules/@aashutoshrathi/word-wrap": { 46 | "version": "1.2.6", 47 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 48 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 49 | "dev": true, 50 | "engines": { 51 | "node": ">=0.10.0" 52 | } 53 | }, 54 | "node_modules/@bcoe/v8-coverage": { 55 | "version": "0.2.3", 56 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 57 | "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 58 | "dev": true 59 | }, 60 | "node_modules/@esbuild-kit/cjs-loader": { 61 | "version": "2.4.4", 62 | "resolved": "https://registry.npmjs.org/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.4.tgz", 63 | "integrity": "sha512-NfsJX4PdzhwSkfJukczyUiZGc7zNNWZcEAyqeISpDnn0PTfzMJR1aR8xAIPskBejIxBJbIgCCMzbaYa9SXepIg==", 64 | "dev": true, 65 | "dependencies": { 66 | "@esbuild-kit/core-utils": "^3.2.3", 67 | "get-tsconfig": "^4.7.0" 68 | } 69 | }, 70 | "node_modules/@esbuild-kit/core-utils": { 71 | "version": "3.3.2", 72 | "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", 73 | "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", 74 | "dev": true, 75 | "dependencies": { 76 | "esbuild": "~0.18.20", 77 | "source-map-support": "^0.5.21" 78 | } 79 | }, 80 | "node_modules/@esbuild-kit/esm-loader": { 81 | "version": "2.6.5", 82 | "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", 83 | "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", 84 | "dev": true, 85 | "dependencies": { 86 | "@esbuild-kit/core-utils": "^3.3.2", 87 | "get-tsconfig": "^4.7.0" 88 | } 89 | }, 90 | "node_modules/@esbuild/android-arm": { 91 | "version": "0.18.20", 92 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 93 | "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 94 | "cpu": [ 95 | "arm" 96 | ], 97 | "dev": true, 98 | "optional": true, 99 | "os": [ 100 | "android" 101 | ], 102 | "engines": { 103 | "node": ">=12" 104 | } 105 | }, 106 | "node_modules/@esbuild/android-arm64": { 107 | "version": "0.18.20", 108 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 109 | "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 110 | "cpu": [ 111 | "arm64" 112 | ], 113 | "dev": true, 114 | "optional": true, 115 | "os": [ 116 | "android" 117 | ], 118 | "engines": { 119 | "node": ">=12" 120 | } 121 | }, 122 | "node_modules/@esbuild/android-x64": { 123 | "version": "0.18.20", 124 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 125 | "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 126 | "cpu": [ 127 | "x64" 128 | ], 129 | "dev": true, 130 | "optional": true, 131 | "os": [ 132 | "android" 133 | ], 134 | "engines": { 135 | "node": ">=12" 136 | } 137 | }, 138 | "node_modules/@esbuild/darwin-arm64": { 139 | "version": "0.18.20", 140 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 141 | "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 142 | "cpu": [ 143 | "arm64" 144 | ], 145 | "dev": true, 146 | "optional": true, 147 | "os": [ 148 | "darwin" 149 | ], 150 | "engines": { 151 | "node": ">=12" 152 | } 153 | }, 154 | "node_modules/@esbuild/darwin-x64": { 155 | "version": "0.18.20", 156 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 157 | "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 158 | "cpu": [ 159 | "x64" 160 | ], 161 | "dev": true, 162 | "optional": true, 163 | "os": [ 164 | "darwin" 165 | ], 166 | "engines": { 167 | "node": ">=12" 168 | } 169 | }, 170 | "node_modules/@esbuild/freebsd-arm64": { 171 | "version": "0.18.20", 172 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 173 | "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 174 | "cpu": [ 175 | "arm64" 176 | ], 177 | "dev": true, 178 | "optional": true, 179 | "os": [ 180 | "freebsd" 181 | ], 182 | "engines": { 183 | "node": ">=12" 184 | } 185 | }, 186 | "node_modules/@esbuild/freebsd-x64": { 187 | "version": "0.18.20", 188 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 189 | "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 190 | "cpu": [ 191 | "x64" 192 | ], 193 | "dev": true, 194 | "optional": true, 195 | "os": [ 196 | "freebsd" 197 | ], 198 | "engines": { 199 | "node": ">=12" 200 | } 201 | }, 202 | "node_modules/@esbuild/linux-arm": { 203 | "version": "0.18.20", 204 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 205 | "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 206 | "cpu": [ 207 | "arm" 208 | ], 209 | "dev": true, 210 | "optional": true, 211 | "os": [ 212 | "linux" 213 | ], 214 | "engines": { 215 | "node": ">=12" 216 | } 217 | }, 218 | "node_modules/@esbuild/linux-arm64": { 219 | "version": "0.18.20", 220 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 221 | "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 222 | "cpu": [ 223 | "arm64" 224 | ], 225 | "dev": true, 226 | "optional": true, 227 | "os": [ 228 | "linux" 229 | ], 230 | "engines": { 231 | "node": ">=12" 232 | } 233 | }, 234 | "node_modules/@esbuild/linux-ia32": { 235 | "version": "0.18.20", 236 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 237 | "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 238 | "cpu": [ 239 | "ia32" 240 | ], 241 | "dev": true, 242 | "optional": true, 243 | "os": [ 244 | "linux" 245 | ], 246 | "engines": { 247 | "node": ">=12" 248 | } 249 | }, 250 | "node_modules/@esbuild/linux-loong64": { 251 | "version": "0.18.20", 252 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 253 | "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 254 | "cpu": [ 255 | "loong64" 256 | ], 257 | "dev": true, 258 | "optional": true, 259 | "os": [ 260 | "linux" 261 | ], 262 | "engines": { 263 | "node": ">=12" 264 | } 265 | }, 266 | "node_modules/@esbuild/linux-mips64el": { 267 | "version": "0.18.20", 268 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 269 | "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 270 | "cpu": [ 271 | "mips64el" 272 | ], 273 | "dev": true, 274 | "optional": true, 275 | "os": [ 276 | "linux" 277 | ], 278 | "engines": { 279 | "node": ">=12" 280 | } 281 | }, 282 | "node_modules/@esbuild/linux-ppc64": { 283 | "version": "0.18.20", 284 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 285 | "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 286 | "cpu": [ 287 | "ppc64" 288 | ], 289 | "dev": true, 290 | "optional": true, 291 | "os": [ 292 | "linux" 293 | ], 294 | "engines": { 295 | "node": ">=12" 296 | } 297 | }, 298 | "node_modules/@esbuild/linux-riscv64": { 299 | "version": "0.18.20", 300 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 301 | "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 302 | "cpu": [ 303 | "riscv64" 304 | ], 305 | "dev": true, 306 | "optional": true, 307 | "os": [ 308 | "linux" 309 | ], 310 | "engines": { 311 | "node": ">=12" 312 | } 313 | }, 314 | "node_modules/@esbuild/linux-s390x": { 315 | "version": "0.18.20", 316 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 317 | "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 318 | "cpu": [ 319 | "s390x" 320 | ], 321 | "dev": true, 322 | "optional": true, 323 | "os": [ 324 | "linux" 325 | ], 326 | "engines": { 327 | "node": ">=12" 328 | } 329 | }, 330 | "node_modules/@esbuild/linux-x64": { 331 | "version": "0.18.20", 332 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", 333 | "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 334 | "cpu": [ 335 | "x64" 336 | ], 337 | "dev": true, 338 | "optional": true, 339 | "os": [ 340 | "linux" 341 | ], 342 | "engines": { 343 | "node": ">=12" 344 | } 345 | }, 346 | "node_modules/@esbuild/netbsd-x64": { 347 | "version": "0.18.20", 348 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 349 | "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 350 | "cpu": [ 351 | "x64" 352 | ], 353 | "dev": true, 354 | "optional": true, 355 | "os": [ 356 | "netbsd" 357 | ], 358 | "engines": { 359 | "node": ">=12" 360 | } 361 | }, 362 | "node_modules/@esbuild/openbsd-x64": { 363 | "version": "0.18.20", 364 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 365 | "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 366 | "cpu": [ 367 | "x64" 368 | ], 369 | "dev": true, 370 | "optional": true, 371 | "os": [ 372 | "openbsd" 373 | ], 374 | "engines": { 375 | "node": ">=12" 376 | } 377 | }, 378 | "node_modules/@esbuild/sunos-x64": { 379 | "version": "0.18.20", 380 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 381 | "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 382 | "cpu": [ 383 | "x64" 384 | ], 385 | "dev": true, 386 | "optional": true, 387 | "os": [ 388 | "sunos" 389 | ], 390 | "engines": { 391 | "node": ">=12" 392 | } 393 | }, 394 | "node_modules/@esbuild/win32-arm64": { 395 | "version": "0.18.20", 396 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 397 | "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 398 | "cpu": [ 399 | "arm64" 400 | ], 401 | "dev": true, 402 | "optional": true, 403 | "os": [ 404 | "win32" 405 | ], 406 | "engines": { 407 | "node": ">=12" 408 | } 409 | }, 410 | "node_modules/@esbuild/win32-ia32": { 411 | "version": "0.18.20", 412 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 413 | "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 414 | "cpu": [ 415 | "ia32" 416 | ], 417 | "dev": true, 418 | "optional": true, 419 | "os": [ 420 | "win32" 421 | ], 422 | "engines": { 423 | "node": ">=12" 424 | } 425 | }, 426 | "node_modules/@esbuild/win32-x64": { 427 | "version": "0.18.20", 428 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 429 | "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 430 | "cpu": [ 431 | "x64" 432 | ], 433 | "dev": true, 434 | "optional": true, 435 | "os": [ 436 | "win32" 437 | ], 438 | "engines": { 439 | "node": ">=12" 440 | } 441 | }, 442 | "node_modules/@eslint-community/eslint-utils": { 443 | "version": "4.4.0", 444 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 445 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 446 | "dev": true, 447 | "dependencies": { 448 | "eslint-visitor-keys": "^3.3.0" 449 | }, 450 | "engines": { 451 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 452 | }, 453 | "peerDependencies": { 454 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 455 | } 456 | }, 457 | "node_modules/@eslint-community/regexpp": { 458 | "version": "4.8.1", 459 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", 460 | "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", 461 | "dev": true, 462 | "engines": { 463 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 464 | } 465 | }, 466 | "node_modules/@eslint/eslintrc": { 467 | "version": "2.1.2", 468 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", 469 | "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", 470 | "dev": true, 471 | "dependencies": { 472 | "ajv": "^6.12.4", 473 | "debug": "^4.3.2", 474 | "espree": "^9.6.0", 475 | "globals": "^13.19.0", 476 | "ignore": "^5.2.0", 477 | "import-fresh": "^3.2.1", 478 | "js-yaml": "^4.1.0", 479 | "minimatch": "^3.1.2", 480 | "strip-json-comments": "^3.1.1" 481 | }, 482 | "engines": { 483 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 484 | }, 485 | "funding": { 486 | "url": "https://opencollective.com/eslint" 487 | } 488 | }, 489 | "node_modules/@eslint/js": { 490 | "version": "8.50.0", 491 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", 492 | "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", 493 | "dev": true, 494 | "engines": { 495 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 496 | } 497 | }, 498 | "node_modules/@humanwhocodes/config-array": { 499 | "version": "0.11.11", 500 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", 501 | "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", 502 | "dev": true, 503 | "dependencies": { 504 | "@humanwhocodes/object-schema": "^1.2.1", 505 | "debug": "^4.1.1", 506 | "minimatch": "^3.0.5" 507 | }, 508 | "engines": { 509 | "node": ">=10.10.0" 510 | } 511 | }, 512 | "node_modules/@humanwhocodes/module-importer": { 513 | "version": "1.0.1", 514 | "dev": true, 515 | "license": "Apache-2.0", 516 | "engines": { 517 | "node": ">=12.22" 518 | }, 519 | "funding": { 520 | "type": "github", 521 | "url": "https://github.com/sponsors/nzakas" 522 | } 523 | }, 524 | "node_modules/@humanwhocodes/object-schema": { 525 | "version": "1.2.1", 526 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 527 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 528 | "dev": true 529 | }, 530 | "node_modules/@istanbuljs/schema": { 531 | "version": "0.1.3", 532 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 533 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 534 | "dev": true, 535 | "engines": { 536 | "node": ">=8" 537 | } 538 | }, 539 | "node_modules/@jridgewell/resolve-uri": { 540 | "version": "3.1.1", 541 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 542 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 543 | "dev": true, 544 | "engines": { 545 | "node": ">=6.0.0" 546 | } 547 | }, 548 | "node_modules/@jridgewell/sourcemap-codec": { 549 | "version": "1.4.15", 550 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 551 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 552 | "dev": true 553 | }, 554 | "node_modules/@jridgewell/trace-mapping": { 555 | "version": "0.3.19", 556 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", 557 | "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", 558 | "dev": true, 559 | "dependencies": { 560 | "@jridgewell/resolve-uri": "^3.1.0", 561 | "@jridgewell/sourcemap-codec": "^1.4.14" 562 | } 563 | }, 564 | "node_modules/@microsoft/tsdoc": { 565 | "version": "0.14.2", 566 | "dev": true, 567 | "license": "MIT" 568 | }, 569 | "node_modules/@microsoft/tsdoc-config": { 570 | "version": "0.16.2", 571 | "dev": true, 572 | "license": "MIT", 573 | "dependencies": { 574 | "@microsoft/tsdoc": "0.14.2", 575 | "ajv": "~6.12.6", 576 | "jju": "~1.4.0", 577 | "resolve": "~1.19.0" 578 | } 579 | }, 580 | "node_modules/@nodelib/fs.scandir": { 581 | "version": "2.1.5", 582 | "dev": true, 583 | "license": "MIT", 584 | "dependencies": { 585 | "@nodelib/fs.stat": "2.0.5", 586 | "run-parallel": "^1.1.9" 587 | }, 588 | "engines": { 589 | "node": ">= 8" 590 | } 591 | }, 592 | "node_modules/@nodelib/fs.stat": { 593 | "version": "2.0.5", 594 | "dev": true, 595 | "license": "MIT", 596 | "engines": { 597 | "node": ">= 8" 598 | } 599 | }, 600 | "node_modules/@nodelib/fs.walk": { 601 | "version": "1.2.8", 602 | "dev": true, 603 | "license": "MIT", 604 | "dependencies": { 605 | "@nodelib/fs.scandir": "2.1.5", 606 | "fastq": "^1.6.0" 607 | }, 608 | "engines": { 609 | "node": ">= 8" 610 | } 611 | }, 612 | "node_modules/@sinonjs/commons": { 613 | "version": "3.0.0", 614 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", 615 | "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", 616 | "dev": true, 617 | "dependencies": { 618 | "type-detect": "4.0.8" 619 | } 620 | }, 621 | "node_modules/@sinonjs/fake-timers": { 622 | "version": "10.3.0", 623 | "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", 624 | "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", 625 | "dev": true, 626 | "dependencies": { 627 | "@sinonjs/commons": "^3.0.0" 628 | } 629 | }, 630 | "node_modules/@sinonjs/samsam": { 631 | "version": "8.0.0", 632 | "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", 633 | "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", 634 | "dev": true, 635 | "dependencies": { 636 | "@sinonjs/commons": "^2.0.0", 637 | "lodash.get": "^4.4.2", 638 | "type-detect": "^4.0.8" 639 | } 640 | }, 641 | "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { 642 | "version": "2.0.0", 643 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", 644 | "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", 645 | "dev": true, 646 | "dependencies": { 647 | "type-detect": "4.0.8" 648 | } 649 | }, 650 | "node_modules/@sinonjs/text-encoding": { 651 | "version": "0.7.2", 652 | "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", 653 | "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", 654 | "dev": true 655 | }, 656 | "node_modules/@solarwinds-apm/test": { 657 | "version": "1.0.0-pre.3", 658 | "resolved": "https://registry.npmjs.org/@solarwinds-apm/test/-/test-1.0.0-pre.3.tgz", 659 | "integrity": "sha512-qdJp1IWrY390/CF6oKpRhGRaDd1cJ5dY64CZASBLaCPv20YeWH5sCTcm8QFs+Ui7W4P+HagC9PL1v/zmwUVYkQ==", 660 | "dev": true, 661 | "dependencies": { 662 | "@types/chai": "^4.3.6", 663 | "@types/node": ">=16.18 <17 || >=18.8 <19 || >=20", 664 | "c8": "^8.0.1", 665 | "chai": "^4.3.8", 666 | "globby": "^11.1.0", 667 | "semver": "^7.5.4", 668 | "tsx": "^3.12.10" 669 | }, 670 | "bin": { 671 | "swtest": "dist/bin.js" 672 | }, 673 | "engines": { 674 | "node": ">=16.18 <17 || >=18.8 <19 || >=20" 675 | } 676 | }, 677 | "node_modules/@types/chai": { 678 | "version": "4.3.6", 679 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", 680 | "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", 681 | "dev": true 682 | }, 683 | "node_modules/@types/istanbul-lib-coverage": { 684 | "version": "2.0.4", 685 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", 686 | "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", 687 | "dev": true 688 | }, 689 | "node_modules/@types/json-schema": { 690 | "version": "7.0.13", 691 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", 692 | "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", 693 | "dev": true 694 | }, 695 | "node_modules/@types/node": { 696 | "version": "16.18.11", 697 | "dev": true, 698 | "license": "MIT" 699 | }, 700 | "node_modules/@types/semver": { 701 | "version": "7.5.2", 702 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", 703 | "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", 704 | "dev": true 705 | }, 706 | "node_modules/@types/shimmer": { 707 | "version": "1.0.2", 708 | "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.2.tgz", 709 | "integrity": "sha512-dKkr1bTxbEsFlh2ARpKzcaAmsYixqt9UyCdoEZk8rHyE4iQYcDCyvSjDSf7JUWJHlJiTtbIoQjxKh6ViywqDAg==", 710 | "dev": true 711 | }, 712 | "node_modules/@types/sinon": { 713 | "version": "10.0.16", 714 | "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", 715 | "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", 716 | "dev": true, 717 | "dependencies": { 718 | "@types/sinonjs__fake-timers": "*" 719 | } 720 | }, 721 | "node_modules/@types/sinonjs__fake-timers": { 722 | "version": "8.1.2", 723 | "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", 724 | "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", 725 | "dev": true 726 | }, 727 | "node_modules/@typescript-eslint/eslint-plugin": { 728 | "version": "6.7.2", 729 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz", 730 | "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==", 731 | "dev": true, 732 | "dependencies": { 733 | "@eslint-community/regexpp": "^4.5.1", 734 | "@typescript-eslint/scope-manager": "6.7.2", 735 | "@typescript-eslint/type-utils": "6.7.2", 736 | "@typescript-eslint/utils": "6.7.2", 737 | "@typescript-eslint/visitor-keys": "6.7.2", 738 | "debug": "^4.3.4", 739 | "graphemer": "^1.4.0", 740 | "ignore": "^5.2.4", 741 | "natural-compare": "^1.4.0", 742 | "semver": "^7.5.4", 743 | "ts-api-utils": "^1.0.1" 744 | }, 745 | "engines": { 746 | "node": "^16.0.0 || >=18.0.0" 747 | }, 748 | "funding": { 749 | "type": "opencollective", 750 | "url": "https://opencollective.com/typescript-eslint" 751 | }, 752 | "peerDependencies": { 753 | "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", 754 | "eslint": "^7.0.0 || ^8.0.0" 755 | }, 756 | "peerDependenciesMeta": { 757 | "typescript": { 758 | "optional": true 759 | } 760 | } 761 | }, 762 | "node_modules/@typescript-eslint/parser": { 763 | "version": "6.7.2", 764 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz", 765 | "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==", 766 | "dev": true, 767 | "dependencies": { 768 | "@typescript-eslint/scope-manager": "6.7.2", 769 | "@typescript-eslint/types": "6.7.2", 770 | "@typescript-eslint/typescript-estree": "6.7.2", 771 | "@typescript-eslint/visitor-keys": "6.7.2", 772 | "debug": "^4.3.4" 773 | }, 774 | "engines": { 775 | "node": "^16.0.0 || >=18.0.0" 776 | }, 777 | "funding": { 778 | "type": "opencollective", 779 | "url": "https://opencollective.com/typescript-eslint" 780 | }, 781 | "peerDependencies": { 782 | "eslint": "^7.0.0 || ^8.0.0" 783 | }, 784 | "peerDependenciesMeta": { 785 | "typescript": { 786 | "optional": true 787 | } 788 | } 789 | }, 790 | "node_modules/@typescript-eslint/scope-manager": { 791 | "version": "6.7.2", 792 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", 793 | "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", 794 | "dev": true, 795 | "dependencies": { 796 | "@typescript-eslint/types": "6.7.2", 797 | "@typescript-eslint/visitor-keys": "6.7.2" 798 | }, 799 | "engines": { 800 | "node": "^16.0.0 || >=18.0.0" 801 | }, 802 | "funding": { 803 | "type": "opencollective", 804 | "url": "https://opencollective.com/typescript-eslint" 805 | } 806 | }, 807 | "node_modules/@typescript-eslint/type-utils": { 808 | "version": "6.7.2", 809 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz", 810 | "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==", 811 | "dev": true, 812 | "dependencies": { 813 | "@typescript-eslint/typescript-estree": "6.7.2", 814 | "@typescript-eslint/utils": "6.7.2", 815 | "debug": "^4.3.4", 816 | "ts-api-utils": "^1.0.1" 817 | }, 818 | "engines": { 819 | "node": "^16.0.0 || >=18.0.0" 820 | }, 821 | "funding": { 822 | "type": "opencollective", 823 | "url": "https://opencollective.com/typescript-eslint" 824 | }, 825 | "peerDependencies": { 826 | "eslint": "^7.0.0 || ^8.0.0" 827 | }, 828 | "peerDependenciesMeta": { 829 | "typescript": { 830 | "optional": true 831 | } 832 | } 833 | }, 834 | "node_modules/@typescript-eslint/types": { 835 | "version": "6.7.2", 836 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", 837 | "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", 838 | "dev": true, 839 | "engines": { 840 | "node": "^16.0.0 || >=18.0.0" 841 | }, 842 | "funding": { 843 | "type": "opencollective", 844 | "url": "https://opencollective.com/typescript-eslint" 845 | } 846 | }, 847 | "node_modules/@typescript-eslint/typescript-estree": { 848 | "version": "6.7.2", 849 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", 850 | "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", 851 | "dev": true, 852 | "dependencies": { 853 | "@typescript-eslint/types": "6.7.2", 854 | "@typescript-eslint/visitor-keys": "6.7.2", 855 | "debug": "^4.3.4", 856 | "globby": "^11.1.0", 857 | "is-glob": "^4.0.3", 858 | "semver": "^7.5.4", 859 | "ts-api-utils": "^1.0.1" 860 | }, 861 | "engines": { 862 | "node": "^16.0.0 || >=18.0.0" 863 | }, 864 | "funding": { 865 | "type": "opencollective", 866 | "url": "https://opencollective.com/typescript-eslint" 867 | }, 868 | "peerDependenciesMeta": { 869 | "typescript": { 870 | "optional": true 871 | } 872 | } 873 | }, 874 | "node_modules/@typescript-eslint/utils": { 875 | "version": "6.7.2", 876 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz", 877 | "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==", 878 | "dev": true, 879 | "dependencies": { 880 | "@eslint-community/eslint-utils": "^4.4.0", 881 | "@types/json-schema": "^7.0.12", 882 | "@types/semver": "^7.5.0", 883 | "@typescript-eslint/scope-manager": "6.7.2", 884 | "@typescript-eslint/types": "6.7.2", 885 | "@typescript-eslint/typescript-estree": "6.7.2", 886 | "semver": "^7.5.4" 887 | }, 888 | "engines": { 889 | "node": "^16.0.0 || >=18.0.0" 890 | }, 891 | "funding": { 892 | "type": "opencollective", 893 | "url": "https://opencollective.com/typescript-eslint" 894 | }, 895 | "peerDependencies": { 896 | "eslint": "^7.0.0 || ^8.0.0" 897 | } 898 | }, 899 | "node_modules/@typescript-eslint/visitor-keys": { 900 | "version": "6.7.2", 901 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", 902 | "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", 903 | "dev": true, 904 | "dependencies": { 905 | "@typescript-eslint/types": "6.7.2", 906 | "eslint-visitor-keys": "^3.4.1" 907 | }, 908 | "engines": { 909 | "node": "^16.0.0 || >=18.0.0" 910 | }, 911 | "funding": { 912 | "type": "opencollective", 913 | "url": "https://opencollective.com/typescript-eslint" 914 | } 915 | }, 916 | "node_modules/acorn": { 917 | "version": "8.10.0", 918 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 919 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 920 | "dev": true, 921 | "bin": { 922 | "acorn": "bin/acorn" 923 | }, 924 | "engines": { 925 | "node": ">=0.4.0" 926 | } 927 | }, 928 | "node_modules/acorn-jsx": { 929 | "version": "5.3.2", 930 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 931 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 932 | "dev": true, 933 | "peerDependencies": { 934 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 935 | } 936 | }, 937 | "node_modules/ajv": { 938 | "version": "6.12.6", 939 | "dev": true, 940 | "license": "MIT", 941 | "dependencies": { 942 | "fast-deep-equal": "^3.1.1", 943 | "fast-json-stable-stringify": "^2.0.0", 944 | "json-schema-traverse": "^0.4.1", 945 | "uri-js": "^4.2.2" 946 | }, 947 | "funding": { 948 | "type": "github", 949 | "url": "https://github.com/sponsors/epoberezkin" 950 | } 951 | }, 952 | "node_modules/ansi-regex": { 953 | "version": "5.0.1", 954 | "dev": true, 955 | "license": "MIT", 956 | "engines": { 957 | "node": ">=8" 958 | } 959 | }, 960 | "node_modules/ansi-styles": { 961 | "version": "4.3.0", 962 | "license": "MIT", 963 | "dependencies": { 964 | "color-convert": "^2.0.1" 965 | }, 966 | "engines": { 967 | "node": ">=8" 968 | }, 969 | "funding": { 970 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 971 | } 972 | }, 973 | "node_modules/argparse": { 974 | "version": "2.0.1", 975 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 976 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 977 | "dev": true 978 | }, 979 | "node_modules/array-union": { 980 | "version": "2.1.0", 981 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 982 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 983 | "dev": true, 984 | "engines": { 985 | "node": ">=8" 986 | } 987 | }, 988 | "node_modules/assertion-error": { 989 | "version": "1.1.0", 990 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 991 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 992 | "dev": true, 993 | "engines": { 994 | "node": "*" 995 | } 996 | }, 997 | "node_modules/balanced-match": { 998 | "version": "1.0.2", 999 | "dev": true, 1000 | "license": "MIT" 1001 | }, 1002 | "node_modules/brace-expansion": { 1003 | "version": "1.1.11", 1004 | "dev": true, 1005 | "license": "MIT", 1006 | "dependencies": { 1007 | "balanced-match": "^1.0.0", 1008 | "concat-map": "0.0.1" 1009 | } 1010 | }, 1011 | "node_modules/braces": { 1012 | "version": "3.0.3", 1013 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1014 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1015 | "dev": true, 1016 | "dependencies": { 1017 | "fill-range": "^7.1.1" 1018 | }, 1019 | "engines": { 1020 | "node": ">=8" 1021 | } 1022 | }, 1023 | "node_modules/buffer-from": { 1024 | "version": "1.1.2", 1025 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1026 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1027 | "dev": true 1028 | }, 1029 | "node_modules/c8": { 1030 | "version": "8.0.1", 1031 | "resolved": "https://registry.npmjs.org/c8/-/c8-8.0.1.tgz", 1032 | "integrity": "sha512-EINpopxZNH1mETuI0DzRA4MZpAUH+IFiRhnmFD3vFr3vdrgxqi3VfE3KL0AIL+zDq8rC9bZqwM/VDmmoe04y7w==", 1033 | "dev": true, 1034 | "dependencies": { 1035 | "@bcoe/v8-coverage": "^0.2.3", 1036 | "@istanbuljs/schema": "^0.1.3", 1037 | "find-up": "^5.0.0", 1038 | "foreground-child": "^2.0.0", 1039 | "istanbul-lib-coverage": "^3.2.0", 1040 | "istanbul-lib-report": "^3.0.1", 1041 | "istanbul-reports": "^3.1.6", 1042 | "rimraf": "^3.0.2", 1043 | "test-exclude": "^6.0.0", 1044 | "v8-to-istanbul": "^9.0.0", 1045 | "yargs": "^17.7.2", 1046 | "yargs-parser": "^21.1.1" 1047 | }, 1048 | "bin": { 1049 | "c8": "bin/c8.js" 1050 | }, 1051 | "engines": { 1052 | "node": ">=12" 1053 | } 1054 | }, 1055 | "node_modules/callsites": { 1056 | "version": "3.1.0", 1057 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1058 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1059 | "dev": true, 1060 | "engines": { 1061 | "node": ">=6" 1062 | } 1063 | }, 1064 | "node_modules/chai": { 1065 | "version": "4.3.8", 1066 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", 1067 | "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", 1068 | "dev": true, 1069 | "dependencies": { 1070 | "assertion-error": "^1.1.0", 1071 | "check-error": "^1.0.2", 1072 | "deep-eql": "^4.1.2", 1073 | "get-func-name": "^2.0.0", 1074 | "loupe": "^2.3.1", 1075 | "pathval": "^1.1.1", 1076 | "type-detect": "^4.0.5" 1077 | }, 1078 | "engines": { 1079 | "node": ">=4" 1080 | } 1081 | }, 1082 | "node_modules/chalk": { 1083 | "version": "4.1.2", 1084 | "license": "MIT", 1085 | "dependencies": { 1086 | "ansi-styles": "^4.1.0", 1087 | "supports-color": "^7.1.0" 1088 | }, 1089 | "engines": { 1090 | "node": ">=10" 1091 | }, 1092 | "funding": { 1093 | "url": "https://github.com/chalk/chalk?sponsor=1" 1094 | } 1095 | }, 1096 | "node_modules/check-error": { 1097 | "version": "1.0.2", 1098 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 1099 | "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", 1100 | "dev": true, 1101 | "engines": { 1102 | "node": "*" 1103 | } 1104 | }, 1105 | "node_modules/cliui": { 1106 | "version": "8.0.1", 1107 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1108 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1109 | "dev": true, 1110 | "dependencies": { 1111 | "string-width": "^4.2.0", 1112 | "strip-ansi": "^6.0.1", 1113 | "wrap-ansi": "^7.0.0" 1114 | }, 1115 | "engines": { 1116 | "node": ">=12" 1117 | } 1118 | }, 1119 | "node_modules/color-convert": { 1120 | "version": "2.0.1", 1121 | "license": "MIT", 1122 | "dependencies": { 1123 | "color-name": "~1.1.4" 1124 | }, 1125 | "engines": { 1126 | "node": ">=7.0.0" 1127 | } 1128 | }, 1129 | "node_modules/color-name": { 1130 | "version": "1.1.4", 1131 | "license": "MIT" 1132 | }, 1133 | "node_modules/concat-map": { 1134 | "version": "0.0.1", 1135 | "dev": true, 1136 | "license": "MIT" 1137 | }, 1138 | "node_modules/convert-source-map": { 1139 | "version": "1.9.0", 1140 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 1141 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 1142 | "dev": true 1143 | }, 1144 | "node_modules/cross-spawn": { 1145 | "version": "7.0.3", 1146 | "dev": true, 1147 | "license": "MIT", 1148 | "dependencies": { 1149 | "path-key": "^3.1.0", 1150 | "shebang-command": "^2.0.0", 1151 | "which": "^2.0.1" 1152 | }, 1153 | "engines": { 1154 | "node": ">= 8" 1155 | } 1156 | }, 1157 | "node_modules/debug": { 1158 | "version": "4.3.4", 1159 | "dev": true, 1160 | "license": "MIT", 1161 | "dependencies": { 1162 | "ms": "2.1.2" 1163 | }, 1164 | "engines": { 1165 | "node": ">=6.0" 1166 | }, 1167 | "peerDependenciesMeta": { 1168 | "supports-color": { 1169 | "optional": true 1170 | } 1171 | } 1172 | }, 1173 | "node_modules/deep-eql": { 1174 | "version": "4.1.3", 1175 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 1176 | "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 1177 | "dev": true, 1178 | "dependencies": { 1179 | "type-detect": "^4.0.0" 1180 | }, 1181 | "engines": { 1182 | "node": ">=6" 1183 | } 1184 | }, 1185 | "node_modules/deep-is": { 1186 | "version": "0.1.4", 1187 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1188 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1189 | "dev": true 1190 | }, 1191 | "node_modules/diff": { 1192 | "version": "5.1.0", 1193 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", 1194 | "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", 1195 | "dev": true, 1196 | "engines": { 1197 | "node": ">=0.3.1" 1198 | } 1199 | }, 1200 | "node_modules/dir-glob": { 1201 | "version": "3.0.1", 1202 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1203 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1204 | "dev": true, 1205 | "dependencies": { 1206 | "path-type": "^4.0.0" 1207 | }, 1208 | "engines": { 1209 | "node": ">=8" 1210 | } 1211 | }, 1212 | "node_modules/doctrine": { 1213 | "version": "3.0.0", 1214 | "dev": true, 1215 | "license": "Apache-2.0", 1216 | "dependencies": { 1217 | "esutils": "^2.0.2" 1218 | }, 1219 | "engines": { 1220 | "node": ">=6.0.0" 1221 | } 1222 | }, 1223 | "node_modules/emoji-regex": { 1224 | "version": "8.0.0", 1225 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1226 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1227 | "dev": true 1228 | }, 1229 | "node_modules/esbuild": { 1230 | "version": "0.18.20", 1231 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", 1232 | "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 1233 | "dev": true, 1234 | "hasInstallScript": true, 1235 | "bin": { 1236 | "esbuild": "bin/esbuild" 1237 | }, 1238 | "engines": { 1239 | "node": ">=12" 1240 | }, 1241 | "optionalDependencies": { 1242 | "@esbuild/android-arm": "0.18.20", 1243 | "@esbuild/android-arm64": "0.18.20", 1244 | "@esbuild/android-x64": "0.18.20", 1245 | "@esbuild/darwin-arm64": "0.18.20", 1246 | "@esbuild/darwin-x64": "0.18.20", 1247 | "@esbuild/freebsd-arm64": "0.18.20", 1248 | "@esbuild/freebsd-x64": "0.18.20", 1249 | "@esbuild/linux-arm": "0.18.20", 1250 | "@esbuild/linux-arm64": "0.18.20", 1251 | "@esbuild/linux-ia32": "0.18.20", 1252 | "@esbuild/linux-loong64": "0.18.20", 1253 | "@esbuild/linux-mips64el": "0.18.20", 1254 | "@esbuild/linux-ppc64": "0.18.20", 1255 | "@esbuild/linux-riscv64": "0.18.20", 1256 | "@esbuild/linux-s390x": "0.18.20", 1257 | "@esbuild/linux-x64": "0.18.20", 1258 | "@esbuild/netbsd-x64": "0.18.20", 1259 | "@esbuild/openbsd-x64": "0.18.20", 1260 | "@esbuild/sunos-x64": "0.18.20", 1261 | "@esbuild/win32-arm64": "0.18.20", 1262 | "@esbuild/win32-ia32": "0.18.20", 1263 | "@esbuild/win32-x64": "0.18.20" 1264 | } 1265 | }, 1266 | "node_modules/escalade": { 1267 | "version": "3.1.1", 1268 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1269 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1270 | "dev": true, 1271 | "engines": { 1272 | "node": ">=6" 1273 | } 1274 | }, 1275 | "node_modules/escape-string-regexp": { 1276 | "version": "4.0.0", 1277 | "dev": true, 1278 | "license": "MIT", 1279 | "engines": { 1280 | "node": ">=10" 1281 | }, 1282 | "funding": { 1283 | "url": "https://github.com/sponsors/sindresorhus" 1284 | } 1285 | }, 1286 | "node_modules/eslint": { 1287 | "version": "8.49.0", 1288 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", 1289 | "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", 1290 | "dev": true, 1291 | "dependencies": { 1292 | "@eslint-community/eslint-utils": "^4.2.0", 1293 | "@eslint-community/regexpp": "^4.6.1", 1294 | "@eslint/eslintrc": "^2.1.2", 1295 | "@eslint/js": "8.49.0", 1296 | "@humanwhocodes/config-array": "^0.11.11", 1297 | "@humanwhocodes/module-importer": "^1.0.1", 1298 | "@nodelib/fs.walk": "^1.2.8", 1299 | "ajv": "^6.12.4", 1300 | "chalk": "^4.0.0", 1301 | "cross-spawn": "^7.0.2", 1302 | "debug": "^4.3.2", 1303 | "doctrine": "^3.0.0", 1304 | "escape-string-regexp": "^4.0.0", 1305 | "eslint-scope": "^7.2.2", 1306 | "eslint-visitor-keys": "^3.4.3", 1307 | "espree": "^9.6.1", 1308 | "esquery": "^1.4.2", 1309 | "esutils": "^2.0.2", 1310 | "fast-deep-equal": "^3.1.3", 1311 | "file-entry-cache": "^6.0.1", 1312 | "find-up": "^5.0.0", 1313 | "glob-parent": "^6.0.2", 1314 | "globals": "^13.19.0", 1315 | "graphemer": "^1.4.0", 1316 | "ignore": "^5.2.0", 1317 | "imurmurhash": "^0.1.4", 1318 | "is-glob": "^4.0.0", 1319 | "is-path-inside": "^3.0.3", 1320 | "js-yaml": "^4.1.0", 1321 | "json-stable-stringify-without-jsonify": "^1.0.1", 1322 | "levn": "^0.4.1", 1323 | "lodash.merge": "^4.6.2", 1324 | "minimatch": "^3.1.2", 1325 | "natural-compare": "^1.4.0", 1326 | "optionator": "^0.9.3", 1327 | "strip-ansi": "^6.0.1", 1328 | "text-table": "^0.2.0" 1329 | }, 1330 | "bin": { 1331 | "eslint": "bin/eslint.js" 1332 | }, 1333 | "engines": { 1334 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1335 | }, 1336 | "funding": { 1337 | "url": "https://opencollective.com/eslint" 1338 | } 1339 | }, 1340 | "node_modules/eslint-config-prettier": { 1341 | "version": "9.0.0", 1342 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", 1343 | "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", 1344 | "dev": true, 1345 | "bin": { 1346 | "eslint-config-prettier": "bin/cli.js" 1347 | }, 1348 | "peerDependencies": { 1349 | "eslint": ">=7.0.0" 1350 | } 1351 | }, 1352 | "node_modules/eslint-plugin-header": { 1353 | "version": "3.1.1", 1354 | "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", 1355 | "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", 1356 | "dev": true, 1357 | "peerDependencies": { 1358 | "eslint": ">=7.7.0" 1359 | } 1360 | }, 1361 | "node_modules/eslint-plugin-simple-import-sort": { 1362 | "version": "10.0.0", 1363 | "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", 1364 | "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", 1365 | "dev": true, 1366 | "peerDependencies": { 1367 | "eslint": ">=5.0.0" 1368 | } 1369 | }, 1370 | "node_modules/eslint-plugin-tsdoc": { 1371 | "version": "0.2.17", 1372 | "dev": true, 1373 | "license": "MIT", 1374 | "dependencies": { 1375 | "@microsoft/tsdoc": "0.14.2", 1376 | "@microsoft/tsdoc-config": "0.16.2" 1377 | } 1378 | }, 1379 | "node_modules/eslint-scope": { 1380 | "version": "7.2.2", 1381 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 1382 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 1383 | "dev": true, 1384 | "dependencies": { 1385 | "esrecurse": "^4.3.0", 1386 | "estraverse": "^5.2.0" 1387 | }, 1388 | "engines": { 1389 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1390 | }, 1391 | "funding": { 1392 | "url": "https://opencollective.com/eslint" 1393 | } 1394 | }, 1395 | "node_modules/eslint-visitor-keys": { 1396 | "version": "3.4.3", 1397 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1398 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1399 | "dev": true, 1400 | "engines": { 1401 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1402 | }, 1403 | "funding": { 1404 | "url": "https://opencollective.com/eslint" 1405 | } 1406 | }, 1407 | "node_modules/eslint/node_modules/@eslint/js": { 1408 | "version": "8.49.0", 1409 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", 1410 | "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", 1411 | "dev": true, 1412 | "engines": { 1413 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1414 | } 1415 | }, 1416 | "node_modules/espree": { 1417 | "version": "9.6.1", 1418 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 1419 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 1420 | "dev": true, 1421 | "dependencies": { 1422 | "acorn": "^8.9.0", 1423 | "acorn-jsx": "^5.3.2", 1424 | "eslint-visitor-keys": "^3.4.1" 1425 | }, 1426 | "engines": { 1427 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1428 | }, 1429 | "funding": { 1430 | "url": "https://opencollective.com/eslint" 1431 | } 1432 | }, 1433 | "node_modules/esquery": { 1434 | "version": "1.5.0", 1435 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 1436 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 1437 | "dev": true, 1438 | "dependencies": { 1439 | "estraverse": "^5.1.0" 1440 | }, 1441 | "engines": { 1442 | "node": ">=0.10" 1443 | } 1444 | }, 1445 | "node_modules/esrecurse": { 1446 | "version": "4.3.0", 1447 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1448 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1449 | "dev": true, 1450 | "dependencies": { 1451 | "estraverse": "^5.2.0" 1452 | }, 1453 | "engines": { 1454 | "node": ">=4.0" 1455 | } 1456 | }, 1457 | "node_modules/estraverse": { 1458 | "version": "5.3.0", 1459 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1460 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1461 | "dev": true, 1462 | "engines": { 1463 | "node": ">=4.0" 1464 | } 1465 | }, 1466 | "node_modules/esutils": { 1467 | "version": "2.0.3", 1468 | "dev": true, 1469 | "license": "BSD-2-Clause", 1470 | "engines": { 1471 | "node": ">=0.10.0" 1472 | } 1473 | }, 1474 | "node_modules/fast-deep-equal": { 1475 | "version": "3.1.3", 1476 | "dev": true, 1477 | "license": "MIT" 1478 | }, 1479 | "node_modules/fast-glob": { 1480 | "version": "3.3.1", 1481 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", 1482 | "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", 1483 | "dev": true, 1484 | "dependencies": { 1485 | "@nodelib/fs.stat": "^2.0.2", 1486 | "@nodelib/fs.walk": "^1.2.3", 1487 | "glob-parent": "^5.1.2", 1488 | "merge2": "^1.3.0", 1489 | "micromatch": "^4.0.4" 1490 | }, 1491 | "engines": { 1492 | "node": ">=8.6.0" 1493 | } 1494 | }, 1495 | "node_modules/fast-glob/node_modules/glob-parent": { 1496 | "version": "5.1.2", 1497 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1498 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1499 | "dev": true, 1500 | "dependencies": { 1501 | "is-glob": "^4.0.1" 1502 | }, 1503 | "engines": { 1504 | "node": ">= 6" 1505 | } 1506 | }, 1507 | "node_modules/fast-json-stable-stringify": { 1508 | "version": "2.1.0", 1509 | "dev": true, 1510 | "license": "MIT" 1511 | }, 1512 | "node_modules/fast-levenshtein": { 1513 | "version": "2.0.6", 1514 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1515 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1516 | "dev": true 1517 | }, 1518 | "node_modules/fastq": { 1519 | "version": "1.14.0", 1520 | "dev": true, 1521 | "license": "ISC", 1522 | "dependencies": { 1523 | "reusify": "^1.0.4" 1524 | } 1525 | }, 1526 | "node_modules/file-entry-cache": { 1527 | "version": "6.0.1", 1528 | "dev": true, 1529 | "license": "MIT", 1530 | "dependencies": { 1531 | "flat-cache": "^3.0.4" 1532 | }, 1533 | "engines": { 1534 | "node": "^10.12.0 || >=12.0.0" 1535 | } 1536 | }, 1537 | "node_modules/fill-range": { 1538 | "version": "7.1.1", 1539 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1540 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1541 | "dev": true, 1542 | "dependencies": { 1543 | "to-regex-range": "^5.0.1" 1544 | }, 1545 | "engines": { 1546 | "node": ">=8" 1547 | } 1548 | }, 1549 | "node_modules/find-up": { 1550 | "version": "5.0.0", 1551 | "dev": true, 1552 | "license": "MIT", 1553 | "dependencies": { 1554 | "locate-path": "^6.0.0", 1555 | "path-exists": "^4.0.0" 1556 | }, 1557 | "engines": { 1558 | "node": ">=10" 1559 | }, 1560 | "funding": { 1561 | "url": "https://github.com/sponsors/sindresorhus" 1562 | } 1563 | }, 1564 | "node_modules/flat-cache": { 1565 | "version": "3.0.4", 1566 | "dev": true, 1567 | "license": "MIT", 1568 | "dependencies": { 1569 | "flatted": "^3.1.0", 1570 | "rimraf": "^3.0.2" 1571 | }, 1572 | "engines": { 1573 | "node": "^10.12.0 || >=12.0.0" 1574 | } 1575 | }, 1576 | "node_modules/flatted": { 1577 | "version": "3.2.7", 1578 | "dev": true, 1579 | "license": "ISC" 1580 | }, 1581 | "node_modules/foreground-child": { 1582 | "version": "2.0.0", 1583 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", 1584 | "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", 1585 | "dev": true, 1586 | "dependencies": { 1587 | "cross-spawn": "^7.0.0", 1588 | "signal-exit": "^3.0.2" 1589 | }, 1590 | "engines": { 1591 | "node": ">=8.0.0" 1592 | } 1593 | }, 1594 | "node_modules/fs.realpath": { 1595 | "version": "1.0.0", 1596 | "dev": true, 1597 | "license": "ISC" 1598 | }, 1599 | "node_modules/fsevents": { 1600 | "version": "2.3.3", 1601 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1602 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1603 | "dev": true, 1604 | "hasInstallScript": true, 1605 | "optional": true, 1606 | "os": [ 1607 | "darwin" 1608 | ], 1609 | "engines": { 1610 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1611 | } 1612 | }, 1613 | "node_modules/function-bind": { 1614 | "version": "1.1.1", 1615 | "dev": true, 1616 | "license": "MIT" 1617 | }, 1618 | "node_modules/get-caller-file": { 1619 | "version": "2.0.5", 1620 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1621 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1622 | "dev": true, 1623 | "engines": { 1624 | "node": "6.* || 8.* || >= 10.*" 1625 | } 1626 | }, 1627 | "node_modules/get-func-name": { 1628 | "version": "2.0.0", 1629 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 1630 | "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", 1631 | "dev": true, 1632 | "engines": { 1633 | "node": "*" 1634 | } 1635 | }, 1636 | "node_modules/get-tsconfig": { 1637 | "version": "4.7.1", 1638 | "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.1.tgz", 1639 | "integrity": "sha512-sLtd6Bcwbi9IrAow/raCOTE9pmhvo5ksQo5v2lApUGJMzja64MUYhBp0G6X1S+f7IrBPn1HP+XkS2w2meoGcjg==", 1640 | "dev": true, 1641 | "dependencies": { 1642 | "resolve-pkg-maps": "^1.0.0" 1643 | }, 1644 | "funding": { 1645 | "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 1646 | } 1647 | }, 1648 | "node_modules/glob": { 1649 | "version": "7.2.3", 1650 | "dev": true, 1651 | "license": "ISC", 1652 | "dependencies": { 1653 | "fs.realpath": "^1.0.0", 1654 | "inflight": "^1.0.4", 1655 | "inherits": "2", 1656 | "minimatch": "^3.1.1", 1657 | "once": "^1.3.0", 1658 | "path-is-absolute": "^1.0.0" 1659 | }, 1660 | "engines": { 1661 | "node": "*" 1662 | }, 1663 | "funding": { 1664 | "url": "https://github.com/sponsors/isaacs" 1665 | } 1666 | }, 1667 | "node_modules/glob-parent": { 1668 | "version": "6.0.2", 1669 | "dev": true, 1670 | "license": "ISC", 1671 | "dependencies": { 1672 | "is-glob": "^4.0.3" 1673 | }, 1674 | "engines": { 1675 | "node": ">=10.13.0" 1676 | } 1677 | }, 1678 | "node_modules/globals": { 1679 | "version": "13.22.0", 1680 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", 1681 | "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", 1682 | "dev": true, 1683 | "dependencies": { 1684 | "type-fest": "^0.20.2" 1685 | }, 1686 | "engines": { 1687 | "node": ">=8" 1688 | }, 1689 | "funding": { 1690 | "url": "https://github.com/sponsors/sindresorhus" 1691 | } 1692 | }, 1693 | "node_modules/globby": { 1694 | "version": "11.1.0", 1695 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1696 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1697 | "dev": true, 1698 | "dependencies": { 1699 | "array-union": "^2.1.0", 1700 | "dir-glob": "^3.0.1", 1701 | "fast-glob": "^3.2.9", 1702 | "ignore": "^5.2.0", 1703 | "merge2": "^1.4.1", 1704 | "slash": "^3.0.0" 1705 | }, 1706 | "engines": { 1707 | "node": ">=10" 1708 | }, 1709 | "funding": { 1710 | "url": "https://github.com/sponsors/sindresorhus" 1711 | } 1712 | }, 1713 | "node_modules/graphemer": { 1714 | "version": "1.4.0", 1715 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 1716 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 1717 | "dev": true 1718 | }, 1719 | "node_modules/has": { 1720 | "version": "1.0.3", 1721 | "dev": true, 1722 | "license": "MIT", 1723 | "dependencies": { 1724 | "function-bind": "^1.1.1" 1725 | }, 1726 | "engines": { 1727 | "node": ">= 0.4.0" 1728 | } 1729 | }, 1730 | "node_modules/has-flag": { 1731 | "version": "4.0.0", 1732 | "license": "MIT", 1733 | "engines": { 1734 | "node": ">=8" 1735 | } 1736 | }, 1737 | "node_modules/html-escaper": { 1738 | "version": "2.0.2", 1739 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 1740 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 1741 | "dev": true 1742 | }, 1743 | "node_modules/ignore": { 1744 | "version": "5.2.4", 1745 | "dev": true, 1746 | "license": "MIT", 1747 | "engines": { 1748 | "node": ">= 4" 1749 | } 1750 | }, 1751 | "node_modules/import-fresh": { 1752 | "version": "3.3.0", 1753 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1754 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1755 | "dev": true, 1756 | "dependencies": { 1757 | "parent-module": "^1.0.0", 1758 | "resolve-from": "^4.0.0" 1759 | }, 1760 | "engines": { 1761 | "node": ">=6" 1762 | }, 1763 | "funding": { 1764 | "url": "https://github.com/sponsors/sindresorhus" 1765 | } 1766 | }, 1767 | "node_modules/imurmurhash": { 1768 | "version": "0.1.4", 1769 | "dev": true, 1770 | "license": "MIT", 1771 | "engines": { 1772 | "node": ">=0.8.19" 1773 | } 1774 | }, 1775 | "node_modules/inflight": { 1776 | "version": "1.0.6", 1777 | "dev": true, 1778 | "license": "ISC", 1779 | "dependencies": { 1780 | "once": "^1.3.0", 1781 | "wrappy": "1" 1782 | } 1783 | }, 1784 | "node_modules/inherits": { 1785 | "version": "2.0.4", 1786 | "dev": true, 1787 | "license": "ISC" 1788 | }, 1789 | "node_modules/is-core-module": { 1790 | "version": "2.11.0", 1791 | "dev": true, 1792 | "license": "MIT", 1793 | "dependencies": { 1794 | "has": "^1.0.3" 1795 | }, 1796 | "funding": { 1797 | "url": "https://github.com/sponsors/ljharb" 1798 | } 1799 | }, 1800 | "node_modules/is-extglob": { 1801 | "version": "2.1.1", 1802 | "dev": true, 1803 | "license": "MIT", 1804 | "engines": { 1805 | "node": ">=0.10.0" 1806 | } 1807 | }, 1808 | "node_modules/is-fullwidth-code-point": { 1809 | "version": "3.0.0", 1810 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1811 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1812 | "dev": true, 1813 | "engines": { 1814 | "node": ">=8" 1815 | } 1816 | }, 1817 | "node_modules/is-glob": { 1818 | "version": "4.0.3", 1819 | "dev": true, 1820 | "license": "MIT", 1821 | "dependencies": { 1822 | "is-extglob": "^2.1.1" 1823 | }, 1824 | "engines": { 1825 | "node": ">=0.10.0" 1826 | } 1827 | }, 1828 | "node_modules/is-number": { 1829 | "version": "7.0.0", 1830 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1831 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1832 | "dev": true, 1833 | "engines": { 1834 | "node": ">=0.12.0" 1835 | } 1836 | }, 1837 | "node_modules/is-path-inside": { 1838 | "version": "3.0.3", 1839 | "dev": true, 1840 | "license": "MIT", 1841 | "engines": { 1842 | "node": ">=8" 1843 | } 1844 | }, 1845 | "node_modules/isarray": { 1846 | "version": "0.0.1", 1847 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1848 | "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", 1849 | "dev": true 1850 | }, 1851 | "node_modules/isexe": { 1852 | "version": "2.0.0", 1853 | "dev": true, 1854 | "license": "ISC" 1855 | }, 1856 | "node_modules/istanbul-lib-coverage": { 1857 | "version": "3.2.0", 1858 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", 1859 | "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", 1860 | "dev": true, 1861 | "engines": { 1862 | "node": ">=8" 1863 | } 1864 | }, 1865 | "node_modules/istanbul-lib-report": { 1866 | "version": "3.0.1", 1867 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 1868 | "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 1869 | "dev": true, 1870 | "dependencies": { 1871 | "istanbul-lib-coverage": "^3.0.0", 1872 | "make-dir": "^4.0.0", 1873 | "supports-color": "^7.1.0" 1874 | }, 1875 | "engines": { 1876 | "node": ">=10" 1877 | } 1878 | }, 1879 | "node_modules/istanbul-reports": { 1880 | "version": "3.1.6", 1881 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", 1882 | "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", 1883 | "dev": true, 1884 | "dependencies": { 1885 | "html-escaper": "^2.0.0", 1886 | "istanbul-lib-report": "^3.0.0" 1887 | }, 1888 | "engines": { 1889 | "node": ">=8" 1890 | } 1891 | }, 1892 | "node_modules/jju": { 1893 | "version": "1.4.0", 1894 | "dev": true, 1895 | "license": "MIT" 1896 | }, 1897 | "node_modules/js-yaml": { 1898 | "version": "4.1.0", 1899 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1900 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1901 | "dev": true, 1902 | "dependencies": { 1903 | "argparse": "^2.0.1" 1904 | }, 1905 | "bin": { 1906 | "js-yaml": "bin/js-yaml.js" 1907 | } 1908 | }, 1909 | "node_modules/json-schema-traverse": { 1910 | "version": "0.4.1", 1911 | "dev": true, 1912 | "license": "MIT" 1913 | }, 1914 | "node_modules/json-stable-stringify-without-jsonify": { 1915 | "version": "1.0.1", 1916 | "dev": true, 1917 | "license": "MIT" 1918 | }, 1919 | "node_modules/just-extend": { 1920 | "version": "4.2.1", 1921 | "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", 1922 | "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", 1923 | "dev": true 1924 | }, 1925 | "node_modules/levn": { 1926 | "version": "0.4.1", 1927 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1928 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1929 | "dev": true, 1930 | "dependencies": { 1931 | "prelude-ls": "^1.2.1", 1932 | "type-check": "~0.4.0" 1933 | }, 1934 | "engines": { 1935 | "node": ">= 0.8.0" 1936 | } 1937 | }, 1938 | "node_modules/locate-path": { 1939 | "version": "6.0.0", 1940 | "dev": true, 1941 | "license": "MIT", 1942 | "dependencies": { 1943 | "p-locate": "^5.0.0" 1944 | }, 1945 | "engines": { 1946 | "node": ">=10" 1947 | }, 1948 | "funding": { 1949 | "url": "https://github.com/sponsors/sindresorhus" 1950 | } 1951 | }, 1952 | "node_modules/lodash.get": { 1953 | "version": "4.4.2", 1954 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 1955 | "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", 1956 | "dev": true 1957 | }, 1958 | "node_modules/lodash.merge": { 1959 | "version": "4.6.2", 1960 | "dev": true, 1961 | "license": "MIT" 1962 | }, 1963 | "node_modules/loupe": { 1964 | "version": "2.3.6", 1965 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", 1966 | "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", 1967 | "dev": true, 1968 | "dependencies": { 1969 | "get-func-name": "^2.0.0" 1970 | } 1971 | }, 1972 | "node_modules/lru-cache": { 1973 | "version": "6.0.0", 1974 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1975 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1976 | "dev": true, 1977 | "dependencies": { 1978 | "yallist": "^4.0.0" 1979 | }, 1980 | "engines": { 1981 | "node": ">=10" 1982 | } 1983 | }, 1984 | "node_modules/make-dir": { 1985 | "version": "4.0.0", 1986 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 1987 | "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 1988 | "dev": true, 1989 | "dependencies": { 1990 | "semver": "^7.5.3" 1991 | }, 1992 | "engines": { 1993 | "node": ">=10" 1994 | }, 1995 | "funding": { 1996 | "url": "https://github.com/sponsors/sindresorhus" 1997 | } 1998 | }, 1999 | "node_modules/merge2": { 2000 | "version": "1.4.1", 2001 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2002 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2003 | "dev": true, 2004 | "engines": { 2005 | "node": ">= 8" 2006 | } 2007 | }, 2008 | "node_modules/micromatch": { 2009 | "version": "4.0.5", 2010 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2011 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2012 | "dev": true, 2013 | "dependencies": { 2014 | "braces": "^3.0.2", 2015 | "picomatch": "^2.3.1" 2016 | }, 2017 | "engines": { 2018 | "node": ">=8.6" 2019 | } 2020 | }, 2021 | "node_modules/minimatch": { 2022 | "version": "3.1.2", 2023 | "dev": true, 2024 | "license": "ISC", 2025 | "dependencies": { 2026 | "brace-expansion": "^1.1.7" 2027 | }, 2028 | "engines": { 2029 | "node": "*" 2030 | } 2031 | }, 2032 | "node_modules/ms": { 2033 | "version": "2.1.2", 2034 | "dev": true, 2035 | "license": "MIT" 2036 | }, 2037 | "node_modules/natural-compare": { 2038 | "version": "1.4.0", 2039 | "dev": true, 2040 | "license": "MIT" 2041 | }, 2042 | "node_modules/nise": { 2043 | "version": "5.1.4", 2044 | "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz", 2045 | "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==", 2046 | "dev": true, 2047 | "dependencies": { 2048 | "@sinonjs/commons": "^2.0.0", 2049 | "@sinonjs/fake-timers": "^10.0.2", 2050 | "@sinonjs/text-encoding": "^0.7.1", 2051 | "just-extend": "^4.0.2", 2052 | "path-to-regexp": "^1.7.0" 2053 | } 2054 | }, 2055 | "node_modules/nise/node_modules/@sinonjs/commons": { 2056 | "version": "2.0.0", 2057 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", 2058 | "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", 2059 | "dev": true, 2060 | "dependencies": { 2061 | "type-detect": "4.0.8" 2062 | } 2063 | }, 2064 | "node_modules/once": { 2065 | "version": "1.4.0", 2066 | "dev": true, 2067 | "license": "ISC", 2068 | "dependencies": { 2069 | "wrappy": "1" 2070 | } 2071 | }, 2072 | "node_modules/optionator": { 2073 | "version": "0.9.3", 2074 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 2075 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 2076 | "dev": true, 2077 | "dependencies": { 2078 | "@aashutoshrathi/word-wrap": "^1.2.3", 2079 | "deep-is": "^0.1.3", 2080 | "fast-levenshtein": "^2.0.6", 2081 | "levn": "^0.4.1", 2082 | "prelude-ls": "^1.2.1", 2083 | "type-check": "^0.4.0" 2084 | }, 2085 | "engines": { 2086 | "node": ">= 0.8.0" 2087 | } 2088 | }, 2089 | "node_modules/p-limit": { 2090 | "version": "3.1.0", 2091 | "dev": true, 2092 | "license": "MIT", 2093 | "dependencies": { 2094 | "yocto-queue": "^0.1.0" 2095 | }, 2096 | "engines": { 2097 | "node": ">=10" 2098 | }, 2099 | "funding": { 2100 | "url": "https://github.com/sponsors/sindresorhus" 2101 | } 2102 | }, 2103 | "node_modules/p-locate": { 2104 | "version": "5.0.0", 2105 | "dev": true, 2106 | "license": "MIT", 2107 | "dependencies": { 2108 | "p-limit": "^3.0.2" 2109 | }, 2110 | "engines": { 2111 | "node": ">=10" 2112 | }, 2113 | "funding": { 2114 | "url": "https://github.com/sponsors/sindresorhus" 2115 | } 2116 | }, 2117 | "node_modules/parent-module": { 2118 | "version": "1.0.1", 2119 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2120 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2121 | "dev": true, 2122 | "dependencies": { 2123 | "callsites": "^3.0.0" 2124 | }, 2125 | "engines": { 2126 | "node": ">=6" 2127 | } 2128 | }, 2129 | "node_modules/path-exists": { 2130 | "version": "4.0.0", 2131 | "dev": true, 2132 | "license": "MIT", 2133 | "engines": { 2134 | "node": ">=8" 2135 | } 2136 | }, 2137 | "node_modules/path-is-absolute": { 2138 | "version": "1.0.1", 2139 | "dev": true, 2140 | "license": "MIT", 2141 | "engines": { 2142 | "node": ">=0.10.0" 2143 | } 2144 | }, 2145 | "node_modules/path-key": { 2146 | "version": "3.1.1", 2147 | "dev": true, 2148 | "license": "MIT", 2149 | "engines": { 2150 | "node": ">=8" 2151 | } 2152 | }, 2153 | "node_modules/path-parse": { 2154 | "version": "1.0.7", 2155 | "dev": true, 2156 | "license": "MIT" 2157 | }, 2158 | "node_modules/path-to-regexp": { 2159 | "version": "1.8.0", 2160 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", 2161 | "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", 2162 | "dev": true, 2163 | "dependencies": { 2164 | "isarray": "0.0.1" 2165 | } 2166 | }, 2167 | "node_modules/path-type": { 2168 | "version": "4.0.0", 2169 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2170 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2171 | "dev": true, 2172 | "engines": { 2173 | "node": ">=8" 2174 | } 2175 | }, 2176 | "node_modules/pathval": { 2177 | "version": "1.1.1", 2178 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 2179 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 2180 | "dev": true, 2181 | "engines": { 2182 | "node": "*" 2183 | } 2184 | }, 2185 | "node_modules/picomatch": { 2186 | "version": "2.3.1", 2187 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2188 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2189 | "dev": true, 2190 | "engines": { 2191 | "node": ">=8.6" 2192 | }, 2193 | "funding": { 2194 | "url": "https://github.com/sponsors/jonschlinkert" 2195 | } 2196 | }, 2197 | "node_modules/prelude-ls": { 2198 | "version": "1.2.1", 2199 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2200 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2201 | "dev": true, 2202 | "engines": { 2203 | "node": ">= 0.8.0" 2204 | } 2205 | }, 2206 | "node_modules/prettier": { 2207 | "version": "3.0.3", 2208 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", 2209 | "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", 2210 | "dev": true, 2211 | "bin": { 2212 | "prettier": "bin/prettier.cjs" 2213 | }, 2214 | "engines": { 2215 | "node": ">=14" 2216 | }, 2217 | "funding": { 2218 | "url": "https://github.com/prettier/prettier?sponsor=1" 2219 | } 2220 | }, 2221 | "node_modules/punycode": { 2222 | "version": "2.1.1", 2223 | "dev": true, 2224 | "license": "MIT", 2225 | "engines": { 2226 | "node": ">=6" 2227 | } 2228 | }, 2229 | "node_modules/queue-microtask": { 2230 | "version": "1.2.3", 2231 | "dev": true, 2232 | "funding": [ 2233 | { 2234 | "type": "github", 2235 | "url": "https://github.com/sponsors/feross" 2236 | }, 2237 | { 2238 | "type": "patreon", 2239 | "url": "https://www.patreon.com/feross" 2240 | }, 2241 | { 2242 | "type": "consulting", 2243 | "url": "https://feross.org/support" 2244 | } 2245 | ], 2246 | "license": "MIT" 2247 | }, 2248 | "node_modules/require-directory": { 2249 | "version": "2.1.1", 2250 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2251 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 2252 | "dev": true, 2253 | "engines": { 2254 | "node": ">=0.10.0" 2255 | } 2256 | }, 2257 | "node_modules/resolve": { 2258 | "version": "1.19.0", 2259 | "dev": true, 2260 | "license": "MIT", 2261 | "dependencies": { 2262 | "is-core-module": "^2.1.0", 2263 | "path-parse": "^1.0.6" 2264 | }, 2265 | "funding": { 2266 | "url": "https://github.com/sponsors/ljharb" 2267 | } 2268 | }, 2269 | "node_modules/resolve-from": { 2270 | "version": "4.0.0", 2271 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2272 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2273 | "dev": true, 2274 | "engines": { 2275 | "node": ">=4" 2276 | } 2277 | }, 2278 | "node_modules/resolve-pkg-maps": { 2279 | "version": "1.0.0", 2280 | "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 2281 | "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 2282 | "dev": true, 2283 | "funding": { 2284 | "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 2285 | } 2286 | }, 2287 | "node_modules/reusify": { 2288 | "version": "1.0.4", 2289 | "dev": true, 2290 | "license": "MIT", 2291 | "engines": { 2292 | "iojs": ">=1.0.0", 2293 | "node": ">=0.10.0" 2294 | } 2295 | }, 2296 | "node_modules/rimraf": { 2297 | "version": "3.0.2", 2298 | "dev": true, 2299 | "license": "ISC", 2300 | "dependencies": { 2301 | "glob": "^7.1.3" 2302 | }, 2303 | "bin": { 2304 | "rimraf": "bin.js" 2305 | }, 2306 | "funding": { 2307 | "url": "https://github.com/sponsors/isaacs" 2308 | } 2309 | }, 2310 | "node_modules/run-parallel": { 2311 | "version": "1.2.0", 2312 | "dev": true, 2313 | "funding": [ 2314 | { 2315 | "type": "github", 2316 | "url": "https://github.com/sponsors/feross" 2317 | }, 2318 | { 2319 | "type": "patreon", 2320 | "url": "https://www.patreon.com/feross" 2321 | }, 2322 | { 2323 | "type": "consulting", 2324 | "url": "https://feross.org/support" 2325 | } 2326 | ], 2327 | "license": "MIT", 2328 | "dependencies": { 2329 | "queue-microtask": "^1.2.2" 2330 | } 2331 | }, 2332 | "node_modules/semver": { 2333 | "version": "7.5.4", 2334 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 2335 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 2336 | "dev": true, 2337 | "dependencies": { 2338 | "lru-cache": "^6.0.0" 2339 | }, 2340 | "bin": { 2341 | "semver": "bin/semver.js" 2342 | }, 2343 | "engines": { 2344 | "node": ">=10" 2345 | } 2346 | }, 2347 | "node_modules/shebang-command": { 2348 | "version": "2.0.0", 2349 | "dev": true, 2350 | "license": "MIT", 2351 | "dependencies": { 2352 | "shebang-regex": "^3.0.0" 2353 | }, 2354 | "engines": { 2355 | "node": ">=8" 2356 | } 2357 | }, 2358 | "node_modules/shebang-regex": { 2359 | "version": "3.0.0", 2360 | "dev": true, 2361 | "license": "MIT", 2362 | "engines": { 2363 | "node": ">=8" 2364 | } 2365 | }, 2366 | "node_modules/shimmer": { 2367 | "version": "1.2.1", 2368 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", 2369 | "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", 2370 | "dev": true 2371 | }, 2372 | "node_modules/signal-exit": { 2373 | "version": "3.0.7", 2374 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2375 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2376 | "dev": true 2377 | }, 2378 | "node_modules/sinon": { 2379 | "version": "16.0.0", 2380 | "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.0.0.tgz", 2381 | "integrity": "sha512-B8AaZZm9CT5pqe4l4uWJztfD/mOTa7dL8Qo0W4+s+t74xECOgSZDDQCBjNgIK3+n4kyxQrSTv2V5ul8K25qkiQ==", 2382 | "dev": true, 2383 | "dependencies": { 2384 | "@sinonjs/commons": "^3.0.0", 2385 | "@sinonjs/fake-timers": "^10.3.0", 2386 | "@sinonjs/samsam": "^8.0.0", 2387 | "diff": "^5.1.0", 2388 | "nise": "^5.1.4", 2389 | "supports-color": "^7.2.0" 2390 | }, 2391 | "funding": { 2392 | "type": "opencollective", 2393 | "url": "https://opencollective.com/sinon" 2394 | } 2395 | }, 2396 | "node_modules/slash": { 2397 | "version": "3.0.0", 2398 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2399 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2400 | "dev": true, 2401 | "engines": { 2402 | "node": ">=8" 2403 | } 2404 | }, 2405 | "node_modules/source-map": { 2406 | "version": "0.6.1", 2407 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2408 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2409 | "dev": true, 2410 | "engines": { 2411 | "node": ">=0.10.0" 2412 | } 2413 | }, 2414 | "node_modules/source-map-support": { 2415 | "version": "0.5.21", 2416 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2417 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2418 | "dev": true, 2419 | "dependencies": { 2420 | "buffer-from": "^1.0.0", 2421 | "source-map": "^0.6.0" 2422 | } 2423 | }, 2424 | "node_modules/string-width": { 2425 | "version": "4.2.3", 2426 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2427 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2428 | "dev": true, 2429 | "dependencies": { 2430 | "emoji-regex": "^8.0.0", 2431 | "is-fullwidth-code-point": "^3.0.0", 2432 | "strip-ansi": "^6.0.1" 2433 | }, 2434 | "engines": { 2435 | "node": ">=8" 2436 | } 2437 | }, 2438 | "node_modules/strip-ansi": { 2439 | "version": "6.0.1", 2440 | "dev": true, 2441 | "license": "MIT", 2442 | "dependencies": { 2443 | "ansi-regex": "^5.0.1" 2444 | }, 2445 | "engines": { 2446 | "node": ">=8" 2447 | } 2448 | }, 2449 | "node_modules/strip-json-comments": { 2450 | "version": "3.1.1", 2451 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2452 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2453 | "dev": true, 2454 | "engines": { 2455 | "node": ">=8" 2456 | }, 2457 | "funding": { 2458 | "url": "https://github.com/sponsors/sindresorhus" 2459 | } 2460 | }, 2461 | "node_modules/supports-color": { 2462 | "version": "7.2.0", 2463 | "license": "MIT", 2464 | "dependencies": { 2465 | "has-flag": "^4.0.0" 2466 | }, 2467 | "engines": { 2468 | "node": ">=8" 2469 | } 2470 | }, 2471 | "node_modules/test-exclude": { 2472 | "version": "6.0.0", 2473 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 2474 | "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 2475 | "dev": true, 2476 | "dependencies": { 2477 | "@istanbuljs/schema": "^0.1.2", 2478 | "glob": "^7.1.4", 2479 | "minimatch": "^3.0.4" 2480 | }, 2481 | "engines": { 2482 | "node": ">=8" 2483 | } 2484 | }, 2485 | "node_modules/text-table": { 2486 | "version": "0.2.0", 2487 | "dev": true, 2488 | "license": "MIT" 2489 | }, 2490 | "node_modules/to-regex-range": { 2491 | "version": "5.0.1", 2492 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2493 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2494 | "dev": true, 2495 | "dependencies": { 2496 | "is-number": "^7.0.0" 2497 | }, 2498 | "engines": { 2499 | "node": ">=8.0" 2500 | } 2501 | }, 2502 | "node_modules/ts-api-utils": { 2503 | "version": "1.0.3", 2504 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", 2505 | "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", 2506 | "dev": true, 2507 | "engines": { 2508 | "node": ">=16.13.0" 2509 | }, 2510 | "peerDependencies": { 2511 | "typescript": ">=4.2.0" 2512 | } 2513 | }, 2514 | "node_modules/tsx": { 2515 | "version": "3.12.10", 2516 | "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.10.tgz", 2517 | "integrity": "sha512-2+46h4xvUt1aLDNvk5YBT8Uzw+b7BolGbn7iSMucYqCXZiDc+1IMghLVdw8kKjING32JFOeO+Am9posvjkeclA==", 2518 | "dev": true, 2519 | "dependencies": { 2520 | "@esbuild-kit/cjs-loader": "^2.4.2", 2521 | "@esbuild-kit/core-utils": "^3.3.0", 2522 | "@esbuild-kit/esm-loader": "^2.6.3" 2523 | }, 2524 | "bin": { 2525 | "tsx": "dist/cli.js" 2526 | }, 2527 | "optionalDependencies": { 2528 | "fsevents": "~2.3.2" 2529 | } 2530 | }, 2531 | "node_modules/type-check": { 2532 | "version": "0.4.0", 2533 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2534 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2535 | "dev": true, 2536 | "dependencies": { 2537 | "prelude-ls": "^1.2.1" 2538 | }, 2539 | "engines": { 2540 | "node": ">= 0.8.0" 2541 | } 2542 | }, 2543 | "node_modules/type-detect": { 2544 | "version": "4.0.8", 2545 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 2546 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 2547 | "dev": true, 2548 | "engines": { 2549 | "node": ">=4" 2550 | } 2551 | }, 2552 | "node_modules/type-fest": { 2553 | "version": "0.20.2", 2554 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2555 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2556 | "dev": true, 2557 | "engines": { 2558 | "node": ">=10" 2559 | }, 2560 | "funding": { 2561 | "url": "https://github.com/sponsors/sindresorhus" 2562 | } 2563 | }, 2564 | "node_modules/typescript": { 2565 | "version": "5.2.2", 2566 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 2567 | "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 2568 | "dev": true, 2569 | "bin": { 2570 | "tsc": "bin/tsc", 2571 | "tsserver": "bin/tsserver" 2572 | }, 2573 | "engines": { 2574 | "node": ">=14.17" 2575 | } 2576 | }, 2577 | "node_modules/uri-js": { 2578 | "version": "4.4.1", 2579 | "dev": true, 2580 | "license": "BSD-2-Clause", 2581 | "dependencies": { 2582 | "punycode": "^2.1.0" 2583 | } 2584 | }, 2585 | "node_modules/v8-to-istanbul": { 2586 | "version": "9.1.0", 2587 | "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", 2588 | "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", 2589 | "dev": true, 2590 | "dependencies": { 2591 | "@jridgewell/trace-mapping": "^0.3.12", 2592 | "@types/istanbul-lib-coverage": "^2.0.1", 2593 | "convert-source-map": "^1.6.0" 2594 | }, 2595 | "engines": { 2596 | "node": ">=10.12.0" 2597 | } 2598 | }, 2599 | "node_modules/which": { 2600 | "version": "2.0.2", 2601 | "dev": true, 2602 | "license": "ISC", 2603 | "dependencies": { 2604 | "isexe": "^2.0.0" 2605 | }, 2606 | "bin": { 2607 | "node-which": "bin/node-which" 2608 | }, 2609 | "engines": { 2610 | "node": ">= 8" 2611 | } 2612 | }, 2613 | "node_modules/wrap-ansi": { 2614 | "version": "7.0.0", 2615 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2616 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2617 | "dev": true, 2618 | "dependencies": { 2619 | "ansi-styles": "^4.0.0", 2620 | "string-width": "^4.1.0", 2621 | "strip-ansi": "^6.0.0" 2622 | }, 2623 | "engines": { 2624 | "node": ">=10" 2625 | }, 2626 | "funding": { 2627 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2628 | } 2629 | }, 2630 | "node_modules/wrappy": { 2631 | "version": "1.0.2", 2632 | "dev": true, 2633 | "license": "ISC" 2634 | }, 2635 | "node_modules/y18n": { 2636 | "version": "5.0.8", 2637 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2638 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2639 | "dev": true, 2640 | "engines": { 2641 | "node": ">=10" 2642 | } 2643 | }, 2644 | "node_modules/yallist": { 2645 | "version": "4.0.0", 2646 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2647 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2648 | "dev": true 2649 | }, 2650 | "node_modules/yargs": { 2651 | "version": "17.7.2", 2652 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 2653 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 2654 | "dev": true, 2655 | "dependencies": { 2656 | "cliui": "^8.0.1", 2657 | "escalade": "^3.1.1", 2658 | "get-caller-file": "^2.0.5", 2659 | "require-directory": "^2.1.1", 2660 | "string-width": "^4.2.3", 2661 | "y18n": "^5.0.5", 2662 | "yargs-parser": "^21.1.1" 2663 | }, 2664 | "engines": { 2665 | "node": ">=12" 2666 | } 2667 | }, 2668 | "node_modules/yargs-parser": { 2669 | "version": "21.1.1", 2670 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 2671 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 2672 | "dev": true, 2673 | "engines": { 2674 | "node": ">=12" 2675 | } 2676 | }, 2677 | "node_modules/yocto-queue": { 2678 | "version": "0.1.0", 2679 | "dev": true, 2680 | "license": "MIT", 2681 | "engines": { 2682 | "node": ">=10" 2683 | }, 2684 | "funding": { 2685 | "url": "https://github.com/sponsors/sindresorhus" 2686 | } 2687 | } 2688 | }, 2689 | "dependencies": { 2690 | "@aashutoshrathi/word-wrap": { 2691 | "version": "1.2.6", 2692 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 2693 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 2694 | "dev": true 2695 | }, 2696 | "@bcoe/v8-coverage": { 2697 | "version": "0.2.3", 2698 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 2699 | "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 2700 | "dev": true 2701 | }, 2702 | "@esbuild-kit/cjs-loader": { 2703 | "version": "2.4.4", 2704 | "resolved": "https://registry.npmjs.org/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.4.tgz", 2705 | "integrity": "sha512-NfsJX4PdzhwSkfJukczyUiZGc7zNNWZcEAyqeISpDnn0PTfzMJR1aR8xAIPskBejIxBJbIgCCMzbaYa9SXepIg==", 2706 | "dev": true, 2707 | "requires": { 2708 | "@esbuild-kit/core-utils": "^3.2.3", 2709 | "get-tsconfig": "^4.7.0" 2710 | } 2711 | }, 2712 | "@esbuild-kit/core-utils": { 2713 | "version": "3.3.2", 2714 | "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", 2715 | "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", 2716 | "dev": true, 2717 | "requires": { 2718 | "esbuild": "~0.18.20", 2719 | "source-map-support": "^0.5.21" 2720 | } 2721 | }, 2722 | "@esbuild-kit/esm-loader": { 2723 | "version": "2.6.5", 2724 | "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", 2725 | "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", 2726 | "dev": true, 2727 | "requires": { 2728 | "@esbuild-kit/core-utils": "^3.3.2", 2729 | "get-tsconfig": "^4.7.0" 2730 | } 2731 | }, 2732 | "@esbuild/android-arm": { 2733 | "version": "0.18.20", 2734 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 2735 | "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 2736 | "dev": true, 2737 | "optional": true 2738 | }, 2739 | "@esbuild/android-arm64": { 2740 | "version": "0.18.20", 2741 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 2742 | "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 2743 | "dev": true, 2744 | "optional": true 2745 | }, 2746 | "@esbuild/android-x64": { 2747 | "version": "0.18.20", 2748 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 2749 | "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 2750 | "dev": true, 2751 | "optional": true 2752 | }, 2753 | "@esbuild/darwin-arm64": { 2754 | "version": "0.18.20", 2755 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 2756 | "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 2757 | "dev": true, 2758 | "optional": true 2759 | }, 2760 | "@esbuild/darwin-x64": { 2761 | "version": "0.18.20", 2762 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 2763 | "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 2764 | "dev": true, 2765 | "optional": true 2766 | }, 2767 | "@esbuild/freebsd-arm64": { 2768 | "version": "0.18.20", 2769 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 2770 | "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 2771 | "dev": true, 2772 | "optional": true 2773 | }, 2774 | "@esbuild/freebsd-x64": { 2775 | "version": "0.18.20", 2776 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 2777 | "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 2778 | "dev": true, 2779 | "optional": true 2780 | }, 2781 | "@esbuild/linux-arm": { 2782 | "version": "0.18.20", 2783 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 2784 | "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 2785 | "dev": true, 2786 | "optional": true 2787 | }, 2788 | "@esbuild/linux-arm64": { 2789 | "version": "0.18.20", 2790 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 2791 | "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 2792 | "dev": true, 2793 | "optional": true 2794 | }, 2795 | "@esbuild/linux-ia32": { 2796 | "version": "0.18.20", 2797 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 2798 | "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 2799 | "dev": true, 2800 | "optional": true 2801 | }, 2802 | "@esbuild/linux-loong64": { 2803 | "version": "0.18.20", 2804 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 2805 | "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 2806 | "dev": true, 2807 | "optional": true 2808 | }, 2809 | "@esbuild/linux-mips64el": { 2810 | "version": "0.18.20", 2811 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 2812 | "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 2813 | "dev": true, 2814 | "optional": true 2815 | }, 2816 | "@esbuild/linux-ppc64": { 2817 | "version": "0.18.20", 2818 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 2819 | "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 2820 | "dev": true, 2821 | "optional": true 2822 | }, 2823 | "@esbuild/linux-riscv64": { 2824 | "version": "0.18.20", 2825 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 2826 | "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 2827 | "dev": true, 2828 | "optional": true 2829 | }, 2830 | "@esbuild/linux-s390x": { 2831 | "version": "0.18.20", 2832 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 2833 | "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 2834 | "dev": true, 2835 | "optional": true 2836 | }, 2837 | "@esbuild/linux-x64": { 2838 | "version": "0.18.20", 2839 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", 2840 | "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 2841 | "dev": true, 2842 | "optional": true 2843 | }, 2844 | "@esbuild/netbsd-x64": { 2845 | "version": "0.18.20", 2846 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 2847 | "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 2848 | "dev": true, 2849 | "optional": true 2850 | }, 2851 | "@esbuild/openbsd-x64": { 2852 | "version": "0.18.20", 2853 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 2854 | "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 2855 | "dev": true, 2856 | "optional": true 2857 | }, 2858 | "@esbuild/sunos-x64": { 2859 | "version": "0.18.20", 2860 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 2861 | "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 2862 | "dev": true, 2863 | "optional": true 2864 | }, 2865 | "@esbuild/win32-arm64": { 2866 | "version": "0.18.20", 2867 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 2868 | "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 2869 | "dev": true, 2870 | "optional": true 2871 | }, 2872 | "@esbuild/win32-ia32": { 2873 | "version": "0.18.20", 2874 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 2875 | "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 2876 | "dev": true, 2877 | "optional": true 2878 | }, 2879 | "@esbuild/win32-x64": { 2880 | "version": "0.18.20", 2881 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 2882 | "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 2883 | "dev": true, 2884 | "optional": true 2885 | }, 2886 | "@eslint-community/eslint-utils": { 2887 | "version": "4.4.0", 2888 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 2889 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 2890 | "dev": true, 2891 | "requires": { 2892 | "eslint-visitor-keys": "^3.3.0" 2893 | } 2894 | }, 2895 | "@eslint-community/regexpp": { 2896 | "version": "4.8.1", 2897 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", 2898 | "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", 2899 | "dev": true 2900 | }, 2901 | "@eslint/eslintrc": { 2902 | "version": "2.1.2", 2903 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", 2904 | "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", 2905 | "dev": true, 2906 | "requires": { 2907 | "ajv": "^6.12.4", 2908 | "debug": "^4.3.2", 2909 | "espree": "^9.6.0", 2910 | "globals": "^13.19.0", 2911 | "ignore": "^5.2.0", 2912 | "import-fresh": "^3.2.1", 2913 | "js-yaml": "^4.1.0", 2914 | "minimatch": "^3.1.2", 2915 | "strip-json-comments": "^3.1.1" 2916 | } 2917 | }, 2918 | "@eslint/js": { 2919 | "version": "8.50.0", 2920 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", 2921 | "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", 2922 | "dev": true 2923 | }, 2924 | "@humanwhocodes/config-array": { 2925 | "version": "0.11.11", 2926 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", 2927 | "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", 2928 | "dev": true, 2929 | "requires": { 2930 | "@humanwhocodes/object-schema": "^1.2.1", 2931 | "debug": "^4.1.1", 2932 | "minimatch": "^3.0.5" 2933 | } 2934 | }, 2935 | "@humanwhocodes/module-importer": { 2936 | "version": "1.0.1", 2937 | "dev": true 2938 | }, 2939 | "@humanwhocodes/object-schema": { 2940 | "version": "1.2.1", 2941 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 2942 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 2943 | "dev": true 2944 | }, 2945 | "@istanbuljs/schema": { 2946 | "version": "0.1.3", 2947 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 2948 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 2949 | "dev": true 2950 | }, 2951 | "@jridgewell/resolve-uri": { 2952 | "version": "3.1.1", 2953 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 2954 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 2955 | "dev": true 2956 | }, 2957 | "@jridgewell/sourcemap-codec": { 2958 | "version": "1.4.15", 2959 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 2960 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 2961 | "dev": true 2962 | }, 2963 | "@jridgewell/trace-mapping": { 2964 | "version": "0.3.19", 2965 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", 2966 | "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", 2967 | "dev": true, 2968 | "requires": { 2969 | "@jridgewell/resolve-uri": "^3.1.0", 2970 | "@jridgewell/sourcemap-codec": "^1.4.14" 2971 | } 2972 | }, 2973 | "@microsoft/tsdoc": { 2974 | "version": "0.14.2", 2975 | "dev": true 2976 | }, 2977 | "@microsoft/tsdoc-config": { 2978 | "version": "0.16.2", 2979 | "dev": true, 2980 | "requires": { 2981 | "@microsoft/tsdoc": "0.14.2", 2982 | "ajv": "~6.12.6", 2983 | "jju": "~1.4.0", 2984 | "resolve": "~1.19.0" 2985 | } 2986 | }, 2987 | "@nodelib/fs.scandir": { 2988 | "version": "2.1.5", 2989 | "dev": true, 2990 | "requires": { 2991 | "@nodelib/fs.stat": "2.0.5", 2992 | "run-parallel": "^1.1.9" 2993 | } 2994 | }, 2995 | "@nodelib/fs.stat": { 2996 | "version": "2.0.5", 2997 | "dev": true 2998 | }, 2999 | "@nodelib/fs.walk": { 3000 | "version": "1.2.8", 3001 | "dev": true, 3002 | "requires": { 3003 | "@nodelib/fs.scandir": "2.1.5", 3004 | "fastq": "^1.6.0" 3005 | } 3006 | }, 3007 | "@sinonjs/commons": { 3008 | "version": "3.0.0", 3009 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", 3010 | "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", 3011 | "dev": true, 3012 | "requires": { 3013 | "type-detect": "4.0.8" 3014 | } 3015 | }, 3016 | "@sinonjs/fake-timers": { 3017 | "version": "10.3.0", 3018 | "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", 3019 | "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", 3020 | "dev": true, 3021 | "requires": { 3022 | "@sinonjs/commons": "^3.0.0" 3023 | } 3024 | }, 3025 | "@sinonjs/samsam": { 3026 | "version": "8.0.0", 3027 | "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", 3028 | "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", 3029 | "dev": true, 3030 | "requires": { 3031 | "@sinonjs/commons": "^2.0.0", 3032 | "lodash.get": "^4.4.2", 3033 | "type-detect": "^4.0.8" 3034 | }, 3035 | "dependencies": { 3036 | "@sinonjs/commons": { 3037 | "version": "2.0.0", 3038 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", 3039 | "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", 3040 | "dev": true, 3041 | "requires": { 3042 | "type-detect": "4.0.8" 3043 | } 3044 | } 3045 | } 3046 | }, 3047 | "@sinonjs/text-encoding": { 3048 | "version": "0.7.2", 3049 | "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", 3050 | "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", 3051 | "dev": true 3052 | }, 3053 | "@solarwinds-apm/test": { 3054 | "version": "1.0.0-pre.3", 3055 | "resolved": "https://registry.npmjs.org/@solarwinds-apm/test/-/test-1.0.0-pre.3.tgz", 3056 | "integrity": "sha512-qdJp1IWrY390/CF6oKpRhGRaDd1cJ5dY64CZASBLaCPv20YeWH5sCTcm8QFs+Ui7W4P+HagC9PL1v/zmwUVYkQ==", 3057 | "dev": true, 3058 | "requires": { 3059 | "@types/chai": "^4.3.6", 3060 | "@types/node": ">=16.18 <17 || >=18.8 <19 || >=20", 3061 | "c8": "^8.0.1", 3062 | "chai": "^4.3.8", 3063 | "globby": "^11.1.0", 3064 | "semver": "^7.5.4", 3065 | "tsx": "^3.12.10" 3066 | } 3067 | }, 3068 | "@types/chai": { 3069 | "version": "4.3.6", 3070 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", 3071 | "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", 3072 | "dev": true 3073 | }, 3074 | "@types/istanbul-lib-coverage": { 3075 | "version": "2.0.4", 3076 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", 3077 | "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", 3078 | "dev": true 3079 | }, 3080 | "@types/json-schema": { 3081 | "version": "7.0.13", 3082 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", 3083 | "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", 3084 | "dev": true 3085 | }, 3086 | "@types/node": { 3087 | "version": "16.18.11", 3088 | "dev": true 3089 | }, 3090 | "@types/semver": { 3091 | "version": "7.5.2", 3092 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", 3093 | "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", 3094 | "dev": true 3095 | }, 3096 | "@types/shimmer": { 3097 | "version": "1.0.2", 3098 | "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.2.tgz", 3099 | "integrity": "sha512-dKkr1bTxbEsFlh2ARpKzcaAmsYixqt9UyCdoEZk8rHyE4iQYcDCyvSjDSf7JUWJHlJiTtbIoQjxKh6ViywqDAg==", 3100 | "dev": true 3101 | }, 3102 | "@types/sinon": { 3103 | "version": "10.0.16", 3104 | "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", 3105 | "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", 3106 | "dev": true, 3107 | "requires": { 3108 | "@types/sinonjs__fake-timers": "*" 3109 | } 3110 | }, 3111 | "@types/sinonjs__fake-timers": { 3112 | "version": "8.1.2", 3113 | "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", 3114 | "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", 3115 | "dev": true 3116 | }, 3117 | "@typescript-eslint/eslint-plugin": { 3118 | "version": "6.7.2", 3119 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz", 3120 | "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==", 3121 | "dev": true, 3122 | "requires": { 3123 | "@eslint-community/regexpp": "^4.5.1", 3124 | "@typescript-eslint/scope-manager": "6.7.2", 3125 | "@typescript-eslint/type-utils": "6.7.2", 3126 | "@typescript-eslint/utils": "6.7.2", 3127 | "@typescript-eslint/visitor-keys": "6.7.2", 3128 | "debug": "^4.3.4", 3129 | "graphemer": "^1.4.0", 3130 | "ignore": "^5.2.4", 3131 | "natural-compare": "^1.4.0", 3132 | "semver": "^7.5.4", 3133 | "ts-api-utils": "^1.0.1" 3134 | } 3135 | }, 3136 | "@typescript-eslint/parser": { 3137 | "version": "6.7.2", 3138 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz", 3139 | "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==", 3140 | "dev": true, 3141 | "requires": { 3142 | "@typescript-eslint/scope-manager": "6.7.2", 3143 | "@typescript-eslint/types": "6.7.2", 3144 | "@typescript-eslint/typescript-estree": "6.7.2", 3145 | "@typescript-eslint/visitor-keys": "6.7.2", 3146 | "debug": "^4.3.4" 3147 | } 3148 | }, 3149 | "@typescript-eslint/scope-manager": { 3150 | "version": "6.7.2", 3151 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", 3152 | "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", 3153 | "dev": true, 3154 | "requires": { 3155 | "@typescript-eslint/types": "6.7.2", 3156 | "@typescript-eslint/visitor-keys": "6.7.2" 3157 | } 3158 | }, 3159 | "@typescript-eslint/type-utils": { 3160 | "version": "6.7.2", 3161 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz", 3162 | "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==", 3163 | "dev": true, 3164 | "requires": { 3165 | "@typescript-eslint/typescript-estree": "6.7.2", 3166 | "@typescript-eslint/utils": "6.7.2", 3167 | "debug": "^4.3.4", 3168 | "ts-api-utils": "^1.0.1" 3169 | } 3170 | }, 3171 | "@typescript-eslint/types": { 3172 | "version": "6.7.2", 3173 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", 3174 | "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", 3175 | "dev": true 3176 | }, 3177 | "@typescript-eslint/typescript-estree": { 3178 | "version": "6.7.2", 3179 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", 3180 | "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", 3181 | "dev": true, 3182 | "requires": { 3183 | "@typescript-eslint/types": "6.7.2", 3184 | "@typescript-eslint/visitor-keys": "6.7.2", 3185 | "debug": "^4.3.4", 3186 | "globby": "^11.1.0", 3187 | "is-glob": "^4.0.3", 3188 | "semver": "^7.5.4", 3189 | "ts-api-utils": "^1.0.1" 3190 | } 3191 | }, 3192 | "@typescript-eslint/utils": { 3193 | "version": "6.7.2", 3194 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz", 3195 | "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==", 3196 | "dev": true, 3197 | "requires": { 3198 | "@eslint-community/eslint-utils": "^4.4.0", 3199 | "@types/json-schema": "^7.0.12", 3200 | "@types/semver": "^7.5.0", 3201 | "@typescript-eslint/scope-manager": "6.7.2", 3202 | "@typescript-eslint/types": "6.7.2", 3203 | "@typescript-eslint/typescript-estree": "6.7.2", 3204 | "semver": "^7.5.4" 3205 | } 3206 | }, 3207 | "@typescript-eslint/visitor-keys": { 3208 | "version": "6.7.2", 3209 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", 3210 | "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", 3211 | "dev": true, 3212 | "requires": { 3213 | "@typescript-eslint/types": "6.7.2", 3214 | "eslint-visitor-keys": "^3.4.1" 3215 | } 3216 | }, 3217 | "acorn": { 3218 | "version": "8.10.0", 3219 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 3220 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 3221 | "dev": true 3222 | }, 3223 | "acorn-jsx": { 3224 | "version": "5.3.2", 3225 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 3226 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 3227 | "dev": true, 3228 | "requires": {} 3229 | }, 3230 | "ajv": { 3231 | "version": "6.12.6", 3232 | "dev": true, 3233 | "requires": { 3234 | "fast-deep-equal": "^3.1.1", 3235 | "fast-json-stable-stringify": "^2.0.0", 3236 | "json-schema-traverse": "^0.4.1", 3237 | "uri-js": "^4.2.2" 3238 | } 3239 | }, 3240 | "ansi-regex": { 3241 | "version": "5.0.1", 3242 | "dev": true 3243 | }, 3244 | "ansi-styles": { 3245 | "version": "4.3.0", 3246 | "requires": { 3247 | "color-convert": "^2.0.1" 3248 | } 3249 | }, 3250 | "argparse": { 3251 | "version": "2.0.1", 3252 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 3253 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 3254 | "dev": true 3255 | }, 3256 | "array-union": { 3257 | "version": "2.1.0", 3258 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 3259 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 3260 | "dev": true 3261 | }, 3262 | "assertion-error": { 3263 | "version": "1.1.0", 3264 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 3265 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 3266 | "dev": true 3267 | }, 3268 | "balanced-match": { 3269 | "version": "1.0.2", 3270 | "dev": true 3271 | }, 3272 | "brace-expansion": { 3273 | "version": "1.1.11", 3274 | "dev": true, 3275 | "requires": { 3276 | "balanced-match": "^1.0.0", 3277 | "concat-map": "0.0.1" 3278 | } 3279 | }, 3280 | "braces": { 3281 | "version": "3.0.3", 3282 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 3283 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 3284 | "dev": true, 3285 | "requires": { 3286 | "fill-range": "^7.1.1" 3287 | } 3288 | }, 3289 | "buffer-from": { 3290 | "version": "1.1.2", 3291 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 3292 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 3293 | "dev": true 3294 | }, 3295 | "c8": { 3296 | "version": "8.0.1", 3297 | "resolved": "https://registry.npmjs.org/c8/-/c8-8.0.1.tgz", 3298 | "integrity": "sha512-EINpopxZNH1mETuI0DzRA4MZpAUH+IFiRhnmFD3vFr3vdrgxqi3VfE3KL0AIL+zDq8rC9bZqwM/VDmmoe04y7w==", 3299 | "dev": true, 3300 | "requires": { 3301 | "@bcoe/v8-coverage": "^0.2.3", 3302 | "@istanbuljs/schema": "^0.1.3", 3303 | "find-up": "^5.0.0", 3304 | "foreground-child": "^2.0.0", 3305 | "istanbul-lib-coverage": "^3.2.0", 3306 | "istanbul-lib-report": "^3.0.1", 3307 | "istanbul-reports": "^3.1.6", 3308 | "rimraf": "^3.0.2", 3309 | "test-exclude": "^6.0.0", 3310 | "v8-to-istanbul": "^9.0.0", 3311 | "yargs": "^17.7.2", 3312 | "yargs-parser": "^21.1.1" 3313 | } 3314 | }, 3315 | "callsites": { 3316 | "version": "3.1.0", 3317 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 3318 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 3319 | "dev": true 3320 | }, 3321 | "chai": { 3322 | "version": "4.3.8", 3323 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", 3324 | "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", 3325 | "dev": true, 3326 | "requires": { 3327 | "assertion-error": "^1.1.0", 3328 | "check-error": "^1.0.2", 3329 | "deep-eql": "^4.1.2", 3330 | "get-func-name": "^2.0.0", 3331 | "loupe": "^2.3.1", 3332 | "pathval": "^1.1.1", 3333 | "type-detect": "^4.0.5" 3334 | } 3335 | }, 3336 | "chalk": { 3337 | "version": "4.1.2", 3338 | "requires": { 3339 | "ansi-styles": "^4.1.0", 3340 | "supports-color": "^7.1.0" 3341 | } 3342 | }, 3343 | "check-error": { 3344 | "version": "1.0.2", 3345 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 3346 | "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", 3347 | "dev": true 3348 | }, 3349 | "cliui": { 3350 | "version": "8.0.1", 3351 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 3352 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 3353 | "dev": true, 3354 | "requires": { 3355 | "string-width": "^4.2.0", 3356 | "strip-ansi": "^6.0.1", 3357 | "wrap-ansi": "^7.0.0" 3358 | } 3359 | }, 3360 | "color-convert": { 3361 | "version": "2.0.1", 3362 | "requires": { 3363 | "color-name": "~1.1.4" 3364 | } 3365 | }, 3366 | "color-name": { 3367 | "version": "1.1.4" 3368 | }, 3369 | "concat-map": { 3370 | "version": "0.0.1", 3371 | "dev": true 3372 | }, 3373 | "convert-source-map": { 3374 | "version": "1.9.0", 3375 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 3376 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 3377 | "dev": true 3378 | }, 3379 | "cross-spawn": { 3380 | "version": "7.0.3", 3381 | "dev": true, 3382 | "requires": { 3383 | "path-key": "^3.1.0", 3384 | "shebang-command": "^2.0.0", 3385 | "which": "^2.0.1" 3386 | } 3387 | }, 3388 | "debug": { 3389 | "version": "4.3.4", 3390 | "dev": true, 3391 | "requires": { 3392 | "ms": "2.1.2" 3393 | } 3394 | }, 3395 | "deep-eql": { 3396 | "version": "4.1.3", 3397 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 3398 | "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 3399 | "dev": true, 3400 | "requires": { 3401 | "type-detect": "^4.0.0" 3402 | } 3403 | }, 3404 | "deep-is": { 3405 | "version": "0.1.4", 3406 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 3407 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 3408 | "dev": true 3409 | }, 3410 | "diff": { 3411 | "version": "5.1.0", 3412 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", 3413 | "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", 3414 | "dev": true 3415 | }, 3416 | "dir-glob": { 3417 | "version": "3.0.1", 3418 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 3419 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 3420 | "dev": true, 3421 | "requires": { 3422 | "path-type": "^4.0.0" 3423 | } 3424 | }, 3425 | "doctrine": { 3426 | "version": "3.0.0", 3427 | "dev": true, 3428 | "requires": { 3429 | "esutils": "^2.0.2" 3430 | } 3431 | }, 3432 | "emoji-regex": { 3433 | "version": "8.0.0", 3434 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3435 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3436 | "dev": true 3437 | }, 3438 | "esbuild": { 3439 | "version": "0.18.20", 3440 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", 3441 | "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 3442 | "dev": true, 3443 | "requires": { 3444 | "@esbuild/android-arm": "0.18.20", 3445 | "@esbuild/android-arm64": "0.18.20", 3446 | "@esbuild/android-x64": "0.18.20", 3447 | "@esbuild/darwin-arm64": "0.18.20", 3448 | "@esbuild/darwin-x64": "0.18.20", 3449 | "@esbuild/freebsd-arm64": "0.18.20", 3450 | "@esbuild/freebsd-x64": "0.18.20", 3451 | "@esbuild/linux-arm": "0.18.20", 3452 | "@esbuild/linux-arm64": "0.18.20", 3453 | "@esbuild/linux-ia32": "0.18.20", 3454 | "@esbuild/linux-loong64": "0.18.20", 3455 | "@esbuild/linux-mips64el": "0.18.20", 3456 | "@esbuild/linux-ppc64": "0.18.20", 3457 | "@esbuild/linux-riscv64": "0.18.20", 3458 | "@esbuild/linux-s390x": "0.18.20", 3459 | "@esbuild/linux-x64": "0.18.20", 3460 | "@esbuild/netbsd-x64": "0.18.20", 3461 | "@esbuild/openbsd-x64": "0.18.20", 3462 | "@esbuild/sunos-x64": "0.18.20", 3463 | "@esbuild/win32-arm64": "0.18.20", 3464 | "@esbuild/win32-ia32": "0.18.20", 3465 | "@esbuild/win32-x64": "0.18.20" 3466 | } 3467 | }, 3468 | "escalade": { 3469 | "version": "3.1.1", 3470 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 3471 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 3472 | "dev": true 3473 | }, 3474 | "escape-string-regexp": { 3475 | "version": "4.0.0", 3476 | "dev": true 3477 | }, 3478 | "eslint": { 3479 | "version": "8.49.0", 3480 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", 3481 | "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", 3482 | "dev": true, 3483 | "requires": { 3484 | "@eslint-community/eslint-utils": "^4.2.0", 3485 | "@eslint-community/regexpp": "^4.6.1", 3486 | "@eslint/eslintrc": "^2.1.2", 3487 | "@eslint/js": "8.49.0", 3488 | "@humanwhocodes/config-array": "^0.11.11", 3489 | "@humanwhocodes/module-importer": "^1.0.1", 3490 | "@nodelib/fs.walk": "^1.2.8", 3491 | "ajv": "^6.12.4", 3492 | "chalk": "^4.0.0", 3493 | "cross-spawn": "^7.0.2", 3494 | "debug": "^4.3.2", 3495 | "doctrine": "^3.0.0", 3496 | "escape-string-regexp": "^4.0.0", 3497 | "eslint-scope": "^7.2.2", 3498 | "eslint-visitor-keys": "^3.4.3", 3499 | "espree": "^9.6.1", 3500 | "esquery": "^1.4.2", 3501 | "esutils": "^2.0.2", 3502 | "fast-deep-equal": "^3.1.3", 3503 | "file-entry-cache": "^6.0.1", 3504 | "find-up": "^5.0.0", 3505 | "glob-parent": "^6.0.2", 3506 | "globals": "^13.19.0", 3507 | "graphemer": "^1.4.0", 3508 | "ignore": "^5.2.0", 3509 | "imurmurhash": "^0.1.4", 3510 | "is-glob": "^4.0.0", 3511 | "is-path-inside": "^3.0.3", 3512 | "js-yaml": "^4.1.0", 3513 | "json-stable-stringify-without-jsonify": "^1.0.1", 3514 | "levn": "^0.4.1", 3515 | "lodash.merge": "^4.6.2", 3516 | "minimatch": "^3.1.2", 3517 | "natural-compare": "^1.4.0", 3518 | "optionator": "^0.9.3", 3519 | "strip-ansi": "^6.0.1", 3520 | "text-table": "^0.2.0" 3521 | }, 3522 | "dependencies": { 3523 | "@eslint/js": { 3524 | "version": "8.49.0", 3525 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", 3526 | "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", 3527 | "dev": true 3528 | } 3529 | } 3530 | }, 3531 | "eslint-config-prettier": { 3532 | "version": "9.0.0", 3533 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", 3534 | "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", 3535 | "dev": true, 3536 | "requires": {} 3537 | }, 3538 | "eslint-plugin-header": { 3539 | "version": "3.1.1", 3540 | "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", 3541 | "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", 3542 | "dev": true, 3543 | "requires": {} 3544 | }, 3545 | "eslint-plugin-simple-import-sort": { 3546 | "version": "10.0.0", 3547 | "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz", 3548 | "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==", 3549 | "dev": true, 3550 | "requires": {} 3551 | }, 3552 | "eslint-plugin-tsdoc": { 3553 | "version": "0.2.17", 3554 | "dev": true, 3555 | "requires": { 3556 | "@microsoft/tsdoc": "0.14.2", 3557 | "@microsoft/tsdoc-config": "0.16.2" 3558 | } 3559 | }, 3560 | "eslint-scope": { 3561 | "version": "7.2.2", 3562 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 3563 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 3564 | "dev": true, 3565 | "requires": { 3566 | "esrecurse": "^4.3.0", 3567 | "estraverse": "^5.2.0" 3568 | } 3569 | }, 3570 | "eslint-visitor-keys": { 3571 | "version": "3.4.3", 3572 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 3573 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 3574 | "dev": true 3575 | }, 3576 | "espree": { 3577 | "version": "9.6.1", 3578 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 3579 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 3580 | "dev": true, 3581 | "requires": { 3582 | "acorn": "^8.9.0", 3583 | "acorn-jsx": "^5.3.2", 3584 | "eslint-visitor-keys": "^3.4.1" 3585 | } 3586 | }, 3587 | "esquery": { 3588 | "version": "1.5.0", 3589 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 3590 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 3591 | "dev": true, 3592 | "requires": { 3593 | "estraverse": "^5.1.0" 3594 | } 3595 | }, 3596 | "esrecurse": { 3597 | "version": "4.3.0", 3598 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 3599 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 3600 | "dev": true, 3601 | "requires": { 3602 | "estraverse": "^5.2.0" 3603 | } 3604 | }, 3605 | "estraverse": { 3606 | "version": "5.3.0", 3607 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 3608 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 3609 | "dev": true 3610 | }, 3611 | "esutils": { 3612 | "version": "2.0.3", 3613 | "dev": true 3614 | }, 3615 | "fast-deep-equal": { 3616 | "version": "3.1.3", 3617 | "dev": true 3618 | }, 3619 | "fast-glob": { 3620 | "version": "3.3.1", 3621 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", 3622 | "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", 3623 | "dev": true, 3624 | "requires": { 3625 | "@nodelib/fs.stat": "^2.0.2", 3626 | "@nodelib/fs.walk": "^1.2.3", 3627 | "glob-parent": "^5.1.2", 3628 | "merge2": "^1.3.0", 3629 | "micromatch": "^4.0.4" 3630 | }, 3631 | "dependencies": { 3632 | "glob-parent": { 3633 | "version": "5.1.2", 3634 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 3635 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 3636 | "dev": true, 3637 | "requires": { 3638 | "is-glob": "^4.0.1" 3639 | } 3640 | } 3641 | } 3642 | }, 3643 | "fast-json-stable-stringify": { 3644 | "version": "2.1.0", 3645 | "dev": true 3646 | }, 3647 | "fast-levenshtein": { 3648 | "version": "2.0.6", 3649 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 3650 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 3651 | "dev": true 3652 | }, 3653 | "fastq": { 3654 | "version": "1.14.0", 3655 | "dev": true, 3656 | "requires": { 3657 | "reusify": "^1.0.4" 3658 | } 3659 | }, 3660 | "file-entry-cache": { 3661 | "version": "6.0.1", 3662 | "dev": true, 3663 | "requires": { 3664 | "flat-cache": "^3.0.4" 3665 | } 3666 | }, 3667 | "fill-range": { 3668 | "version": "7.1.1", 3669 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 3670 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 3671 | "dev": true, 3672 | "requires": { 3673 | "to-regex-range": "^5.0.1" 3674 | } 3675 | }, 3676 | "find-up": { 3677 | "version": "5.0.0", 3678 | "dev": true, 3679 | "requires": { 3680 | "locate-path": "^6.0.0", 3681 | "path-exists": "^4.0.0" 3682 | } 3683 | }, 3684 | "flat-cache": { 3685 | "version": "3.0.4", 3686 | "dev": true, 3687 | "requires": { 3688 | "flatted": "^3.1.0", 3689 | "rimraf": "^3.0.2" 3690 | } 3691 | }, 3692 | "flatted": { 3693 | "version": "3.2.7", 3694 | "dev": true 3695 | }, 3696 | "foreground-child": { 3697 | "version": "2.0.0", 3698 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", 3699 | "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", 3700 | "dev": true, 3701 | "requires": { 3702 | "cross-spawn": "^7.0.0", 3703 | "signal-exit": "^3.0.2" 3704 | } 3705 | }, 3706 | "fs.realpath": { 3707 | "version": "1.0.0", 3708 | "dev": true 3709 | }, 3710 | "fsevents": { 3711 | "version": "2.3.3", 3712 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 3713 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 3714 | "dev": true, 3715 | "optional": true 3716 | }, 3717 | "function-bind": { 3718 | "version": "1.1.1", 3719 | "dev": true 3720 | }, 3721 | "get-caller-file": { 3722 | "version": "2.0.5", 3723 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 3724 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 3725 | "dev": true 3726 | }, 3727 | "get-func-name": { 3728 | "version": "2.0.0", 3729 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 3730 | "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", 3731 | "dev": true 3732 | }, 3733 | "get-tsconfig": { 3734 | "version": "4.7.1", 3735 | "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.1.tgz", 3736 | "integrity": "sha512-sLtd6Bcwbi9IrAow/raCOTE9pmhvo5ksQo5v2lApUGJMzja64MUYhBp0G6X1S+f7IrBPn1HP+XkS2w2meoGcjg==", 3737 | "dev": true, 3738 | "requires": { 3739 | "resolve-pkg-maps": "^1.0.0" 3740 | } 3741 | }, 3742 | "glob": { 3743 | "version": "7.2.3", 3744 | "dev": true, 3745 | "requires": { 3746 | "fs.realpath": "^1.0.0", 3747 | "inflight": "^1.0.4", 3748 | "inherits": "2", 3749 | "minimatch": "^3.1.1", 3750 | "once": "^1.3.0", 3751 | "path-is-absolute": "^1.0.0" 3752 | } 3753 | }, 3754 | "glob-parent": { 3755 | "version": "6.0.2", 3756 | "dev": true, 3757 | "requires": { 3758 | "is-glob": "^4.0.3" 3759 | } 3760 | }, 3761 | "globals": { 3762 | "version": "13.22.0", 3763 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", 3764 | "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", 3765 | "dev": true, 3766 | "requires": { 3767 | "type-fest": "^0.20.2" 3768 | } 3769 | }, 3770 | "globby": { 3771 | "version": "11.1.0", 3772 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 3773 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 3774 | "dev": true, 3775 | "requires": { 3776 | "array-union": "^2.1.0", 3777 | "dir-glob": "^3.0.1", 3778 | "fast-glob": "^3.2.9", 3779 | "ignore": "^5.2.0", 3780 | "merge2": "^1.4.1", 3781 | "slash": "^3.0.0" 3782 | } 3783 | }, 3784 | "graphemer": { 3785 | "version": "1.4.0", 3786 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 3787 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 3788 | "dev": true 3789 | }, 3790 | "has": { 3791 | "version": "1.0.3", 3792 | "dev": true, 3793 | "requires": { 3794 | "function-bind": "^1.1.1" 3795 | } 3796 | }, 3797 | "has-flag": { 3798 | "version": "4.0.0" 3799 | }, 3800 | "html-escaper": { 3801 | "version": "2.0.2", 3802 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 3803 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 3804 | "dev": true 3805 | }, 3806 | "ignore": { 3807 | "version": "5.2.4", 3808 | "dev": true 3809 | }, 3810 | "import-fresh": { 3811 | "version": "3.3.0", 3812 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 3813 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 3814 | "dev": true, 3815 | "requires": { 3816 | "parent-module": "^1.0.0", 3817 | "resolve-from": "^4.0.0" 3818 | } 3819 | }, 3820 | "imurmurhash": { 3821 | "version": "0.1.4", 3822 | "dev": true 3823 | }, 3824 | "inflight": { 3825 | "version": "1.0.6", 3826 | "dev": true, 3827 | "requires": { 3828 | "once": "^1.3.0", 3829 | "wrappy": "1" 3830 | } 3831 | }, 3832 | "inherits": { 3833 | "version": "2.0.4", 3834 | "dev": true 3835 | }, 3836 | "is-core-module": { 3837 | "version": "2.11.0", 3838 | "dev": true, 3839 | "requires": { 3840 | "has": "^1.0.3" 3841 | } 3842 | }, 3843 | "is-extglob": { 3844 | "version": "2.1.1", 3845 | "dev": true 3846 | }, 3847 | "is-fullwidth-code-point": { 3848 | "version": "3.0.0", 3849 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3850 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3851 | "dev": true 3852 | }, 3853 | "is-glob": { 3854 | "version": "4.0.3", 3855 | "dev": true, 3856 | "requires": { 3857 | "is-extglob": "^2.1.1" 3858 | } 3859 | }, 3860 | "is-number": { 3861 | "version": "7.0.0", 3862 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3863 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3864 | "dev": true 3865 | }, 3866 | "is-path-inside": { 3867 | "version": "3.0.3", 3868 | "dev": true 3869 | }, 3870 | "isarray": { 3871 | "version": "0.0.1", 3872 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 3873 | "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", 3874 | "dev": true 3875 | }, 3876 | "isexe": { 3877 | "version": "2.0.0", 3878 | "dev": true 3879 | }, 3880 | "istanbul-lib-coverage": { 3881 | "version": "3.2.0", 3882 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", 3883 | "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", 3884 | "dev": true 3885 | }, 3886 | "istanbul-lib-report": { 3887 | "version": "3.0.1", 3888 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 3889 | "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 3890 | "dev": true, 3891 | "requires": { 3892 | "istanbul-lib-coverage": "^3.0.0", 3893 | "make-dir": "^4.0.0", 3894 | "supports-color": "^7.1.0" 3895 | } 3896 | }, 3897 | "istanbul-reports": { 3898 | "version": "3.1.6", 3899 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", 3900 | "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", 3901 | "dev": true, 3902 | "requires": { 3903 | "html-escaper": "^2.0.0", 3904 | "istanbul-lib-report": "^3.0.0" 3905 | } 3906 | }, 3907 | "jju": { 3908 | "version": "1.4.0", 3909 | "dev": true 3910 | }, 3911 | "js-yaml": { 3912 | "version": "4.1.0", 3913 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 3914 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 3915 | "dev": true, 3916 | "requires": { 3917 | "argparse": "^2.0.1" 3918 | } 3919 | }, 3920 | "json-schema-traverse": { 3921 | "version": "0.4.1", 3922 | "dev": true 3923 | }, 3924 | "json-stable-stringify-without-jsonify": { 3925 | "version": "1.0.1", 3926 | "dev": true 3927 | }, 3928 | "just-extend": { 3929 | "version": "4.2.1", 3930 | "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", 3931 | "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", 3932 | "dev": true 3933 | }, 3934 | "levn": { 3935 | "version": "0.4.1", 3936 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 3937 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 3938 | "dev": true, 3939 | "requires": { 3940 | "prelude-ls": "^1.2.1", 3941 | "type-check": "~0.4.0" 3942 | } 3943 | }, 3944 | "locate-path": { 3945 | "version": "6.0.0", 3946 | "dev": true, 3947 | "requires": { 3948 | "p-locate": "^5.0.0" 3949 | } 3950 | }, 3951 | "lodash.get": { 3952 | "version": "4.4.2", 3953 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 3954 | "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", 3955 | "dev": true 3956 | }, 3957 | "lodash.merge": { 3958 | "version": "4.6.2", 3959 | "dev": true 3960 | }, 3961 | "loupe": { 3962 | "version": "2.3.6", 3963 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", 3964 | "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", 3965 | "dev": true, 3966 | "requires": { 3967 | "get-func-name": "^2.0.0" 3968 | } 3969 | }, 3970 | "lru-cache": { 3971 | "version": "6.0.0", 3972 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3973 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3974 | "dev": true, 3975 | "requires": { 3976 | "yallist": "^4.0.0" 3977 | } 3978 | }, 3979 | "make-dir": { 3980 | "version": "4.0.0", 3981 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 3982 | "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 3983 | "dev": true, 3984 | "requires": { 3985 | "semver": "^7.5.3" 3986 | } 3987 | }, 3988 | "merge2": { 3989 | "version": "1.4.1", 3990 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 3991 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 3992 | "dev": true 3993 | }, 3994 | "micromatch": { 3995 | "version": "4.0.5", 3996 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 3997 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 3998 | "dev": true, 3999 | "requires": { 4000 | "braces": "^3.0.2", 4001 | "picomatch": "^2.3.1" 4002 | } 4003 | }, 4004 | "minimatch": { 4005 | "version": "3.1.2", 4006 | "dev": true, 4007 | "requires": { 4008 | "brace-expansion": "^1.1.7" 4009 | } 4010 | }, 4011 | "ms": { 4012 | "version": "2.1.2", 4013 | "dev": true 4014 | }, 4015 | "natural-compare": { 4016 | "version": "1.4.0", 4017 | "dev": true 4018 | }, 4019 | "nise": { 4020 | "version": "5.1.4", 4021 | "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz", 4022 | "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==", 4023 | "dev": true, 4024 | "requires": { 4025 | "@sinonjs/commons": "^2.0.0", 4026 | "@sinonjs/fake-timers": "^10.0.2", 4027 | "@sinonjs/text-encoding": "^0.7.1", 4028 | "just-extend": "^4.0.2", 4029 | "path-to-regexp": "^1.7.0" 4030 | }, 4031 | "dependencies": { 4032 | "@sinonjs/commons": { 4033 | "version": "2.0.0", 4034 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", 4035 | "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", 4036 | "dev": true, 4037 | "requires": { 4038 | "type-detect": "4.0.8" 4039 | } 4040 | } 4041 | } 4042 | }, 4043 | "once": { 4044 | "version": "1.4.0", 4045 | "dev": true, 4046 | "requires": { 4047 | "wrappy": "1" 4048 | } 4049 | }, 4050 | "optionator": { 4051 | "version": "0.9.3", 4052 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 4053 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 4054 | "dev": true, 4055 | "requires": { 4056 | "@aashutoshrathi/word-wrap": "^1.2.3", 4057 | "deep-is": "^0.1.3", 4058 | "fast-levenshtein": "^2.0.6", 4059 | "levn": "^0.4.1", 4060 | "prelude-ls": "^1.2.1", 4061 | "type-check": "^0.4.0" 4062 | } 4063 | }, 4064 | "p-limit": { 4065 | "version": "3.1.0", 4066 | "dev": true, 4067 | "requires": { 4068 | "yocto-queue": "^0.1.0" 4069 | } 4070 | }, 4071 | "p-locate": { 4072 | "version": "5.0.0", 4073 | "dev": true, 4074 | "requires": { 4075 | "p-limit": "^3.0.2" 4076 | } 4077 | }, 4078 | "parent-module": { 4079 | "version": "1.0.1", 4080 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 4081 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 4082 | "dev": true, 4083 | "requires": { 4084 | "callsites": "^3.0.0" 4085 | } 4086 | }, 4087 | "path-exists": { 4088 | "version": "4.0.0", 4089 | "dev": true 4090 | }, 4091 | "path-is-absolute": { 4092 | "version": "1.0.1", 4093 | "dev": true 4094 | }, 4095 | "path-key": { 4096 | "version": "3.1.1", 4097 | "dev": true 4098 | }, 4099 | "path-parse": { 4100 | "version": "1.0.7", 4101 | "dev": true 4102 | }, 4103 | "path-to-regexp": { 4104 | "version": "1.8.0", 4105 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", 4106 | "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", 4107 | "dev": true, 4108 | "requires": { 4109 | "isarray": "0.0.1" 4110 | } 4111 | }, 4112 | "path-type": { 4113 | "version": "4.0.0", 4114 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 4115 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 4116 | "dev": true 4117 | }, 4118 | "pathval": { 4119 | "version": "1.1.1", 4120 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 4121 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 4122 | "dev": true 4123 | }, 4124 | "picomatch": { 4125 | "version": "2.3.1", 4126 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 4127 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 4128 | "dev": true 4129 | }, 4130 | "prelude-ls": { 4131 | "version": "1.2.1", 4132 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 4133 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 4134 | "dev": true 4135 | }, 4136 | "prettier": { 4137 | "version": "3.0.3", 4138 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", 4139 | "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", 4140 | "dev": true 4141 | }, 4142 | "punycode": { 4143 | "version": "2.1.1", 4144 | "dev": true 4145 | }, 4146 | "queue-microtask": { 4147 | "version": "1.2.3", 4148 | "dev": true 4149 | }, 4150 | "require-directory": { 4151 | "version": "2.1.1", 4152 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 4153 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 4154 | "dev": true 4155 | }, 4156 | "resolve": { 4157 | "version": "1.19.0", 4158 | "dev": true, 4159 | "requires": { 4160 | "is-core-module": "^2.1.0", 4161 | "path-parse": "^1.0.6" 4162 | } 4163 | }, 4164 | "resolve-from": { 4165 | "version": "4.0.0", 4166 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 4167 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 4168 | "dev": true 4169 | }, 4170 | "resolve-pkg-maps": { 4171 | "version": "1.0.0", 4172 | "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 4173 | "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 4174 | "dev": true 4175 | }, 4176 | "reusify": { 4177 | "version": "1.0.4", 4178 | "dev": true 4179 | }, 4180 | "rimraf": { 4181 | "version": "3.0.2", 4182 | "dev": true, 4183 | "requires": { 4184 | "glob": "^7.1.3" 4185 | } 4186 | }, 4187 | "run-parallel": { 4188 | "version": "1.2.0", 4189 | "dev": true, 4190 | "requires": { 4191 | "queue-microtask": "^1.2.2" 4192 | } 4193 | }, 4194 | "semver": { 4195 | "version": "7.5.4", 4196 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 4197 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 4198 | "dev": true, 4199 | "requires": { 4200 | "lru-cache": "^6.0.0" 4201 | } 4202 | }, 4203 | "shebang-command": { 4204 | "version": "2.0.0", 4205 | "dev": true, 4206 | "requires": { 4207 | "shebang-regex": "^3.0.0" 4208 | } 4209 | }, 4210 | "shebang-regex": { 4211 | "version": "3.0.0", 4212 | "dev": true 4213 | }, 4214 | "shimmer": { 4215 | "version": "1.2.1", 4216 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", 4217 | "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", 4218 | "dev": true 4219 | }, 4220 | "signal-exit": { 4221 | "version": "3.0.7", 4222 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 4223 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 4224 | "dev": true 4225 | }, 4226 | "sinon": { 4227 | "version": "16.0.0", 4228 | "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.0.0.tgz", 4229 | "integrity": "sha512-B8AaZZm9CT5pqe4l4uWJztfD/mOTa7dL8Qo0W4+s+t74xECOgSZDDQCBjNgIK3+n4kyxQrSTv2V5ul8K25qkiQ==", 4230 | "dev": true, 4231 | "requires": { 4232 | "@sinonjs/commons": "^3.0.0", 4233 | "@sinonjs/fake-timers": "^10.3.0", 4234 | "@sinonjs/samsam": "^8.0.0", 4235 | "diff": "^5.1.0", 4236 | "nise": "^5.1.4", 4237 | "supports-color": "^7.2.0" 4238 | } 4239 | }, 4240 | "slash": { 4241 | "version": "3.0.0", 4242 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 4243 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 4244 | "dev": true 4245 | }, 4246 | "source-map": { 4247 | "version": "0.6.1", 4248 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 4249 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 4250 | "dev": true 4251 | }, 4252 | "source-map-support": { 4253 | "version": "0.5.21", 4254 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 4255 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 4256 | "dev": true, 4257 | "requires": { 4258 | "buffer-from": "^1.0.0", 4259 | "source-map": "^0.6.0" 4260 | } 4261 | }, 4262 | "string-width": { 4263 | "version": "4.2.3", 4264 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 4265 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 4266 | "dev": true, 4267 | "requires": { 4268 | "emoji-regex": "^8.0.0", 4269 | "is-fullwidth-code-point": "^3.0.0", 4270 | "strip-ansi": "^6.0.1" 4271 | } 4272 | }, 4273 | "strip-ansi": { 4274 | "version": "6.0.1", 4275 | "dev": true, 4276 | "requires": { 4277 | "ansi-regex": "^5.0.1" 4278 | } 4279 | }, 4280 | "strip-json-comments": { 4281 | "version": "3.1.1", 4282 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 4283 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 4284 | "dev": true 4285 | }, 4286 | "supports-color": { 4287 | "version": "7.2.0", 4288 | "requires": { 4289 | "has-flag": "^4.0.0" 4290 | } 4291 | }, 4292 | "test-exclude": { 4293 | "version": "6.0.0", 4294 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", 4295 | "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", 4296 | "dev": true, 4297 | "requires": { 4298 | "@istanbuljs/schema": "^0.1.2", 4299 | "glob": "^7.1.4", 4300 | "minimatch": "^3.0.4" 4301 | } 4302 | }, 4303 | "text-table": { 4304 | "version": "0.2.0", 4305 | "dev": true 4306 | }, 4307 | "to-regex-range": { 4308 | "version": "5.0.1", 4309 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 4310 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 4311 | "dev": true, 4312 | "requires": { 4313 | "is-number": "^7.0.0" 4314 | } 4315 | }, 4316 | "ts-api-utils": { 4317 | "version": "1.0.3", 4318 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", 4319 | "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", 4320 | "dev": true, 4321 | "requires": {} 4322 | }, 4323 | "tsx": { 4324 | "version": "3.12.10", 4325 | "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.10.tgz", 4326 | "integrity": "sha512-2+46h4xvUt1aLDNvk5YBT8Uzw+b7BolGbn7iSMucYqCXZiDc+1IMghLVdw8kKjING32JFOeO+Am9posvjkeclA==", 4327 | "dev": true, 4328 | "requires": { 4329 | "@esbuild-kit/cjs-loader": "^2.4.2", 4330 | "@esbuild-kit/core-utils": "^3.3.0", 4331 | "@esbuild-kit/esm-loader": "^2.6.3", 4332 | "fsevents": "~2.3.2" 4333 | } 4334 | }, 4335 | "type-check": { 4336 | "version": "0.4.0", 4337 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 4338 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 4339 | "dev": true, 4340 | "requires": { 4341 | "prelude-ls": "^1.2.1" 4342 | } 4343 | }, 4344 | "type-detect": { 4345 | "version": "4.0.8", 4346 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 4347 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 4348 | "dev": true 4349 | }, 4350 | "type-fest": { 4351 | "version": "0.20.2", 4352 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 4353 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 4354 | "dev": true 4355 | }, 4356 | "typescript": { 4357 | "version": "5.2.2", 4358 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 4359 | "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 4360 | "dev": true 4361 | }, 4362 | "uri-js": { 4363 | "version": "4.4.1", 4364 | "dev": true, 4365 | "requires": { 4366 | "punycode": "^2.1.0" 4367 | } 4368 | }, 4369 | "v8-to-istanbul": { 4370 | "version": "9.1.0", 4371 | "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", 4372 | "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", 4373 | "dev": true, 4374 | "requires": { 4375 | "@jridgewell/trace-mapping": "^0.3.12", 4376 | "@types/istanbul-lib-coverage": "^2.0.1", 4377 | "convert-source-map": "^1.6.0" 4378 | } 4379 | }, 4380 | "which": { 4381 | "version": "2.0.2", 4382 | "dev": true, 4383 | "requires": { 4384 | "isexe": "^2.0.0" 4385 | } 4386 | }, 4387 | "wrap-ansi": { 4388 | "version": "7.0.0", 4389 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 4390 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 4391 | "dev": true, 4392 | "requires": { 4393 | "ansi-styles": "^4.0.0", 4394 | "string-width": "^4.1.0", 4395 | "strip-ansi": "^6.0.0" 4396 | } 4397 | }, 4398 | "wrappy": { 4399 | "version": "1.0.2", 4400 | "dev": true 4401 | }, 4402 | "y18n": { 4403 | "version": "5.0.8", 4404 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 4405 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 4406 | "dev": true 4407 | }, 4408 | "yallist": { 4409 | "version": "4.0.0", 4410 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 4411 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 4412 | "dev": true 4413 | }, 4414 | "yargs": { 4415 | "version": "17.7.2", 4416 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 4417 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 4418 | "dev": true, 4419 | "requires": { 4420 | "cliui": "^8.0.1", 4421 | "escalade": "^3.1.1", 4422 | "get-caller-file": "^2.0.5", 4423 | "require-directory": "^2.1.1", 4424 | "string-width": "^4.2.3", 4425 | "y18n": "^5.0.5", 4426 | "yargs-parser": "^21.1.1" 4427 | } 4428 | }, 4429 | "yargs-parser": { 4430 | "version": "21.1.1", 4431 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 4432 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 4433 | "dev": true 4434 | }, 4435 | "yocto-queue": { 4436 | "version": "0.1.0", 4437 | "dev": true 4438 | } 4439 | } 4440 | } 4441 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zig-build", 3 | "version": "0.3.0", 4 | "description": "Node.js native addon build and cross-compile library using Zig", 5 | "license": "MIT", 6 | "contributors": [ 7 | "Raphaël Thériault " 8 | ], 9 | "repository": "https://github.com/solarwindscloud/zig-build.git", 10 | "homepage": "https://github.com/solarwindscloud/zig-build#readme", 11 | "bugs": "https://github.com/solarwindscloud/zig-build/issues", 12 | "keywords": [ 13 | "native", 14 | "addon", 15 | "bindings", 16 | "napi", 17 | "node-api", 18 | "c", 19 | "c++", 20 | "zig", 21 | "build", 22 | "cross" 23 | ], 24 | "main": "dist/index.js", 25 | "types": "dist/index.d.ts", 26 | "files": [ 27 | "dist/" 28 | ], 29 | "engines": { 30 | "node": ">= 16.0.0" 31 | }, 32 | "scripts": { 33 | "build": "tsc", 34 | "lint": "prettier --check . && eslint --max-warnings=0 .", 35 | "test": "swtest -p test/tsconfig.json -c src" 36 | }, 37 | "dependencies": { 38 | "chalk": "^4.1.2" 39 | }, 40 | "devDependencies": { 41 | "@eslint/js": "^8.50.0", 42 | "@solarwinds-apm/test": "^1.0.0-pre.3", 43 | "@types/node": "^16.0.0", 44 | "@types/shimmer": "^1.0.2", 45 | "@types/sinon": "^10.0.16", 46 | "@typescript-eslint/eslint-plugin": "^6.7.2", 47 | "@typescript-eslint/parser": "^6.7.2", 48 | "eslint": "^8.49.0", 49 | "eslint-config-prettier": "^9.0.0", 50 | "eslint-plugin-header": "^3.1.1", 51 | "eslint-plugin-simple-import-sort": "^10.0.0", 52 | "eslint-plugin-tsdoc": "^0.2.17", 53 | "globals": "^13.22.0", 54 | "prettier": "^3.0.3", 55 | "shimmer": "^1.2.1", 56 | "sinon": "^16.0.0", 57 | "typescript": "^5.2.2" 58 | }, 59 | "peerDependencies": { 60 | "node-addon-api": "*" 61 | }, 62 | "peerDependenciesMeta": { 63 | "node-addon-api": { 64 | "optional": true 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/deps.ts: -------------------------------------------------------------------------------- 1 | /* 2 | © 2023 SolarWinds Worldwide, LLC. All rights reserved. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of 5 | this software and associated documentation files (the "Software"), to deal in 6 | the Software without restriction, including without limitation the rights to 7 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 8 | of the Software, and to permit persons to whom the Software is furnished to do 9 | so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | import * as fs from "node:fs/promises" 24 | import { type IncomingMessage } from "node:http" 25 | import * as http from "node:https" 26 | import * as os from "node:os" 27 | import * as path from "node:path" 28 | 29 | import { type Logger, makeLogger } from "./log" 30 | import { exec } from "./proc" 31 | 32 | const ZIG_VERSION = "0.10.1" 33 | const ZIGS: Partial>>> = 34 | { 35 | linux: { 36 | x64: `https://ziglang.org/download/${ZIG_VERSION}/zig-linux-x86_64-${ZIG_VERSION}.tar.xz`, 37 | arm64: `https://ziglang.org/download/${ZIG_VERSION}/zig-linux-aarch64-${ZIG_VERSION}.tar.xz`, 38 | }, 39 | darwin: { 40 | x64: `https://ziglang.org/download/${ZIG_VERSION}/zig-macos-x86_64-${ZIG_VERSION}.tar.xz`, 41 | arm64: `https://ziglang.org/download/${ZIG_VERSION}/zig-macos-aarch64-${ZIG_VERSION}.tar.xz`, 42 | }, 43 | win32: { 44 | x64: `https://ziglang.org/download/${ZIG_VERSION}/zig-windows-x86_64-${ZIG_VERSION}.zip`, 45 | arm64: `https://ziglang.org/download/${ZIG_VERSION}/zig-windows-aarch64-${ZIG_VERSION}.zip`, 46 | }, 47 | } 48 | 49 | const DOWNLOAD_DIR = path.join(os.homedir(), ".zig-build") 50 | const NODE_DIR = path.join(DOWNLOAD_DIR, "node") 51 | const ZIG_DIR = path.join(DOWNLOAD_DIR, "zig", ZIG_VERSION) 52 | 53 | const get = (url: string, options: http.RequestOptions & { log: Logger }) => 54 | new Promise((res, rej) => { 55 | options.log(`fetching '${url}'`) 56 | http.get(url, options, (resp) => { 57 | if (!resp.statusCode || resp.statusCode < 200 || resp.statusCode >= 300) { 58 | rej(resp) 59 | } else { 60 | res(resp) 61 | } 62 | }) 63 | }) 64 | 65 | const exists = (path: string) => 66 | fs 67 | .stat(path) 68 | .then(() => true) 69 | .catch(() => false) 70 | 71 | async function fetchNodeHeaders(version?: string) { 72 | // 40 is a green ansii256 colour code 73 | const log = makeLogger("node", 40) 74 | 75 | version ??= process.versions.node 76 | const vversion = `v${version}` 77 | 78 | const headersDir = path.join(NODE_DIR, vversion) 79 | const includePath = path.join(headersDir, "include", "node") 80 | log(`checking for node headers at '${includePath}'`) 81 | if (await exists(includePath)) { 82 | return includePath 83 | } 84 | 85 | const headersUrl = `https://nodejs.org/download/release/${vversion}/node-${vversion}-headers.tar.gz` 86 | const headersArchive = await get(headersUrl, { log }) 87 | await fs.mkdir(headersDir, { recursive: true }) 88 | // windows 10 provides bsdtar which should ignore the z flag if a zip is passed 89 | await exec("tar", ["-xzf", "-", "--strip-components=1", "-C", headersDir], { 90 | stdin: headersArchive, 91 | log, 92 | }) 93 | 94 | return includePath 95 | } 96 | 97 | async function fetchZig() { 98 | // 214 is an orange ansii256 colour code 99 | const log = makeLogger("zig", 214) 100 | 101 | const platform = os.platform() 102 | const arch = os.arch() 103 | 104 | const binary = platform === "win32" ? "zig.exe" : "zig" 105 | const binaryPath = path.join(ZIG_DIR, binary) 106 | log(`checking for zig at '${binaryPath}'`) 107 | if (await exists(binaryPath)) { 108 | return binaryPath 109 | } 110 | 111 | const url = ZIGS[platform]?.[arch] 112 | if (!url) { 113 | throw new Error(`unsupported platform ${platform} ${arch}`) 114 | } 115 | 116 | const zigArchive = await get(url, { log }) 117 | await fs.mkdir(ZIG_DIR, { recursive: true }) 118 | // windows 10 provides bsdtar which should ignore the J flag if a zip is passed 119 | await exec("tar", ["-xJf", "-", "--strip-components=1", "-C", ZIG_DIR], { 120 | stdin: zigArchive, 121 | log, 122 | }) 123 | 124 | return binaryPath 125 | } 126 | 127 | export async function fetchDeps( 128 | nodeVersions: Set, 129 | ): Promise< 130 | [node: Map, zig: string, napi: string | null] 131 | > { 132 | const node = new Map( 133 | await Promise.all( 134 | [...nodeVersions].map( 135 | async (v) => [v, await fetchNodeHeaders(v)] as const, 136 | ), 137 | ), 138 | ) 139 | const zig = await fetchZig() 140 | // if node-addon-api is in the dependency tree grab its include path 141 | // and strip the surrounding quotes 142 | const napi = await import("node-addon-api") 143 | .then((napi) => napi.include.slice(1, -1)) 144 | .catch(() => null) 145 | return [node, zig, napi] 146 | } 147 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | © 2023 SolarWinds Worldwide, LLC. All rights reserved. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of 5 | this software and associated documentation files (the "Software"), to deal in 6 | the Software without restriction, including without limitation the rights to 7 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 8 | of the Software, and to permit persons to whom the Software is furnished to do 9 | so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | import * as assert from "node:assert" 24 | import * as fs from "node:fs/promises" 25 | import * as path from "node:path" 26 | import * as process from "node:process" 27 | 28 | import { fetchDeps } from "./deps" 29 | import { type Logger, makeLogger } from "./log" 30 | import { exec } from "./proc" 31 | 32 | type GnuTargetTriple = 33 | | "x86_64-linux-gnu" 34 | | "aarch64-linux-gnu" 35 | | "x86-linux-gnu" 36 | | "arm-linux-gnueabi" 37 | | "arm-linux-gnueabihf" 38 | type MacosTargetTriple = "x86_64-macos" | "aarch64-macos" 39 | type NixTargetTriple = 40 | | GnuTargetTriple 41 | | MacosTargetTriple 42 | | "x86_64-linux-musl" 43 | | "aarch64-linux-musl" 44 | | "x86-linux-musl" 45 | | "arm-linux-musleabi" 46 | | "arm-linux-musleabihf" 47 | export type TargetTriple = 48 | | NixTargetTriple 49 | | "x86_64-windows" 50 | | "aarch64-windows" 51 | | "x86-windows" 52 | 53 | type OutputType = "bin" | "shared" | "static" 54 | type OutputMode = "debug" | "fast" | "small" 55 | 56 | type NodeVersion = `${number}.${number}.${number}` 57 | 58 | type CStd = 59 | | "c89" 60 | | "gnu89" 61 | | "c99" 62 | | "gnu99" 63 | | "c11" 64 | | "gnu11" 65 | | "c17" 66 | | "gnu17" 67 | type CppStd = 68 | | "c++98" 69 | | "gnu++98" 70 | | "c++03" 71 | | "gnu++03" 72 | | "c++11" 73 | | "gnu++11" 74 | | "c++14" 75 | | "gnu++14" 76 | | "c++17" 77 | | "gnu++17" 78 | | "c++20" 79 | | "gnu++20" 80 | | "c++2b" 81 | | "gnu++2b" 82 | export type Std = CStd | CppStd 83 | 84 | type Glibc = `2.${number}` | `2.${number}.${number}` 85 | 86 | interface BaseTarget { 87 | /** Target triple */ 88 | target: TargetTriple 89 | /** Target CPU */ 90 | cpu?: string 91 | /** Output file */ 92 | output: string 93 | /** Output file type (binary executable, shared library (default) or static library) */ 94 | type?: OutputType 95 | /** Optimisation mode (debug, fast (default) or small) */ 96 | mode?: OutputMode 97 | /** Source files to compile into the output */ 98 | sources: string[] 99 | /** 100 | * Include paths (-I flag) 101 | * 102 | * The Node headers are automatically included. 103 | * The `node-addon-api` headers are automatically included if the dependency is present. 104 | **/ 105 | include?: string[] 106 | /** Linked libraries (-l flag) */ 107 | libraries?: string[] 108 | /** Library search paths (-L flag) */ 109 | librariesSearch?: string[] 110 | /** 111 | * Node headers version 112 | * 113 | * This is used to determine which Node headers to include. 114 | * If not specified, the current Node version is used. 115 | **/ 116 | nodeVersion?: NodeVersion 117 | /** Node-API version */ 118 | napiVersion?: number 119 | /** Preprocessor defines (-D flag) */ 120 | defines?: Record 121 | /** C/C++ standard */ 122 | std?: Std 123 | /** Optionally disable C++ exceptions */ 124 | exceptions?: boolean 125 | /** Compiler flags */ 126 | cflags?: string[] 127 | /** Print verbose information */ 128 | verbose?: boolean 129 | } 130 | interface NixTarget extends BaseTarget { 131 | target: NixTargetTriple 132 | /** Runtime library search paths */ 133 | rpath?: string | string[] 134 | } 135 | interface GnuTarget extends NixTarget { 136 | target: GnuTargetTriple 137 | /** Version of glibc to link against */ 138 | glibc?: Glibc 139 | } 140 | export type Target = BaseTarget | NixTarget | GnuTarget 141 | 142 | type CompilationDatabase = { 143 | directory: string 144 | file: string 145 | output?: string 146 | } & ({ arguments: string[] } | { command: string }) 147 | 148 | // turn an optional array or element into an array 149 | function a(v: T | T[] | undefined): T[] { 150 | if (v === undefined) return [] 151 | else if (Array.isArray(v)) return v 152 | else return [v] 153 | } 154 | 155 | // returns a function that pushes to all the provided arrays 156 | function push(...as: T[][]): (...v: T[]) => void { 157 | return (...v) => { 158 | for (const a of as) { 159 | a.push(...v) 160 | } 161 | } 162 | } 163 | 164 | function eq(l: unknown, r: unknown): boolean { 165 | try { 166 | assert.deepStrictEqual(l, r) 167 | return true 168 | } catch { 169 | return false 170 | } 171 | } 172 | 173 | function buildOne( 174 | target: Target, 175 | cwd: string, 176 | node: string, 177 | zig: string, 178 | napi: string | null, 179 | log: Logger, 180 | ): [task: Promise, db: CompilationDatabase[]] { 181 | let triple = target.target 182 | if ("glibc" in target && target.glibc) { 183 | // zig reads the glibc version from the end of gnu triple after a dot 184 | triple += `.${target.glibc}` 185 | } 186 | 187 | const [lang, clang] = 188 | target.std?.includes("++") ?? true ? ["c++", "clang++"] : ["cc", "clang"] 189 | 190 | // base flags for c/++ compilation, always the same 191 | // use baseline instruction set for the target by default 192 | const flags = [ 193 | lang, 194 | "-target", 195 | triple, 196 | `-mcpu=${target.cpu ?? "baseline"}`, 197 | "-o", 198 | target.output, 199 | ] 200 | const dbFlags = [clang] 201 | 202 | switch (target.type ?? "shared") { 203 | case "bin": 204 | case "static": { 205 | push(flags)("-static") 206 | break 207 | } 208 | case "shared": { 209 | // generate position independent code for shared objects 210 | push(flags)("-shared", "-fPIC") 211 | break 212 | } 213 | } 214 | 215 | switch (target.mode ?? "fast") { 216 | // use -O3 for fast (-Ofast) is not standard compliant 217 | case "fast": { 218 | push(flags)("-O3") 219 | break 220 | } 221 | // use -Oz for small 222 | case "small": { 223 | push(flags)("-Oz") 224 | break 225 | } 226 | case "debug": 227 | } 228 | 229 | if (target.std) { 230 | push(flags, dbFlags)(`-std=${target.std}`) 231 | } 232 | if (target.exceptions === false) { 233 | push(flags, dbFlags)("-fno-exceptions") 234 | } 235 | 236 | push(flags, dbFlags)(`-I${node}`) 237 | if (napi) { 238 | // add node-addon-api include directory if it's in the dependency tree 239 | push(flags, dbFlags)(`-I${napi}`) 240 | } 241 | for (const i of a(target.include)) { 242 | push(flags, dbFlags)(`-I${i}`) 243 | } 244 | 245 | for (const l of a(target.libraries)) { 246 | push(flags)(`-l${l}`) 247 | } 248 | for (const l of a(target.librariesSearch)) { 249 | push(flags)(`-L${l}`) 250 | } 251 | 252 | target.defines ??= {} 253 | if (target.napiVersion) { 254 | // add NAPI_VERSION define but let the user override it 255 | target.defines = { NAPI_VERSION: target.napiVersion, ...target.defines } 256 | } 257 | if (target.exceptions === false) { 258 | // add node-addon-api defines to disable exceptions and enable safe error handling 259 | // but let the user override them 260 | target.defines = { 261 | NAPI_DISABLE_CPP_EXCEPTIONS: true, 262 | NODE_ADDON_API_ENABLE_MAYBE: true, 263 | ...target.defines, 264 | } 265 | } 266 | for (const [n, v] of Object.entries(target.defines)) { 267 | if (v === true) { 268 | push(flags, dbFlags)(`-D${n}`) 269 | } else if (typeof v === "string" || typeof v === "number") { 270 | push(flags, dbFlags)(`-D${n}=${v}`) 271 | } 272 | } 273 | 274 | if ("rpath" in target && target.rpath) { 275 | // specify rpaths as a linker flags 276 | for (const r of a(target.rpath)) { 277 | push(flags)(`-Wl,-rpath,${r}`) 278 | } 279 | } 280 | 281 | if (target.verbose) { 282 | push(flags)("-v") 283 | } 284 | 285 | push(flags, dbFlags)(...a(target.cflags)) 286 | 287 | push(flags)(...target.sources) 288 | 289 | const task = exec(zig, flags, { cwd, log }) 290 | // create a compilation database entry for each source file 291 | const db = target.sources.map((source) => ({ 292 | directory: cwd, 293 | arguments: dbFlags, 294 | file: source, 295 | })) 296 | 297 | return [task, db] 298 | } 299 | 300 | /** 301 | * Builds a set of targets in parallel 302 | * 303 | * @param targets - Targets definitions 304 | * @param cwd - Working directory to use for compiler invocations 305 | * @param compilationDatabase - Location of an optionally generated Clang JSON compilation database (https://clang.llvm.org/docs/JSONCompilationDatabase.html) 306 | */ 307 | export async function build( 308 | targets: Record, 309 | cwd: string = process.cwd(), 310 | compilationDatabase: boolean | string = false, 311 | ): Promise { 312 | const nodeVersions = new Set(Object.values(targets).map((t) => t.nodeVersion)) 313 | const [node, zig, napi] = await fetchDeps(nodeVersions) 314 | 315 | // for each target merge the task into an array of tasks and 316 | // the partial compilation database into the complete one 317 | const [tasks, db] = Object.entries(targets).reduce< 318 | [Promise[], CompilationDatabase[]] 319 | >( 320 | ([tasks, db], [name, target]) => { 321 | const [task, partialDb] = buildOne( 322 | target, 323 | cwd, 324 | node.get(target.nodeVersion)!, 325 | zig, 326 | napi, 327 | makeLogger(name), 328 | ) 329 | 330 | return [ 331 | [...tasks, task], 332 | [...db, ...partialDb], 333 | ] 334 | }, 335 | [[], []], 336 | ) 337 | 338 | await Promise.all(tasks) 339 | 340 | if (compilationDatabase) { 341 | if (typeof compilationDatabase !== "string") { 342 | compilationDatabase = "compile_commands.json" 343 | } 344 | 345 | // don't keep duplicate entries in the compilation database 346 | const unique = db.filter((l, idx) => db.findIndex((r) => eq(l, r)) === idx) 347 | await fs.writeFile( 348 | path.join(cwd, compilationDatabase), 349 | JSON.stringify(unique), 350 | ) 351 | } 352 | } 353 | export default build 354 | -------------------------------------------------------------------------------- /src/log.ts: -------------------------------------------------------------------------------- 1 | /* 2 | © 2023 SolarWinds Worldwide, LLC. All rights reserved. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of 5 | this software and associated documentation files (the "Software"), to deal in 6 | the Software without restriction, including without limitation the rights to 7 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 8 | of the Software, and to permit persons to whom the Software is furnished to do 9 | so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | import chalk, { type Chalk } from "chalk" 24 | 25 | export const COLOURS = [ 26 | "red", 27 | "cyan", 28 | "magenta", 29 | "blue", 30 | "yellow", 31 | "green", 32 | ] as const 33 | export type Colour = (typeof COLOURS)[number] 34 | 35 | export type Logger = (message: string) => void 36 | 37 | let rot = 0 38 | export function makeLogger(prefix: string, colour?: Colour | number): Logger { 39 | const b = chalk.bold 40 | 41 | let c: Chalk = b 42 | if (typeof colour === "number") { 43 | c = c.ansi256(colour) 44 | } else { 45 | // either use the provided colour name or rotate through the list 46 | c = c[colour ?? COLOURS[rot++ % COLOURS.length]!] 47 | } 48 | 49 | return (message) => { 50 | if (message.trim().length > 0) { 51 | // this is unreadable but basically we have the coloured prefix surrounded by square brackets 52 | // then that is made bold and followed by the message 53 | console.log(`${b("[")}${c(prefix)}${b("]")} ${message}`) 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/missing.d.ts: -------------------------------------------------------------------------------- 1 | /* 2 | © 2023 SolarWinds Worldwide, LLC. All rights reserved. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of 5 | this software and associated documentation files (the "Software"), to deal in 6 | the Software without restriction, including without limitation the rights to 7 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 8 | of the Software, and to permit persons to whom the Software is furnished to do 9 | so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | declare module "node-addon-api" { 24 | export const include: string 25 | } 26 | -------------------------------------------------------------------------------- /src/proc.ts: -------------------------------------------------------------------------------- 1 | /* 2 | © 2023 SolarWinds Worldwide, LLC. All rights reserved. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of 5 | this software and associated documentation files (the "Software"), to deal in 6 | the Software without restriction, including without limitation the rights to 7 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 8 | of the Software, and to permit persons to whom the Software is furnished to do 9 | so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | import * as cproc from "node:child_process" 24 | import { type Readable } from "node:stream" 25 | 26 | import { type Logger } from "./log" 27 | 28 | // executes a process with an optional stream to pipe to stdin and logging its output 29 | // returns a promise that will resolve or reject once the process exits 30 | export const exec = ( 31 | cmd: string, 32 | args: string[], 33 | options: Omit & { 34 | log: Logger 35 | stdin?: Readable 36 | }, 37 | ) => 38 | new Promise((res, rej) => { 39 | options.log(`executing '${cmd} ${args.join(" ")}'`) 40 | const proc = cproc.spawn(cmd, args, { 41 | ...options, 42 | stdio: "pipe", 43 | }) 44 | 45 | proc.once("exit", (code) => { 46 | if (code === 0) { 47 | res(code) 48 | } else { 49 | rej(code) 50 | } 51 | }) 52 | 53 | if (options.stdin) { 54 | options.stdin.pipe(proc.stdin) 55 | } 56 | 57 | // log stdout and stderr with the provided logger, buffering at newlines 58 | for (const stream of ["stdout", "stderr"] as const) { 59 | let buffer = Buffer.alloc(0) 60 | proc[stream].on("data", (data) => { 61 | buffer = Buffer.concat([buffer, data]) 62 | const lines = buffer.toString("utf8").split("\n") 63 | buffer = Buffer.from(lines.pop()!, "utf8") 64 | for (const line of lines) { 65 | options.log(line) 66 | } 67 | }) 68 | proc[stream].once("end", () => { 69 | options.log(buffer.toString("utf8")) 70 | }) 71 | } 72 | }) 73 | -------------------------------------------------------------------------------- /test/index.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, it } from "@solarwinds-apm/test" 2 | import * as shimmer from "shimmer" 3 | import * as sinon from "sinon" 4 | 5 | import { build } from "../src/" 6 | 7 | it("calls spawn with the right arguments and produces a valid database", async () => { 8 | /* eslint-disable */ 9 | const cproc = 10 | require("node:child_process") as typeof import("node:child_process") 11 | const fs = require("node:fs/promises") as typeof import("node:fs/promises") 12 | /* eslint-enable */ 13 | 14 | const spawn = sinon.fake<[string, string[]]>(() => { 15 | const nul = process.platform === "win32" ? "nul" : "/dev/null" 16 | const c = cproc.exec(`cat > ${nul}`) 17 | setImmediate(() => { 18 | if (c.stdin?.writable) { 19 | c.stdin.end() 20 | } 21 | }) 22 | return c 23 | }) 24 | const writeFile = sinon.fake<[string, string]>(() => Promise.resolve()) 25 | 26 | shimmer.wrap(cproc, "spawn", () => spawn as unknown as typeof cproc.spawn) 27 | shimmer.wrap( 28 | fs, 29 | "writeFile", 30 | () => writeFile as unknown as typeof fs.writeFile, 31 | ) 32 | 33 | await build( 34 | { 35 | x64: { 36 | target: "x86_64-linux-gnu", 37 | sources: ["foo.cc", "bar.cc"], 38 | mode: "small", 39 | std: "c++20", 40 | output: "test.x64.so", 41 | defines: { 42 | TEST_VALUE: "baz", 43 | }, 44 | include: ["dir"], 45 | rpath: "runtime", 46 | }, 47 | arm64: { 48 | target: "aarch64-linux-musl", 49 | sources: ["foo.cc", "bar.cc"], 50 | type: "static", 51 | output: "test.arm64.a", 52 | exceptions: false, 53 | defines: { 54 | NDEBUG: true, 55 | }, 56 | libraries: ["lib"], 57 | librariesSearch: ["dir"], 58 | }, 59 | }, 60 | __dirname, 61 | true, 62 | ) 63 | 64 | let spawnCalls = spawn.getCalls() 65 | if (spawnCalls.length > 2) { 66 | spawnCalls = spawnCalls.slice(spawnCalls.length - 2) 67 | } 68 | 69 | for (const call of spawnCalls) { 70 | expect(call.args[0]).to.include("zig") 71 | expect(call.args[1]).to.include("foo.cc") 72 | expect(call.args[1]).to.include("bar.cc") 73 | } 74 | 75 | expect(spawnCalls[0]!.args[1].slice(0, 10)).to.deep.equal([ 76 | "c++", 77 | "-target", 78 | "x86_64-linux-gnu", 79 | "-mcpu=baseline", 80 | "-o", 81 | "test.x64.so", 82 | "-shared", 83 | "-fPIC", 84 | "-Oz", 85 | "-std=c++20", 86 | ]) 87 | expect(spawnCalls[0]!.args[1]).to.include("-DTEST_VALUE=baz") 88 | expect(spawnCalls[0]!.args[1]).to.include("-Idir") 89 | expect(spawnCalls[0]!.args[1]).to.include("-Wl,-rpath,runtime") 90 | 91 | expect(spawnCalls[1]!.args[1].slice(0, 9)).to.deep.equal([ 92 | "c++", 93 | "-target", 94 | "aarch64-linux-musl", 95 | "-mcpu=baseline", 96 | "-o", 97 | "test.arm64.a", 98 | "-static", 99 | "-O3", 100 | "-fno-exceptions", 101 | ]) 102 | expect(spawnCalls[1]!.args[1]).to.include("-DNDEBUG") 103 | expect(spawnCalls[1]!.args[1]).to.include("-llib") 104 | expect(spawnCalls[1]!.args[1]).to.include("-Ldir") 105 | 106 | const writeFileCall = writeFile.getCalls().at(-1)! 107 | expect(writeFileCall.args[0]).to.include("compile_commands.json") 108 | 109 | const compileCommands = JSON.parse(writeFileCall.args[1]) as { 110 | directory: string 111 | arguments: string[] 112 | file: string 113 | }[] 114 | expect(compileCommands).to.have.length(4) 115 | 116 | for (const c of compileCommands) { 117 | expect(c.directory).to.equal(__dirname) 118 | expect(c.file).to.be.oneOf(["foo.cc", "bar.cc"]) 119 | expect(c.arguments).not.to.include.any.members([ 120 | "-target", 121 | "-mcpu=baseline", 122 | "-o", 123 | "-shared", 124 | "-fPIC", 125 | "-static", 126 | "-Oz", 127 | "-O3", 128 | "-llib", 129 | "-Ldir", 130 | "-Wl,-rpath,runtime", 131 | ]) 132 | } 133 | 134 | for (const c of compileCommands.slice(0, 2)) { 135 | expect(c.arguments).to.include.all.members([ 136 | "-std=c++20", 137 | "-DTEST_VALUE=baz", 138 | "-Idir", 139 | ]) 140 | } 141 | for (const c of compileCommands.slice(2)) { 142 | expect(c.arguments).to.include.all.members(["-fno-exceptions", "-DNDEBUG"]) 143 | } 144 | }) 145 | -------------------------------------------------------------------------------- /test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "include": ["."], 4 | "compilerOptions": { 5 | "rootDir": ".", 6 | "noEmit": true, 7 | "inlineSourceMap": true 8 | }, 9 | "references": [{ "path": ".." }] 10 | } 11 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["src"], 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./dist", 6 | "composite": true, 7 | "declaration": true, 8 | 9 | "target": "es2020", 10 | "module": "commonjs", 11 | "esModuleInterop": true, 12 | 13 | "forceConsistentCasingInFileNames": true, 14 | "resolveJsonModule": true, 15 | "strict": true, 16 | "noUncheckedIndexedAccess": true 17 | } 18 | } 19 | --------------------------------------------------------------------------------