From 1e83625b3e31548d4ddc15b2ac73049c51a4a0ff Mon Sep 17 00:00:00 2001 From: "Dr. Daniel Hauschildt" <14251188+DanielHauschildt@users.noreply.github.com> Date: Tue, 12 Sep 2023 15:01:11 +0200 Subject: [PATCH] Revert "DanielHauschildt/nodejs (#26)" This reverts commit debecff7c21cb69acb8c5df6bbb2f3c521c26d3f. --- .gitattributes | 19 +- .../workflows/{ci.yml.deactivated => ci.yml} | 0 .gitignore | 3 +- .prettierignore | 11 +- README.md | 9 +- ...b3eee309c7de183d394ce4b956339ebd95e6.onnx} | 0 ...59cd401fb82a9d4213134bce4dbd655c803a.onnx} | 0 ...696cd80df5a23cb6a8ea532021911bd76acb.onnx} | 0 .../create-react-app/.gitignore | 0 .../create-react-app/README.md | 0 .../create-react-app/package-lock.json | 81 +- .../create-react-app/package.json | 4 +- .../create-react-app/public/favicon.ico | Bin .../create-react-app/public/index.html | 0 .../create-react-app/public/logo192.png | Bin .../create-react-app/public/logo512.png | Bin .../create-react-app/public/manifest.json | 0 .../create-react-app/public/robots.txt | 0 .../create-react-app/public/static/js | 0 .../create-react-app/src/App.css | 0 .../create-react-app/src/App.js | 4 +- .../create-react-app/src/index.css | 0 .../create-react-app/src/index.js | 0 .../create-react-app/src/logo.svg | 0 .../create-react-app/src/reportWebVitals.js | 0 .../create-react-app/src/setupProxy.js | 0 .../create-react-app/src/setupTests.js | 0 .../vite-project/.gitignore | 0 .../.vite/deps_temp_330b8fd7/package.json | 3 + .../vite-project/README.md | 0 .../vite-project/index.html | 0 .../vite-project/package-lock.json | 55 +- .../vite-project/package.json | 5 +- .../vite-project/public/js | 0 .../vite-project/public/vite.svg | 0 .../vite-project/src/App.vue | 0 .../vite-project/src/assets/vue.svg | 0 .../vite-project/src/components/BGRemoval.vue | 0 .../vite-project/src/main.ts | 0 .../vite-project/src/style.css | 0 .../vite-project/src/vite-env.d.ts | 0 .../vite-project/tsconfig.json | 0 .../vite-project/tsconfig.node.json | 0 .../vite-project/vite.config.ts | 0 package-lock.json | 2072 ++++++++-- package.json | 59 +- packages/node-e2e/fixtures/images/img2img.sh | 20 - .../photo-1686002359940-6a51b0d64f68.jpeg | Bin 106355 -> 0 bytes packages/node-e2e/package-lock.json | 3523 ---------------- packages/node-e2e/package.json | 10 - packages/node-e2e/src/example.test.js | 9 - .../photo-1686002359940-6a51b0d64f68.jpeg | Bin 106355 -> 0 bytes packages/node-examples/package-lock.json | 56 - packages/node-examples/package.json | 12 - packages/node-examples/src/example_001.cjs | 24 - packages/node-examples/src/example_001.mjs | 24 - packages/node/.resources.mjs | 12 - packages/node/README.md | 149 - packages/node/TODO.md | 21 - packages/node/package-lock.json | 3457 ---------------- packages/node/package.json | 70 - packages/node/scripts/build.mjs | 32 - packages/node/scripts/watch.mjs | 15 - packages/node/src/codecs.ts | 40 - packages/node/src/index.ts | 58 - packages/node/src/inference.ts | 57 - packages/node/src/onnx.ts | 55 - packages/node/src/platform.ts | 32 - packages/node/src/resource.ts | 97 - packages/node/src/url.ts | 14 - packages/node/src/utils.ts | 123 - packages/node/tsconfig.json | 9 - packages/web/.resources.mjs | 17 - packages/web/README.md | 165 - packages/web/package-lock.json | 3561 ----------------- packages/web/package.json | 68 - packages/web/scripts/build.mjs | 32 - packages/web/scripts/watch.mjs | 15 - packages/web/src/codecs.ts | 26 - packages/web/src/feature-detect.js | 123 - packages/web/src/index.ts | 142 - packages/web/src/inference.ts | 58 - packages/web/src/onnx.ts | 95 - packages/web/src/resource.ts | 76 - packages/web/src/schema.ts | 41 - packages/web/src/url.ts | 17 - packages/web/src/utils.ts | 123 - packages/web/tsconfig.json | 9 - scripts/package-resources.mjs | 191 - scripts/package-version.mjs | 28 - src/browser.ts | 66 + src/bundle.ts | 139 + src/inference.ts | 48 + src/ort-web-rt.ts | 110 + {packages/node/src => src}/schema.ts | 22 +- src/tensor.ts | 13 + src/utils.ts | 122 + tsconfig.json | 21 + webpack.config.js | 98 + 99 files changed, 2410 insertions(+), 13260 deletions(-) rename .github/workflows/{ci.yml.deactivated => ci.yml} (100%) rename bundle/models/{large => 17b7466d93bb60b0e88affa2b0e8b3eee309c7de183d394ce4b956339ebd95e6.onnx} (100%) rename bundle/models/{small => 7001d60734fdc112dd9c062635fb59cd401fb82a9d4213134bce4dbd655c803a.onnx} (100%) rename bundle/models/{medium => b6e8497ba978a6f5fbb647e419d2696cd80df5a23cb6a8ea532021911bd76acb.onnx} (100%) rename {packages/web-examples => examples}/create-react-app/.gitignore (100%) rename {packages/web-examples => examples}/create-react-app/README.md (100%) rename {packages/web-examples => examples}/create-react-app/package-lock.json (99%) rename {packages/web-examples => examples}/create-react-app/package.json (91%) rename {packages/web-examples => examples}/create-react-app/public/favicon.ico (100%) rename {packages/web-examples => examples}/create-react-app/public/index.html (100%) rename {packages/web-examples => examples}/create-react-app/public/logo192.png (100%) rename {packages/web-examples => examples}/create-react-app/public/logo512.png (100%) rename {packages/web-examples => examples}/create-react-app/public/manifest.json (100%) rename {packages/web-examples => examples}/create-react-app/public/robots.txt (100%) rename {packages/web-examples => examples}/create-react-app/public/static/js (100%) rename {packages/web-examples => examples}/create-react-app/src/App.css (100%) rename {packages/web-examples => examples}/create-react-app/src/App.js (95%) rename {packages/web-examples => examples}/create-react-app/src/index.css (100%) rename {packages/web-examples => examples}/create-react-app/src/index.js (100%) rename {packages/web-examples => examples}/create-react-app/src/logo.svg (100%) rename {packages/web-examples => examples}/create-react-app/src/reportWebVitals.js (100%) rename {packages/web-examples => examples}/create-react-app/src/setupProxy.js (100%) rename {packages/web-examples => examples}/create-react-app/src/setupTests.js (100%) rename {packages/web-examples => examples}/vite-project/.gitignore (100%) create mode 100644 examples/vite-project/.vite/deps_temp_330b8fd7/package.json rename {packages/web-examples => examples}/vite-project/README.md (100%) rename {packages/web-examples => examples}/vite-project/index.html (100%) rename {packages/web-examples => examples}/vite-project/package-lock.json (95%) rename {packages/web-examples => examples}/vite-project/package.json (78%) rename {packages/web-examples => examples}/vite-project/public/js (100%) rename {packages/web-examples => examples}/vite-project/public/vite.svg (100%) rename {packages/web-examples => examples}/vite-project/src/App.vue (100%) rename {packages/web-examples => examples}/vite-project/src/assets/vue.svg (100%) rename {packages/web-examples => examples}/vite-project/src/components/BGRemoval.vue (100%) rename {packages/web-examples => examples}/vite-project/src/main.ts (100%) rename {packages/web-examples => examples}/vite-project/src/style.css (100%) rename {packages/web-examples => examples}/vite-project/src/vite-env.d.ts (100%) rename {packages/web-examples => examples}/vite-project/tsconfig.json (100%) rename {packages/web-examples => examples}/vite-project/tsconfig.node.json (100%) rename {packages/web-examples => examples}/vite-project/vite.config.ts (100%) delete mode 100644 packages/node-e2e/fixtures/images/img2img.sh delete mode 100644 packages/node-e2e/fixtures/images/photo-1686002359940-6a51b0d64f68.jpeg delete mode 100644 packages/node-e2e/package-lock.json delete mode 100644 packages/node-e2e/package.json delete mode 100644 packages/node-e2e/src/example.test.js delete mode 100644 packages/node-examples/files/photo-1686002359940-6a51b0d64f68.jpeg delete mode 100644 packages/node-examples/package-lock.json delete mode 100644 packages/node-examples/package.json delete mode 100644 packages/node-examples/src/example_001.cjs delete mode 100644 packages/node-examples/src/example_001.mjs delete mode 100644 packages/node/.resources.mjs delete mode 100644 packages/node/README.md delete mode 100644 packages/node/TODO.md delete mode 100644 packages/node/package-lock.json delete mode 100644 packages/node/package.json delete mode 100644 packages/node/scripts/build.mjs delete mode 100644 packages/node/scripts/watch.mjs delete mode 100644 packages/node/src/codecs.ts delete mode 100644 packages/node/src/index.ts delete mode 100644 packages/node/src/inference.ts delete mode 100644 packages/node/src/onnx.ts delete mode 100644 packages/node/src/platform.ts delete mode 100644 packages/node/src/resource.ts delete mode 100644 packages/node/src/url.ts delete mode 100644 packages/node/src/utils.ts delete mode 100644 packages/node/tsconfig.json delete mode 100644 packages/web/.resources.mjs delete mode 100644 packages/web/README.md delete mode 100644 packages/web/package-lock.json delete mode 100644 packages/web/package.json delete mode 100644 packages/web/scripts/build.mjs delete mode 100644 packages/web/scripts/watch.mjs delete mode 100644 packages/web/src/codecs.ts delete mode 100644 packages/web/src/feature-detect.js delete mode 100644 packages/web/src/index.ts delete mode 100644 packages/web/src/inference.ts delete mode 100644 packages/web/src/onnx.ts delete mode 100644 packages/web/src/resource.ts delete mode 100644 packages/web/src/schema.ts delete mode 100644 packages/web/src/url.ts delete mode 100644 packages/web/src/utils.ts delete mode 100644 packages/web/tsconfig.json delete mode 100644 scripts/package-resources.mjs delete mode 100644 scripts/package-version.mjs create mode 100644 src/browser.ts create mode 100644 src/bundle.ts create mode 100644 src/inference.ts create mode 100644 src/ort-web-rt.ts rename {packages/node/src => src}/schema.ts (71%) create mode 100644 src/tensor.ts create mode 100644 src/utils.ts create mode 100644 tsconfig.json create mode 100644 webpack.config.js diff --git a/.gitattributes b/.gitattributes index e0f545a..90b1149 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,18 +1 @@ -bundle/**/* filter=lfs diff=lfs merge=binary -**/*.onnx filter=lfs diff=lfs merge=binary -**/*.ort filter=lfs diff=lfs merge=binary -**/*.{jpeg,jpg} filter=lfs diff=lfs merge=binary -**/*.png filter=lfs diff=lfs merge=binary -**/*.webp filter=lfs diff=lfs merge=binary -**/*.avif filter=lfs diff=lfs merge=binary -**/*.heic filter=lfs diff=lfs merge=binary -**/*.heif filter=lfs diff=lfs merge=binary -**/*.pdf filter=lfs diff=lfs merge=binary -**/*.psd filter=lfs diff=lfs merge=binary -**/*.mp4 filter=lfs diff=lfs merge=binary -**/*.mov filter=lfs diff=lfs merge=binary -**/*.m4v filter=lfs diff=lfs merge=binary -**/*.mp3 filter=lfs diff=lfs merge=binary -**/*.wav filter=lfs diff=lfs merge=binary -**/*.aif filter=lfs diff=lfs merge=binary -**/*.aiff filter=lfs diff=lfs merge=binary +bundle/models/* filter=lfs diff=lfs merge=lfs -binary diff --git a/.github/workflows/ci.yml.deactivated b/.github/workflows/ci.yml similarity index 100% rename from .github/workflows/ci.yml.deactivated rename to .github/workflows/ci.yml diff --git a/.gitignore b/.gitignore index 2686ec2..0da7042 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ node_modules dist tmp .DS_Store -.vscode -.parcel-cache \ No newline at end of file +.vscode \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index b9662c8..e413b82 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,7 +1,4 @@ -**/node_modules -**/dist -**/tmp -build -**/package-lock.json -.vscode/ -**/public/ \ No newline at end of file +node_modules +dist +tmp +build \ No newline at end of file diff --git a/README.md b/README.md index feac8e6..ede3687 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ # Background Removal in the Browser

-background removal js showcase +

Remove backgrounds from images directly in the browser environment with ease and no additional costs or privacy concerns. Explore an [interactive demo](https://img.ly/showcases/cesdk/web/background-removal/web?utm_source=github&utm_medium=project&utm_campaign=bg-removal). ## News -- **`September 12th, 2023`:** We released the code of Background Removal for NodeJs (see `packages/node`). -- **`June 28th, 2023`:** We released the code of Background Removal for Web (see `packages/web`). + - **`June 28th, 2023`:** We released the code of Background Removal JS. ## Overview @@ -26,6 +25,10 @@ The key features of `@imgly/background-removal` are: The Neural Network ([ONNX model](https://onnx.ai/)) and WASM files used by `@imgly/background-removal` are hosted on [UNPKG](https://www.unpkg.com/), making it readily available for download to all users of the library. See the section Custom Asset Serving if you want to host data on your own servers. +

+background removal js showcase + +

## Installation diff --git a/bundle/models/large b/bundle/models/17b7466d93bb60b0e88affa2b0e8b3eee309c7de183d394ce4b956339ebd95e6.onnx similarity index 100% rename from bundle/models/large rename to bundle/models/17b7466d93bb60b0e88affa2b0e8b3eee309c7de183d394ce4b956339ebd95e6.onnx diff --git a/bundle/models/small b/bundle/models/7001d60734fdc112dd9c062635fb59cd401fb82a9d4213134bce4dbd655c803a.onnx similarity index 100% rename from bundle/models/small rename to bundle/models/7001d60734fdc112dd9c062635fb59cd401fb82a9d4213134bce4dbd655c803a.onnx diff --git a/bundle/models/medium b/bundle/models/b6e8497ba978a6f5fbb647e419d2696cd80df5a23cb6a8ea532021911bd76acb.onnx similarity index 100% rename from bundle/models/medium rename to bundle/models/b6e8497ba978a6f5fbb647e419d2696cd80df5a23cb6a8ea532021911bd76acb.onnx diff --git a/packages/web-examples/create-react-app/.gitignore b/examples/create-react-app/.gitignore similarity index 100% rename from packages/web-examples/create-react-app/.gitignore rename to examples/create-react-app/.gitignore diff --git a/packages/web-examples/create-react-app/README.md b/examples/create-react-app/README.md similarity index 100% rename from packages/web-examples/create-react-app/README.md rename to examples/create-react-app/README.md diff --git a/packages/web-examples/create-react-app/package-lock.json b/examples/create-react-app/package-lock.json similarity index 99% rename from packages/web-examples/create-react-app/package-lock.json rename to examples/create-react-app/package-lock.json index 7b03854..077f782 100644 --- a/packages/web-examples/create-react-app/package-lock.json +++ b/examples/create-react-app/package-lock.json @@ -1,14 +1,14 @@ { "name": "test", - "version": "1.1.0", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "test", - "version": "1.1.0", + "version": "0.1.0", "dependencies": { - "@imgly/background-removal": "file:../../web", + "@imgly/background-removal": "file:../../", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", @@ -20,30 +20,22 @@ }, "../..": { "name": "@imgly/background-removal", - "version": "1.0.6", + "version": "1.0.3", "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "lodash": "^4.17.21", - "onnxruntime-web": "^1.15.1", - "wasm-feature-detect": "^1.5.1", - "zod": "^3.21.4" - }, "devDependencies": { - "@parcel/packager-ts": "^2.9.3", - "@parcel/resolver-default": "^2.9.3", - "@parcel/transformer-typescript-types": "^2.9.3", "@types/lodash": "^4.14.195", "@types/node": "^20.3.1", "assert": "^2.0.0", - "glob": "^10.3.3", - "parcel": "^2.9.3", - "process": "^0.11.10", + "lodash": "^4.17.21", + "onnxruntime-web": "~1.15.0", "ts-loader": "^9.4.3", "tslib": "^2.5.3", "typescript": "^5.1.3", "util": "^0.12.5", + "wasm-feature-detect": "^1.5.1", "webpack": "^5.85.1", - "webpack-cli": "^5.1.4" + "webpack-cli": "^5.1.4", + "zod": "^3.21.4" } }, "../../node_modules/@discoveryjs/json-ext": { @@ -113,22 +105,27 @@ }, "../../node_modules/@protobufjs/aspromise": { "version": "1.1.2", + "dev": true, "license": "BSD-3-Clause" }, "../../node_modules/@protobufjs/base64": { "version": "1.1.2", + "dev": true, "license": "BSD-3-Clause" }, "../../node_modules/@protobufjs/codegen": { "version": "2.0.4", + "dev": true, "license": "BSD-3-Clause" }, "../../node_modules/@protobufjs/eventemitter": { "version": "1.1.0", + "dev": true, "license": "BSD-3-Clause" }, "../../node_modules/@protobufjs/fetch": { "version": "1.1.0", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", @@ -137,22 +134,27 @@ }, "../../node_modules/@protobufjs/float": { "version": "1.0.2", + "dev": true, "license": "BSD-3-Clause" }, "../../node_modules/@protobufjs/inquire": { "version": "1.1.0", + "dev": true, "license": "BSD-3-Clause" }, "../../node_modules/@protobufjs/path": { "version": "1.1.2", + "dev": true, "license": "BSD-3-Clause" }, "../../node_modules/@protobufjs/pool": { "version": "1.1.0", + "dev": true, "license": "BSD-3-Clause" }, "../../node_modules/@protobufjs/utf8": { "version": "1.1.0", + "dev": true, "license": "BSD-3-Clause" }, "../../node_modules/@types/eslint": { @@ -190,10 +192,12 @@ }, "../../node_modules/@types/long": { "version": "4.0.2", + "dev": true, "license": "MIT" }, "../../node_modules/@types/node": { "version": "20.3.1", + "dev": true, "license": "MIT" }, "../../node_modules/@webassemblyjs/ast": { @@ -763,6 +767,7 @@ }, "../../node_modules/flatbuffers": { "version": "1.12.0", + "dev": true, "license": "SEE LICENSE IN LICENSE.txt" }, "../../node_modules/for-each": { @@ -815,6 +820,7 @@ }, "../../node_modules/guid-typescript": { "version": "1.0.9", + "dev": true, "license": "ISC" }, "../../node_modules/has": { @@ -1112,6 +1118,7 @@ }, "../../node_modules/long": { "version": "4.0.0", + "dev": true, "license": "Apache-2.0" }, "../../node_modules/merge-stream": { @@ -1185,6 +1192,7 @@ }, "../../node_modules/onnx-proto": { "version": "4.0.4", + "dev": true, "license": "MIT", "dependencies": { "protobufjs": "^6.8.8" @@ -1193,12 +1201,14 @@ "../../node_modules/onnxruntime-common": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.15.1.tgz", - "integrity": "sha512-Y89eJ8QmaRsPZPWLaX7mfqhj63ny47rSkQe80hIo+lvBQdrdXYR9VO362xvZulk9DFkCnXmGidprvgJ07bKsIQ==" + "integrity": "sha512-Y89eJ8QmaRsPZPWLaX7mfqhj63ny47rSkQe80hIo+lvBQdrdXYR9VO362xvZulk9DFkCnXmGidprvgJ07bKsIQ==", + "dev": true }, "../../node_modules/onnxruntime-web": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.15.1.tgz", "integrity": "sha512-Ky4AXFLFyiGRu5KQJdDcbhdNcO0f2ND/8IPmTEwcKKIHpCwH6/Q9UoMpcoFz78lxGvnmmy+FFgA/Bs1HjdM6LA==", + "dev": true, "dependencies": { "flatbuffers": "^1.12.0", "guid-typescript": "^1.0.9", @@ -1280,10 +1290,12 @@ }, "../../node_modules/platform": { "version": "1.3.6", + "dev": true, "license": "MIT" }, "../../node_modules/protobufjs": { "version": "6.11.3", + "dev": true, "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { @@ -1669,6 +1681,11 @@ "which-typed-array": "^1.1.2" } }, + "../../node_modules/wasm-feature-detect": { + "version": "1.5.1", + "dev": true, + "license": "Apache-2.0" + }, "../../node_modules/watchpack": { "version": "2.4.0", "dev": true, @@ -1837,32 +1854,6 @@ "url": "https://github.com/sponsors/colinhacks" } }, - "../../web": { - "name": "@imgly/background-removal", - "version": "1.1.0", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "onnxruntime-web": "^1.15.1" - }, - "devDependencies": { - "@types/lodash": "^4.14.195", - "@types/node": "^20.3.1", - "assert": "^2.0.0", - "esbuild": "^0.18.18", - "glob": "^10.3.3", - "lodash": "^4.17.21", - "ndarray": "^1.0.19", - "npm-dts": "^1.3.12", - "process": "^0.11.10", - "ts-loader": "^9.4.3", - "tslib": "^2.5.3", - "typescript": "^5.1.3", - "util": "^0.12.5", - "webpack": "^5.85.1", - "webpack-cli": "^5.1.4", - "zod": "^3.21.4" - } - }, "node_modules/@adobe/css-tools": { "version": "4.2.0", "license": "MIT" @@ -4145,7 +4136,7 @@ "license": "BSD-3-Clause" }, "node_modules/@imgly/background-removal": { - "resolved": "../../web", + "resolved": "../..", "link": true }, "node_modules/@istanbuljs/load-nyc-config": { diff --git a/packages/web-examples/create-react-app/package.json b/examples/create-react-app/package.json similarity index 91% rename from packages/web-examples/create-react-app/package.json rename to examples/create-react-app/package.json index 8951bc0..861c855 100644 --- a/packages/web-examples/create-react-app/package.json +++ b/examples/create-react-app/package.json @@ -1,9 +1,9 @@ { "name": "test", - "version": "1.1.0", + "version": "0.1.0", "private": true, "dependencies": { - "@imgly/background-removal": "file:../../web", + "@imgly/background-removal": "file:../../", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", diff --git a/packages/web-examples/create-react-app/public/favicon.ico b/examples/create-react-app/public/favicon.ico similarity index 100% rename from packages/web-examples/create-react-app/public/favicon.ico rename to examples/create-react-app/public/favicon.ico diff --git a/packages/web-examples/create-react-app/public/index.html b/examples/create-react-app/public/index.html similarity index 100% rename from packages/web-examples/create-react-app/public/index.html rename to examples/create-react-app/public/index.html diff --git a/packages/web-examples/create-react-app/public/logo192.png b/examples/create-react-app/public/logo192.png similarity index 100% rename from packages/web-examples/create-react-app/public/logo192.png rename to examples/create-react-app/public/logo192.png diff --git a/packages/web-examples/create-react-app/public/logo512.png b/examples/create-react-app/public/logo512.png similarity index 100% rename from packages/web-examples/create-react-app/public/logo512.png rename to examples/create-react-app/public/logo512.png diff --git a/packages/web-examples/create-react-app/public/manifest.json b/examples/create-react-app/public/manifest.json similarity index 100% rename from packages/web-examples/create-react-app/public/manifest.json rename to examples/create-react-app/public/manifest.json diff --git a/packages/web-examples/create-react-app/public/robots.txt b/examples/create-react-app/public/robots.txt similarity index 100% rename from packages/web-examples/create-react-app/public/robots.txt rename to examples/create-react-app/public/robots.txt diff --git a/packages/web-examples/create-react-app/public/static/js b/examples/create-react-app/public/static/js similarity index 100% rename from packages/web-examples/create-react-app/public/static/js rename to examples/create-react-app/public/static/js diff --git a/packages/web-examples/create-react-app/src/App.css b/examples/create-react-app/src/App.css similarity index 100% rename from packages/web-examples/create-react-app/src/App.css rename to examples/create-react-app/src/App.css diff --git a/packages/web-examples/create-react-app/src/App.js b/examples/create-react-app/src/App.js similarity index 95% rename from packages/web-examples/create-react-app/src/App.js rename to examples/create-react-app/src/App.js index 12bf2ea..3b44ad1 100644 --- a/packages/web-examples/create-react-app/src/App.js +++ b/examples/create-react-app/src/App.js @@ -50,8 +50,8 @@ function App() { resetTimer(); setImageUrl(randomImage); - const imageBlob = await removeBackground(2, { - publicPath: `${window.location.href}/static/js/`, + const imageBlob = await removeBackground(randomImage, { + publicPath: '/static/js/', // debug: true, progress: (key, current, total) => { const [type, subtype] = key.split(':'); diff --git a/packages/web-examples/create-react-app/src/index.css b/examples/create-react-app/src/index.css similarity index 100% rename from packages/web-examples/create-react-app/src/index.css rename to examples/create-react-app/src/index.css diff --git a/packages/web-examples/create-react-app/src/index.js b/examples/create-react-app/src/index.js similarity index 100% rename from packages/web-examples/create-react-app/src/index.js rename to examples/create-react-app/src/index.js diff --git a/packages/web-examples/create-react-app/src/logo.svg b/examples/create-react-app/src/logo.svg similarity index 100% rename from packages/web-examples/create-react-app/src/logo.svg rename to examples/create-react-app/src/logo.svg diff --git a/packages/web-examples/create-react-app/src/reportWebVitals.js b/examples/create-react-app/src/reportWebVitals.js similarity index 100% rename from packages/web-examples/create-react-app/src/reportWebVitals.js rename to examples/create-react-app/src/reportWebVitals.js diff --git a/packages/web-examples/create-react-app/src/setupProxy.js b/examples/create-react-app/src/setupProxy.js similarity index 100% rename from packages/web-examples/create-react-app/src/setupProxy.js rename to examples/create-react-app/src/setupProxy.js diff --git a/packages/web-examples/create-react-app/src/setupTests.js b/examples/create-react-app/src/setupTests.js similarity index 100% rename from packages/web-examples/create-react-app/src/setupTests.js rename to examples/create-react-app/src/setupTests.js diff --git a/packages/web-examples/vite-project/.gitignore b/examples/vite-project/.gitignore similarity index 100% rename from packages/web-examples/vite-project/.gitignore rename to examples/vite-project/.gitignore diff --git a/examples/vite-project/.vite/deps_temp_330b8fd7/package.json b/examples/vite-project/.vite/deps_temp_330b8fd7/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/examples/vite-project/.vite/deps_temp_330b8fd7/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/web-examples/vite-project/README.md b/examples/vite-project/README.md similarity index 100% rename from packages/web-examples/vite-project/README.md rename to examples/vite-project/README.md diff --git a/packages/web-examples/vite-project/index.html b/examples/vite-project/index.html similarity index 100% rename from packages/web-examples/vite-project/index.html rename to examples/vite-project/index.html diff --git a/packages/web-examples/vite-project/package-lock.json b/examples/vite-project/package-lock.json similarity index 95% rename from packages/web-examples/vite-project/package-lock.json rename to examples/vite-project/package-lock.json index 65ca34b..16c462f 100644 --- a/packages/web-examples/vite-project/package-lock.json +++ b/examples/vite-project/package-lock.json @@ -1,14 +1,14 @@ { "name": "vite-project", - "version": "1.1.0-alpha", + "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vite-project", - "version": "1.1.0-alpha", + "version": "0.0.0", "dependencies": { - "@imgly/background-removal": "file:../../web", + "@imgly/background-removal": "file:../..", "vue": "^3.2.47" }, "devDependencies": { @@ -19,57 +19,20 @@ } }, "../..": { - "name": "@imgly/background-removal", - "version": "1.0.6", + "version": "0.1.0-rc5", "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "lodash": "^4.17.21", - "onnxruntime-web": "^1.15.1", - "wasm-feature-detect": "^1.5.1", - "zod": "^3.21.4" - }, "devDependencies": { - "@parcel/packager-ts": "^2.9.3", - "@parcel/transformer-typescript-types": "^2.9.3", - "@types/lodash": "^4.14.195", - "@types/node": "^20.3.1", "assert": "^2.0.0", - "glob": "^10.3.3", - "parcel": "^2.9.3", - "process": "^0.11.10", - "ts-loader": "^9.4.3", - "tslib": "^2.5.3", - "typescript": "^5.1.3", - "util": "^0.12.5", - "webpack": "^5.85.1", - "webpack-cli": "^5.1.4" - } - }, - "../../web": { - "version": "1.1.0-alpha", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { "lodash": "^4.17.21", - "ndarray": "^1.0.19", - "onnxruntime-web": "^1.15.1", - "zod": "^3.21.4" - }, - "devDependencies": { - "@parcel/packager-ts": "^2.9.3", - "@parcel/resolver-default": "^2.9.3", - "@parcel/transformer-typescript-types": "^2.9.3", - "@types/lodash": "^4.14.195", - "@types/node": "^20.3.1", - "assert": "^2.0.0", - "glob": "^10.3.3", - "parcel": "^2.9.3", - "process": "^0.11.10", + "onnxruntime-web": "~1.15.0", "ts-loader": "^9.4.3", "tslib": "^2.5.3", "typescript": "^5.1.3", "util": "^0.12.5", + "wasm-feature-detect": "^1.5.1", "webpack": "^5.85.1", - "webpack-cli": "^5.1.4" + "webpack-cli": "^5.1.4", + "zod": "^3.21.4" } }, "node_modules/@babel/parser": { @@ -436,7 +399,7 @@ } }, "node_modules/@imgly/background-removal": { - "resolved": "../../web", + "resolved": "../..", "link": true }, "node_modules/@jridgewell/sourcemap-codec": { diff --git a/packages/web-examples/vite-project/package.json b/examples/vite-project/package.json similarity index 78% rename from packages/web-examples/vite-project/package.json rename to examples/vite-project/package.json index b8c9e3f..f89843c 100644 --- a/packages/web-examples/vite-project/package.json +++ b/examples/vite-project/package.json @@ -1,16 +1,15 @@ { "name": "vite-project", "private": true, - "version": "1.1.0", + "version": "0.0.0", "type": "module", "scripts": { - "start": "npm run dev", "dev": "vite", "build": "vue-tsc && vite build", "preview": "vite preview" }, "dependencies": { - "@imgly/background-removal": "file:../../web", + "@imgly/background-removal": "file:../..", "vue": "^3.2.47" }, "devDependencies": { diff --git a/packages/web-examples/vite-project/public/js b/examples/vite-project/public/js similarity index 100% rename from packages/web-examples/vite-project/public/js rename to examples/vite-project/public/js diff --git a/packages/web-examples/vite-project/public/vite.svg b/examples/vite-project/public/vite.svg similarity index 100% rename from packages/web-examples/vite-project/public/vite.svg rename to examples/vite-project/public/vite.svg diff --git a/packages/web-examples/vite-project/src/App.vue b/examples/vite-project/src/App.vue similarity index 100% rename from packages/web-examples/vite-project/src/App.vue rename to examples/vite-project/src/App.vue diff --git a/packages/web-examples/vite-project/src/assets/vue.svg b/examples/vite-project/src/assets/vue.svg similarity index 100% rename from packages/web-examples/vite-project/src/assets/vue.svg rename to examples/vite-project/src/assets/vue.svg diff --git a/packages/web-examples/vite-project/src/components/BGRemoval.vue b/examples/vite-project/src/components/BGRemoval.vue similarity index 100% rename from packages/web-examples/vite-project/src/components/BGRemoval.vue rename to examples/vite-project/src/components/BGRemoval.vue diff --git a/packages/web-examples/vite-project/src/main.ts b/examples/vite-project/src/main.ts similarity index 100% rename from packages/web-examples/vite-project/src/main.ts rename to examples/vite-project/src/main.ts diff --git a/packages/web-examples/vite-project/src/style.css b/examples/vite-project/src/style.css similarity index 100% rename from packages/web-examples/vite-project/src/style.css rename to examples/vite-project/src/style.css diff --git a/packages/web-examples/vite-project/src/vite-env.d.ts b/examples/vite-project/src/vite-env.d.ts similarity index 100% rename from packages/web-examples/vite-project/src/vite-env.d.ts rename to examples/vite-project/src/vite-env.d.ts diff --git a/packages/web-examples/vite-project/tsconfig.json b/examples/vite-project/tsconfig.json similarity index 100% rename from packages/web-examples/vite-project/tsconfig.json rename to examples/vite-project/tsconfig.json diff --git a/packages/web-examples/vite-project/tsconfig.node.json b/examples/vite-project/tsconfig.node.json similarity index 100% rename from packages/web-examples/vite-project/tsconfig.node.json rename to examples/vite-project/tsconfig.node.json diff --git a/packages/web-examples/vite-project/vite.config.ts b/examples/vite-project/vite.config.ts similarity index 100% rename from packages/web-examples/vite-project/vite.config.ts rename to examples/vite-project/vite.config.ts diff --git a/package-lock.json b/package-lock.json index 1c8314d..5ae33ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,120 +1,468 @@ { - "name": "background-removal-js", - "version": "1.1.0", + "name": "@imgly/background-removal", + "version": "1.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { - "version": "1.1.0", + "name": "@imgly/background-removal", + "version": "1.0.3", + "license": "SEE LICENSE IN LICENSE.md", "devDependencies": { - "glob": "^10.3.3", - "onchange": "^7.1.0" + "@types/lodash": "^4.14.195", + "@types/node": "^20.3.1", + "assert": "^2.0.0", + "lodash": "^4.17.21", + "onnxruntime-web": "^1.15.1", + "ts-loader": "^9.4.3", + "tslib": "^2.5.3", + "typescript": "^5.1.3", + "util": "^0.12.5", + "wasm-feature-detect": "^1.5.1", + "webpack": "^5.85.1", + "webpack-cli": "^5.1.4", + "zod": "^3.21.4" } }, - "node_modules/@blakeembrey/deque": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz", - "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.4.tgz", + "integrity": "sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==", + "dev": true + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "dev": true + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", "dev": true }, - "node_modules/@blakeembrey/template": { + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true + }, + "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@blakeembrey/template/-/template-1.1.0.tgz", - "integrity": "sha512-iZf+UWfL+DogJVpd/xMQyP6X6McYd6ArdYoPMiv/zlOTzeXXfQbYxBNJJBF6tThvsjLMbA8tLjkCdm9RWMFCCw==", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", "dev": true }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dev": true, "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "dev": true + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "dev": true + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "dev": true + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "dev": true + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.40.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", + "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, - "optional": true, - "engines": { - "node": ">=14" + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.195", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", + "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", + "dev": true + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=14.15.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, "engines": { - "node": ">=12" + "node": ">=14.15.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, "engines": { - "node": ">= 8" + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/braces": { @@ -129,31 +477,114 @@ "node": ">=8" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "dev": true, "funding": [ { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001509", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", + "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, "engines": { - "node": ">= 8.10.0" + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "engines": { + "node": ">=6" } }, "node_modules/color-convert": { @@ -174,299 +605,959 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.447", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", + "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatbuffers": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", + "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/guid-typescript": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", + "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/onnx-proto": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz", + "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "dependencies": { + "protobufjs": "^6.8.8" + } + }, + "node_modules/onnxruntime-common": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.15.1.tgz", + "integrity": "sha512-Y89eJ8QmaRsPZPWLaX7mfqhj63ny47rSkQe80hIo+lvBQdrdXYR9VO362xvZulk9DFkCnXmGidprvgJ07bKsIQ==", + "dev": true + }, + "node_modules/onnxruntime-web": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.15.1.tgz", + "integrity": "sha512-Ky4AXFLFyiGRu5KQJdDcbhdNcO0f2ND/8IPmTEwcKKIHpCwH6/Q9UoMpcoFz78lxGvnmmy+FFgA/Bs1HjdM6LA==", + "dev": true, + "dependencies": { + "flatbuffers": "^1.12.0", + "guid-typescript": "^1.0.9", + "long": "^4.0.0", + "onnx-proto": "^4.0.4", + "onnxruntime-common": "~1.15.1", + "platform": "^1.3.6" } }, - "node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" + "p-try": "^2.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "p-limit": "^2.2.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=6" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "find-up": "^4.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" + "node": ">=8" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", "dev": true }, - "node_modules/jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "node_modules/protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", "dev": true, + "hasInstallScript": true, "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" } }, - "node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { - "node": "14 || >=16.14" + "node": ">=6" } }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "safe-buffer": "^5.1.0" } }, - "node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 10.13.0" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/onchange": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/onchange/-/onchange-7.1.0.tgz", - "integrity": "sha512-ZJcqsPiWUAUpvmnJri5TPBooqJOPmC0ttN65juhN15Q8xA+Nbg3BaxBHXQ45EistKKlKElb0edmbPWnKSBkvMg==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "@blakeembrey/deque": "^1.0.5", - "@blakeembrey/template": "^1.0.0", - "arg": "^4.1.3", - "chokidar": "^3.3.1", - "cross-spawn": "^7.0.1", - "ignore": "^5.1.4", - "tree-kill": "^1.2.2" + "resolve-from": "^5.0.0" }, - "bin": { - "onchange": "dist/bin.js" + "engines": { + "node": ">=8" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, - "engines": { - "node": ">=8.6" + "dependencies": { + "lru-cache": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "kind-of": "^6.0.2" }, "engines": { - "node": ">=8.10.0" + "node": ">=8" } }, "node_modules/shebang-command": { @@ -490,112 +1581,108 @@ "node": ">=8" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/terser": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, - "engines": { - "node": ">=12" + "bin": { + "terser": "bin/terser" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "engines": { + "node": ">=10" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" }, "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, "node_modules/to-regex-range": { @@ -610,119 +1697,292 @@ "node": ">=8.0" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "node_modules/ts-loader": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", + "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, "bin": { - "tree-kill": "cli.js" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "isexe": "^2.0.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, "bin": { - "node-which": "bin/node-which" + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/wasm-feature-detect": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.5.1.tgz", + "integrity": "sha512-GHr23qmuehNXHY4902/hJ6EV5sUANIJC3R/yMfQ7hWDg3nfhlcJfnIL96R2ohpIwa62araN6aN4bLzzzq5GXkg==", + "dev": true + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">= 8" + "node": ">=10.13.0" } }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/webpack": { + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", "dev": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=12" + "node": ">=10.13.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=10" + "node": ">=14.15.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10.0.0" } }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/zod": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" } } } diff --git a/package.json b/package.json index 09309f6..c383783 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,60 @@ { - "version": "1.1.0", + "name": "@imgly/background-removal", + "version": "1.0.6", + "description": "Background Removal in the Browser", + "keywords": [ + "background-removal", + "client-side", + "data-privacy", + "image-segmentation", + "image-matting", + "onnx" + ], + "repository": { + "type": "git", + "url": "https://github.com/imgly/background-removal-js.git" + }, + "license": "SEE LICENSE IN LICENSE.md", + "author": { + "name": "IMG.LY GmbH", + "email": "support@img.ly", + "url": "https://img.ly" + }, + "bugs": { + "email": "support@img.ly" + }, + "main": "./dist/browser.js", + "module": "./dist/browser.mjs", + "browser": "./dist/browser.js", + "homepage": "https://img.ly/showcases/cesdk/web/background-removal/web", + "types": "./dist/browser.d.ts", + "files": [ + "LICENSE.md", + "README.md", + "dist/" + ], "scripts": { - "lint": "npx prettier --write --ignore-unknown .", - "version": "node ./scripts/package-version.mjs" + "start": "npm run clean; npm run watch", + "clean": "npx rimraf dist", + "test": "true", + "build": "npm run clean; npx webpack --mode production", + "watch": "npm run clean; npx webpack --watch --mode development", + "publish:public": "npm run build && npm publish --access public", + "lint": "npx prettier --write ." }, "devDependencies": { - "glob": "^10.3.3", - "onchange": "^7.1.0" + "@types/lodash": "^4.14.195", + "@types/node": "^20.3.1", + "assert": "^2.0.0", + "lodash": "^4.17.21", + "onnxruntime-web": "^1.15.1", + "ts-loader": "^9.4.3", + "tslib": "^2.5.3", + "typescript": "^5.1.3", + "util": "^0.12.5", + "wasm-feature-detect": "^1.5.1", + "webpack": "^5.85.1", + "webpack-cli": "^5.1.4", + "zod": "^3.21.4" } } diff --git a/packages/node-e2e/fixtures/images/img2img.sh b/packages/node-e2e/fixtures/images/img2img.sh deleted file mode 100644 index bf325cc..0000000 --- a/packages/node-e2e/fixtures/images/img2img.sh +++ /dev/null @@ -1,20 +0,0 @@ -filename="photo-1686002359940-6a51b0d64f68.jpeg" -basename="${filename%.*}" - -cp "$filename" "$filename".orig -magick "$filename" "$basename".png -magick "$filename" "$basename".webp -magick "$filename" "$basename".jpg -magick "$filename" "$basename".avif -magick "$filename" "$basename".heif - -# Raw RGB -magick "$filename" -depth 8 "$basename".rgb -magick "$filename" -depth 8 "$basename".cmyk - -# rgb to tensor - -magick "$filename" "$basename".pdf -magick "$filename" "$basename".psd - - diff --git a/packages/node-e2e/fixtures/images/photo-1686002359940-6a51b0d64f68.jpeg b/packages/node-e2e/fixtures/images/photo-1686002359940-6a51b0d64f68.jpeg deleted file mode 100644 index 2425539b8b9e40bccac8231045c5e825e4d67379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106355 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.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@imgly/background-removal-node": { - "resolved": "../node", - "link": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", - "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", - "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.2", - "@jest/reporters": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-resolve-dependencies": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "jest-watcher": "^29.6.2", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", - "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", - "dev": true, - "dependencies": { - "expect": "^29.6.2", - "jest-snapshot": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", - "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", - "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", - "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", - "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", - "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", - "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.2", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", - "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "20.4.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz", - "integrity": "sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/babel-jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", - "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.6.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001519", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", - "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.485", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.485.tgz", - "integrity": "sha512-1ndQ5IBNEnFirPwvyud69GHL+31FkE09gH/CJ6m3KCbkx3i0EVOrjwz4UNxRmN9H8OVHbC6vMRZGN1yCvjSs9w==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.6.2", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", - "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.2", - "@jest/types": "^29.6.1", - "import-local": "^3.0.2", - "jest-cli": "^29.6.2" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", - "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.2", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.2", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", - "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", - "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.2", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.2", - "jest-environment-node": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", - "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", - "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.2", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", - "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", - "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", - "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", - "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", - "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", - "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "jest-util": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", - "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", - "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", - "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.2", - "@jest/environment": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-leak-detector": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-resolve": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-util": "^29.6.2", - "jest-watcher": "^29.6.2", - "jest-worker": "^29.6.2", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", - "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/globals": "^29.6.2", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", - "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.2", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.2", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", - "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", - "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", - "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.2", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/packages/node-e2e/package.json b/packages/node-e2e/package.json deleted file mode 100644 index 087c3f5..0000000 --- a/packages/node-e2e/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "e2e", - "private": true, - "scripts": {}, - "devDependencies": { - "@imgly/background-removal-node": "file:../node", - "jest": "^29.6.2" - }, - "version": "1.1.0" -} diff --git a/packages/node-e2e/src/example.test.js b/packages/node-e2e/src/example.test.js deleted file mode 100644 index ddc3b01..0000000 --- a/packages/node-e2e/src/example.test.js +++ /dev/null @@ -1,9 +0,0 @@ -// const pkg = require('@imgly/background-removal-node'); -// const removeBackground = pkg.default; - -// Test case to ensure the system doesn't crash with valid inputs -// test('removeBackground should not crash with valid inputs', async () => { -// const image = 'https://images.unsplash.com/photo-1686002359940-6a51b0d64f68?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1024&q=80'; -// const result = await removeBackground(image, { debug: true }) -// await expect(result).resolves.toBeInstanceOf(Blob); -// }); diff --git a/packages/node-examples/files/photo-1686002359940-6a51b0d64f68.jpeg b/packages/node-examples/files/photo-1686002359940-6a51b0d64f68.jpeg deleted file mode 100644 index 2425539b8b9e40bccac8231045c5e825e4d67379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106355 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 -background removal js showcase - -

- -Remove backgrounds from images in NodeJs environment with ease and no additional costs or privacy concerns. -Explore an [interactive demo](https://img.ly/showcases/cesdk/web/background-removal/web?utm_source=github&utm_medium=project&utm_campaign=bg-removal). - -## News - -- **`September 12th, 2023`:** We released the code of Background Removal NodeJS. - -## Overview - -`@imgly/background-removal-node` is a powerful npm package that allows developers to seamlessly remove the background from images in NodeJs. With its unique features and capabilities, this package offers an innovative and cost-effective solution for background removal tasks without compromising data privacy. - -The key features of `@imgly/background-removal-node` are: - -- **Seamless Integration with IMG.LY's CE.SDK**: `@imgly/background-removal` provides seamless integration with [IMG.LY's CE.SDK](https://img.ly/products/creative-sdk?utm_source=github&utm_medium=project&utm_campaign=bg-removal), allowing developers to easily incorporate powerful in-browser image matting and background removal capabilities into their projects. - -The Neural Network ([ONNX model](https://onnx.ai/)) are hosted on [UNPKG](https://www.unpkg.com/), making it readily available for download to all users of the library. See the section Custom Asset Serving if you want to host data on your own servers. - -## Installation - -You can install `@imgly/background-removal-node` via npm or yarn. Use the following commands to install the package: - -### NPM - -```shell -npm install @imgly/background-removal-node -``` - -## Usage - -```typescript -import { removeBackground } from "@imgly/background-removal"; -// const {removeBackground} = require("@imgly/background-removal"); - -let image_src: ImageData | ArrayBuffer | Uint8Array | Blob | URL | string = ...; - -removeBackground(image_src).then((blob: Blob) => { - // The result is a blob encoded as PNG. It can be converted to an URL to be used as HTMLImage.src -}) -``` - -Note: On the first run the wasm and onnx model files are fetched. This might, depending on the bandwidth, take time. Therefore, the first run takes proportionally longer than each consecutive run. Also, all files are cached by the browser and an additional model cache. - -## Advanced Configuration - -The library does not need any configuration to get started. However, there are optional parameters that influence the behaviour and give more control over the library. - -```typescript -type Config = { - publicPath: string; // The public path used for model a - debug: bool; // enable or disable useful console.log outputs - proxyToWorker: bool; // Whether to proxy the calculations to a web worker. (Default true) - model: 'small' | 'medium'; // The model to use. (Default "medium") -}; -``` - -### Download Size vs Quality - -The onnx model is shipped in various sizes and needs. - -- small (~40 MB) is the smallest model and is in most cases working fine but sometimes shows some artifacts. It's a quantized model. -- medium (~80MB) is the default model. - -### Download Progress Monitoring - -On the first run, the necessary data will be fetched and stored in the browser cache. Since the download might take some time, you have the option to tap into the download progress. - -```typescript -let config: Config = { - progress: (key, current, total) => { - console.log(`Downloading ${key}: ${current} of ${total}`); - } -}; -``` - -### Custom Asset Serving - -Currently, the wasm and onnx neural networks are served via unpkg. For production use, we advise you to host them yourself. Therefore, copy all .wasm and .onnx files to your public path `$PUBLIC_PATH` and reconfigure the library. - -```shell -cp node_modules/@imgly/background-removal-node/dist/*.* $PUBLIC_PATH -``` - -```typescript -import { removeBackground, Config} from "@imgly/background-removal" - -const public_path = "file:/PATH_TO_ASSETS" ; // the path assets are served from - -let config: Config = { - publicPath: public_path, // path to the wasm files -}; - -let image_src: ImageData | ArrayBuffer | Uint8Array | Blob | URL | string = ...; - -removeBackground(image_src, config).then((blob: Blob) => { - // result is a blob encoded as PNG. -}) -``` - -### Debug Outputs - -Enable debug outputs and logging to the console - -```typescript -let config: Config = { - debug: true -}; -``` - -### Cross-Origin Resource Sharing (CORS) - -If you are running into CORS issues you might want to pass additional parameters to the fetch function via - -```typescript -let config: Config = { - fetchArgs: { - mode: 'no-cors' - } -}; -``` - -`fetchArgs` are passed as second parameters to the fetch function as described in [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch). - -## Who is it for? - -`@imgly/background-removal-node` is ideal for developers and projects that require efficient and cost-effective background removal directly in the NodeJs. It caters to a wide range of use cases, including but not limited to: - -- _E-commerce applications_ that need to remove backgrounds from product images in real time. - -- _Image editing applications_ that require background removal capabilities for enhancing user experience. - -- _Web-based graphic design tools_ that aim to simplify the creative process with in-browser background removal. - -Whether you are a professional developer or a hobbyist, `@imgly/background-removal-node` empowers you to deliver impressive applications and services with ease. - -## License - -The software is free for use under the GPL License. Please contact [support@img.ly](mailto:support@img.ly?subject=Background-Removal-Node%20License) for questions about other licensing options. - -## Authors & Contributors - -This library is made by IMG.LY shipping the world's premier SDKs for building creative applications. -Start your trial of the [CreativeEditor SDK](https://img.ly/products/creative-sdk?utm_source=github&utm_medium=project&utm_campaign=bg-removal-node), [PhotoEditor SDK](https://img.ly/products/photo-sdk?utm_source=github&utm_medium=project&utm_campaign=bg-removal-node) & [VideoEditor SDK](https://img.ly/products/video-sdk?utm_source=github&utm_medium=project&utm_campaign=bg-removal-node). diff --git a/packages/node/TODO.md b/packages/node/TODO.md deleted file mode 100644 index 59910ec..0000000 --- a/packages/node/TODO.md +++ /dev/null @@ -1,21 +0,0 @@ -- [ ] Provide typescript bindings -- [x] Provide access to filesystem for nodejs version -- [ ] Update build script to external dependencies from `package.json` -- [ ] use logger callback instead of `console.log` - ``` - logger: (level, message: string, args...) => void - ``` -- [ ] use resolver callback instead of publicPath as such we can allow various - ``` - resolve: (path: string) => Response - ``` -- [ ] use decode callback to allow different types of image decoders - ``` - decode: (buffer: Uint8Array, mimetype: string) => Uint8Array - ``` -- [ ] use encode callback to allow differnt types of image encoders - ``` - encode: (buffer: Uint8Array, mimetype: string) => Uint8Array - ``` - -- [ ] use zod to check each api endpoint and not just the config. This will allow checking the input and the output diff --git a/packages/node/package-lock.json b/packages/node/package-lock.json deleted file mode 100644 index 0601825..0000000 --- a/packages/node/package-lock.json +++ /dev/null @@ -1,3457 +0,0 @@ -{ - "name": "@imgly/background-removal-node", - "version": "1.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@imgly/background-removal-node", - "version": "1.1.0", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "onnxruntime-node": "^1.15.1", - "sharp": "^0.32.4" - }, - "devDependencies": { - "@types/lodash": "^4.14.195", - "@types/node": "^20.3.1", - "assert": "^2.0.0", - "esbuild": "^0.18.18", - "lodash": "^4.17.21", - "ndarray": "^1.0.19", - "npm-dts": "^1.3.12", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "stream-browserify": "^3.0.0", - "ts-loader": "^9.4.3", - "tslib": "^2.5.3", - "typescript": "^5.1.6", - "util": "^0.12.5", - "webpack": "^5.85.1", - "webpack-cli": "^5.1.4", - "zod": "^3.21.4" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dev": true, - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.18.tgz", - "integrity": "sha512-oBymf7ZwplAawSxmiSlBCf+FMcY0f4bs5QP2jn43JKUf0M9DnrUTjqa5RvFPl1elw+sMfcpfBRPK+rb+E1q7zg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.18.tgz", - "integrity": "sha512-dkAPYzRHq3dNXIzOyAknYOzsx8o3KWaNiuu56B2rP9IFPmFWMS58WQcTlUQi6iloku8ZyHHMluCe5sTWhKq/Yw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.18.tgz", - "integrity": "sha512-r7/pVcrUQMYkjvtE/1/n6BxhWM+/9tvLxDG1ev1ce4z3YsqoxMK9bbOM6bFcj0BowMeGQvOZWcBV182lFFKmrw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.18.tgz", - "integrity": "sha512-MSe2iV9MAH3wfP0g+vzN9bp36rtPPuCSk+bT5E2vv/d8krvW5uB/Pi/Q5+txUZuxsG3GcO8dhygjnFq0wJU9hQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.18.tgz", - "integrity": "sha512-ARFYISOWkaifjcr48YtO70gcDNeOf1H2RnmOj6ip3xHIj66f3dAbhcd5Nph5np6oHI7DhHIcr9MWO18RvUL1bw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.18.tgz", - "integrity": "sha512-BHnXmexzEWRU2ZySJosU0Ts0NRnJnNrMB6t4EiIaOSel73I8iLsNiTPLH0rJulAh19cYZutsB5XHK6N8fi5eMg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.18.tgz", - "integrity": "sha512-n823w35wm0ZOobbuE//0sJjuz1Qj619+AwjgOcAJMN2pomZhH9BONCtn+KlfrmM/NWZ+27yB/eGVFzUIWLeh3w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.18.tgz", - "integrity": "sha512-Kck3jxPLQU4VeAGwe8Q4NU+IWIx+suULYOFUI9T0C2J1+UQlOHJ08ITN+MaJJ+2youzJOmKmcphH/t3SJxQ1Tw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.18.tgz", - "integrity": "sha512-zANxnwF0sCinDcAqoMohGoWBK9QaFJ65Vgh0ZE+RXtURaMwx+RfmfLElqtnn7X8OYNckMoIXSg7u+tZ3tqTlrA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.18.tgz", - "integrity": "sha512-+VHz2sIRlY5u8IlaLJpdf5TL2kM76yx186pW7bpTB+vLWpzcFQVP04L842ZB2Ty13A1VXUvy3DbU1jV65P2skg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.18.tgz", - "integrity": "sha512-fXPEPdeGBvguo/1+Na8OIWz3667BN1cwbGtTEZWTd0qdyTsk5gGf9jVX8MblElbDb/Cpw6y5JiaQuL96YmvBwQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.18.tgz", - "integrity": "sha512-dLvRB87pIBIRnEIC32LIcgwK1JzlIuADIRjLKdUIpxauKwMuS/xMpN+cFl+0nN4RHNYOZ57DmXFFmQAcdlFOmw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.18.tgz", - "integrity": "sha512-fRChqIJZ7hLkXSKfBLYgsX9Ssb5OGCjk3dzCETF5QSS1qjTgayLv0ALUdJDB9QOh/nbWwp+qfLZU6md4XcjL7w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.18.tgz", - "integrity": "sha512-ALK/BT3u7Hoa/vHjow6W6+MKF0ohYcVcVA1EpskI4bkBPVuDLrUDqt2YFifg5UcZc8qup0CwQqWmFUd6VMNgaA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.18.tgz", - "integrity": "sha512-crT7jtOXd9iirY65B+mJQ6W0HWdNy8dtkZqKGWNcBnunpLcTCfne5y5bKic9bhyYzKpQEsO+C/VBPD8iF0RhRw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.18.tgz", - "integrity": "sha512-/NSgghjBOW9ELqjXDYxOCCIsvQUZpvua1/6NdnA9Vnrp9UzEydyDdFXljUjMMS9p5KxMzbMO9frjHYGVHBfCHg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.18.tgz", - "integrity": "sha512-8Otf05Vx5sZjLLDulgr5QS5lsWXMplKZEyHMArH9/S4olLlhzmdhQBPhzhJTNwaL2FJNdWcUPNGAcoD5zDTfUA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.18.tgz", - "integrity": "sha512-tFiFF4kT5L5qhVrWJUNxEXWvvX8nK/UX9ZrB7apuTwY3f6+Xy4aFMBPwAVrBYtBd5MOUuyOVHK6HBZCAHkwUlw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.18.tgz", - "integrity": "sha512-MPogVV8Bzh8os4OM+YDGGsSzCzmNRiyKGtHoJyZLtI4BMmd6EcxmGlcEGK1uM46h1BiOyi7Z7teUtzzQhvkC+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.18.tgz", - "integrity": "sha512-YKD6LF/XXY9REu+ZL5RAsusiG48n602qxsMVh/E8FFD9hp4OyTQaL9fpE1ovxwQXqFio+tT0ITUGjDSSSPN13w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.18.tgz", - "integrity": "sha512-NjSBmBsyZBTsZB6ga6rA6PfG/RHnwruUz/9YEVXcm4STGauFWvhYhOMhEyw1yU5NVgYYm8CH5AltCm77TS21/Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.18.tgz", - "integrity": "sha512-eTSg/gC3p3tdjj4roDhe5xu94l1s2jMazP8u2FsYO8SEKvSpPOO71EucprDn/IuErDPvTFUhV9lTw5z5WJCRKQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.4.tgz", - "integrity": "sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==", - "dev": true - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@types/eslint": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", - "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.195", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", - "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", - "dev": true - }, - "node_modules/@types/triple-beam": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", - "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/args": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", - "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", - "dev": true, - "dependencies": { - "camelcase": "5.0.0", - "chalk": "2.4.2", - "leven": "2.1.0", - "mri": "1.1.4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/args/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/args/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/args/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dev": true, - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/colorspace/node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/colorspace/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/colorspace/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", - "dev": true - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.18.tgz", - "integrity": "sha512-UckDPWvdVJLNT0npk5AMTpVwGRQhS76rWFLmHwEtgNvWlR9sgVV1eyc/oeBtM86q9s8ABBLMmm0CwNxhVemOiw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.18", - "@esbuild/android-arm64": "0.18.18", - "@esbuild/android-x64": "0.18.18", - "@esbuild/darwin-arm64": "0.18.18", - "@esbuild/darwin-x64": "0.18.18", - "@esbuild/freebsd-arm64": "0.18.18", - "@esbuild/freebsd-x64": "0.18.18", - "@esbuild/linux-arm": "0.18.18", - "@esbuild/linux-arm64": "0.18.18", - "@esbuild/linux-ia32": "0.18.18", - "@esbuild/linux-loong64": "0.18.18", - "@esbuild/linux-mips64el": "0.18.18", - "@esbuild/linux-ppc64": "0.18.18", - "@esbuild/linux-riscv64": "0.18.18", - "@esbuild/linux-s390x": "0.18.18", - "@esbuild/linux-x64": "0.18.18", - "@esbuild/netbsd-x64": "0.18.18", - "@esbuild/openbsd-x64": "0.18.18", - "@esbuild/sunos-x64": "0.18.18", - "@esbuild/win32-arm64": "0.18.18", - "@esbuild/win32-ia32": "0.18.18", - "@esbuild/win32-x64": "0.18.18" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-fifo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz", - "integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-node-modules": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", - "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", - "dev": true, - "dependencies": { - "findup-sync": "^4.0.0", - "merge": "^2.1.1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/iota-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz", - "integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==", - "dev": true - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true - }, - "node_modules/leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/logform": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", - "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", - "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/mri": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", - "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/ndarray": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz", - "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==", - "dev": true, - "dependencies": { - "iota-array": "^1.0.0", - "is-buffer": "^1.0.2" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-abi": { - "version": "3.45.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", - "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/npm-dts": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/npm-dts/-/npm-dts-1.3.12.tgz", - "integrity": "sha512-3pFsz7Gf1u0cyQE2czXt8Y0hKe6kczHxlFbVrr74xWweNUit2tCDbOcL4n6KaWxyimGNJ4gzOa8KkShFA8hrdA==", - "dev": true, - "dependencies": { - "args": "5.0.3", - "find-node-modules": "2.1.3", - "mkdirp": "1.0.4", - "npm-run": "5.0.1", - "rimraf": "3.0.2", - "tmp": "0.2.1", - "winston": "3.7.2" - }, - "bin": { - "npm-dts": "cli.js" - } - }, - "node_modules/npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "dependencies": { - "which": "^1.2.10" - }, - "bin": { - "npm-path": "bin/npm-path" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm-path/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/npm-run": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npm-run/-/npm-run-5.0.1.tgz", - "integrity": "sha512-s7FyRpHUgaJfzkRgOnevX8rAWWsv1dofY1XS7hliWCF6LSQh+HtDfBvpigPS1krLvXw+Fi17CYMY8mUtblnyWw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0", - "npm-path": "^2.0.4", - "npm-which": "^3.0.1", - "serializerr": "^1.0.3" - }, - "bin": { - "npm-run": "bin/npm-run.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A==", - "dev": true, - "dependencies": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - }, - "bin": { - "npm-which": "bin/npm-which.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/npm-which/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dev": true, - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onnxruntime-common": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.15.1.tgz", - "integrity": "sha512-Y89eJ8QmaRsPZPWLaX7mfqhj63ny47rSkQe80hIo+lvBQdrdXYR9VO362xvZulk9DFkCnXmGidprvgJ07bKsIQ==" - }, - "node_modules/onnxruntime-node": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.15.1.tgz", - "integrity": "sha512-wzhVELulmrvNoMZw0/HfV+9iwgHX+kPS82nxodZ37WCXmbeo1jp3thamTsNg8MGhxvv4GmEzRum5mo40oqIsqw==", - "os": [ - "win32", - "darwin", - "linux" - ], - "dependencies": { - "onnxruntime-common": "~1.15.1" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prebuild-install/node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/protochain": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz", - "integrity": "sha512-4hDwFSX50C4NE6f/6zg8EPr/WLPTkFPUtG0ulWZu6bwzV2hmb50fpdQLr0HiKBAUehapaFpItzWoCLjraLJhUA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serializerr": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz", - "integrity": "sha512-yXUlHj0fjbndhACj2XWtIH5eJv7b/uadyl7CJA8b9wL5mIKm+g0/sL7rDzEmjC+k5y8ggcaP8i049F4FxA0U9Q==", - "dev": true, - "dependencies": { - "protochain": "^1.0.5" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sharp": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.4.tgz", - "integrity": "sha512-exUnZewqVZC6UXqXuQ8fyJJv0M968feBi04jb9GcUHrWtkRoAKnbJt8IfwT4NJs7FskArbJ14JAFGVuooszoGg==", - "hasInstallScript": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sharp/node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dev": true, - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/streamx": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.0.tgz", - "integrity": "sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==", - "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, - "node_modules/tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/terser": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "dev": true, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/ts-loader": { - "version": "9.4.4", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", - "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.88.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", - "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/winston": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.7.2.tgz", - "integrity": "sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng==", - "dev": true, - "dependencies": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "dev": true, - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/packages/node/package.json b/packages/node/package.json deleted file mode 100644 index 703dc6b..0000000 --- a/packages/node/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "@imgly/background-removal-node", - "version": "1.1.0", - "description": "Background Removal in NodeJS", - "keywords": [ - "background-removal", - "nodejs", - "image-segmentation", - "image-matting", - "onnx" - ], - "repository": { - "type": "git", - "url": "https://github.com/imgly/background-removal-js.git" - }, - "license": "SEE LICENSE IN LICENSE.md", - "author": { - "name": "IMG.LY GmbH", - "email": "support@img.ly", - "url": "https://img.ly" - }, - "bugs": { - "email": "support@img.ly" - }, - "homepage": "https://img.ly/showcases/cesdk/web/background-removal/node", - "source": "./src/index.ts", - "main": "./dist/index.cjs", - "module": "./dist/index.mjs", - "types": "./dist/types.d.ts", - "files": [ - "LICENSE.md", - "README.md", - "dist/", - "bin/" - ], - "scripts": { - "start": "npm run watch", - "clean": "npx rimraf dist", - "test": "true", - "resources": "node ../../scripts/package-resources.mjs", - "build": "npm run clean && npm run resources && node scripts/build.mjs", - "watch": "npm run clean && npm run resources && node scripts/watch.mjs", - "publish": "npm run build && npm publish --access public", - "lint": "npx prettier --write ." - }, - "dependencies": { - "onnxruntime-node": "^1.15.1", - "sharp": "^0.32.4" - }, - "devDependencies": { - "@types/lodash": "^4.14.195", - "@types/node": "^20.3.1", - "lodash": "^4.17.21", - "ndarray": "^1.0.19", - "zod": "^3.21.4", - "assert": "^2.0.0", - "esbuild": "^0.18.18", - "npm-dts": "^1.3.12", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "stream-browserify": "^3.0.0", - "ts-loader": "^9.4.3", - "tslib": "^2.5.3", - "typescript": "^5.1.6", - "util": "^0.12.5", - "webpack": "^5.85.1", - "webpack-cli": "^5.1.4" - } -} diff --git a/packages/node/scripts/build.mjs b/packages/node/scripts/build.mjs deleted file mode 100644 index 93ec932..0000000 --- a/packages/node/scripts/build.mjs +++ /dev/null @@ -1,32 +0,0 @@ -export { configs }; -import * as esbuild from 'esbuild'; -import dts from 'npm-dts'; - -new dts.Generator({ - entry: 'src/index.ts', - output: 'dist/index.d.ts' -}).generate(); - -const configs = [ - { - entryPoints: ['src/index.ts'], - bundle: true, - sourcemap: true, - platform: 'node', - format: 'cjs', - external: ['sharp', 'onnxruntime-node'], - outfile: 'dist/index.cjs' - }, - - { - entryPoints: ['src/index.ts'], - bundle: true, - sourcemap: true, - external: ['sharp', 'onnxruntime-node'], - platform: 'node', - format: 'esm', - outfile: 'dist/index.mjs' - } -]; - -await configs.map(async (config) => await esbuild.build(config)); diff --git a/packages/node/scripts/watch.mjs b/packages/node/scripts/watch.mjs deleted file mode 100644 index 17a18db..0000000 --- a/packages/node/scripts/watch.mjs +++ /dev/null @@ -1,15 +0,0 @@ -import * as esbuild from 'esbuild'; -import { configs } from './build.mjs'; -import dts from 'npm-dts'; - -new dts.Generator({ - entry: 'src/index.ts', - output: 'dist/index.d.ts' -}).generate(); - -const contexts = await Promise.all( - configs.map((config) => esbuild.context(config)) -); - -await Promise.any(contexts.map((ctx) => ctx.watch())); -console.log('watching...'); diff --git a/packages/node/src/codecs.ts b/packages/node/src/codecs.ts deleted file mode 100644 index 1a226b8..0000000 --- a/packages/node/src/codecs.ts +++ /dev/null @@ -1,40 +0,0 @@ -export { imageEncode, imageDecode }; - -import sharp, { FormatEnum } from 'sharp'; -import ndarray, { NdArray } from 'ndarray'; - -async function imageDecode(blob: Blob): Promise> { - const buffer = await blob.arrayBuffer(); - const decoded = sharp(buffer); - - let { width, height, channels } = await decoded.metadata(); - - if (channels === 3) { - decoded.ensureAlpha(); - channels = 4; - } - - const outBuffer = await decoded.raw().toBuffer(); - const array = ndarray(outBuffer, [height!, width!, channels!]); - await sharp(array.data, { - raw: { width: width!, height: height!, channels: channels! } - }); - return array; -} - -async function imageEncode( - imageData: NdArray, - quality: number = 0.8, - type: string = 'image/png' -): Promise { - const [height, width, channels] = imageData.shape; - if (channels !== 4) throw new Error('Only 4-channel images are supported'); - const image = sharp(imageData.data, { raw: { height, width, channels } }); - type Keys = keyof FormatEnum; - const format = type.split('/').pop()! as Keys; - - const buffer = await image - .toFormat(format, { quality: quality * 100 }) - .toBuffer(); - return new Blob([buffer], { type: type }); -} diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts deleted file mode 100644 index 018421d..0000000 --- a/packages/node/src/index.ts +++ /dev/null @@ -1,58 +0,0 @@ -// Exports -export default removeBackground; -export type { ImageSource, Config }; -export { removeBackground }; - -// Imports -import { initInference, runInference } from './inference'; -import { Config } from './schema'; -import * as utils from './utils'; -import { NdArray } from 'ndarray'; -import * as codecs from './codecs'; -import { memoize } from 'lodash'; -import { ensureAbsoluteURI } from './url'; -import { loadFromURI } from './resource'; - -type ImageSource = ArrayBuffer | Uint8Array | Blob | URL | string; - -const init = memoize(initInference, (config) => JSON.stringify(config)); - -async function removeBackground( - image: ImageSource, - configuration?: Config -): Promise { - const { config, session } = await init(configuration); - - if (config.debug) { - config.progress = - config.progress ?? - ((key, current, total) => { - console.debug(`Downloading ${key}: ${current} of ${total}`); - }); - } - - image = await imageSourceToImageData(image, config); - - const outImageTensor = await runInference(image, config, session); - return await utils.imageEncode(outImageTensor); -} - -async function imageSourceToImageData( - image: ImageSource, - config: Config -): Promise> { - if (typeof image === 'string') { - image = ensureAbsoluteURI(image, `file://${process.cwd()}/`); - } - if (image instanceof URL) { - image = await (await loadFromURI(image)).blob() - } - if (image instanceof ArrayBuffer || ArrayBuffer.isView(image)) { - image = new Blob([image]); - } - if (image instanceof Blob) { - image = await codecs.imageDecode(image); - } - - return image as NdArray; -} diff --git a/packages/node/src/inference.ts b/packages/node/src/inference.ts deleted file mode 100644 index 2a9c28c..0000000 --- a/packages/node/src/inference.ts +++ /dev/null @@ -1,57 +0,0 @@ -export { initInference, runInference }; - -import { tensorResize, tensorHWCtoBCHW } from './utils'; -import { createOnnxSession, runOnnxSession } from './onnx'; -import { calculateProportionalSize } from './utils'; -import { Config } from './schema'; -import ndarray, { NdArray } from 'ndarray'; -import { loadAsBlob } from './resource'; - -async function initInference(config: Config) { - - if (config.debug) console.debug('Loading model...'); - const model = config.model; - const blob = await loadAsBlob(`/models/${model}`, config); - const arrayBuffer = await blob.arrayBuffer(); - const session = await createOnnxSession(arrayBuffer, config); - return { config, session }; -} - -async function runInference( - imageTensor: NdArray, - config: Config, - session: any -): Promise> { - if (config.progress) config.progress('compute:inference', 0, 1); - const resolution = 1024; - const [srcHeight, srcWidth, srcChannels] = imageTensor.shape; - let tensorImage = await tensorResize(imageTensor, resolution, resolution); - const inputTensor = tensorHWCtoBCHW(tensorImage); - const predictionsDict = await runOnnxSession( - session, - [['input', inputTensor]], - ['output'] - ); - - const stride = resolution * resolution; - - for (let i = 0; i < 4 * stride; i += 4) { - let idx = i / 4; - let alpha = predictionsDict[0].data[idx]; - tensorImage.data[i + 3] = alpha * 255; - } - - const [width, height] = calculateProportionalSize( - srcWidth, - srcHeight, - resolution, - resolution - ); - - const dst_width = Math.min(width, srcWidth); - const dst_height = Math.min(height, srcHeight); - - tensorImage = await tensorResize(tensorImage, dst_width, dst_height); - if (config.progress) config.progress('compute:inference', 1, 1); - return ndarray(tensorImage.data, [dst_height, dst_width, 4]); -} diff --git a/packages/node/src/onnx.ts b/packages/node/src/onnx.ts deleted file mode 100644 index 291075a..0000000 --- a/packages/node/src/onnx.ts +++ /dev/null @@ -1,55 +0,0 @@ -export { createOnnxSession, runOnnxSession }; - -import ndarray, { NdArray } from 'ndarray'; -import * as ort from 'onnxruntime-node'; -// import * as ort from 'onnxruntime-node-gpu'; -import { Config } from './schema'; - -async function createOnnxSession(model: any, config: Config) { - if (config.debug) { - ort.env.debug = true; - ort.env.logLevel = 'verbose'; - console.debug('ort.env.wasm:', ort.env.wasm); - } - - const ort_config: ort.InferenceSession.SessionOptions = { - graphOptimizationLevel: 'all', - executionMode: 'parallel' - }; - - const session = await ort.InferenceSession.create(model, ort_config).catch( - (e: any) => { - throw new Error( - `Failed to create session: ${e}. Please check if the publicPath is set correctly.` - ); - } - ); - return session; -} - -async function runOnnxSession( - session: any, - inputs: [string, NdArray][], - outputs: [string] -) { - const feeds: Record = {}; - for (const [key, tensor] of inputs) { - feeds[key] = new ort.Tensor( - 'float32', - new Float32Array(tensor.data), - tensor.shape - ); - } - const outputData = await session.run(feeds, {}); - const outputKVPairs: NdArray[] = []; - - for (const key of outputs) { - const output: ort.Tensor = outputData[key]; - const shape: Number[] = output.dims as number[]; - const data: Float32Array = output.data as Float32Array; - const tensor = ndarray(data, shape); - outputKVPairs.push(tensor); - } - - return outputKVPairs; -} diff --git a/packages/node/src/platform.ts b/packages/node/src/platform.ts deleted file mode 100644 index 08ef839..0000000 --- a/packages/node/src/platform.ts +++ /dev/null @@ -1,32 +0,0 @@ -export { platform, Platform }; - -enum Platform { - Unknown, - Node, - Browser, - Deno, - Electron, - ReactNative -} - -const isBrowser = typeof window !== 'undefined'; -const isNode = - typeof process !== 'undefined' && process.versions && process.versions.node; -const isDeno = typeof Deno !== 'undefined'; -const isElectron = - typeof window !== 'undefined' && - window.process && - window.process.type === 'renderer'; -const isReactNative = - typeof navigator !== 'undefined' && navigator.product === 'ReactNative'; -const isBun = typeof window !== 'undefined' && window.__BUN__; - -const platform = (() => { - if (isBrowser) return Platform.Browser; - if (isNode) return Platform.Node; - if (isDeno) return Platform.Deno; - if (isElectron) return Platform.Electron; - if (isReactNative) return Platform.ReactNative; - if (isBun) return Platform.Bun; - return Platform.Unknown; -})(); diff --git a/packages/node/src/resource.ts b/packages/node/src/resource.ts deleted file mode 100644 index 9a29dfd..0000000 --- a/packages/node/src/resource.ts +++ /dev/null @@ -1,97 +0,0 @@ -export { loadAsBlob, loadAsUrl, loadFromURI }; - -import { Config } from './schema'; -import { ensureAbsoluteURI } from './url'; -import { readFile } from 'fs/promises'; - -async function loadAsUrl(url: string, config: Config) { - return URL.createObjectURL(await loadAsBlob(url, config)); -} - -async function loadFromURI( - uri: URL, - config = { headers: { 'Content-Type': 'application/octet-stream' } } -) { - switch (uri.protocol) { - case 'http:': - return await fetch(uri); - case 'https:': - return await fetch(uri); - case 'file:': { - const buffer = await readFile(uri.pathname); - return new Response(buffer, { status: 200, headers: config.headers }); - } - default: - throw new Error(`Unsupported protocol: ${uri.protocol}`); - } -} -async function loadAsBlob(key: string, config: Config) { - // load resource metadata - - const resourceUri = ensureAbsoluteURI('./resources.json', config.publicPath); - - const resourceResponse = await loadFromURI(resourceUri); - if (!resourceResponse.ok) { - throw new Error( - `Resource metadata not found. Ensure that the config.publicPath is configured correctly.` - ); - } - const resourceMap = await resourceResponse.json(); - const entry = resourceMap[key]; - - if (!entry) { - throw new Error( - `Resource ${key} not found. Ensure that the config.publicPath is configured correctly.` - ); - } - - let paths = Object.keys(entry.chunks); - - const allChunks = await Promise.all( - paths.map(async (path) => { - const url = ensureAbsoluteURI(path, config.publicPath); - const response = await loadFromURI(url, { - headers: { 'Content-Type': entry.mime } - }); - - const chunks = config.progress - ? await fetchChunked(response, entry, config, key) - : [await response.blob()]; - return chunks; - }) - ); - - const chunks = allChunks.flat(); - const data = new Blob(chunks, { type: entry.mime }); - if (data.size !== entry.size) { - throw new Error( - `Failed to fetch ${key} with size ${entry.size} but got ${data.size}` - ); - } - return data; -} - -async function fetchChunked( - response: Response, - entry: any, - config: Config, - key: string -) { - const reader = response.body!.getReader(); - // let contentLength = Number(response.headers.get('Content-Length')); - const contentLength = entry.size ?? 0; - let receivedLength = 0; - - let chunks: Uint8Array[] = []; - while (true) { - const { done, value } = await reader.read(); - if (done) { - break; - } - chunks.push(value); - receivedLength += value.length; - if (config.progress) - config.progress(`fetch:${key}`, receivedLength, contentLength); - } - return chunks; -} diff --git a/packages/node/src/url.ts b/packages/node/src/url.ts deleted file mode 100644 index 450ebd8..0000000 --- a/packages/node/src/url.ts +++ /dev/null @@ -1,14 +0,0 @@ -export { ensureAbsoluteURI }; - -function isAbsoluteURI(url: string): boolean { - const regExp = new RegExp('^(?:[a-z+]+:)?//', 'i'); - return regExp.test(url); // true - regular http absolute URL -} - -function ensureAbsoluteURI(url: string, baseUrl: string): URL { - if (isAbsoluteURI(url)) { - return new URL(url); - } else { - return new URL(url, baseUrl); - } -} diff --git a/packages/node/src/utils.ts b/packages/node/src/utils.ts deleted file mode 100644 index 2e8550a..0000000 --- a/packages/node/src/utils.ts +++ /dev/null @@ -1,123 +0,0 @@ -export { - imageDecode, - imageEncode, - tensorResize, - tensorHWCtoBCHW, - imageBitmapToImageData, - calculateProportionalSize -}; - -import ndarray, { NdArray } from 'ndarray'; -import { imageDecode, imageEncode } from './codecs'; - -function imageBitmapToImageData(imageBitmap: ImageBitmap): ImageData { - var canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height); - var ctx = canvas.getContext('2d')!; - ctx.drawImage(imageBitmap, 0, 0); - return ctx.getImageData(0, 0, canvas.width, canvas.height); -} - -async function tensorResize( - imageTensor: NdArray, - newWidth: number, - newHeight: number -): Promise> { - const [srcHeight, srcWidth, srcChannels] = imageTensor.shape; - // Calculate the scaling factors - const scaleX = srcWidth / newWidth; - const scaleY = srcHeight / newHeight; - - // Create a new NdArray to store the resized image - const resizedImageData = ndarray( - new Uint8Array(srcChannels * newWidth * newHeight), - [newHeight, newWidth, srcChannels] - ); - // Perform interpolation to fill the resized NdArray - for (let y = 0; y < newHeight; y++) { - for (let x = 0; x < newWidth; x++) { - for (let c = 0; c < srcChannels; c++) { - const srcX = x * scaleX; - const srcY = y * scaleY; - const x1 = Math.floor(srcX); - const x2 = Math.ceil(srcX); - const y1 = Math.floor(srcY); - const y2 = Math.ceil(srcY); - - const dx = srcX - x1; - const dy = srcY - y1; - - const p1 = imageTensor.get(y1, x1, c); - const p2 = imageTensor.get(y1, x2, c); - const p3 = imageTensor.get(y2, x1, c); - const p4 = imageTensor.get(y2, x2, c); - - // Perform bilinear interpolation - const interpolatedValue = - (1 - dx) * (1 - dy) * p1 + - dx * (1 - dy) * p2 + - (1 - dx) * dy * p3 + - dx * dy * p4; - - resizedImageData.set(y, x, c, Math.round(interpolatedValue)); - } - } - } - - return resizedImageData; -} - -// async function tensorResize( -// imageTensor: NdArray, -// newWidth: number, -// newHeight: number -// ): Promise> { -// const [srcHeight, srcWidth, srcChannels] = imageTensor.shape; -// const imageData = new ImageData(imageTensor.data, srcWidth, srcHeight); -// const bitmap = await createImageBitmap(imageData, { -// resizeWidth: newWidth, -// resizeHeight: newHeight, -// resizeQuality: 'high', -// premultiplyAlpha: 'premultiply' -// }); -// const outImageData = imageBitmapToImageData(bitmap); -// return ndarray(outImageData.data, [ -// outImageData.height, -// outImageData.width, -// 4 -// ]); -// } - -function tensorHWCtoBCHW( - imageTensor: NdArray, - mean: number[] = [128, 128, 128], - std: number[] = [256, 256, 256] -): NdArray { - var imageBufferData = imageTensor.data; - const [srcHeight, srcWidth, srcChannels] = imageTensor.shape; - const stride = srcHeight * srcWidth; - const float32Data = new Float32Array(3 * stride); - - // r_0, r_1, .... g_0,g_1, .... b_0 - for (let i = 0, j = 0; i < imageBufferData.length; i += 4, j += 1) { - float32Data[j] = (imageBufferData[i] - mean[0]) / std[0]; - float32Data[j + stride] = (imageBufferData[i + 1] - mean[1]) / std[1]; - float32Data[j + stride + stride] = - (imageBufferData[i + 2] - mean[2]) / std[2]; - } - - return ndarray(float32Data, [1, 3, srcHeight, srcWidth]); -} - -function calculateProportionalSize( - originalWidth: number, - originalHeight: number, - maxWidth: number, - maxHeight: number -): [number, number] { - const widthRatio = maxWidth / originalWidth; - const heightRatio = maxHeight / originalHeight; - const scalingFactor = Math.min(widthRatio, heightRatio); - const newWidth = Math.floor(originalWidth * scalingFactor); - const newHeight = Math.floor(originalHeight * scalingFactor); - return [newWidth, newHeight]; -} diff --git a/packages/node/tsconfig.json b/packages/node/tsconfig.json deleted file mode 100644 index c8994f3..0000000 --- a/packages/node/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "lib": ["DOM", "ES2020"], - "resolveJsonModule": true, - "esModuleInterop": true, - "emitDeclarationOnly": true, - "declaration": true - } -} diff --git a/packages/web/.resources.mjs b/packages/web/.resources.mjs deleted file mode 100644 index 5ca8abe..0000000 --- a/packages/web/.resources.mjs +++ /dev/null @@ -1,17 +0,0 @@ -export default [ - { - path: '/models/', - source: '../../bundle/models/small', - mime: 'application/octet-steam' - }, - { - path: '/models/', - source: '../../bundle/models/medium', - mime: 'application/octet-steam' - }, - { - path: '/onnxruntime-web/', - source: './node_modules/onnxruntime-web/dist/*.wasm', - mime: 'application/wasm' - } -]; diff --git a/packages/web/README.md b/packages/web/README.md deleted file mode 100644 index 875efc0..0000000 --- a/packages/web/README.md +++ /dev/null @@ -1,165 +0,0 @@ -# Background Removal in the Browser - -

-background removal js showcase -

- -Remove backgrounds from images directly in the browser environment with ease and no additional costs or privacy concerns. -Explore an [interactive demo](https://img.ly/showcases/cesdk/web/background-removal/web?utm_source=github&utm_medium=project&utm_campaign=bg-removal). - -## News - -- **`June 28th, 2023`:** We released the code of Background Removal JS. - -## Overview - -`@imgly/background-removal` is a powerful npm package that allows developers to seamlessly remove the background from images directly in the browser. With its unique features and capabilities, this package offers an innovative and cost-effective solution for background removal tasks without compromising data privacy. - -The key features of `@imgly/background-removal` are: - -- **In-Browser Background Removal**: Our one-of-a-kind solution performs the entire background removal process directly in the user's browser, eliminating the need for additional server costs. By leveraging the computing power of the local device, users can enjoy a fast and efficient background removal process. - -- **Data Protection**: As `@imgly/background-removal` runs entirely in the browser, users can have peace of mind knowing that their images and sensitive information remain secure within their own devices. With no data transfers to external servers, data privacy concerns are effectively mitigated. - -- **Seamless Integration with IMG.LY's CE.SDK**: `@imgly/background-removal` provides seamless integration with [IMG.LY's CE.SDK](https://img.ly/products/creative-sdk?utm_source=github&utm_medium=project&utm_campaign=bg-removal), allowing developers to easily incorporate powerful in-browser image matting and background removal capabilities into their projects. - -The Neural Network ([ONNX model](https://onnx.ai/)) and WASM files used by `@imgly/background-removal` are hosted on [UNPKG](https://www.unpkg.com/), making it readily available for download to all users of the library. See the section Custom Asset Serving if you want to host data on your own servers. - - -## Installation - -You can install `@imgly/background-removal` via npm or yarn. Use the following commands to install the package: - -### NPM - -```shell -npm install @imgly/background-removal -``` - -## Usage - -```typescript -import imglyRemoveBackground from "@imgly/background-removal" - -let image_src: ImageData | ArrayBuffer | Uint8Array | Blob | URL | string = ...; - -imglyRemoveBackground(image_src).then((blob: Blob) => { - // The result is a blob encoded as PNG. It can be converted to an URL to be used as HTMLImage.src - const url = URL.createObjectURL(blob); -}) -``` - -Note: On the first run the wasm and onnx model files are fetched. This might, depending on the bandwidth, take time. Therefore, the first run takes proportionally longer than each consecutive run. Also, all files are cached by the browser and an additional model cache. - -## Advanced Configuration - -The library does not need any configuration to get started. However, there are optional parameters that influence the behaviour and give more control over the library. - -```typescript -type Config = { - publicPath: string; // The public path used for model and wasm files - debug: bool; // enable or disable useful console.log outputs - proxyToWorker: bool; // Whether to proxy the calculations to a web worker. (Default true) - model: 'small' | 'medium'; // The model to use. (Default "medium") -}; -``` - -### Download Size vs Quality - -The onnx model is shipped in various sizes and needs. - -- small (~40 MB) is the smallest model and is in most cases working fine but sometimes shows some artifacts. It's a quantized model. -- medium (~80MB) is the default model. - -### Download Progress Monitoring - -On the first run, the necessary data will be fetched and stored in the browser cache. Since the download might take some time, you have the option to tap into the download progress. - -```typescript -let config: Config = { - progress: (key, current, total) => { - console.log(`Downloading ${key}: ${current} of ${total}`); - } -}; -``` - -### Performance - -The performance is largely dependent on the feature set available. Most prominently, ensure that `SharedArrayBuffer` is available [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer). Due to the security requirements of `SharedArrayBuffer` two headers need to be set to cross-origin isolate your site: - -```typescript -'Cross-Origin-Opener-Policy': 'same-origin', -'Cross-Origin-Embedder-Policy': 'require-corp' -``` - -### Custom Asset Serving - -Currently, the wasm and onnx neural networks are served via unpkg. For production use, we advise you to host them yourself. Therefore, copy all .wasm and .onnx files to your public path `$PUBLIC_PATH` and reconfigure the library. - -```shell -cp node_modules/@imgly/background-removal/dist/*.wasm $PUBLIC_PATH -cp node_modules/@imgly/background-removal/dist/*.onnx $PUBLIC_PATH -``` - -```typescript -import imglyRemoveBackground, {Config} from "@imgly/background-removal" - -const public_path = "https://example.com/assets/" ; // the path assets are served from - -let config: Config = { - publicPath: public_path, // path to the wasm files -}; - -let image_src: ImageData | ArrayBuffer | Uint8Array | Blob | URL | string = ...; - -imglyRemoveBackground(image_src, config).then((blob: Blob) => { - // result is a blob encoded as PNG. - // It can be converted to an URL to be used as HTMLImage.src - const url = URL.createObjectURL(blob); -}) -``` - -### Debug Outputs - -Enable debug outputs and logging to the console - -```typescript -let config: Config = { - debug: true -}; -``` - -### Cross-Origin Resource Sharing (CORS) - -If you are running into CORS issues you might want to pass additional parameters to the fetch function via - -```typescript -let config: Config = { - fetchArgs: { - mode: 'no-cors' - } -}; -``` - -`fetchArgs` are passed as second parameters to the fetch function as described in [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch). - -## Who is it for? - -`@imgly/background-removal` is ideal for developers and projects that require efficient and cost-effective background removal directly in the browser. It caters to a wide range of use cases, including but not limited to: - -- _E-commerce applications_ that need to remove backgrounds from product images in real time. - -- _Image editing applications_ that require background removal capabilities for enhancing user experience. - -- _Web-based graphic design tools_ that aim to simplify the creative process with in-browser background removal. - -Whether you are a professional developer or a hobbyist, `@imgly/background-removal` empowers you to deliver impressive applications and services with ease. - -## License - -The software is free for use under the GPL License. Please contact [support@img.ly](mailto:support@img.ly?subject=Background-Removal%20License) for questions about other licensing options. - -## Authors & Contributors - -This library is made by IMG.LY shipping the world's premier SDKs for building creative applications. -Start your trial of the [CreativeEditor SDK](https://img.ly/products/creative-sdk?utm_source=github&utm_medium=project&utm_campaign=bg-removal), [PhotoEditor SDK](https://img.ly/products/photo-sdk?utm_source=github&utm_medium=project&utm_campaign=bg-removal) & [VideoEditor SDK](https://img.ly/products/video-sdk?utm_source=github&utm_medium=project&utm_campaign=bg-removal). diff --git a/packages/web/package-lock.json b/packages/web/package-lock.json deleted file mode 100644 index cc5d659..0000000 --- a/packages/web/package-lock.json +++ /dev/null @@ -1,3561 +0,0 @@ -{ - "name": "@imgly/background-removal", - "version": "1.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@imgly/background-removal", - "version": "1.1.0", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "onnxruntime-web": "^1.15.1" - }, - "devDependencies": { - "@types/lodash": "^4.14.195", - "@types/node": "^20.3.1", - "assert": "^2.0.0", - "esbuild": "^0.18.18", - "glob": "^10.3.3", - "lodash": "^4.17.21", - "ndarray": "^1.0.19", - "npm-dts": "^1.3.12", - "process": "^0.11.10", - "ts-loader": "^9.4.3", - "tslib": "^2.5.3", - "typescript": "^5.1.3", - "util": "^0.12.5", - "webpack": "^5.85.1", - "webpack-cli": "^5.1.4", - "zod": "^3.21.4" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dev": true, - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.18.tgz", - "integrity": "sha512-oBymf7ZwplAawSxmiSlBCf+FMcY0f4bs5QP2jn43JKUf0M9DnrUTjqa5RvFPl1elw+sMfcpfBRPK+rb+E1q7zg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.18.tgz", - "integrity": "sha512-dkAPYzRHq3dNXIzOyAknYOzsx8o3KWaNiuu56B2rP9IFPmFWMS58WQcTlUQi6iloku8ZyHHMluCe5sTWhKq/Yw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.18.tgz", - "integrity": "sha512-r7/pVcrUQMYkjvtE/1/n6BxhWM+/9tvLxDG1ev1ce4z3YsqoxMK9bbOM6bFcj0BowMeGQvOZWcBV182lFFKmrw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.18.tgz", - "integrity": "sha512-MSe2iV9MAH3wfP0g+vzN9bp36rtPPuCSk+bT5E2vv/d8krvW5uB/Pi/Q5+txUZuxsG3GcO8dhygjnFq0wJU9hQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.18.tgz", - "integrity": "sha512-ARFYISOWkaifjcr48YtO70gcDNeOf1H2RnmOj6ip3xHIj66f3dAbhcd5Nph5np6oHI7DhHIcr9MWO18RvUL1bw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.18.tgz", - "integrity": "sha512-BHnXmexzEWRU2ZySJosU0Ts0NRnJnNrMB6t4EiIaOSel73I8iLsNiTPLH0rJulAh19cYZutsB5XHK6N8fi5eMg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.18.tgz", - "integrity": "sha512-n823w35wm0ZOobbuE//0sJjuz1Qj619+AwjgOcAJMN2pomZhH9BONCtn+KlfrmM/NWZ+27yB/eGVFzUIWLeh3w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.18.tgz", - "integrity": "sha512-Kck3jxPLQU4VeAGwe8Q4NU+IWIx+suULYOFUI9T0C2J1+UQlOHJ08ITN+MaJJ+2youzJOmKmcphH/t3SJxQ1Tw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.18.tgz", - "integrity": "sha512-zANxnwF0sCinDcAqoMohGoWBK9QaFJ65Vgh0ZE+RXtURaMwx+RfmfLElqtnn7X8OYNckMoIXSg7u+tZ3tqTlrA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.18.tgz", - "integrity": "sha512-+VHz2sIRlY5u8IlaLJpdf5TL2kM76yx186pW7bpTB+vLWpzcFQVP04L842ZB2Ty13A1VXUvy3DbU1jV65P2skg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.18.tgz", - "integrity": "sha512-fXPEPdeGBvguo/1+Na8OIWz3667BN1cwbGtTEZWTd0qdyTsk5gGf9jVX8MblElbDb/Cpw6y5JiaQuL96YmvBwQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.18.tgz", - "integrity": "sha512-dLvRB87pIBIRnEIC32LIcgwK1JzlIuADIRjLKdUIpxauKwMuS/xMpN+cFl+0nN4RHNYOZ57DmXFFmQAcdlFOmw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.18.tgz", - "integrity": "sha512-fRChqIJZ7hLkXSKfBLYgsX9Ssb5OGCjk3dzCETF5QSS1qjTgayLv0ALUdJDB9QOh/nbWwp+qfLZU6md4XcjL7w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.18.tgz", - "integrity": "sha512-ALK/BT3u7Hoa/vHjow6W6+MKF0ohYcVcVA1EpskI4bkBPVuDLrUDqt2YFifg5UcZc8qup0CwQqWmFUd6VMNgaA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.18.tgz", - "integrity": "sha512-crT7jtOXd9iirY65B+mJQ6W0HWdNy8dtkZqKGWNcBnunpLcTCfne5y5bKic9bhyYzKpQEsO+C/VBPD8iF0RhRw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.18.tgz", - "integrity": "sha512-/NSgghjBOW9ELqjXDYxOCCIsvQUZpvua1/6NdnA9Vnrp9UzEydyDdFXljUjMMS9p5KxMzbMO9frjHYGVHBfCHg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.18.tgz", - "integrity": "sha512-8Otf05Vx5sZjLLDulgr5QS5lsWXMplKZEyHMArH9/S4olLlhzmdhQBPhzhJTNwaL2FJNdWcUPNGAcoD5zDTfUA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.18.tgz", - "integrity": "sha512-tFiFF4kT5L5qhVrWJUNxEXWvvX8nK/UX9ZrB7apuTwY3f6+Xy4aFMBPwAVrBYtBd5MOUuyOVHK6HBZCAHkwUlw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.18.tgz", - "integrity": "sha512-MPogVV8Bzh8os4OM+YDGGsSzCzmNRiyKGtHoJyZLtI4BMmd6EcxmGlcEGK1uM46h1BiOyi7Z7teUtzzQhvkC+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.18.tgz", - "integrity": "sha512-YKD6LF/XXY9REu+ZL5RAsusiG48n602qxsMVh/E8FFD9hp4OyTQaL9fpE1ovxwQXqFio+tT0ITUGjDSSSPN13w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.18.tgz", - "integrity": "sha512-NjSBmBsyZBTsZB6ga6rA6PfG/RHnwruUz/9YEVXcm4STGauFWvhYhOMhEyw1yU5NVgYYm8CH5AltCm77TS21/Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.18.tgz", - "integrity": "sha512-eTSg/gC3p3tdjj4roDhe5xu94l1s2jMazP8u2FsYO8SEKvSpPOO71EucprDn/IuErDPvTFUhV9lTw5z5WJCRKQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.196", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz", - "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==", - "dev": true - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/node": { - "version": "20.4.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz", - "integrity": "sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==" - }, - "node_modules/@types/triple-beam": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", - "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/args": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", - "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", - "dev": true, - "dependencies": { - "camelcase": "5.0.0", - "chalk": "2.4.2", - "leven": "2.1.0", - "mri": "1.1.4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/args/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/args/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/args/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/args/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001519", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", - "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dev": true, - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.485", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.485.tgz", - "integrity": "sha512-1ndQ5IBNEnFirPwvyud69GHL+31FkE09gH/CJ6m3KCbkx3i0EVOrjwz4UNxRmN9H8OVHbC6vMRZGN1yCvjSs9w==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.18.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.18.tgz", - "integrity": "sha512-UckDPWvdVJLNT0npk5AMTpVwGRQhS76rWFLmHwEtgNvWlR9sgVV1eyc/oeBtM86q9s8ABBLMmm0CwNxhVemOiw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.18", - "@esbuild/android-arm64": "0.18.18", - "@esbuild/android-x64": "0.18.18", - "@esbuild/darwin-arm64": "0.18.18", - "@esbuild/darwin-x64": "0.18.18", - "@esbuild/freebsd-arm64": "0.18.18", - "@esbuild/freebsd-x64": "0.18.18", - "@esbuild/linux-arm": "0.18.18", - "@esbuild/linux-arm64": "0.18.18", - "@esbuild/linux-ia32": "0.18.18", - "@esbuild/linux-loong64": "0.18.18", - "@esbuild/linux-mips64el": "0.18.18", - "@esbuild/linux-ppc64": "0.18.18", - "@esbuild/linux-riscv64": "0.18.18", - "@esbuild/linux-s390x": "0.18.18", - "@esbuild/linux-x64": "0.18.18", - "@esbuild/netbsd-x64": "0.18.18", - "@esbuild/openbsd-x64": "0.18.18", - "@esbuild/sunos-x64": "0.18.18", - "@esbuild/win32-arm64": "0.18.18", - "@esbuild/win32-ia32": "0.18.18", - "@esbuild/win32-x64": "0.18.18" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-node-modules": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", - "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", - "dev": true, - "dependencies": { - "findup-sync": "^4.0.0", - "merge": "^2.1.1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/flatbuffers": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", - "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/guid-typescript": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", - "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/iota-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz", - "integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==", - "dev": true - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true - }, - "node_modules/leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/logform": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", - "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/merge": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", - "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mri": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", - "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/ndarray": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz", - "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==", - "dev": true, - "dependencies": { - "iota-array": "^1.0.0", - "is-buffer": "^1.0.2" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/npm-dts": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/npm-dts/-/npm-dts-1.3.12.tgz", - "integrity": "sha512-3pFsz7Gf1u0cyQE2czXt8Y0hKe6kczHxlFbVrr74xWweNUit2tCDbOcL4n6KaWxyimGNJ4gzOa8KkShFA8hrdA==", - "dev": true, - "dependencies": { - "args": "5.0.3", - "find-node-modules": "2.1.3", - "mkdirp": "1.0.4", - "npm-run": "5.0.1", - "rimraf": "3.0.2", - "tmp": "0.2.1", - "winston": "3.7.2" - }, - "bin": { - "npm-dts": "cli.js" - } - }, - "node_modules/npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "dependencies": { - "which": "^1.2.10" - }, - "bin": { - "npm-path": "bin/npm-path" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm-path/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/npm-run": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npm-run/-/npm-run-5.0.1.tgz", - "integrity": "sha512-s7FyRpHUgaJfzkRgOnevX8rAWWsv1dofY1XS7hliWCF6LSQh+HtDfBvpigPS1krLvXw+Fi17CYMY8mUtblnyWw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0", - "npm-path": "^2.0.4", - "npm-which": "^3.0.1", - "serializerr": "^1.0.3" - }, - "bin": { - "npm-run": "bin/npm-run.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A==", - "dev": true, - "dependencies": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - }, - "bin": { - "npm-which": "bin/npm-which.js" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/npm-which/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dev": true, - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onnx-proto": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz", - "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==", - "dependencies": { - "protobufjs": "^6.8.8" - } - }, - "node_modules/onnxruntime-common": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.15.1.tgz", - "integrity": "sha512-Y89eJ8QmaRsPZPWLaX7mfqhj63ny47rSkQe80hIo+lvBQdrdXYR9VO362xvZulk9DFkCnXmGidprvgJ07bKsIQ==" - }, - "node_modules/onnxruntime-web": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.15.1.tgz", - "integrity": "sha512-Ky4AXFLFyiGRu5KQJdDcbhdNcO0f2ND/8IPmTEwcKKIHpCwH6/Q9UoMpcoFz78lxGvnmmy+FFgA/Bs1HjdM6LA==", - "dependencies": { - "flatbuffers": "^1.12.0", - "guid-typescript": "^1.0.9", - "long": "^4.0.0", - "onnx-proto": "^4.0.4", - "onnxruntime-common": "~1.15.1", - "platform": "^1.3.6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/platform": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/protochain": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz", - "integrity": "sha512-4hDwFSX50C4NE6f/6zg8EPr/WLPTkFPUtG0ulWZu6bwzV2hmb50fpdQLr0HiKBAUehapaFpItzWoCLjraLJhUA==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serializerr": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz", - "integrity": "sha512-yXUlHj0fjbndhACj2XWtIH5eJv7b/uadyl7CJA8b9wL5mIKm+g0/sL7rDzEmjC+k5y8ggcaP8i049F4FxA0U9Q==", - "dev": true, - "dependencies": { - "protochain": "^1.0.5" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "dev": true, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/ts-loader": { - "version": "9.4.4", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", - "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/winston": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.7.2.tgz", - "integrity": "sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng==", - "dev": true, - "dependencies": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "dev": true, - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/packages/web/package.json b/packages/web/package.json deleted file mode 100644 index 8993456..0000000 --- a/packages/web/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "@imgly/background-removal", - "version": "1.1.0", - "description": "Background Removal in the Browser", - "keywords": [ - "background-removal", - "client-side", - "data-privacy", - "image-segmentation", - "image-matting", - "onnx" - ], - "repository": { - "type": "git", - "url": "https://github.com/imgly/background-removal-js.git" - }, - "license": "SEE LICENSE IN LICENSE.md", - "author": { - "name": "IMG.LY GmbH", - "email": "support@img.ly", - "url": "https://img.ly" - }, - "bugs": { - "email": "support@img.ly" - }, - "source": "./src/index.ts", - "main": "./dist/index.cjs", - "module": "./dist/index.mjs", - "browser": "./dist/index.js", - "homepage": "https://img.ly/showcases/cesdk/web/background-removal/web", - "types": "./dist/index.d.ts", - "files": [ - "LICENSE.md", - "README.md", - "dist/" - ], - "scripts": { - "start": "npm run watch", - "clean": "npx rimraf dist", - "test": "true", - "resources": "node ../../scripts/package-resources.mjs", - "build": "npm run clean && npm run resources && node scripts/build.mjs", - "watch": "npm run clean && npm run resources && node scripts/watch.mjs", - "publish": "npm run build && npm publish --access public", - "lint": "npx prettier --write ." - }, - "dependencies": { - "onnxruntime-web": "^1.15.1" - }, - "devDependencies": { - "@types/lodash": "^4.14.195", - "@types/node": "^20.3.1", - "lodash": "^4.17.21", - "ndarray": "^1.0.19", - "zod": "^3.21.4", - "assert": "^2.0.0", - "esbuild": "^0.18.18", - "glob": "^10.3.3", - "npm-dts": "^1.3.12", - "process": "^0.11.10", - "ts-loader": "^9.4.3", - "tslib": "^2.5.3", - "typescript": "^5.1.3", - "util": "^0.12.5", - "webpack": "^5.85.1", - "webpack-cli": "^5.1.4" - } -} diff --git a/packages/web/scripts/build.mjs b/packages/web/scripts/build.mjs deleted file mode 100644 index 8481a29..0000000 --- a/packages/web/scripts/build.mjs +++ /dev/null @@ -1,32 +0,0 @@ -export { configs }; - -import * as esbuild from 'esbuild'; -import dts from 'npm-dts'; - -new dts.Generator({ - entry: 'src/index.ts', - output: 'dist/index.d.ts' -}).generate(); - -const configs = [ - { - entryPoints: ['src/index.ts'], - bundle: true, - sourcemap: true, - platform: 'browser', - external: ['onnxruntime-web'], - format: 'cjs', - outfile: 'dist/index.cjs' - }, - { - entryPoints: ['src/index.ts'], - bundle: true, - sourcemap: true, - external: ['onnxruntime-web'], - platform: 'browser', - format: 'esm', - outfile: 'dist/index.mjs' - } -]; - -await configs.map(async (config) => await esbuild.build(config)); diff --git a/packages/web/scripts/watch.mjs b/packages/web/scripts/watch.mjs deleted file mode 100644 index 17a18db..0000000 --- a/packages/web/scripts/watch.mjs +++ /dev/null @@ -1,15 +0,0 @@ -import * as esbuild from 'esbuild'; -import { configs } from './build.mjs'; -import dts from 'npm-dts'; - -new dts.Generator({ - entry: 'src/index.ts', - output: 'dist/index.d.ts' -}).generate(); - -const contexts = await Promise.all( - configs.map((config) => esbuild.context(config)) -); - -await Promise.any(contexts.map((ctx) => ctx.watch())); -console.log('watching...'); diff --git a/packages/web/src/codecs.ts b/packages/web/src/codecs.ts deleted file mode 100644 index 0364055..0000000 --- a/packages/web/src/codecs.ts +++ /dev/null @@ -1,26 +0,0 @@ -export { imageEncode, imageDecode }; -import { imageBitmapToImageData } from './utils'; -import ndarray, { NdArray } from 'ndarray'; - -async function imageDecode(blob: Blob): Promise> { - const imageBitmap = await createImageBitmap(blob); - const imageData = imageBitmapToImageData(imageBitmap); - return ndarray(imageData.data, [imageData.height, imageData.width, 4]); -} - -async function imageEncode( - imageTensor: NdArray, - quality: number = 0.8, - type: string = 'image/png' -): Promise { - const [height, width, channels] = imageTensor.shape; - const imageData = new ImageData( - new Uint8ClampedArray(imageTensor.data), - width, - height - ); - var canvas = new OffscreenCanvas(imageData.width, imageData.height); - var ctx = canvas.getContext('2d')!; - ctx.putImageData(imageData, 0, 0); - return canvas.convertToBlob({ quality, type }); -} diff --git a/packages/web/src/feature-detect.js b/packages/web/src/feature-detect.js deleted file mode 100644 index 1df9519..0000000 --- a/packages/web/src/feature-detect.js +++ /dev/null @@ -1,123 +0,0 @@ -export const bigInt = () => - (async (e) => { - try { - return ( - (await WebAssembly.instantiate(e)).instance.exports.b(BigInt(0)) === - BigInt(0) - ); - } catch (e) { - return !1; - } - })( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 6, 1, 96, 1, 126, 1, 126, 3, 2, 1, 0, 7, - 5, 1, 1, 98, 0, 0, 10, 6, 1, 4, 0, 32, 0, 11 - ]) - ), - bulkMemory = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 5, 3, 1, 0, - 1, 10, 14, 1, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11 - ]) - ), - exceptions = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 10, 8, 1, 6, - 0, 6, 64, 25, 11, 11 - ]) - ), - extendedConst = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 5, 3, 1, 0, 1, 11, 9, 1, 0, 65, 1, 65, 2, - 106, 11, 0 - ]) - ), - gc = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 10, 2, 95, 1, 125, 0, 96, 0, 1, 107, 0, - 3, 2, 1, 1, 10, 12, 1, 10, 0, 67, 0, 0, 0, 0, 251, 7, 0, 11 - ]) - ), - memory64 = async () => - WebAssembly.validate( - new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 5, 3, 1, 4, 1]) - ), - multiValue = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 6, 1, 96, 0, 2, 127, 127, 3, 2, 1, 0, - 10, 8, 1, 6, 0, 65, 0, 65, 0, 11 - ]) - ), - mutableGlobals = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 2, 8, 1, 1, 97, 1, 98, 3, 127, 1, 6, 6, 1, - 127, 1, 65, 0, 11, 7, 5, 1, 1, 97, 3, 1 - ]) - ), - referenceTypes = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 10, 7, 1, 5, - 0, 208, 112, 26, 11 - ]) - ), - relaxedSimd = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 123, 3, 2, 1, 0, 10, 15, - 1, 13, 0, 65, 1, 253, 15, 65, 2, 253, 15, 253, 128, 2, 11 - ]) - ), - saturatedFloatToInt = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 10, 12, 1, - 10, 0, 67, 0, 0, 0, 0, 252, 0, 26, 11 - ]) - ), - signExtensions = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 10, 8, 1, 6, - 0, 65, 0, 192, 26, 11 - ]) - ), - simd = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 123, 3, 2, 1, 0, 10, 10, - 1, 8, 0, 65, 0, 253, 15, 253, 98, 11 - ]) - ), - streamingCompilation = () => - (async () => 'compileStreaming' in WebAssembly)(), - tailCall = async () => - WebAssembly.validate( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 10, 6, 1, 4, - 0, 18, 0, 11 - ]) - ), - threads = () => - (async (e) => { - try { - return ( - 'undefined' != typeof MessageChannel && - new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)), - WebAssembly.validate(e) - ); - } catch (e) { - return !1; - } - })( - new Uint8Array([ - 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 5, 4, 1, 3, - 1, 1, 10, 11, 1, 9, 0, 65, 0, 254, 16, 2, 0, 26, 11 - ]) - ); diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts deleted file mode 100644 index 9e8760f..0000000 --- a/packages/web/src/index.ts +++ /dev/null @@ -1,142 +0,0 @@ -// Imports -import { initInference, runInference } from './inference'; -import { Config, ApiFunctionSchrema } from './schema'; -import * as utils from './utils'; -import { NdArray } from 'ndarray'; -import * as codecs from './codecs'; -import { memoize } from 'lodash'; -import { ensureAbsoluteURI } from './url'; -import { ZodError } from 'zod'; - -type ImageSource = ImageData | ArrayBuffer | Uint8Array | Blob | URL | string; - -const init = memoize(initInference, (config) => JSON.stringify(config)); - -// https://www.rfc-editor.org/rfc/rfc7807 - -// application/problem+json -/** - * - { - "type": "https://example.com/probs/out-of-credit", - "title": "You do not have enough credit.", - "detail": "Your current balance is 30, but that costs 50.", - "instance": "/account/12345/msgs/abc", - "balance": 30, - "accounts": ["/account/12345", - "/account/67890"] - } - */ - -class Rfc7807Error extends Error { - title: string; - status: number; - detail: string; - instance: string; - params?: [{ path: string, reason: string }] -} - -class UbqError extends Error { - title: string; - status: number; - detail: string; - instance: string; - params?: [{ path: string, reason: string }] -} -class StripeError extends Error { - type: string; - code: string; - message: string -} - -class RemoveBackgroundError extends Error { - code: "ValidationError" | "UnhandledError"; - constructor(code: string, message: string = "") { - super() - - } -} - -class ValidationError extends RemoveBackgroundError { - constructor(message: string = "") { - super("ValidationError", message) - } -} - -class UnhandledError extends RemoveBackgroundError { - constructor(message: string = "") { - super("UnhandledError", message) - } -} - - -async function removeBackground(image: ImageSource, configuration: Config = {}) { - try { - return await ApiFunctionSchrema.strictImplement(removeBackgroundImplementation)(image, configuration); - } catch (e) { - if (e instanceof ZodError) { - debugger - for (let issue of e.issues) { - - console.log(issue.code); - - console.log(issue.argumentsError) - } - throw new ValidationError(e.message); - } - throw new UnhandledError(e.message); - } -} - -async function removeBackgroundImplementation( - image: ImageSource, - configuration?: Config -): Promise { - const { config, session } = await init(configuration); - - if (config.debug) { - config.progress = - config.progress ?? - ((key, current, total) => { - console.debug(`Downloading ${key}: ${current} of ${total}`); - }); - - if (window && !window.crossOriginIsolated) { - console.debug( - 'Cross-Origin-Isolated is not enabled. Performance will be degraded. Please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer.' - ); - } - } - - image = await imageSourceToImageData(image, config); - - const outImageTensor = await runInference(image, config, session); - return await utils.imageEncode(outImageTensor); -} - -async function imageSourceToImageData( - image: ImageSource, - config: Config -): Promise> { - if (typeof image === 'string') { - image = ensureAbsoluteURI(image, config.publicPath); - image = new URL(image); - } - if (image instanceof URL) { - const response = await fetch(image, {}); - image = await response.blob(); - } - if (image instanceof ArrayBuffer || ArrayBuffer.isView(image)) { - image = new Blob([image]); - } - if (image instanceof Blob) { - image = await codecs.imageDecode(image); - } - - return image as NdArray; -} - -// Exports -export default removeBackground; -export type { ImageSource, Config }; -export { removeBackground }; diff --git a/packages/web/src/inference.ts b/packages/web/src/inference.ts deleted file mode 100644 index 2df45de..0000000 --- a/packages/web/src/inference.ts +++ /dev/null @@ -1,58 +0,0 @@ -export { initInference, runInference }; - -import { tensorResize, tensorHWCtoBCHW } from './utils'; -import { createOnnxSession, runOnnxSession } from './onnx'; -import { calculateProportionalSize } from './utils'; -import { Config } from './schema'; - -import { loadAsBlob } from './resource'; -import ndarray, { NdArray } from 'ndarray'; - -async function initInference(config: Config) { - - if (config.debug) console.debug('Loading model...'); - const model = config.model; - const blob = await loadAsBlob(`/models/${model}`, config); - const arrayBuffer = await blob.arrayBuffer(); - const session = await createOnnxSession(arrayBuffer, config); - return { config, session }; -} - -async function runInference( - imageTensor: NdArray, - config: Config, - session: any -): Promise> { - if (config.progress) config.progress('compute:inference', 0, 1); - const resolution = 1024; - const [srcHeight, srcWidth, srcChannels] = imageTensor.shape; - let tensorImage = await tensorResize(imageTensor, resolution, resolution); - const inputTensor = tensorHWCtoBCHW(tensorImage); - const predictionsDict = await runOnnxSession( - session, - [['input', inputTensor]], - ['output'] - ); - - const stride = resolution * resolution; - - for (let i = 0; i < 4 * stride; i += 4) { - let idx = i / 4; - let alpha = predictionsDict[0].data[idx]; - tensorImage.data[i + 3] = alpha * 255; - } - - const [width, height] = calculateProportionalSize( - srcWidth, - srcHeight, - resolution, - resolution - ); - - const dst_width = Math.min(width, srcWidth); - const dst_height = Math.min(height, srcHeight); - - tensorImage = await tensorResize(tensorImage, dst_width, dst_height); - if (config.progress) config.progress('compute:inference', 1, 1); - return ndarray(tensorImage.data, [dst_height, dst_width, 4]); -} diff --git a/packages/web/src/onnx.ts b/packages/web/src/onnx.ts deleted file mode 100644 index 2c565ba..0000000 --- a/packages/web/src/onnx.ts +++ /dev/null @@ -1,95 +0,0 @@ -export { createOnnxSession, runOnnxSession }; - -import ndarray, { NdArray } from 'ndarray'; -import * as ort from 'onnxruntime-web'; -import { loadAsUrl } from './resource'; -import { simd, threads } from './feature-detect'; -import { Config } from './schema'; - -async function createOnnxSession(model: any, config: Config) { - const capabilities = { - simd: await simd(), - threads: await threads(), - numThreads: navigator.hardwareConcurrency ?? 4, - // @ts-ignore - webgpu: navigator.gpu !== undefined - }; - if (config.debug) { - console.debug('Capabilities:', capabilities); - ort.env.debug = true; - ort.env.logLevel = 'verbose'; - } - - ort.env.wasm.numThreads = capabilities.numThreads; - ort.env.wasm.simd = capabilities.simd; - ort.env.wasm.proxy = config.proxyToWorker; - - ort.env.wasm.wasmPaths = { - 'ort-wasm-simd-threaded.wasm': - capabilities.simd && capabilities.threads - ? await loadAsUrl( - '/onnxruntime-web/ort-wasm-simd-threaded.wasm', - config - ) - : undefined, - 'ort-wasm-simd.wasm': - capabilities.simd && !capabilities.threads - ? await loadAsUrl('onnxruntime-web/ort-wasm-simd.wasm', config) - : undefined, - 'ort-wasm-threaded.wasm': - !capabilities.simd && capabilities.threads - ? await loadAsUrl('/onnxruntime-web/ort-wasm-threaded.wasm', config) - : undefined, - 'ort-wasm.wasm': - !capabilities.simd && !capabilities.threads - ? await loadAsUrl('/onnxruntime-web/ort-wasm.wasm', config) - : undefined - }; - - if (config.debug) { - console.debug('ort.env.wasm:', ort.env.wasm); - } - - const ort_config: ort.InferenceSession.SessionOptions = { - executionProviders: ['wasm'], - graphOptimizationLevel: 'all', - executionMode: 'parallel', - enableCpuMemArena: true - }; - - const session = await ort.InferenceSession.create(model, ort_config).catch( - (e: any) => { - throw new Error( - `Failed to create session: ${e}. Please check if the publicPath is set correctly.` - ); - } - ); - return session; -} - -async function runOnnxSession( - session: any, - inputs: [string, NdArray][], - outputs: [string] -) { - const feeds: Record = {}; - for (const [key, tensor] of inputs) { - feeds[key] = new ort.Tensor( - 'float32', - new Float32Array(tensor.data), - tensor.shape - ); - } - const outputData = await session.run(feeds, {}); - const outputKVPairs: NdArray[] = []; - - for (const key of outputs) { - const output: ort.Tensor = outputData[key]; - const shape: Number[] = output.dims as number[]; - const data: Float32Array = output.data as Float32Array; - const tensor = ndarray(data, shape); - outputKVPairs.push(tensor); - } - - return outputKVPairs; -} diff --git a/packages/web/src/resource.ts b/packages/web/src/resource.ts deleted file mode 100644 index 20ccd6e..0000000 --- a/packages/web/src/resource.ts +++ /dev/null @@ -1,76 +0,0 @@ -export { loadAsBlob, loadAsUrl }; - -import { Config } from './schema'; - -async function loadAsUrl(url: string, config: Config) { - return URL.createObjectURL(await loadAsBlob(url, config)); -} - -async function loadAsBlob(key: string, config: Config) { - // load resource metadata - const resourceUrl = new URL('resources.json', config.publicPath); - const resourceResponse = await fetch(resourceUrl); - if (!resourceResponse.ok) { - throw new Error( - `Resource metadata not found. Ensure that the config.publicPath is configured correctly.` - ); - } - const resourceMap = await resourceResponse.json(); - const entry = resourceMap[key]; - - if (!entry) { - throw new Error( - `Resource ${key} not found. Ensure that the config.publicPath is configured correctly.` - ); - } - - let urls = Object.keys(entry.chunks); - - const allChunks = await Promise.all( - urls.map(async (url) => { - if (config.publicPath) { - url = new URL(url, config.publicPath).toString(); - } - const response = await fetch(url, config.fetchArgs); - - const chunks = config.progress - ? await fetchChunked(response, entry, config, key) - : [await response.blob()]; - return chunks; - }) - ); - - const chunks = allChunks.flat(); - const data = new Blob(chunks, { type: entry.mime }); - if (data.size !== entry.size) { - throw new Error( - `Failed to fetch ${key} with size ${entry.size} but got ${data.size}` - ); - } - return data; -} - -async function fetchChunked( - response: Response, - entry: any, - config: Config, - key: string -) { - const reader = response.body!.getReader(); - // let contentLength = Number(response.headers.get('Content-Length')); - const contentLength = entry.size ?? 0; - let receivedLength = 0; - - let chunks: Uint8Array[] = []; - while (true) { - const { done, value } = await reader.read(); - if (done) { - break; - } - chunks.push(value); - receivedLength += value.length; - if (config.progress) - config.progress(`fetch:${key}`, receivedLength, contentLength); - } - return chunks; -} diff --git a/packages/web/src/schema.ts b/packages/web/src/schema.ts deleted file mode 100644 index c743f9d..0000000 --- a/packages/web/src/schema.ts +++ /dev/null @@ -1,41 +0,0 @@ -export { ApiFunctionSchrema, type Config }; - -import { z } from 'zod'; - -import pkg from '../package.json'; - -const ConfigSchema = z - .object({ - publicPath: z - .string() - .optional() - .describe('The public path to the wasm files and the onnx model.') - .default(`https://unpkg.com/${pkg.name}@${pkg.version}/dist/`), - debug: z - .boolean() - .default(false) - .describe('Whether to enable debug logging.'), - proxyToWorker: z - .boolean() - .default(true) - .describe('Whether to proxy inference to a web worker.'), - fetchArgs: z - .object({}) - .default({}) - .describe('Arguments to pass to fetch when loading the model.'), - progress: z - .function() - .args(z.string(), z.number(), z.number()) - .returns(z.undefined()) - .describe('Progress callback.') - .optional(), - model: z.enum(['small', 'medium']).default('medium') - }) - .default({}); - - -const ImageSourceSchema = z.instanceof(ImageData).or(z.instanceof(ArrayBuffer)).or(z.instanceof(Uint8Array)).or(z.instanceof(Blob)).or(z.instanceof(URL)).or(z.string()) -const ApiFunctionSchrema = z.function().args(ImageSourceSchema, ConfigSchema).returns(z.promise(z.instanceof(Blob))); - -type Config = z.infer; - diff --git a/packages/web/src/url.ts b/packages/web/src/url.ts deleted file mode 100644 index 8176954..0000000 --- a/packages/web/src/url.ts +++ /dev/null @@ -1,17 +0,0 @@ -export { isAbsoluteURI, ensureAbsoluteURI }; - -function isAbsoluteURI(url: string): boolean { - const regExp = new RegExp('^(?:[a-z+]+:)?//', 'i'); - return regExp.test(url); // true - regular http absolute URL -} - -const isNode = typeof window === 'undefined'; -const isBrowser = typeof window !== 'undefined'; - -function ensureAbsoluteURI(url: string, baseUrl: string): string { - if (isAbsoluteURI(url)) { - return url; - } else { - return new URL(url, baseUrl).href; - } -} diff --git a/packages/web/src/utils.ts b/packages/web/src/utils.ts deleted file mode 100644 index 2e8550a..0000000 --- a/packages/web/src/utils.ts +++ /dev/null @@ -1,123 +0,0 @@ -export { - imageDecode, - imageEncode, - tensorResize, - tensorHWCtoBCHW, - imageBitmapToImageData, - calculateProportionalSize -}; - -import ndarray, { NdArray } from 'ndarray'; -import { imageDecode, imageEncode } from './codecs'; - -function imageBitmapToImageData(imageBitmap: ImageBitmap): ImageData { - var canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height); - var ctx = canvas.getContext('2d')!; - ctx.drawImage(imageBitmap, 0, 0); - return ctx.getImageData(0, 0, canvas.width, canvas.height); -} - -async function tensorResize( - imageTensor: NdArray, - newWidth: number, - newHeight: number -): Promise> { - const [srcHeight, srcWidth, srcChannels] = imageTensor.shape; - // Calculate the scaling factors - const scaleX = srcWidth / newWidth; - const scaleY = srcHeight / newHeight; - - // Create a new NdArray to store the resized image - const resizedImageData = ndarray( - new Uint8Array(srcChannels * newWidth * newHeight), - [newHeight, newWidth, srcChannels] - ); - // Perform interpolation to fill the resized NdArray - for (let y = 0; y < newHeight; y++) { - for (let x = 0; x < newWidth; x++) { - for (let c = 0; c < srcChannels; c++) { - const srcX = x * scaleX; - const srcY = y * scaleY; - const x1 = Math.floor(srcX); - const x2 = Math.ceil(srcX); - const y1 = Math.floor(srcY); - const y2 = Math.ceil(srcY); - - const dx = srcX - x1; - const dy = srcY - y1; - - const p1 = imageTensor.get(y1, x1, c); - const p2 = imageTensor.get(y1, x2, c); - const p3 = imageTensor.get(y2, x1, c); - const p4 = imageTensor.get(y2, x2, c); - - // Perform bilinear interpolation - const interpolatedValue = - (1 - dx) * (1 - dy) * p1 + - dx * (1 - dy) * p2 + - (1 - dx) * dy * p3 + - dx * dy * p4; - - resizedImageData.set(y, x, c, Math.round(interpolatedValue)); - } - } - } - - return resizedImageData; -} - -// async function tensorResize( -// imageTensor: NdArray, -// newWidth: number, -// newHeight: number -// ): Promise> { -// const [srcHeight, srcWidth, srcChannels] = imageTensor.shape; -// const imageData = new ImageData(imageTensor.data, srcWidth, srcHeight); -// const bitmap = await createImageBitmap(imageData, { -// resizeWidth: newWidth, -// resizeHeight: newHeight, -// resizeQuality: 'high', -// premultiplyAlpha: 'premultiply' -// }); -// const outImageData = imageBitmapToImageData(bitmap); -// return ndarray(outImageData.data, [ -// outImageData.height, -// outImageData.width, -// 4 -// ]); -// } - -function tensorHWCtoBCHW( - imageTensor: NdArray, - mean: number[] = [128, 128, 128], - std: number[] = [256, 256, 256] -): NdArray { - var imageBufferData = imageTensor.data; - const [srcHeight, srcWidth, srcChannels] = imageTensor.shape; - const stride = srcHeight * srcWidth; - const float32Data = new Float32Array(3 * stride); - - // r_0, r_1, .... g_0,g_1, .... b_0 - for (let i = 0, j = 0; i < imageBufferData.length; i += 4, j += 1) { - float32Data[j] = (imageBufferData[i] - mean[0]) / std[0]; - float32Data[j + stride] = (imageBufferData[i + 1] - mean[1]) / std[1]; - float32Data[j + stride + stride] = - (imageBufferData[i + 2] - mean[2]) / std[2]; - } - - return ndarray(float32Data, [1, 3, srcHeight, srcWidth]); -} - -function calculateProportionalSize( - originalWidth: number, - originalHeight: number, - maxWidth: number, - maxHeight: number -): [number, number] { - const widthRatio = maxWidth / originalWidth; - const heightRatio = maxHeight / originalHeight; - const scalingFactor = Math.min(widthRatio, heightRatio); - const newWidth = Math.floor(originalWidth * scalingFactor); - const newHeight = Math.floor(originalHeight * scalingFactor); - return [newWidth, newHeight]; -} diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json deleted file mode 100644 index c8994f3..0000000 --- a/packages/web/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "lib": ["DOM", "ES2020"], - "resolveJsonModule": true, - "esModuleInterop": true, - "emitDeclarationOnly": true, - "declaration": true - } -} diff --git a/scripts/package-resources.mjs b/scripts/package-resources.mjs deleted file mode 100644 index cabf68d..0000000 --- a/scripts/package-resources.mjs +++ /dev/null @@ -1,191 +0,0 @@ -export default main; -import crypto from 'node:crypto'; -import fs from 'node:fs'; -import path from 'node:path'; - -import { globSync } from 'glob'; - -// All paths are relative to the directory of this file -const BaseDir = path.resolve('.'); -const DefaultOutDir = path.resolve('./dist'); -const DefaultEntry = { - mime: 'application/octet-stream', - transform: calculateSHA256 -}; - -async function calculateSHA256(filePath) { - return new Promise((resolve, reject) => { - const hash = crypto.createHash('sha256'); - const stream = fs.createReadStream(filePath); - - stream.on('data', (data) => hash.update(data)); - stream.on('end', () => resolve(hash.digest('hex'))); - stream.on('error', (error) => reject(error)); - }); -} - -async function copyFile(sourcePath, destinationPath) { - return new Promise((resolve, reject) => { - const readStream = fs.createReadStream(sourcePath); - const writeStream = fs.createWriteStream(destinationPath); - - readStream.on('error', (error) => reject(error)); - writeStream.on('error', (error) => reject(error)); - writeStream.on('finish', () => resolve()); - readStream.pipe(writeStream); - }); -} - -async function linkFile(sourcePath, destinationPath) { - return new Promise((resolve, reject) => { - fs.symlink(sourcePath, destinationPath, (error) => { - if (error) { - reject(error); - } else { - resolve(); - } - }); - }); -} - -async function deleteFile(filePath) { - return new Promise((resolve, reject) => { - fs.unlink(filePath, (error) => { - if (error) { - if (error.code === 'ENOENT') { - // File doesn't exist, resolve without an error. - resolve(); - } else { - // Other error occurred, reject with the error. - reject(error); - } - } else { - // File deleted successfully. - resolve(); - } - }); - }); -} - -function isFileHidden(filePath) { - const fileName = path.basename(filePath); - return fileName.startsWith('.'); // || isHiddenOnWindows(filePath); -} - -async function listAllFiles(dir) { - return new Promise((resolve, reject) => { - const allFiles = []; - - function traverse(currentDir) { - fs.readdirSync(currentDir).forEach((file) => { - const filePath = path.join(currentDir, file); - const stat = fs.statSync(filePath); - - if (stat.isFile()) { - allFiles.push(filePath); - } else if (stat.isDirectory()) { - traverse(filePath); - } - }); - } - - try { - traverse(dir); - resolve(allFiles); - } catch (error) { - reject(error); - } - }); -} - -function fileExists(filePath) { - return fs.existsSync(filePath); -} - -async function sizeFile(filePath) { - return new Promise((resolve, reject) => { - fs.stat(filePath, (error, stats) => { - if (error) { - reject(error); - } else { - resolve(stats.size); - } - }); - }); -} - -function isFunction(variable) { - return typeof variable === 'function'; -} - -async function transform(fileName, entry) { - // console.log(entry) - const fileHash = await entry.transform(fileName); - const fileSize = await sizeFile(fileName); - const destFile = path.resolve(DefaultOutDir, fileHash); - await deleteFile(destFile); - await copyFile(fileName, destFile); - const chunks = {}; - chunks[fileHash] = { range: [0, fileSize - 1] }; - return { - chunks: chunks, - size: fileSize, - mime: entry.mime - }; -} - -async function loadConfig() { - if (fileExists(path.resolve(BaseDir, '.resources.mjs'))) { - const resources = await import(path.resolve(BaseDir, '.resources.mjs')); - const entries = resources.default; - return entries; - } - return { files }; -} - -async function main() { - fs.mkdirSync(DefaultOutDir, { recursive: true }); - const resources = await generateFiles(); - - await saveResourceMetadata(resources); -} - -async function generateFiles() { - const filesToProcess = {}; - const entries = await loadConfig(); - for (const entry of entries) { - const entryPath = path.resolve(BaseDir, entry.source); - const candidates = await globSync(entryPath, { nodir: true }); - if (candidates.length === 0) { - console.error(`No files found for ${entry.source}`); - process.exit(-1); - } - - for (const candidate of candidates) { - filesToProcess[candidate] = { ...DefaultEntry, ...entry }; - } - } - return filesToProcess; -} -async function loadResourceMetadata() { - const resourceMetadataFile = path.resolve(DefaultOutDir, 'resources.json'); - if (fileExists(resourceMetadataFile)) { - return JSON.parse(fs.readFileSync(resourceMetadataFile, 'utf8')); - } - return []; -} -async function saveResourceMetadata(filesToProcess) { - const resourcesMetadata = {}; - for (const fileToProcess of Object.keys(filesToProcess)) { - const entry = filesToProcess[fileToProcess]; - const metadata = await transform(fileToProcess, entry, DefaultOutDir); - const key = path.join(entry.path, fileToProcess.split('/').pop()); - resourcesMetadata[key] = metadata; - } - fs.writeFileSync( - path.resolve(DefaultOutDir, 'resources.json'), - JSON.stringify(resourcesMetadata, null, 2) - ); -} - -main(process.argv); diff --git a/scripts/package-version.mjs b/scripts/package-version.mjs deleted file mode 100644 index 62cc594..0000000 --- a/scripts/package-version.mjs +++ /dev/null @@ -1,28 +0,0 @@ -import fs from 'node:fs'; -import path from 'node:path'; -import { globSync } from 'glob'; - -const workspaceManifest = JSON.parse(fs.readFileSync('./package.json', 'utf8')); -const newVersion = process.argv[2] || workspaceManifest.version || undefined; - -function getFiles(dir) { - return globSync(path.join(dir, '**/package.json'), { - nodir: true, - ignore: ['**/node_modules/**'] - }); -} - -for (let file of getFiles('./')) { - const fileContent = fs.readFileSync(file, 'utf8').toString(); - const manifest = JSON.parse(fileContent, 'utf8'); - - if (newVersion && manifest.version !== newVersion) { - console.info( - `${manifest.name}@${manifest.version} => ${manifest.name}@${newVersion}` - ); - manifest.version = newVersion; - fs.writeFileSync(file, JSON.stringify(manifest, null, 2)); - } else { - console.info(`${manifest.name}@${manifest.version}`); - } -} diff --git a/src/browser.ts b/src/browser.ts new file mode 100644 index 0000000..deedf11 --- /dev/null +++ b/src/browser.ts @@ -0,0 +1,66 @@ +// Exports +export default removeBackground; +export type { ImageSource, Config }; + +// Imports +import { runInference } from './inference'; +import { Config, validateConfig } from './schema'; +import { createOnnxRuntime } from './ort-web-rt'; +import * as utils from './utils'; +import * as Bundle from './bundle'; +import { Imports } from './tensor'; + +import { memoize } from 'lodash'; + +type ImageSource = ImageData | ArrayBuffer | Uint8Array | Blob | URL | string; + +async function createSession(config: Config, imports: Imports) { + if (config.debug) console.debug('Loading model...'); + const model = config.model; + const blob = await Bundle.load(model, config); + const arrayBuffer = await blob.arrayBuffer(); + const session = await imports.createSession(arrayBuffer); + return session; +} + +async function _init(config?: Config) { + config = validateConfig(config); + const imports = createOnnxRuntime(config); + const session = await createSession(config, imports); + return { config, imports, session }; +} + +const init = memoize(_init, (config) => JSON.stringify(config)); + +async function removeBackground( + image: ImageSource, + configuration?: Config +): Promise { + const { config, imports, session } = await init(configuration); + + if (config.debug) { + config.progress = + config.progress ?? + ((key, current, total) => { + console.debug(`Downloading ${key}: ${current} of ${total}`); + }); + + if (!crossOriginIsolated) { + console.debug( + 'Cross-Origin-Isolated is not enabled. Performance will be degraded. Please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer.' + ); + } + } + + image = await utils.imageSourceToImageData(image); + + if (!(image instanceof ImageData)) { + throw new Error( + 'Image not an ImageData | ArrayBuffer | Uint8Array | Blob | URL | string' + ); + } + + const imageData = await runInference(image, config, imports, session); + + return await utils.imageEncode(imageData); +} diff --git a/src/bundle.ts b/src/bundle.ts new file mode 100644 index 0000000..afbf060 --- /dev/null +++ b/src/bundle.ts @@ -0,0 +1,139 @@ +export { preload, load }; + +import { Config } from './schema'; + +type Entry = { + url: string; + size: number; + mime: string; +}; +const bundle: Map = new Map([ + [ + 'small', + { + url: require('../bundle/models/7001d60734fdc112dd9c062635fb59cd401fb82a9d4213134bce4dbd655c803a.onnx'), + size: 44342436, + mime: 'application/octet-stream' + } + ], + [ + 'medium', + { + url: require('../bundle/models/b6e8497ba978a6f5fbb647e419d2696cd80df5a23cb6a8ea532021911bd76acb.onnx'), + size: 88188479, + mime: 'application/octet-stream' + } + ], + // [ + // 'large', + // { + // url: require('../bundle/models/17b7466d93bb60b0e88affa2b0e8b3eee309c7de183d394ce4b956339ebd95e6.onnx'), + // size: 176173887, + // mime: 'application/octet-stream' + // } + // ], + [ + 'ort-wasm-simd-threaded.jsep.wasm', + { + url: require('../node_modules/onnxruntime-web/dist/ort-wasm-simd-threaded.jsep.wasm'), + size: 18215132, + mime: 'application/wasm' + } + ], + [ + 'ort-wasm-simd.jsep.wasm', + { + url: require('../node_modules/onnxruntime-web/dist/ort-wasm-simd.jsep.wasm'), + size: 16836274, + mime: 'application/wasm' + } + ], + [ + 'ort-wasm-simd-threaded.wasm', + { + url: require('../node_modules/onnxruntime-web/dist/ort-wasm-simd-threaded.wasm'), + size: 10281838, + mime: 'application/wasm' + } + ], + [ + 'ort-wasm-simd.wasm', + { + url: require('../node_modules/onnxruntime-web/dist/ort-wasm-simd.wasm'), + size: 10335238, + mime: 'application/wasm' + } + ], + [ + 'ort-wasm-threaded.wasm', + { + url: require('../node_modules/onnxruntime-web/dist/ort-wasm-threaded.wasm'), + size: 9413659, + mime: 'application/wasm' + } + ], + [ + 'ort-wasm.wasm', + { + url: require('../node_modules/onnxruntime-web/dist/ort-wasm.wasm'), + size: 9487920, + mime: 'application/wasm' + } + ] +]); + +async function load(key: string, config: Config) { + const entry = bundle.get(key)!; + let url = entry.url; + if (config.publicPath) { + url = new URL(url.split('/').pop()!, config.publicPath).toString(); + } + + const response = await fetch(url, config.fetchArgs); + + const chunks = config.progress + ? await fetchChunked(response, entry, config, key) + : [await response.blob()]; + + const data = new Blob(chunks, { type: entry.mime }); + if (data.size !== entry.size) { + throw new Error( + `Failed to fetch ${key} with size ${entry.size} but got ${data.size}` + ); + } + return data; +} + +async function fetchChunked( + response: Response, + entry: any, + config: Config, + key: string +) { + const reader = response.body!.getReader(); + // let contentLength = Number(response.headers.get('Content-Length')); + const contentLength = entry.size ?? 0; + let receivedLength = 0; + + let chunks: Uint8Array[] = []; + while (true) { + const { done, value } = await reader.read(); + if (done) { + break; + } + chunks.push(value); + receivedLength += value.length; + if (config.progress) + config.progress(`fetch:${key}`, receivedLength, contentLength); + } + return chunks; +} + +async function preload(config: Config) { + // This will warmup the caches + let result = new Map(bundle); + result.forEach(async (_, key) => { + await load(key, config); + }); + return result; +} diff --git a/src/inference.ts b/src/inference.ts new file mode 100644 index 0000000..1dabdad --- /dev/null +++ b/src/inference.ts @@ -0,0 +1,48 @@ +import { imageDataResize, imageDataToFloat32Array } from './utils'; +import { Imports } from './tensor'; +import { calculateProportionalSize } from './utils'; +import { Config } from './schema'; + +export async function runInference( + imageData: ImageData, + config: Config, + imports: Imports, + session: any +): Promise { + if (config.progress) config.progress('compute:inference', 0, 1); + const resolution = 1024; + const src_width = imageData.width; + const src_height = imageData.height; + + const dims = [1, 3, resolution, resolution]; + let tensorImage = await imageDataResize(imageData, resolution, resolution); + const inputTensorData = imageDataToFloat32Array(tensorImage); + + const predictionsDict = await imports.runSession( + session, + [['input', { data: inputTensorData, shape: dims, dataType: 'float32' }]], + ['output'] + ); + + const stride = resolution * resolution; + + for (let i = 0; i < 4 * stride; i += 4) { + let idx = i / 4; + let alpha = predictionsDict[0].data[idx]; + tensorImage.data[i + 3] = alpha * 255; + } + + const [width, height] = calculateProportionalSize( + imageData.width, + imageData.height, + resolution, + resolution + ); + + const dst_width = Math.min(width, src_width); + const dst_height = Math.min(height, src_height); + + tensorImage = await imageDataResize(tensorImage, dst_width, dst_height); + if (config.progress) config.progress('compute:inference', 1, 1); + return tensorImage; +} diff --git a/src/ort-web-rt.ts b/src/ort-web-rt.ts new file mode 100644 index 0000000..32576cf --- /dev/null +++ b/src/ort-web-rt.ts @@ -0,0 +1,110 @@ +export { createOnnxRuntime }; + +import { simd, threads } from 'wasm-feature-detect'; +import { Tensor, Imports } from './tensor'; + +import * as ort from 'onnxruntime-web'; +import * as Bundle from './bundle'; + +function createOnnxRuntime(config: any): Imports { + return { + createSession: async (model: any) => { + const capabilities = { + simd: await simd(), + threads: await threads(), + SharedArrayBuffer: typeof SharedArrayBuffer !== 'undefined', + numThreads: navigator.hardwareConcurrency ?? 4, + // @ts-ignore + webgpu: navigator.gpu !== undefined + }; + if (config.debug) { + console.debug('Capabilities:', capabilities); + ort.env.debug = true; + ort.env.logLevel = 'verbose'; + } + + ort.env.wasm.numThreads = capabilities.numThreads; + ort.env.wasm.simd = capabilities.simd; + ort.env.wasm.proxy = config.proxyToWorker; + ort.env.wasm.wasmPaths = { + // 'ort-wasm-simd-threaded.jsep.wasm': URL.createObjectURL( + // await Bundle.load('ort-wasm-simd-threaded.jsep.wasm', config) + // ), + // 'ort-wasm-simd.jsep.wasm': URL.createObjectURL( + // await Bundle.load('ort-wasm-simd.jsep.wasm', config) + // ), + 'ort-wasm-simd-threaded.wasm': URL.createObjectURL( + await Bundle.load('ort-wasm-simd-threaded.wasm', config) + ), + 'ort-wasm-simd.wasm': URL.createObjectURL( + await Bundle.load('ort-wasm-simd.wasm', config) + ), + 'ort-wasm-threaded.wasm': URL.createObjectURL( + await Bundle.load('ort-wasm-threaded.wasm', config) + ), + 'ort-wasm.wasm': URL.createObjectURL( + await Bundle.load('ort-wasm.wasm', config) + ) + }; + + if (config.debug) { + console.debug('ort.env.wasm:', ort.env.wasm); + } + + const ort_config: ort.InferenceSession.SessionOptions = { + executionProviders: ['wasm'], + graphOptimizationLevel: 'all', + executionMode: 'parallel', + enableCpuMemArena: true + }; + + const session = await ort.InferenceSession.create( + model, + ort_config + ).catch((e: any) => { + throw new Error( + `Failed to create session: ${e}. Please check if the publicPath is set correctly.` + ); + }); + + // URL.revokeObjectURL(ort.env.wasm.wasmPaths['ort-wasm-simd-threaded.jsep.wasm']!); + // URL.revokeObjectURL(ort.env.wasm.wasmPaths['ort-wasm-simd.jsep.wasm']!); + URL.revokeObjectURL( + ort.env.wasm.wasmPaths['ort-wasm-simd-threaded.wasm']! + ); + URL.revokeObjectURL(ort.env.wasm.wasmPaths['ort-wasm-simd.wasm']!); + URL.revokeObjectURL(ort.env.wasm.wasmPaths['ort-wasm-threaded.wasm']!); + URL.revokeObjectURL(ort.env.wasm.wasmPaths['ort-wasm.wasm']!); + + return session; + }, + runSession: async ( + session: any, + inputs: [string, Tensor][], + outputs: [string] + ) => { + const feeds: Record = {}; + for (const [key, tensor] of inputs) { + feeds[key] = new ort.Tensor( + 'float32', + new Float32Array(tensor.data), + tensor.shape + ); + } + const outputData = await session.run(feeds, {}); + const outputKVPairs: Tensor[] = []; + + for (const key of outputs) { + let output: ort.Tensor = outputData[key]; + let tensor: Tensor = { + data: output.data as Float32Array, + shape: output.dims as number[], + dataType: 'float32' + }; + outputKVPairs.push(tensor); + } + + return outputKVPairs; + } + }; +} diff --git a/packages/node/src/schema.ts b/src/schema.ts similarity index 71% rename from packages/node/src/schema.ts rename to src/schema.ts index 8555b8e..597d7b2 100644 --- a/packages/node/src/schema.ts +++ b/src/schema.ts @@ -1,16 +1,7 @@ export { ConfigSchema, Config, validateConfig }; -import { z } from 'zod'; -import path from 'node:path'; -import pkg from '../package.json'; -function isURI(s: string) { - try { - new URL(s); - return true; - } catch (err) { - return false; - } -} +import { z } from 'zod'; +import { ensureAbsoluteURL } from './utils'; const ConfigSchema = z .object({ @@ -18,14 +9,15 @@ const ConfigSchema = z .string() .optional() .describe('The public path to the wasm files and the onnx model.') - .default(`file://${path.resolve(`node_modules/${pkg.name}/dist/`)}/`) - .refine((val) => isURI(val), { - message: 'String must be a valid uri ("file://" or "http(s)://"' - }), + .transform((val) => (val ? ensureAbsoluteURL(val) : val)), debug: z .boolean() .default(false) .describe('Whether to enable debug logging.'), + proxyToWorker: z + .boolean() + .default(true) + .describe('Whether to proxy inference to a web worker.'), fetchArgs: z .object({}) .default({}) diff --git a/src/tensor.ts b/src/tensor.ts new file mode 100644 index 0000000..9784158 --- /dev/null +++ b/src/tensor.ts @@ -0,0 +1,13 @@ +export type Tensor = { + shape: number[]; + data: Float32Array; + dataType: 'float32'; +}; +export type Imports = { + createSession: (model: any) => Promise; + runSession( + session: any, + inputs: [string, Tensor][], + outputs: [string] + ): Promise; +}; diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..87319ab --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,122 @@ +export { + imageDecode, + imageEncode, + imageBitmapToImageData, + imageDataResize, + imageDataToFloat32Array, + calculateProportionalSize, + isAbsoluteURL, + ensureAbsoluteURL, + imageSourceToImageData +}; + +async function imageDecode(blob: Blob): Promise { + const imageBitmap = await createImageBitmap(blob); + const imageData = imageBitmapToImageData(imageBitmap); + return imageData; +} + +async function imageEncode( + imageData: ImageData, + quality: number = 0.8, + type: string = 'image/png' +): Promise { + var canvas = new OffscreenCanvas(imageData.width, imageData.height); + var ctx = canvas.getContext('2d')!; + ctx.putImageData(imageData, 0, 0); + return canvas.convertToBlob({ quality, type }); +} + +function imageBitmapToImageData(imageBitmap: ImageBitmap): ImageData { + var canvas = new OffscreenCanvas(imageBitmap.width, imageBitmap.height); + var ctx = canvas.getContext('2d')!; + + // Draw the ImageBitmap onto the canvas + ctx.drawImage(imageBitmap, 0, 0); + + // Retrieve the ImageData from the canvas + return ctx.getImageData(0, 0, canvas.width, canvas.height); +} + +async function imageDataResize( + imageData: ImageData, + newWidth: number, + newHeight: number +): Promise { + const bitmap = await createImageBitmap(imageData, { + resizeWidth: newWidth, + resizeHeight: newHeight, + resizeQuality: 'high', + premultiplyAlpha: 'premultiply' + }); + return imageBitmapToImageData(bitmap); +} + +function imageDataToFloat32Array( + image: ImageData, + mean: number[] = [128, 128, 128], + std: number[] = [256, 256, 256] +): Float32Array { + var imageBufferData = image.data; + + const stride = image.width * image.height; + const float32Data = new Float32Array(3 * stride); + + // r_0, r_1, .... g_0,g_1, .... b_0 + for (let i = 0, j = 0; i < imageBufferData.length; i += 4, j += 1) { + float32Data[j] = (imageBufferData[i] - mean[0]) / std[0]; + float32Data[j + stride] = (imageBufferData[i + 1] - mean[1]) / std[1]; + float32Data[j + stride + stride] = + (imageBufferData[i + 2] - mean[2]) / std[2]; + } + + return float32Data; +} + +function calculateProportionalSize( + originalWidth: number, + originalHeight: number, + maxWidth: number, + maxHeight: number +): [number, number] { + const widthRatio = maxWidth / originalWidth; + const heightRatio = maxHeight / originalHeight; + const scalingFactor = Math.min(widthRatio, heightRatio); + const newWidth = Math.floor(originalWidth * scalingFactor); + const newHeight = Math.floor(originalHeight * scalingFactor); + return [newWidth, newHeight]; +} + +function isAbsoluteURL(url: string): boolean { + const regExp = new RegExp('^(?:[a-z+]+:)?//', 'i'); + return regExp.test(url); // true - regular http absolute URL +} + +function ensureAbsoluteURL(url: string): string { + if (isAbsoluteURL(url)) { + return url; + } else { + return new URL(url, window.location.href).href; + } +} + +async function imageSourceToImageData( + image: string | URL | ArrayBuffer | ImageData | Blob | Uint8Array +) { + if (typeof image === 'string') { + image = ensureAbsoluteURL(image); + image = new URL(image); + } + if (image instanceof URL) { + const response = await fetch(image, {}); + image = await response.blob(); + } + if (image instanceof ArrayBuffer || ArrayBuffer.isView(image)) { + image = new Blob([image]); + } + if (image instanceof Blob) { + image = await imageDecode(image); + } + + return image as ImageData; +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..0127baf --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,21 @@ +{ + "include": ["src", "types"], + "compilerOptions": { + "module": "esnext", + "lib": ["DOM", "esnext"], + "importHelpers": true, + "declaration": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "moduleResolution": "node", + "jsx": "react", + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..dcfce48 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,98 @@ +const path = require('path'); +const pkg = require('./package.json'); + +module.exports = (env, argv) => { + const isDevelopment = argv.mode === 'development'; + const publicPath = isDevelopment + ? undefined + : `https://unpkg.com/${pkg.name}@${pkg.version}/dist/`; + + const commonConfig = { + devtool: 'source-map', + module: { + rules: [ + { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/ + }, + { + test: /\.(png|jpeg|jpg)$/i, + type: 'asset/resource', + generator: { + publicPath: publicPath + } + }, + { + test: /\.(onnx)$/i, + type: 'asset/resource', + generator: { + publicPath: publicPath + } + }, + { + test: /\.(wasm)$/i, + type: 'asset/resource', + generator: { + publicPath: publicPath + } + } + ] + }, + resolve: { + extensions: ['.ts', '.js'] + }, + optimization: { + splitChunks: { + chunks: 'async' + } + } + }; + const umdConfig = { + ...commonConfig, + entry: './src/browser.ts', + target: 'web', + output: { + filename: 'browser.js', + path: path.resolve(__dirname, 'dist'), + publicPath: publicPath, + library: { + type: 'umd', + name: 'backgroundRemoval' + } + } + }; + + const esmConfig = { + ...commonConfig, + experiments: { + outputModule: true // needed for esm + }, + entry: './src/browser.ts', + target: 'web', + output: { + filename: 'browser.mjs', + path: path.resolve(__dirname, 'dist'), + publicPath: publicPath, + library: { + type: 'module' + } + } + }; + + const nodeConfig = { + ...commonConfig, + entry: './src/node.ts', + target: 'node', + output: { + filename: 'node.js', + path: path.resolve(__dirname, 'dist'), + library: { + type: 'umd', + name: 'backgroundRemoval' + } + } + }; + + return [umdConfig, esmConfig]; +};