├── .changeset ├── README.md └── config.json ├── .editorconfig ├── .github └── workflows │ ├── pr.yml │ └── release.yml ├── .gitignore ├── .prettierrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── example ├── node │ ├── package.json │ ├── pnpm-lock.yaml │ ├── src │ │ └── main.ts │ └── tsconfig.json └── web │ ├── index.html │ ├── package.json │ ├── pnpm-lock.yaml │ ├── src │ └── main.ts │ └── vite.config.js ├── package.json ├── pnpm-lock.yaml ├── src ├── interfaces.ts ├── lib │ ├── decoder.ts │ ├── model.ts │ └── processor.ts ├── node │ ├── Gliner.ts │ ├── ONNXNodeWrapper.ts │ └── index.ts ├── types.d.ts └── web │ ├── Gliner.ts │ ├── ONNXWebWrapper.ts │ └── index.ts ├── tsconfig.json └── tsup.config.ts /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.3/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "restricted", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } 12 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.github/workflows/pr.yml: -------------------------------------------------------------------------------- 1 | name: "PR Workflow" 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | # Checkout the code 13 | - name: Checkout Code 14 | uses: actions/checkout@v3 15 | 16 | # Set up Node.js 17 | - name: Set Up Node.js 18 | uses: actions/setup-node@v3 19 | with: 20 | node-version: 18 21 | 22 | # Set up pnpm 23 | - name: Set Up pnpm 24 | uses: pnpm/action-setup@v2 25 | with: 26 | version: 6.0.2 27 | 28 | # Install dependencies 29 | - name: Install Dependencies with pnpm 30 | run: pnpm install 31 | 32 | # Run tests 33 | - name: Run Tests 34 | run: pnpm test 35 | 36 | # Lint the code 37 | - name: Lint Code 38 | run: pnpm run lint 39 | 40 | # Build the project 41 | - name: Build Project 42 | run: pnpm run build 43 | 44 | # Check for pending changesets before running further tests and version checks 45 | - name: Check for Changesets 46 | id: check_changesets 47 | run: | 48 | if pnpm changeset status | grep -q "No unreleased changesets"; then 49 | echo "No unreleased changesets found, create a changeset using pnpm changeset." 50 | exit 1 51 | else 52 | echo "Changesets found, version bump possible." 53 | exit 0 54 | fi 55 | continue-on-error: false 56 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - main # Trigger only on pushes to the main branch 7 | 8 | workflow_dispatch: # Allows manually triggering the workflow for testing or urgent releases 9 | 10 | concurrency: ${{ github.workflow }}-${{ github.ref }} 11 | 12 | jobs: 13 | release: 14 | if: github.repository == 'Ingvarstep/GLiNER.js' 15 | permissions: 16 | contents: write # Required to create the release 17 | actions: read # For checking token permissions 18 | issues: write # For creating an issue 19 | name: Create GitHub Release and Publish to npm 20 | runs-on: ubuntu-latest 21 | 22 | steps: 23 | # Set NPM Registry to ensure the correct registry is used 24 | - name: Set NPM Registry 25 | run: 26 | npm config set registry https://registry.npmjs.org/ 27 | 28 | # Set NPM registry and authentication token via .npmrc 29 | - name: Create .npmrc file with auth token 30 | run: | 31 | echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc 32 | 33 | # Verify NPM Authentication 34 | - name: Verify NPM Authentication 35 | run: npm whoami 36 | env: 37 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 38 | 39 | # Checkout the code 40 | - name: Checkout code 41 | uses: actions/checkout@v3 42 | 43 | # Set up Node.js 44 | - name: Set up Node.js 45 | uses: actions/setup-node@v3 46 | with: 47 | node-version: 18 48 | 49 | # Set up pnpm 50 | - name: Set up pnpm 51 | uses: pnpm/action-setup@v2 52 | with: 53 | version: 6.0.2 54 | 55 | # Install dependencies 56 | - name: Install dependencies 57 | run: pnpm install 58 | 59 | # Check for pending changesets before proceeding with the release 60 | - name: Check for changesets 61 | id: check_changesets 62 | run: | 63 | if pnpm changeset status | grep -q "No unreleased changesets"; then 64 | echo "No unreleased changesets found. Skipping version bump and release." 65 | exit 0 66 | fi 67 | continue-on-error: false # If no changesets are found, this step will stop the workflow 68 | 69 | # Run Changesets to version the packages and apply changelogs 70 | - name: Run Changesets version 71 | if: steps.check_changesets.outcome == 'success' 72 | run: pnpm changeset version 73 | 74 | # Commit the version bump and changelog updates (if applicable) 75 | - name: Commit version bump 76 | if: steps.check_changesets.outcome == 'success' 77 | run: | 78 | git config --global user.name "GitHub Actions" 79 | git config --global user.email "actions@github.com" 80 | git add . 81 | git commit -m "Version bump and changelog update" 82 | git push 83 | 84 | # Extract package name and version from package.json 85 | - name: Get name and version from package.json 86 | id: get_package_info 87 | run: | 88 | NAME=$(jq -r '.name' package.json) 89 | VERSION=$(jq -r '.version' package.json) 90 | echo "PACKAGE_NAME=$NAME" >> $GITHUB_ENV 91 | echo "PACKAGE_VERSION=$VERSION" >> $GITHUB_ENV 92 | 93 | # Create a new Git tag based on the version from package.json 94 | - name: Create Tag 95 | if: steps.check_changesets.outcome == 'success' 96 | run: | 97 | git tag v${{ env.PACKAGE_VERSION }} 98 | git push origin v${{ env.PACKAGE_VERSION }} 99 | 100 | # Build the package (after version bump) 101 | - name: Build the package 102 | if: steps.check_changesets.outcome == 'success' 103 | run: pnpm run build # Ensure you have a build script in your package.json 104 | 105 | # Create release archives (zip and gzip) 106 | - name: Create source code archives 107 | if: steps.check_changesets.outcome == 'success' 108 | run: | 109 | zip -r ${{ env.PACKAGE_NAME }}-${{ env.PACKAGE_VERSION }}.zip dist package.json src README.md CHANGELOG.md 110 | tar -czvf ${{ env.PACKAGE_NAME }}-${{ env.PACKAGE_VERSION }}.tar.gz dist package.json src README.md CHANGELOG.md 111 | 112 | # Create GitHub Release and Upload Release Assets (with display name "Source Code") 113 | - name: Create GitHub Release and Upload Assets 114 | if: steps.check_changesets.outcome == 'success' 115 | uses: softprops/action-gh-release@v1 116 | with: 117 | tag_name: v${{ env.PACKAGE_VERSION }} # Use the tag created in the previous step 118 | name: ${{ env.PACKAGE_VERSION }} # Use the version as the release name 119 | files: | 120 | ${{ env.PACKAGE_NAME }}-${{ env.PACKAGE_VERSION }}.zip#Source Code 121 | ${{ env.PACKAGE_NAME }}-${{ env.PACKAGE_VERSION }}.tar.gz#Source Code 122 | env: 123 | GITHUB_TOKEN: 124 | ${{ secrets.GITHUB_TOKEN }} # GitHub token for authentication 125 | 126 | 127 | # Set the NPM authentication token using pnpm 128 | - name: Set NPM Auth Token 129 | run: pnpm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} 130 | 131 | # Publish to npm (activated) 132 | - name: Publish to npm 133 | if: steps.check_changesets.outcome == 'success' 134 | run: pnpm publish --access public 135 | env: 136 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # Use NPM token for publishing 137 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.onnx 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | pnpm-debug.log* 10 | lerna-debug.log* 11 | 12 | node_modules 13 | dist 14 | dist-ssr 15 | *.local 16 | 17 | # Editor directories and files 18 | .vscode/* 19 | !.vscode/extensions.json 20 | .idea 21 | .DS_Store 22 | *.suo 23 | *.ntvs* 24 | *.njsproj 25 | *.sln 26 | *.sw? 27 | 28 | *.tar.gz 29 | *.zip -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": true, 6 | "singleQuote": false, 7 | "trailingComma": "all", 8 | "bracketSpacing": true, 9 | "endOfLine": "lf" 10 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # gliner 2 | 3 | ## 0.0.19 4 | 5 | ### Patch Changes 6 | 7 | - 4528498: Fixate onnx versions for stability 8 | 9 | ## 0.0.18 10 | 11 | ### Patch Changes 12 | 13 | - f9d1180: added node support 14 | 15 | ## 0.0.17 16 | 17 | ### Patch Changes 18 | 19 | - 4265f9f: removed node.js support, too many errors at the moment 20 | 21 | ## 0.0.16 22 | 23 | ### Patch Changes 24 | 25 | - bf6a8e2: small refactor of onnx, add onnx settings readme, add node support(untested) 26 | 27 | ## 0.0.15 28 | 29 | ### Patch Changes 30 | 31 | - f37768e: exporting whitespace token splitter 32 | 33 | ## 0.0.14 34 | 35 | ### Patch Changes 36 | 37 | - 0c5d792: chunking, speed optimizations, better interfaces, text span 38 | 39 | ## 0.0.13 40 | 41 | ### Patch Changes 42 | 43 | - e843ca8: debug 44 | 45 | ## 0.0.12 46 | 47 | ### Patch Changes 48 | 49 | - 4485b26: debug 50 | 51 | ## 0.0.11 52 | 53 | ### Patch Changes 54 | 55 | - c76ef5a: debug 56 | 57 | ## 0.0.10 58 | 59 | ### Patch Changes 60 | 61 | - c77546b: debug github action 62 | - 2e0b65e: debug 63 | 64 | ## 0.0.9 65 | 66 | ### Patch Changes 67 | 68 | - 19fd347: debug 69 | 70 | ## 0.0.8 71 | 72 | ### Patch Changes 73 | 74 | - 4c69aea: debug 75 | 76 | ## 0.0.7 77 | 78 | ### Patch Changes 79 | 80 | - c5bfd67: release file has version number 81 | 82 | ## 0.0.6 83 | 84 | ### Patch Changes 85 | 86 | - 6840b38: using package.json version for gittag 87 | 88 | ## 0.0.5 89 | 90 | ### Patch Changes 91 | 92 | - d3f7bc7: now using gittags 93 | 94 | ## 0.0.4 95 | 96 | ### Patch Changes 97 | 98 | - 6b7b6db: fix github action 99 | 100 | ## 0.0.3 101 | 102 | ### Patch Changes 103 | 104 | - 8c71fa7: Library Setup 105 | 106 | ## 0.0.2 107 | 108 | ### Patch Changes 109 | 110 | - library setup 111 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 👑 GLiNER.js: Generalist and Lightweight Named Entity Recognition for JavaScript 2 | 3 | GLiNER.js is a TypeScript-based inference engine for running GLiNER (Generalist and Lightweight Named Entity Recognition) models. GLiNER can identify any entity type using a bidirectional transformer encoder, offering a practical alternative to traditional NER models and large language models. 4 | 5 |

6 | 📄 Paper 7 |   •   8 | 📢 Discord 9 |   •   10 | 🤗 Demo 11 |   •   12 | 🤗 Available models 13 |   •   14 | 🧬 Official Repo 15 |

16 | 17 | ## 🌟 Key Features 18 | 19 | - Flexible entity recognition without predefined categories 20 | - Lightweight and fast inference 21 | - Easy integration with web applications 22 | - TypeScript support for better developer experience 23 | 24 | ## 🚀 Getting Started 25 | 26 | ### Installation 27 | 28 | ```bash 29 | npm install gliner 30 | ``` 31 | 32 | ### Basic Usage 33 | 34 | ```javascript 35 | const gliner = new Gliner({ 36 | tokenizerPath: "onnx-community/gliner_small-v2", 37 | onnxSettings: { 38 | modelPath: "public/model.onnx", // Can be a string path or Uint8Array/ArrayBufferLike 39 | executionProvider: "webgpu", // Optional: "cpu", "wasm", "webgpu", or "webgl" 40 | wasmPaths: "path/to/wasm", // Optional: path to WASM binaries 41 | multiThread: true, // Optional: enable multi-threading (for wasm/cpu providers) 42 | maxThreads: 4, // Optional: specify number of threads (for wasm/cpu providers) 43 | fetchBinary: true, // Optional: prefetch binary from wasmPaths 44 | }, 45 | transformersSettings: { 46 | // Optional 47 | allowLocalModels: true, 48 | useBrowserCache: true, 49 | }, 50 | maxWidth: 12, // Optional 51 | modelType: "gliner", // Optional 52 | }); 53 | 54 | await gliner.initialize(); 55 | 56 | const texts = ["Your input text here"]; 57 | const entities = ["city", "country", "person"]; 58 | const options = { 59 | flatNer: false, // Optional 60 | threshold: 0.1, // Optional 61 | multiLabel: false, // Optional 62 | }; 63 | 64 | const results = await gliner.inference({ 65 | texts, 66 | entities, 67 | ...options, 68 | }); 69 | console.log(results); 70 | ``` 71 | 72 | ### Response Format 73 | 74 | The inference results will be returned in the following format: 75 | 76 | ```javascript 77 | // For a single text input: 78 | [ 79 | { 80 | spanText: "New York", // The extracted entity text 81 | start: 10, // Start character position 82 | end: 18, // End character position 83 | label: "city", // Entity type 84 | score: 0.95, // Confidence score 85 | }, 86 | // ... more entities 87 | ]; 88 | 89 | // For multiple text inputs, you'll get an array of arrays 90 | ``` 91 | 92 | ## 🛠 Setup & Model Preparation 93 | 94 | To use GLiNER models in a web environment, you need an ONNX format model. You can: 95 | 96 | 1. Search for pre-converted models on [HuggingFace](https://huggingface.co/onnx-community?search_models=gliner) 97 | 2. Convert a model yourself using the [official Python script](https://github.com/urchade/GLiNER/blob/main/convert_to_onnx.py) 98 | 99 | ### Converting to ONNX Format 100 | 101 | Use the `convert_to_onnx.py` script with the following arguments: 102 | 103 | - `model_path`: Location of the GLiNER model 104 | - `save_path`: Where to save the ONNX file 105 | - `quantize`: Set to True for IntU8 quantization (optional) 106 | 107 | Example: 108 | 109 | ```bash 110 | python convert_to_onnx.py --model_path /path/to/your/model --save_path /path/to/save/onnx --quantize True 111 | ``` 112 | 113 | ## 🌟 Use Cases 114 | 115 | GLiNER.js offers versatile entity recognition capabilities across various domains: 116 | 117 | 1. **Enhanced Search Query Understanding** 118 | 2. **Real-time PII Detection** 119 | 3. **Intelligent Document Parsing** 120 | 4. **Content Summarization and Insight Extraction** 121 | 5. **Automated Content Tagging and Categorization** 122 | ... 123 | 124 | ## 🔧 Areas for Improvement 125 | 126 | - [ ] Further optimize inference speed 127 | - [ ] Add support for token-based GLiNER architecture 128 | - [ ] Implement bi-encoder GLiNER architecture for better scalability 129 | - [ ] Enable model training capabilities 130 | - [ ] Provide more usage examples 131 | 132 | ## Creating a PR 133 | 134 | - for any changes, remember to run `pnpm changeset`, otherwise there will not be a version bump and the PR Github Action will fail. 135 | 136 | ## 🙏 Acknowledgements 137 | 138 | - [GLiNER original authors](https://github.com/urchade/GLiNER) 139 | - [ONNX Runtime Web](https://github.com/microsoft/onnxruntime) 140 | - [Transformers.js](https://github.com/xenova/transformers.js) 141 | 142 | ## 📞 Support 143 | 144 | For questions and support, please join our [Discord community](https://discord.gg/ApZvyNZU) or open an issue on GitHub. 145 | -------------------------------------------------------------------------------- /example/node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "tsc", 8 | "start": "node dist/main.js", 9 | "dev": "tsx src/main.ts" 10 | }, 11 | "type": "module", 12 | "keywords": [], 13 | "author": "", 14 | "license": "ISC", 15 | "dependencies": { 16 | "gliner": "file:../../", 17 | "tsx": "^4.19.2" 18 | }, 19 | "devDependencies": { 20 | "@types/node": "^22.7.5", 21 | "ts-node": "^10.9.2", 22 | "typescript": "^5.6.3" 23 | } 24 | } -------------------------------------------------------------------------------- /example/node/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | gliner: 12 | specifier: file:../../ 13 | version: file:../..(onnxruntime-node@1.19.2) 14 | tsx: 15 | specifier: ^4.19.2 16 | version: 4.19.2 17 | devDependencies: 18 | '@types/node': 19 | specifier: ^22.7.5 20 | version: 22.7.5 21 | ts-node: 22 | specifier: ^10.9.2 23 | version: 10.9.2(@types/node@22.7.5)(typescript@5.6.3) 24 | typescript: 25 | specifier: ^5.6.3 26 | version: 5.6.3 27 | 28 | packages: 29 | 30 | '@cspotcode/source-map-support@0.8.1': 31 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 32 | engines: {node: '>=12'} 33 | 34 | '@esbuild/aix-ppc64@0.23.1': 35 | resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} 36 | engines: {node: '>=18'} 37 | cpu: [ppc64] 38 | os: [aix] 39 | 40 | '@esbuild/android-arm64@0.23.1': 41 | resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} 42 | engines: {node: '>=18'} 43 | cpu: [arm64] 44 | os: [android] 45 | 46 | '@esbuild/android-arm@0.23.1': 47 | resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} 48 | engines: {node: '>=18'} 49 | cpu: [arm] 50 | os: [android] 51 | 52 | '@esbuild/android-x64@0.23.1': 53 | resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} 54 | engines: {node: '>=18'} 55 | cpu: [x64] 56 | os: [android] 57 | 58 | '@esbuild/darwin-arm64@0.23.1': 59 | resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} 60 | engines: {node: '>=18'} 61 | cpu: [arm64] 62 | os: [darwin] 63 | 64 | '@esbuild/darwin-x64@0.23.1': 65 | resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} 66 | engines: {node: '>=18'} 67 | cpu: [x64] 68 | os: [darwin] 69 | 70 | '@esbuild/freebsd-arm64@0.23.1': 71 | resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} 72 | engines: {node: '>=18'} 73 | cpu: [arm64] 74 | os: [freebsd] 75 | 76 | '@esbuild/freebsd-x64@0.23.1': 77 | resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} 78 | engines: {node: '>=18'} 79 | cpu: [x64] 80 | os: [freebsd] 81 | 82 | '@esbuild/linux-arm64@0.23.1': 83 | resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} 84 | engines: {node: '>=18'} 85 | cpu: [arm64] 86 | os: [linux] 87 | 88 | '@esbuild/linux-arm@0.23.1': 89 | resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} 90 | engines: {node: '>=18'} 91 | cpu: [arm] 92 | os: [linux] 93 | 94 | '@esbuild/linux-ia32@0.23.1': 95 | resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} 96 | engines: {node: '>=18'} 97 | cpu: [ia32] 98 | os: [linux] 99 | 100 | '@esbuild/linux-loong64@0.23.1': 101 | resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} 102 | engines: {node: '>=18'} 103 | cpu: [loong64] 104 | os: [linux] 105 | 106 | '@esbuild/linux-mips64el@0.23.1': 107 | resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} 108 | engines: {node: '>=18'} 109 | cpu: [mips64el] 110 | os: [linux] 111 | 112 | '@esbuild/linux-ppc64@0.23.1': 113 | resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} 114 | engines: {node: '>=18'} 115 | cpu: [ppc64] 116 | os: [linux] 117 | 118 | '@esbuild/linux-riscv64@0.23.1': 119 | resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} 120 | engines: {node: '>=18'} 121 | cpu: [riscv64] 122 | os: [linux] 123 | 124 | '@esbuild/linux-s390x@0.23.1': 125 | resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} 126 | engines: {node: '>=18'} 127 | cpu: [s390x] 128 | os: [linux] 129 | 130 | '@esbuild/linux-x64@0.23.1': 131 | resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} 132 | engines: {node: '>=18'} 133 | cpu: [x64] 134 | os: [linux] 135 | 136 | '@esbuild/netbsd-x64@0.23.1': 137 | resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} 138 | engines: {node: '>=18'} 139 | cpu: [x64] 140 | os: [netbsd] 141 | 142 | '@esbuild/openbsd-arm64@0.23.1': 143 | resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} 144 | engines: {node: '>=18'} 145 | cpu: [arm64] 146 | os: [openbsd] 147 | 148 | '@esbuild/openbsd-x64@0.23.1': 149 | resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} 150 | engines: {node: '>=18'} 151 | cpu: [x64] 152 | os: [openbsd] 153 | 154 | '@esbuild/sunos-x64@0.23.1': 155 | resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} 156 | engines: {node: '>=18'} 157 | cpu: [x64] 158 | os: [sunos] 159 | 160 | '@esbuild/win32-arm64@0.23.1': 161 | resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} 162 | engines: {node: '>=18'} 163 | cpu: [arm64] 164 | os: [win32] 165 | 166 | '@esbuild/win32-ia32@0.23.1': 167 | resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} 168 | engines: {node: '>=18'} 169 | cpu: [ia32] 170 | os: [win32] 171 | 172 | '@esbuild/win32-x64@0.23.1': 173 | resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} 174 | engines: {node: '>=18'} 175 | cpu: [x64] 176 | os: [win32] 177 | 178 | '@huggingface/jinja@0.2.2': 179 | resolution: {integrity: sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==} 180 | engines: {node: '>=18'} 181 | 182 | '@isaacs/cliui@8.0.2': 183 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 184 | engines: {node: '>=12'} 185 | 186 | '@isaacs/fs-minipass@4.0.1': 187 | resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} 188 | engines: {node: '>=18.0.0'} 189 | 190 | '@jridgewell/resolve-uri@3.1.2': 191 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 192 | engines: {node: '>=6.0.0'} 193 | 194 | '@jridgewell/sourcemap-codec@1.5.0': 195 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 196 | 197 | '@jridgewell/trace-mapping@0.3.9': 198 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 199 | 200 | '@pkgjs/parseargs@0.11.0': 201 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 202 | engines: {node: '>=14'} 203 | 204 | '@protobufjs/aspromise@1.1.2': 205 | resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} 206 | 207 | '@protobufjs/base64@1.1.2': 208 | resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} 209 | 210 | '@protobufjs/codegen@2.0.4': 211 | resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} 212 | 213 | '@protobufjs/eventemitter@1.1.0': 214 | resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} 215 | 216 | '@protobufjs/fetch@1.1.0': 217 | resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} 218 | 219 | '@protobufjs/float@1.0.2': 220 | resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} 221 | 222 | '@protobufjs/inquire@1.1.0': 223 | resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} 224 | 225 | '@protobufjs/path@1.1.2': 226 | resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} 227 | 228 | '@protobufjs/pool@1.1.0': 229 | resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} 230 | 231 | '@protobufjs/utf8@1.1.0': 232 | resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} 233 | 234 | '@tsconfig/node10@1.0.11': 235 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} 236 | 237 | '@tsconfig/node12@1.0.11': 238 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 239 | 240 | '@tsconfig/node14@1.0.3': 241 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 242 | 243 | '@tsconfig/node16@1.0.4': 244 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 245 | 246 | '@types/long@4.0.2': 247 | resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} 248 | 249 | '@types/node@22.7.5': 250 | resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} 251 | 252 | '@xenova/transformers@2.17.2': 253 | resolution: {integrity: sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==} 254 | 255 | acorn-walk@8.3.4: 256 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 257 | engines: {node: '>=0.4.0'} 258 | 259 | acorn@8.12.1: 260 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 261 | engines: {node: '>=0.4.0'} 262 | hasBin: true 263 | 264 | ansi-regex@5.0.1: 265 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 266 | engines: {node: '>=8'} 267 | 268 | ansi-regex@6.1.0: 269 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 270 | engines: {node: '>=12'} 271 | 272 | ansi-styles@4.3.0: 273 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 274 | engines: {node: '>=8'} 275 | 276 | ansi-styles@6.2.1: 277 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 278 | engines: {node: '>=12'} 279 | 280 | arg@4.1.3: 281 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 282 | 283 | b4a@1.6.7: 284 | resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} 285 | 286 | balanced-match@1.0.2: 287 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 288 | 289 | bare-events@2.5.0: 290 | resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} 291 | 292 | bare-fs@2.3.5: 293 | resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} 294 | 295 | bare-os@2.4.4: 296 | resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} 297 | 298 | bare-path@2.1.3: 299 | resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} 300 | 301 | bare-stream@2.3.0: 302 | resolution: {integrity: sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==} 303 | 304 | base64-js@1.5.1: 305 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 306 | 307 | bl@4.1.0: 308 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 309 | 310 | brace-expansion@2.0.1: 311 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 312 | 313 | buffer@5.7.1: 314 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 315 | 316 | chownr@1.1.4: 317 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 318 | 319 | chownr@3.0.0: 320 | resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} 321 | engines: {node: '>=18'} 322 | 323 | color-convert@2.0.1: 324 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 325 | engines: {node: '>=7.0.0'} 326 | 327 | color-name@1.1.4: 328 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 329 | 330 | color-string@1.9.1: 331 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 332 | 333 | color@4.2.3: 334 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 335 | engines: {node: '>=12.5.0'} 336 | 337 | create-require@1.1.1: 338 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 339 | 340 | cross-spawn@7.0.3: 341 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 342 | engines: {node: '>= 8'} 343 | 344 | decompress-response@6.0.0: 345 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} 346 | engines: {node: '>=10'} 347 | 348 | deep-extend@0.6.0: 349 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 350 | engines: {node: '>=4.0.0'} 351 | 352 | detect-libc@2.0.3: 353 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 354 | engines: {node: '>=8'} 355 | 356 | diff@4.0.2: 357 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 358 | engines: {node: '>=0.3.1'} 359 | 360 | eastasianwidth@0.2.0: 361 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 362 | 363 | emoji-regex@8.0.0: 364 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 365 | 366 | emoji-regex@9.2.2: 367 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 368 | 369 | end-of-stream@1.4.4: 370 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 371 | 372 | esbuild@0.23.1: 373 | resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} 374 | engines: {node: '>=18'} 375 | hasBin: true 376 | 377 | expand-template@2.0.3: 378 | resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} 379 | engines: {node: '>=6'} 380 | 381 | fast-fifo@1.3.2: 382 | resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} 383 | 384 | flatbuffers@1.12.0: 385 | resolution: {integrity: sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==} 386 | 387 | foreground-child@3.3.0: 388 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 389 | engines: {node: '>=14'} 390 | 391 | fs-constants@1.0.0: 392 | resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} 393 | 394 | fsevents@2.3.3: 395 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 396 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 397 | os: [darwin] 398 | 399 | get-tsconfig@4.8.1: 400 | resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} 401 | 402 | github-from-package@0.0.0: 403 | resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} 404 | 405 | gliner@file:../..: 406 | resolution: {directory: ../.., type: directory} 407 | peerDependencies: 408 | onnxruntime-node: ^1.19.2 409 | 410 | glob@10.4.5: 411 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 412 | hasBin: true 413 | 414 | guid-typescript@1.0.9: 415 | resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} 416 | 417 | ieee754@1.2.1: 418 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 419 | 420 | inherits@2.0.4: 421 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 422 | 423 | ini@1.3.8: 424 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 425 | 426 | is-arrayish@0.3.2: 427 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 428 | 429 | is-fullwidth-code-point@3.0.0: 430 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 431 | engines: {node: '>=8'} 432 | 433 | isexe@2.0.0: 434 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 435 | 436 | jackspeak@3.4.3: 437 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 438 | 439 | long@4.0.0: 440 | resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} 441 | 442 | long@5.2.3: 443 | resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} 444 | 445 | lru-cache@10.4.3: 446 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 447 | 448 | make-error@1.3.6: 449 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 450 | 451 | mimic-response@3.1.0: 452 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} 453 | engines: {node: '>=10'} 454 | 455 | minimatch@9.0.5: 456 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 457 | engines: {node: '>=16 || 14 >=14.17'} 458 | 459 | minimist@1.2.8: 460 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 461 | 462 | minipass@7.1.2: 463 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 464 | engines: {node: '>=16 || 14 >=14.17'} 465 | 466 | minizlib@3.0.1: 467 | resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} 468 | engines: {node: '>= 18'} 469 | 470 | mkdirp-classic@0.5.3: 471 | resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} 472 | 473 | mkdirp@3.0.1: 474 | resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} 475 | engines: {node: '>=10'} 476 | hasBin: true 477 | 478 | napi-build-utils@1.0.2: 479 | resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} 480 | 481 | node-abi@3.68.0: 482 | resolution: {integrity: sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==} 483 | engines: {node: '>=10'} 484 | 485 | node-addon-api@6.1.0: 486 | resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} 487 | 488 | once@1.4.0: 489 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 490 | 491 | onnx-proto@4.0.4: 492 | resolution: {integrity: sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==} 493 | 494 | onnxruntime-common@1.14.0: 495 | resolution: {integrity: sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==} 496 | 497 | onnxruntime-common@1.19.2: 498 | resolution: {integrity: sha512-a4R7wYEVFbZBlp0BfhpbFWqe4opCor3KM+5Wm22Az3NGDcQMiU2hfG/0MfnBs+1ZrlSGmlgWeMcXQkDk1UFb8Q==} 499 | 500 | onnxruntime-node@1.14.0: 501 | resolution: {integrity: sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==} 502 | os: [win32, darwin, linux] 503 | 504 | onnxruntime-node@1.19.2: 505 | resolution: {integrity: sha512-9eHMP/HKbbeUcqte1JYzaaRC8JPn7ojWeCeoyShO86TOR97OCyIyAIOGX3V95ErjslVhJRXY8Em/caIUc0hm1Q==} 506 | os: [win32, darwin, linux] 507 | 508 | onnxruntime-web@1.14.0: 509 | resolution: {integrity: sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==} 510 | 511 | onnxruntime-web@1.19.2: 512 | resolution: {integrity: sha512-r0ok6KpTUXR4WA+rHvUiZn7JoH02e8iS7XE1p5bXk7q3E0UaRFfYvpMNUHqEPiTBMuIssfBxDCQjUihV8dDFPg==} 513 | 514 | package-json-from-dist@1.0.1: 515 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 516 | 517 | path-key@3.1.1: 518 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 519 | engines: {node: '>=8'} 520 | 521 | path-scurry@1.11.1: 522 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 523 | engines: {node: '>=16 || 14 >=14.18'} 524 | 525 | platform@1.3.6: 526 | resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} 527 | 528 | prebuild-install@7.1.2: 529 | resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} 530 | engines: {node: '>=10'} 531 | hasBin: true 532 | 533 | protobufjs@6.11.4: 534 | resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} 535 | hasBin: true 536 | 537 | protobufjs@7.4.0: 538 | resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} 539 | engines: {node: '>=12.0.0'} 540 | 541 | pump@3.0.2: 542 | resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} 543 | 544 | queue-tick@1.0.1: 545 | resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} 546 | 547 | rc@1.2.8: 548 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 549 | hasBin: true 550 | 551 | readable-stream@3.6.2: 552 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 553 | engines: {node: '>= 6'} 554 | 555 | resolve-pkg-maps@1.0.0: 556 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 557 | 558 | rimraf@5.0.10: 559 | resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} 560 | hasBin: true 561 | 562 | safe-buffer@5.2.1: 563 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 564 | 565 | semver@7.6.3: 566 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 567 | engines: {node: '>=10'} 568 | hasBin: true 569 | 570 | sharp@0.32.6: 571 | resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} 572 | engines: {node: '>=14.15.0'} 573 | 574 | shebang-command@2.0.0: 575 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 576 | engines: {node: '>=8'} 577 | 578 | shebang-regex@3.0.0: 579 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 580 | engines: {node: '>=8'} 581 | 582 | signal-exit@4.1.0: 583 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 584 | engines: {node: '>=14'} 585 | 586 | simple-concat@1.0.1: 587 | resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} 588 | 589 | simple-get@4.0.1: 590 | resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} 591 | 592 | simple-swizzle@0.2.2: 593 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 594 | 595 | streamx@2.20.1: 596 | resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} 597 | 598 | string-width@4.2.3: 599 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 600 | engines: {node: '>=8'} 601 | 602 | string-width@5.1.2: 603 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 604 | engines: {node: '>=12'} 605 | 606 | string_decoder@1.3.0: 607 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 608 | 609 | strip-ansi@6.0.1: 610 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 611 | engines: {node: '>=8'} 612 | 613 | strip-ansi@7.1.0: 614 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 615 | engines: {node: '>=12'} 616 | 617 | strip-json-comments@2.0.1: 618 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 619 | engines: {node: '>=0.10.0'} 620 | 621 | tar-fs@2.1.1: 622 | resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} 623 | 624 | tar-fs@3.0.6: 625 | resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} 626 | 627 | tar-stream@2.2.0: 628 | resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} 629 | engines: {node: '>=6'} 630 | 631 | tar-stream@3.1.7: 632 | resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} 633 | 634 | tar@7.4.3: 635 | resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} 636 | engines: {node: '>=18'} 637 | 638 | text-decoder@1.2.0: 639 | resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} 640 | 641 | ts-node@10.9.2: 642 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} 643 | hasBin: true 644 | peerDependencies: 645 | '@swc/core': '>=1.2.50' 646 | '@swc/wasm': '>=1.2.50' 647 | '@types/node': '*' 648 | typescript: '>=2.7' 649 | peerDependenciesMeta: 650 | '@swc/core': 651 | optional: true 652 | '@swc/wasm': 653 | optional: true 654 | 655 | tsx@4.19.2: 656 | resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} 657 | engines: {node: '>=18.0.0'} 658 | hasBin: true 659 | 660 | tunnel-agent@0.6.0: 661 | resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 662 | 663 | typescript@5.6.3: 664 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 665 | engines: {node: '>=14.17'} 666 | hasBin: true 667 | 668 | undici-types@6.19.8: 669 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 670 | 671 | util-deprecate@1.0.2: 672 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 673 | 674 | v8-compile-cache-lib@3.0.1: 675 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 676 | 677 | which@2.0.2: 678 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 679 | engines: {node: '>= 8'} 680 | hasBin: true 681 | 682 | wrap-ansi@7.0.0: 683 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 684 | engines: {node: '>=10'} 685 | 686 | wrap-ansi@8.1.0: 687 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 688 | engines: {node: '>=12'} 689 | 690 | wrappy@1.0.2: 691 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 692 | 693 | yallist@5.0.0: 694 | resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} 695 | engines: {node: '>=18'} 696 | 697 | yn@3.1.1: 698 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 699 | engines: {node: '>=6'} 700 | 701 | snapshots: 702 | 703 | '@cspotcode/source-map-support@0.8.1': 704 | dependencies: 705 | '@jridgewell/trace-mapping': 0.3.9 706 | 707 | '@esbuild/aix-ppc64@0.23.1': 708 | optional: true 709 | 710 | '@esbuild/android-arm64@0.23.1': 711 | optional: true 712 | 713 | '@esbuild/android-arm@0.23.1': 714 | optional: true 715 | 716 | '@esbuild/android-x64@0.23.1': 717 | optional: true 718 | 719 | '@esbuild/darwin-arm64@0.23.1': 720 | optional: true 721 | 722 | '@esbuild/darwin-x64@0.23.1': 723 | optional: true 724 | 725 | '@esbuild/freebsd-arm64@0.23.1': 726 | optional: true 727 | 728 | '@esbuild/freebsd-x64@0.23.1': 729 | optional: true 730 | 731 | '@esbuild/linux-arm64@0.23.1': 732 | optional: true 733 | 734 | '@esbuild/linux-arm@0.23.1': 735 | optional: true 736 | 737 | '@esbuild/linux-ia32@0.23.1': 738 | optional: true 739 | 740 | '@esbuild/linux-loong64@0.23.1': 741 | optional: true 742 | 743 | '@esbuild/linux-mips64el@0.23.1': 744 | optional: true 745 | 746 | '@esbuild/linux-ppc64@0.23.1': 747 | optional: true 748 | 749 | '@esbuild/linux-riscv64@0.23.1': 750 | optional: true 751 | 752 | '@esbuild/linux-s390x@0.23.1': 753 | optional: true 754 | 755 | '@esbuild/linux-x64@0.23.1': 756 | optional: true 757 | 758 | '@esbuild/netbsd-x64@0.23.1': 759 | optional: true 760 | 761 | '@esbuild/openbsd-arm64@0.23.1': 762 | optional: true 763 | 764 | '@esbuild/openbsd-x64@0.23.1': 765 | optional: true 766 | 767 | '@esbuild/sunos-x64@0.23.1': 768 | optional: true 769 | 770 | '@esbuild/win32-arm64@0.23.1': 771 | optional: true 772 | 773 | '@esbuild/win32-ia32@0.23.1': 774 | optional: true 775 | 776 | '@esbuild/win32-x64@0.23.1': 777 | optional: true 778 | 779 | '@huggingface/jinja@0.2.2': {} 780 | 781 | '@isaacs/cliui@8.0.2': 782 | dependencies: 783 | string-width: 5.1.2 784 | string-width-cjs: string-width@4.2.3 785 | strip-ansi: 7.1.0 786 | strip-ansi-cjs: strip-ansi@6.0.1 787 | wrap-ansi: 8.1.0 788 | wrap-ansi-cjs: wrap-ansi@7.0.0 789 | 790 | '@isaacs/fs-minipass@4.0.1': 791 | dependencies: 792 | minipass: 7.1.2 793 | 794 | '@jridgewell/resolve-uri@3.1.2': {} 795 | 796 | '@jridgewell/sourcemap-codec@1.5.0': {} 797 | 798 | '@jridgewell/trace-mapping@0.3.9': 799 | dependencies: 800 | '@jridgewell/resolve-uri': 3.1.2 801 | '@jridgewell/sourcemap-codec': 1.5.0 802 | 803 | '@pkgjs/parseargs@0.11.0': 804 | optional: true 805 | 806 | '@protobufjs/aspromise@1.1.2': {} 807 | 808 | '@protobufjs/base64@1.1.2': {} 809 | 810 | '@protobufjs/codegen@2.0.4': {} 811 | 812 | '@protobufjs/eventemitter@1.1.0': {} 813 | 814 | '@protobufjs/fetch@1.1.0': 815 | dependencies: 816 | '@protobufjs/aspromise': 1.1.2 817 | '@protobufjs/inquire': 1.1.0 818 | 819 | '@protobufjs/float@1.0.2': {} 820 | 821 | '@protobufjs/inquire@1.1.0': {} 822 | 823 | '@protobufjs/path@1.1.2': {} 824 | 825 | '@protobufjs/pool@1.1.0': {} 826 | 827 | '@protobufjs/utf8@1.1.0': {} 828 | 829 | '@tsconfig/node10@1.0.11': {} 830 | 831 | '@tsconfig/node12@1.0.11': {} 832 | 833 | '@tsconfig/node14@1.0.3': {} 834 | 835 | '@tsconfig/node16@1.0.4': {} 836 | 837 | '@types/long@4.0.2': {} 838 | 839 | '@types/node@22.7.5': 840 | dependencies: 841 | undici-types: 6.19.8 842 | 843 | '@xenova/transformers@2.17.2': 844 | dependencies: 845 | '@huggingface/jinja': 0.2.2 846 | onnxruntime-web: 1.14.0 847 | sharp: 0.32.6 848 | optionalDependencies: 849 | onnxruntime-node: 1.14.0 850 | 851 | acorn-walk@8.3.4: 852 | dependencies: 853 | acorn: 8.12.1 854 | 855 | acorn@8.12.1: {} 856 | 857 | ansi-regex@5.0.1: {} 858 | 859 | ansi-regex@6.1.0: {} 860 | 861 | ansi-styles@4.3.0: 862 | dependencies: 863 | color-convert: 2.0.1 864 | 865 | ansi-styles@6.2.1: {} 866 | 867 | arg@4.1.3: {} 868 | 869 | b4a@1.6.7: {} 870 | 871 | balanced-match@1.0.2: {} 872 | 873 | bare-events@2.5.0: 874 | optional: true 875 | 876 | bare-fs@2.3.5: 877 | dependencies: 878 | bare-events: 2.5.0 879 | bare-path: 2.1.3 880 | bare-stream: 2.3.0 881 | optional: true 882 | 883 | bare-os@2.4.4: 884 | optional: true 885 | 886 | bare-path@2.1.3: 887 | dependencies: 888 | bare-os: 2.4.4 889 | optional: true 890 | 891 | bare-stream@2.3.0: 892 | dependencies: 893 | b4a: 1.6.7 894 | streamx: 2.20.1 895 | optional: true 896 | 897 | base64-js@1.5.1: {} 898 | 899 | bl@4.1.0: 900 | dependencies: 901 | buffer: 5.7.1 902 | inherits: 2.0.4 903 | readable-stream: 3.6.2 904 | 905 | brace-expansion@2.0.1: 906 | dependencies: 907 | balanced-match: 1.0.2 908 | 909 | buffer@5.7.1: 910 | dependencies: 911 | base64-js: 1.5.1 912 | ieee754: 1.2.1 913 | 914 | chownr@1.1.4: {} 915 | 916 | chownr@3.0.0: {} 917 | 918 | color-convert@2.0.1: 919 | dependencies: 920 | color-name: 1.1.4 921 | 922 | color-name@1.1.4: {} 923 | 924 | color-string@1.9.1: 925 | dependencies: 926 | color-name: 1.1.4 927 | simple-swizzle: 0.2.2 928 | 929 | color@4.2.3: 930 | dependencies: 931 | color-convert: 2.0.1 932 | color-string: 1.9.1 933 | 934 | create-require@1.1.1: {} 935 | 936 | cross-spawn@7.0.3: 937 | dependencies: 938 | path-key: 3.1.1 939 | shebang-command: 2.0.0 940 | which: 2.0.2 941 | 942 | decompress-response@6.0.0: 943 | dependencies: 944 | mimic-response: 3.1.0 945 | 946 | deep-extend@0.6.0: {} 947 | 948 | detect-libc@2.0.3: {} 949 | 950 | diff@4.0.2: {} 951 | 952 | eastasianwidth@0.2.0: {} 953 | 954 | emoji-regex@8.0.0: {} 955 | 956 | emoji-regex@9.2.2: {} 957 | 958 | end-of-stream@1.4.4: 959 | dependencies: 960 | once: 1.4.0 961 | 962 | esbuild@0.23.1: 963 | optionalDependencies: 964 | '@esbuild/aix-ppc64': 0.23.1 965 | '@esbuild/android-arm': 0.23.1 966 | '@esbuild/android-arm64': 0.23.1 967 | '@esbuild/android-x64': 0.23.1 968 | '@esbuild/darwin-arm64': 0.23.1 969 | '@esbuild/darwin-x64': 0.23.1 970 | '@esbuild/freebsd-arm64': 0.23.1 971 | '@esbuild/freebsd-x64': 0.23.1 972 | '@esbuild/linux-arm': 0.23.1 973 | '@esbuild/linux-arm64': 0.23.1 974 | '@esbuild/linux-ia32': 0.23.1 975 | '@esbuild/linux-loong64': 0.23.1 976 | '@esbuild/linux-mips64el': 0.23.1 977 | '@esbuild/linux-ppc64': 0.23.1 978 | '@esbuild/linux-riscv64': 0.23.1 979 | '@esbuild/linux-s390x': 0.23.1 980 | '@esbuild/linux-x64': 0.23.1 981 | '@esbuild/netbsd-x64': 0.23.1 982 | '@esbuild/openbsd-arm64': 0.23.1 983 | '@esbuild/openbsd-x64': 0.23.1 984 | '@esbuild/sunos-x64': 0.23.1 985 | '@esbuild/win32-arm64': 0.23.1 986 | '@esbuild/win32-ia32': 0.23.1 987 | '@esbuild/win32-x64': 0.23.1 988 | 989 | expand-template@2.0.3: {} 990 | 991 | fast-fifo@1.3.2: {} 992 | 993 | flatbuffers@1.12.0: {} 994 | 995 | foreground-child@3.3.0: 996 | dependencies: 997 | cross-spawn: 7.0.3 998 | signal-exit: 4.1.0 999 | 1000 | fs-constants@1.0.0: {} 1001 | 1002 | fsevents@2.3.3: 1003 | optional: true 1004 | 1005 | get-tsconfig@4.8.1: 1006 | dependencies: 1007 | resolve-pkg-maps: 1.0.0 1008 | 1009 | github-from-package@0.0.0: {} 1010 | 1011 | gliner@file:../..(onnxruntime-node@1.19.2): 1012 | dependencies: 1013 | '@xenova/transformers': 2.17.2 1014 | onnxruntime-common: 1.19.2 1015 | onnxruntime-node: 1.19.2 1016 | onnxruntime-web: 1.19.2 1017 | 1018 | glob@10.4.5: 1019 | dependencies: 1020 | foreground-child: 3.3.0 1021 | jackspeak: 3.4.3 1022 | minimatch: 9.0.5 1023 | minipass: 7.1.2 1024 | package-json-from-dist: 1.0.1 1025 | path-scurry: 1.11.1 1026 | 1027 | guid-typescript@1.0.9: {} 1028 | 1029 | ieee754@1.2.1: {} 1030 | 1031 | inherits@2.0.4: {} 1032 | 1033 | ini@1.3.8: {} 1034 | 1035 | is-arrayish@0.3.2: {} 1036 | 1037 | is-fullwidth-code-point@3.0.0: {} 1038 | 1039 | isexe@2.0.0: {} 1040 | 1041 | jackspeak@3.4.3: 1042 | dependencies: 1043 | '@isaacs/cliui': 8.0.2 1044 | optionalDependencies: 1045 | '@pkgjs/parseargs': 0.11.0 1046 | 1047 | long@4.0.0: {} 1048 | 1049 | long@5.2.3: {} 1050 | 1051 | lru-cache@10.4.3: {} 1052 | 1053 | make-error@1.3.6: {} 1054 | 1055 | mimic-response@3.1.0: {} 1056 | 1057 | minimatch@9.0.5: 1058 | dependencies: 1059 | brace-expansion: 2.0.1 1060 | 1061 | minimist@1.2.8: {} 1062 | 1063 | minipass@7.1.2: {} 1064 | 1065 | minizlib@3.0.1: 1066 | dependencies: 1067 | minipass: 7.1.2 1068 | rimraf: 5.0.10 1069 | 1070 | mkdirp-classic@0.5.3: {} 1071 | 1072 | mkdirp@3.0.1: {} 1073 | 1074 | napi-build-utils@1.0.2: {} 1075 | 1076 | node-abi@3.68.0: 1077 | dependencies: 1078 | semver: 7.6.3 1079 | 1080 | node-addon-api@6.1.0: {} 1081 | 1082 | once@1.4.0: 1083 | dependencies: 1084 | wrappy: 1.0.2 1085 | 1086 | onnx-proto@4.0.4: 1087 | dependencies: 1088 | protobufjs: 6.11.4 1089 | 1090 | onnxruntime-common@1.14.0: {} 1091 | 1092 | onnxruntime-common@1.19.2: {} 1093 | 1094 | onnxruntime-node@1.14.0: 1095 | dependencies: 1096 | onnxruntime-common: 1.14.0 1097 | optional: true 1098 | 1099 | onnxruntime-node@1.19.2: 1100 | dependencies: 1101 | onnxruntime-common: 1.19.2 1102 | tar: 7.4.3 1103 | 1104 | onnxruntime-web@1.14.0: 1105 | dependencies: 1106 | flatbuffers: 1.12.0 1107 | guid-typescript: 1.0.9 1108 | long: 4.0.0 1109 | onnx-proto: 4.0.4 1110 | onnxruntime-common: 1.14.0 1111 | platform: 1.3.6 1112 | 1113 | onnxruntime-web@1.19.2: 1114 | dependencies: 1115 | flatbuffers: 1.12.0 1116 | guid-typescript: 1.0.9 1117 | long: 5.2.3 1118 | onnxruntime-common: 1.19.2 1119 | platform: 1.3.6 1120 | protobufjs: 7.4.0 1121 | 1122 | package-json-from-dist@1.0.1: {} 1123 | 1124 | path-key@3.1.1: {} 1125 | 1126 | path-scurry@1.11.1: 1127 | dependencies: 1128 | lru-cache: 10.4.3 1129 | minipass: 7.1.2 1130 | 1131 | platform@1.3.6: {} 1132 | 1133 | prebuild-install@7.1.2: 1134 | dependencies: 1135 | detect-libc: 2.0.3 1136 | expand-template: 2.0.3 1137 | github-from-package: 0.0.0 1138 | minimist: 1.2.8 1139 | mkdirp-classic: 0.5.3 1140 | napi-build-utils: 1.0.2 1141 | node-abi: 3.68.0 1142 | pump: 3.0.2 1143 | rc: 1.2.8 1144 | simple-get: 4.0.1 1145 | tar-fs: 2.1.1 1146 | tunnel-agent: 0.6.0 1147 | 1148 | protobufjs@6.11.4: 1149 | dependencies: 1150 | '@protobufjs/aspromise': 1.1.2 1151 | '@protobufjs/base64': 1.1.2 1152 | '@protobufjs/codegen': 2.0.4 1153 | '@protobufjs/eventemitter': 1.1.0 1154 | '@protobufjs/fetch': 1.1.0 1155 | '@protobufjs/float': 1.0.2 1156 | '@protobufjs/inquire': 1.1.0 1157 | '@protobufjs/path': 1.1.2 1158 | '@protobufjs/pool': 1.1.0 1159 | '@protobufjs/utf8': 1.1.0 1160 | '@types/long': 4.0.2 1161 | '@types/node': 22.7.5 1162 | long: 4.0.0 1163 | 1164 | protobufjs@7.4.0: 1165 | dependencies: 1166 | '@protobufjs/aspromise': 1.1.2 1167 | '@protobufjs/base64': 1.1.2 1168 | '@protobufjs/codegen': 2.0.4 1169 | '@protobufjs/eventemitter': 1.1.0 1170 | '@protobufjs/fetch': 1.1.0 1171 | '@protobufjs/float': 1.0.2 1172 | '@protobufjs/inquire': 1.1.0 1173 | '@protobufjs/path': 1.1.2 1174 | '@protobufjs/pool': 1.1.0 1175 | '@protobufjs/utf8': 1.1.0 1176 | '@types/node': 22.7.5 1177 | long: 5.2.3 1178 | 1179 | pump@3.0.2: 1180 | dependencies: 1181 | end-of-stream: 1.4.4 1182 | once: 1.4.0 1183 | 1184 | queue-tick@1.0.1: {} 1185 | 1186 | rc@1.2.8: 1187 | dependencies: 1188 | deep-extend: 0.6.0 1189 | ini: 1.3.8 1190 | minimist: 1.2.8 1191 | strip-json-comments: 2.0.1 1192 | 1193 | readable-stream@3.6.2: 1194 | dependencies: 1195 | inherits: 2.0.4 1196 | string_decoder: 1.3.0 1197 | util-deprecate: 1.0.2 1198 | 1199 | resolve-pkg-maps@1.0.0: {} 1200 | 1201 | rimraf@5.0.10: 1202 | dependencies: 1203 | glob: 10.4.5 1204 | 1205 | safe-buffer@5.2.1: {} 1206 | 1207 | semver@7.6.3: {} 1208 | 1209 | sharp@0.32.6: 1210 | dependencies: 1211 | color: 4.2.3 1212 | detect-libc: 2.0.3 1213 | node-addon-api: 6.1.0 1214 | prebuild-install: 7.1.2 1215 | semver: 7.6.3 1216 | simple-get: 4.0.1 1217 | tar-fs: 3.0.6 1218 | tunnel-agent: 0.6.0 1219 | 1220 | shebang-command@2.0.0: 1221 | dependencies: 1222 | shebang-regex: 3.0.0 1223 | 1224 | shebang-regex@3.0.0: {} 1225 | 1226 | signal-exit@4.1.0: {} 1227 | 1228 | simple-concat@1.0.1: {} 1229 | 1230 | simple-get@4.0.1: 1231 | dependencies: 1232 | decompress-response: 6.0.0 1233 | once: 1.4.0 1234 | simple-concat: 1.0.1 1235 | 1236 | simple-swizzle@0.2.2: 1237 | dependencies: 1238 | is-arrayish: 0.3.2 1239 | 1240 | streamx@2.20.1: 1241 | dependencies: 1242 | fast-fifo: 1.3.2 1243 | queue-tick: 1.0.1 1244 | text-decoder: 1.2.0 1245 | optionalDependencies: 1246 | bare-events: 2.5.0 1247 | 1248 | string-width@4.2.3: 1249 | dependencies: 1250 | emoji-regex: 8.0.0 1251 | is-fullwidth-code-point: 3.0.0 1252 | strip-ansi: 6.0.1 1253 | 1254 | string-width@5.1.2: 1255 | dependencies: 1256 | eastasianwidth: 0.2.0 1257 | emoji-regex: 9.2.2 1258 | strip-ansi: 7.1.0 1259 | 1260 | string_decoder@1.3.0: 1261 | dependencies: 1262 | safe-buffer: 5.2.1 1263 | 1264 | strip-ansi@6.0.1: 1265 | dependencies: 1266 | ansi-regex: 5.0.1 1267 | 1268 | strip-ansi@7.1.0: 1269 | dependencies: 1270 | ansi-regex: 6.1.0 1271 | 1272 | strip-json-comments@2.0.1: {} 1273 | 1274 | tar-fs@2.1.1: 1275 | dependencies: 1276 | chownr: 1.1.4 1277 | mkdirp-classic: 0.5.3 1278 | pump: 3.0.2 1279 | tar-stream: 2.2.0 1280 | 1281 | tar-fs@3.0.6: 1282 | dependencies: 1283 | pump: 3.0.2 1284 | tar-stream: 3.1.7 1285 | optionalDependencies: 1286 | bare-fs: 2.3.5 1287 | bare-path: 2.1.3 1288 | 1289 | tar-stream@2.2.0: 1290 | dependencies: 1291 | bl: 4.1.0 1292 | end-of-stream: 1.4.4 1293 | fs-constants: 1.0.0 1294 | inherits: 2.0.4 1295 | readable-stream: 3.6.2 1296 | 1297 | tar-stream@3.1.7: 1298 | dependencies: 1299 | b4a: 1.6.7 1300 | fast-fifo: 1.3.2 1301 | streamx: 2.20.1 1302 | 1303 | tar@7.4.3: 1304 | dependencies: 1305 | '@isaacs/fs-minipass': 4.0.1 1306 | chownr: 3.0.0 1307 | minipass: 7.1.2 1308 | minizlib: 3.0.1 1309 | mkdirp: 3.0.1 1310 | yallist: 5.0.0 1311 | 1312 | text-decoder@1.2.0: 1313 | dependencies: 1314 | b4a: 1.6.7 1315 | 1316 | ts-node@10.9.2(@types/node@22.7.5)(typescript@5.6.3): 1317 | dependencies: 1318 | '@cspotcode/source-map-support': 0.8.1 1319 | '@tsconfig/node10': 1.0.11 1320 | '@tsconfig/node12': 1.0.11 1321 | '@tsconfig/node14': 1.0.3 1322 | '@tsconfig/node16': 1.0.4 1323 | '@types/node': 22.7.5 1324 | acorn: 8.12.1 1325 | acorn-walk: 8.3.4 1326 | arg: 4.1.3 1327 | create-require: 1.1.1 1328 | diff: 4.0.2 1329 | make-error: 1.3.6 1330 | typescript: 5.6.3 1331 | v8-compile-cache-lib: 3.0.1 1332 | yn: 3.1.1 1333 | 1334 | tsx@4.19.2: 1335 | dependencies: 1336 | esbuild: 0.23.1 1337 | get-tsconfig: 4.8.1 1338 | optionalDependencies: 1339 | fsevents: 2.3.3 1340 | 1341 | tunnel-agent@0.6.0: 1342 | dependencies: 1343 | safe-buffer: 5.2.1 1344 | 1345 | typescript@5.6.3: {} 1346 | 1347 | undici-types@6.19.8: {} 1348 | 1349 | util-deprecate@1.0.2: {} 1350 | 1351 | v8-compile-cache-lib@3.0.1: {} 1352 | 1353 | which@2.0.2: 1354 | dependencies: 1355 | isexe: 2.0.0 1356 | 1357 | wrap-ansi@7.0.0: 1358 | dependencies: 1359 | ansi-styles: 4.3.0 1360 | string-width: 4.2.3 1361 | strip-ansi: 6.0.1 1362 | 1363 | wrap-ansi@8.1.0: 1364 | dependencies: 1365 | ansi-styles: 6.2.1 1366 | string-width: 5.1.2 1367 | strip-ansi: 7.1.0 1368 | 1369 | wrappy@1.0.2: {} 1370 | 1371 | yallist@5.0.0: {} 1372 | 1373 | yn@3.1.1: {} 1374 | -------------------------------------------------------------------------------- /example/node/src/main.ts: -------------------------------------------------------------------------------- 1 | // import { Gliner } from "../../../src"; 2 | // import { Gliner, ONXXNodeWrapper } from "../../../"; 3 | import { Gliner } from "gliner/node"; 4 | // import { Gliner } from "../../../dist"; 5 | 6 | async function main(): Promise { 7 | const gliner = new Gliner({ 8 | tokenizerPath: "onnx-community/gliner_small-v2", 9 | onnxSettings: { 10 | modelPath: "./models/model.onnx", 11 | }, 12 | maxWidth: 12, 13 | }); 14 | 15 | await gliner.initialize(); 16 | 17 | const input_text1 = ` 18 | Write a white paper on the state of the financial market for Morar - Rice to share with potential investors. 19 | Please prepare a brief for Gusikowski, Hansen and Shanahan on the legal aspects of piracy and maritime security. 20 | Write a short article about the differences between mindfulness-based therapy and traditional therapy for Mathias to share on social media. 21 | Could you write a blog post about the influence of family dynamics on adolescent development for Constantin.Morar's website? 22 | What's the difference between first-generation and second-generation antipsychotics for residents of 76511? 23 | Hey, can you help me understand the steps to appeal an administrative law decision in West Virginia? 24 | 4. Write a summary of the key privacy law principles for Optimization businesses to follow. 25 | `; 26 | 27 | const input_text2 = ` 28 | How can Sadie Turcotte and Clifford Ernser develop better listening skills to improve their marriage? 29 | Write a white paper on the effectiveness of various ADHD therapy approaches for Trantow Inc to share with their colleagues. 30 | Could you please create a pricing strategy roadmap for Anastacio to follow over the next year? 31 | Hey there, can you create a customer satisfaction survey for Flatley, Rohan and Koepp's business? They want to measure their customers' happiness. 32 | Create a training program for Tonya Quitzon's employees to familiarize them with the business continuity plan. 33 | HIPAA guidelines for protecting patients' 146.229.205.216 in telemedicine consultations. 34 | Could you please provide Bruce Buckridge with a list of the top supply chain management software available in the market? 35 | Can you provide a list of resources for entrepreneurs to learn about intellectual property protection? Send it to Minnie Gulgowski at Kaylie.Littel52@hotmail.com. 36 | Prepare a trade compliance checklist for Borer LLC to ensure their business is adhering to all relevant trade laws. 37 | Investigate the effects of academic pressure on adolescent mental health, referencing Bethany Koss's experiences. 38 | `; 39 | 40 | const texts = [input_text1]; 41 | const entities = ["city", "country", "river", "person", "car"]; 42 | 43 | try { 44 | const start = performance.now(); 45 | console.log("Running inference #1..."); 46 | const decoded = await gliner.inference({ texts, entities }); 47 | console.log(decoded); 48 | const end = performance.now(); 49 | console.log(`Inference #1 took ${end - start} ms`); 50 | 51 | const start2 = performance.now(); 52 | console.log("Running inference #2..."); 53 | const decoded2 = await gliner.inference({ texts: [input_text2], entities }); 54 | const end2 = performance.now(); 55 | console.log(`Inference #2 took ${end2 - start2} ms`); 56 | console.log(decoded2); 57 | } catch (error) { 58 | console.error("Failed to run inference: ", error); 59 | throw error; 60 | } 61 | } 62 | 63 | main().catch((error) => console.error(error)); 64 | -------------------------------------------------------------------------------- /example/node/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "NodeNext", 4 | "target": "ES2020", 5 | "lib": ["ES2020"], 6 | "moduleResolution": "NodeNext", 7 | "esModuleInterop": true, 8 | "skipLibCheck": true, 9 | "outDir": "./dist", 10 | "rootDir": "./src", 11 | "strict": true 12 | }, 13 | "ts-node": { 14 | "esm": true // Explicitly enable ESM support for ts-node 15 | }, 16 | "include": ["src/**/*.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /example/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ONNX Runtime Web Example 8 | 9 | 10 | 11 |

ONNX Runtime in Vite

12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /example/web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example-application-web", 3 | "private": true, 4 | "version": "0.0.1", 5 | "description": "Application to demonstrate the usage of the GLiNER inference engine", 6 | "type": "module", 7 | "scripts": { 8 | "dev": "vite", 9 | "build": "vite build", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "gliner": "file:../../" 14 | }, 15 | "devDependencies": { 16 | "prettier": "^3.3.3", 17 | "tsup": "^8.2.4", 18 | "typescript": "^5.6.2", 19 | "vite": "^5.4.3", 20 | "vite-plugin-static-copy": "^1.0.6", 21 | "vite-plugin-top-level-await": "^1.4.4", 22 | "vite-plugin-wasm": "^3.3.0" 23 | } 24 | } -------------------------------------------------------------------------------- /example/web/src/main.ts: -------------------------------------------------------------------------------- 1 | // import { Gliner } from "../../../src"; 2 | import { Gliner } from "../../../dist"; 3 | // import { Gliner } from "gliner"; 4 | 5 | async function main(): Promise { 6 | const gliner = new Gliner({ 7 | tokenizerPath: "onnx-community/gliner_small-v2", 8 | onnxSettings: { 9 | modelPath: "/model.onnx", 10 | }, 11 | maxWidth: 12, 12 | }); 13 | 14 | await gliner.initialize(); 15 | 16 | const input_text1 = ` 17 | Write a white paper on the state of the financial market for Morar - Rice to share with potential investors. 18 | Please prepare a brief for Gusikowski, Hansen and Shanahan on the legal aspects of piracy and maritime security. 19 | Write a short article about the differences between mindfulness-based therapy and traditional therapy for Mathias to share on social media. 20 | Could you write a blog post about the influence of family dynamics on adolescent development for Constantin.Morar's website? 21 | What's the difference between first-generation and second-generation antipsychotics for residents of 76511? 22 | Hey, can you help me understand the steps to appeal an administrative law decision in West Virginia? 23 | 4. Write a summary of the key privacy law principles for Optimization businesses to follow. 24 | `; 25 | 26 | const input_text2 = ` 27 | How can Sadie Turcotte and Clifford Ernser develop better listening skills to improve their marriage? 28 | Write a white paper on the effectiveness of various ADHD therapy approaches for Trantow Inc to share with their colleagues. 29 | Could you please create a pricing strategy roadmap for Anastacio to follow over the next year? 30 | Hey there, can you create a customer satisfaction survey for Flatley, Rohan and Koepp's business? They want to measure their customers' happiness. 31 | Create a training program for Tonya Quitzon's employees to familiarize them with the business continuity plan. 32 | HIPAA guidelines for protecting patients' 146.229.205.216 in telemedicine consultations. 33 | Could you please provide Bruce Buckridge with a list of the top supply chain management software available in the market? 34 | Can you provide a list of resources for entrepreneurs to learn about intellectual property protection? Send it to Minnie Gulgowski at Kaylie.Littel52@hotmail.com. 35 | Prepare a trade compliance checklist for Borer LLC to ensure their business is adhering to all relevant trade laws. 36 | Investigate the effects of academic pressure on adolescent mental health, referencing Bethany Koss's experiences. 37 | `; 38 | 39 | const texts = [input_text1]; 40 | const entities = ["city", "country", "river", "person", "car"]; 41 | 42 | try { 43 | const start = performance.now(); 44 | console.log("Running inference #1..."); 45 | const decoded = await gliner.inference({ texts, entities }); 46 | console.log(decoded); 47 | const end = performance.now(); 48 | console.log(`Inference #1 took ${end - start} ms`); 49 | 50 | const start2 = performance.now(); 51 | console.log("Running inference #2..."); 52 | const decoded2 = await gliner.inference({ texts: [input_text2], entities }); 53 | const end2 = performance.now(); 54 | console.log(`Inference #2 took ${end2 - start2} ms`); 55 | console.log(decoded2); 56 | } catch (error) { 57 | console.error("Failed to run inference: ", error); 58 | throw error; 59 | } 60 | } 61 | 62 | main().catch((error) => console.error(error)); 63 | -------------------------------------------------------------------------------- /example/web/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import { viteStaticCopy } from "vite-plugin-static-copy"; 3 | import wasm from "vite-plugin-wasm"; 4 | import topLevelAwait from "vite-plugin-top-level-await"; 5 | 6 | export default defineConfig({ 7 | plugins: [ 8 | wasm(), 9 | topLevelAwait(), 10 | viteStaticCopy({ 11 | targets: [ 12 | { 13 | src: "node_modules/onnxruntime-web/dist/*.wasm", 14 | dest: "", // Copies the files directly to the public directory 15 | }, 16 | ], 17 | }), 18 | ], 19 | build: { 20 | target: "esnext", 21 | rollupOptions: { 22 | external: ["onnxruntime-node"], // Externalize the Node.js-specific package 23 | }, 24 | }, 25 | server: { 26 | headers: { 27 | "Cross-Origin-Opener-Policy": "same-origin", 28 | "Cross-Origin-Embedder-Policy": "require-corp", 29 | }, 30 | }, 31 | optimizeDeps: { 32 | include: ["onnxruntime-web"], // Make sure 'onnxruntime-web' is handled properly by Vite 33 | exclude: ["onnxruntime-node"], 34 | }, 35 | }); 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gliner", 3 | "version": "0.0.19", 4 | "description": "This is a GLiNER inference engine", 5 | "main": "./dist/index.cjs", 6 | "module": "./dist/index.mjs", 7 | "types": "./dist/index.d.ts", 8 | "exports": { 9 | ".": { 10 | "require": "./dist/index.cjs", 11 | "import": "./dist/index.mjs" 12 | }, 13 | "./node": { 14 | "require": "./dist/node/index.cjs", 15 | "import": "./dist/node/index.mjs" 16 | } 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/Ingvarstep/GLiNER.js" 21 | }, 22 | "keywords": [ 23 | "GLiNER", 24 | "inference", 25 | "engine" 26 | ], 27 | "author": "Your Name", 28 | "license": "MIT", 29 | "files": [ 30 | "package.json", 31 | "src", 32 | "dist", 33 | "README.md" 34 | ], 35 | "scripts": { 36 | "build": "tsup --format cjs,esm --dts", 37 | "changeset": "changeset", 38 | "release": "changeset publish", 39 | "version": "changeset version", 40 | "prepublishOnly": "npm run build", 41 | "test": "echo \"Error: no test specified\" && exit 0", 42 | "lint": "prettier --check src/**/*.ts", 43 | "lint:fix": "prettier --write src/**/*.ts" 44 | }, 45 | "peerDependencies": { 46 | "onnxruntime-node": "1.19.2" 47 | }, 48 | "dependencies": { 49 | "@xenova/transformers": "2.17.2", 50 | "onnxruntime-common": "1.19.2", 51 | "onnxruntime-web": "1.19.2" 52 | }, 53 | "devDependencies": { 54 | "@changesets/cli": "^2.27.8", 55 | "prettier": "^3.3.3", 56 | "tsup": "^8.2.4", 57 | "typescript": "^5.6.2" 58 | }, 59 | "private": false 60 | } 61 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@changesets/cli': ^2.27.8 5 | '@xenova/transformers': 2.17.2 6 | onnxruntime-common: 1.19.2 7 | onnxruntime-web: 1.19.2 8 | prettier: ^3.3.3 9 | tsup: ^8.2.4 10 | typescript: ^5.6.2 11 | 12 | dependencies: 13 | '@xenova/transformers': 2.17.2 14 | onnxruntime-common: 1.19.2 15 | onnxruntime-web: 1.19.2 16 | 17 | devDependencies: 18 | '@changesets/cli': 2.28.1 19 | prettier: 3.5.2 20 | tsup: 8.4.0_typescript@5.8.2 21 | typescript: 5.8.2 22 | 23 | packages: 24 | 25 | /@babel/runtime/7.26.9: 26 | resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} 27 | engines: {node: '>=6.9.0'} 28 | dependencies: 29 | regenerator-runtime: 0.14.1 30 | dev: true 31 | 32 | /@changesets/apply-release-plan/7.0.10: 33 | resolution: {integrity: sha512-wNyeIJ3yDsVspYvHnEz1xQDq18D9ifed3lI+wxRQRK4pArUcuHgCTrHv0QRnnwjhVCQACxZ+CBih3wgOct6UXw==} 34 | dependencies: 35 | '@changesets/config': 3.1.1 36 | '@changesets/get-version-range-type': 0.4.0 37 | '@changesets/git': 3.0.2 38 | '@changesets/should-skip-package': 0.1.2 39 | '@changesets/types': 6.1.0 40 | '@manypkg/get-packages': 1.1.3 41 | detect-indent: 6.1.0 42 | fs-extra: 7.0.1 43 | lodash.startcase: 4.4.0 44 | outdent: 0.5.0 45 | prettier: 2.8.8 46 | resolve-from: 5.0.0 47 | semver: 7.7.1 48 | dev: true 49 | 50 | /@changesets/assemble-release-plan/6.0.6: 51 | resolution: {integrity: sha512-Frkj8hWJ1FRZiY3kzVCKzS0N5mMwWKwmv9vpam7vt8rZjLL1JMthdh6pSDVSPumHPshTTkKZ0VtNbE0cJHZZUg==} 52 | dependencies: 53 | '@changesets/errors': 0.2.0 54 | '@changesets/get-dependents-graph': 2.1.3 55 | '@changesets/should-skip-package': 0.1.2 56 | '@changesets/types': 6.1.0 57 | '@manypkg/get-packages': 1.1.3 58 | semver: 7.7.1 59 | dev: true 60 | 61 | /@changesets/changelog-git/0.2.1: 62 | resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} 63 | dependencies: 64 | '@changesets/types': 6.1.0 65 | dev: true 66 | 67 | /@changesets/cli/2.28.1: 68 | resolution: {integrity: sha512-PiIyGRmSc6JddQJe/W1hRPjiN4VrMvb2VfQ6Uydy2punBioQrsxppyG5WafinKcW1mT0jOe/wU4k9Zy5ff21AA==} 69 | hasBin: true 70 | dependencies: 71 | '@changesets/apply-release-plan': 7.0.10 72 | '@changesets/assemble-release-plan': 6.0.6 73 | '@changesets/changelog-git': 0.2.1 74 | '@changesets/config': 3.1.1 75 | '@changesets/errors': 0.2.0 76 | '@changesets/get-dependents-graph': 2.1.3 77 | '@changesets/get-release-plan': 4.0.8 78 | '@changesets/git': 3.0.2 79 | '@changesets/logger': 0.1.1 80 | '@changesets/pre': 2.0.2 81 | '@changesets/read': 0.6.3 82 | '@changesets/should-skip-package': 0.1.2 83 | '@changesets/types': 6.1.0 84 | '@changesets/write': 0.4.0 85 | '@manypkg/get-packages': 1.1.3 86 | ansi-colors: 4.1.3 87 | ci-info: 3.9.0 88 | enquirer: 2.4.1 89 | external-editor: 3.1.0 90 | fs-extra: 7.0.1 91 | mri: 1.2.0 92 | p-limit: 2.3.0 93 | package-manager-detector: 0.2.11 94 | picocolors: 1.1.1 95 | resolve-from: 5.0.0 96 | semver: 7.7.1 97 | spawndamnit: 3.0.1 98 | term-size: 2.2.1 99 | dev: true 100 | 101 | /@changesets/config/3.1.1: 102 | resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} 103 | dependencies: 104 | '@changesets/errors': 0.2.0 105 | '@changesets/get-dependents-graph': 2.1.3 106 | '@changesets/logger': 0.1.1 107 | '@changesets/types': 6.1.0 108 | '@manypkg/get-packages': 1.1.3 109 | fs-extra: 7.0.1 110 | micromatch: 4.0.8 111 | dev: true 112 | 113 | /@changesets/errors/0.2.0: 114 | resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} 115 | dependencies: 116 | extendable-error: 0.1.7 117 | dev: true 118 | 119 | /@changesets/get-dependents-graph/2.1.3: 120 | resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} 121 | dependencies: 122 | '@changesets/types': 6.1.0 123 | '@manypkg/get-packages': 1.1.3 124 | picocolors: 1.1.1 125 | semver: 7.7.1 126 | dev: true 127 | 128 | /@changesets/get-release-plan/4.0.8: 129 | resolution: {integrity: sha512-MM4mq2+DQU1ZT7nqxnpveDMTkMBLnwNX44cX7NSxlXmr7f8hO6/S2MXNiXG54uf/0nYnefv0cfy4Czf/ZL/EKQ==} 130 | dependencies: 131 | '@changesets/assemble-release-plan': 6.0.6 132 | '@changesets/config': 3.1.1 133 | '@changesets/pre': 2.0.2 134 | '@changesets/read': 0.6.3 135 | '@changesets/types': 6.1.0 136 | '@manypkg/get-packages': 1.1.3 137 | dev: true 138 | 139 | /@changesets/get-version-range-type/0.4.0: 140 | resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} 141 | dev: true 142 | 143 | /@changesets/git/3.0.2: 144 | resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} 145 | dependencies: 146 | '@changesets/errors': 0.2.0 147 | '@manypkg/get-packages': 1.1.3 148 | is-subdir: 1.2.0 149 | micromatch: 4.0.8 150 | spawndamnit: 3.0.1 151 | dev: true 152 | 153 | /@changesets/logger/0.1.1: 154 | resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} 155 | dependencies: 156 | picocolors: 1.1.1 157 | dev: true 158 | 159 | /@changesets/parse/0.4.1: 160 | resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} 161 | dependencies: 162 | '@changesets/types': 6.1.0 163 | js-yaml: 3.14.1 164 | dev: true 165 | 166 | /@changesets/pre/2.0.2: 167 | resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} 168 | dependencies: 169 | '@changesets/errors': 0.2.0 170 | '@changesets/types': 6.1.0 171 | '@manypkg/get-packages': 1.1.3 172 | fs-extra: 7.0.1 173 | dev: true 174 | 175 | /@changesets/read/0.6.3: 176 | resolution: {integrity: sha512-9H4p/OuJ3jXEUTjaVGdQEhBdqoT2cO5Ts95JTFsQyawmKzpL8FnIeJSyhTDPW1MBRDnwZlHFEM9SpPwJDY5wIg==} 177 | dependencies: 178 | '@changesets/git': 3.0.2 179 | '@changesets/logger': 0.1.1 180 | '@changesets/parse': 0.4.1 181 | '@changesets/types': 6.1.0 182 | fs-extra: 7.0.1 183 | p-filter: 2.1.0 184 | picocolors: 1.1.1 185 | dev: true 186 | 187 | /@changesets/should-skip-package/0.1.2: 188 | resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} 189 | dependencies: 190 | '@changesets/types': 6.1.0 191 | '@manypkg/get-packages': 1.1.3 192 | dev: true 193 | 194 | /@changesets/types/4.1.0: 195 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 196 | dev: true 197 | 198 | /@changesets/types/6.1.0: 199 | resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} 200 | dev: true 201 | 202 | /@changesets/write/0.4.0: 203 | resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} 204 | dependencies: 205 | '@changesets/types': 6.1.0 206 | fs-extra: 7.0.1 207 | human-id: 4.1.1 208 | prettier: 2.8.8 209 | dev: true 210 | 211 | /@esbuild/aix-ppc64/0.25.0: 212 | resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} 213 | engines: {node: '>=18'} 214 | cpu: [ppc64] 215 | os: [aix] 216 | dev: true 217 | optional: true 218 | 219 | /@esbuild/android-arm/0.25.0: 220 | resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} 221 | engines: {node: '>=18'} 222 | cpu: [arm] 223 | os: [android] 224 | dev: true 225 | optional: true 226 | 227 | /@esbuild/android-arm64/0.25.0: 228 | resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} 229 | engines: {node: '>=18'} 230 | cpu: [arm64] 231 | os: [android] 232 | dev: true 233 | optional: true 234 | 235 | /@esbuild/android-x64/0.25.0: 236 | resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} 237 | engines: {node: '>=18'} 238 | cpu: [x64] 239 | os: [android] 240 | dev: true 241 | optional: true 242 | 243 | /@esbuild/darwin-arm64/0.25.0: 244 | resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} 245 | engines: {node: '>=18'} 246 | cpu: [arm64] 247 | os: [darwin] 248 | dev: true 249 | optional: true 250 | 251 | /@esbuild/darwin-x64/0.25.0: 252 | resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} 253 | engines: {node: '>=18'} 254 | cpu: [x64] 255 | os: [darwin] 256 | dev: true 257 | optional: true 258 | 259 | /@esbuild/freebsd-arm64/0.25.0: 260 | resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} 261 | engines: {node: '>=18'} 262 | cpu: [arm64] 263 | os: [freebsd] 264 | dev: true 265 | optional: true 266 | 267 | /@esbuild/freebsd-x64/0.25.0: 268 | resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} 269 | engines: {node: '>=18'} 270 | cpu: [x64] 271 | os: [freebsd] 272 | dev: true 273 | optional: true 274 | 275 | /@esbuild/linux-arm/0.25.0: 276 | resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} 277 | engines: {node: '>=18'} 278 | cpu: [arm] 279 | os: [linux] 280 | dev: true 281 | optional: true 282 | 283 | /@esbuild/linux-arm64/0.25.0: 284 | resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} 285 | engines: {node: '>=18'} 286 | cpu: [arm64] 287 | os: [linux] 288 | dev: true 289 | optional: true 290 | 291 | /@esbuild/linux-ia32/0.25.0: 292 | resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} 293 | engines: {node: '>=18'} 294 | cpu: [ia32] 295 | os: [linux] 296 | dev: true 297 | optional: true 298 | 299 | /@esbuild/linux-loong64/0.25.0: 300 | resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} 301 | engines: {node: '>=18'} 302 | cpu: [loong64] 303 | os: [linux] 304 | dev: true 305 | optional: true 306 | 307 | /@esbuild/linux-mips64el/0.25.0: 308 | resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} 309 | engines: {node: '>=18'} 310 | cpu: [mips64el] 311 | os: [linux] 312 | dev: true 313 | optional: true 314 | 315 | /@esbuild/linux-ppc64/0.25.0: 316 | resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} 317 | engines: {node: '>=18'} 318 | cpu: [ppc64] 319 | os: [linux] 320 | dev: true 321 | optional: true 322 | 323 | /@esbuild/linux-riscv64/0.25.0: 324 | resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} 325 | engines: {node: '>=18'} 326 | cpu: [riscv64] 327 | os: [linux] 328 | dev: true 329 | optional: true 330 | 331 | /@esbuild/linux-s390x/0.25.0: 332 | resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} 333 | engines: {node: '>=18'} 334 | cpu: [s390x] 335 | os: [linux] 336 | dev: true 337 | optional: true 338 | 339 | /@esbuild/linux-x64/0.25.0: 340 | resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} 341 | engines: {node: '>=18'} 342 | cpu: [x64] 343 | os: [linux] 344 | dev: true 345 | optional: true 346 | 347 | /@esbuild/netbsd-arm64/0.25.0: 348 | resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} 349 | engines: {node: '>=18'} 350 | cpu: [arm64] 351 | os: [netbsd] 352 | dev: true 353 | optional: true 354 | 355 | /@esbuild/netbsd-x64/0.25.0: 356 | resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} 357 | engines: {node: '>=18'} 358 | cpu: [x64] 359 | os: [netbsd] 360 | dev: true 361 | optional: true 362 | 363 | /@esbuild/openbsd-arm64/0.25.0: 364 | resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} 365 | engines: {node: '>=18'} 366 | cpu: [arm64] 367 | os: [openbsd] 368 | dev: true 369 | optional: true 370 | 371 | /@esbuild/openbsd-x64/0.25.0: 372 | resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} 373 | engines: {node: '>=18'} 374 | cpu: [x64] 375 | os: [openbsd] 376 | dev: true 377 | optional: true 378 | 379 | /@esbuild/sunos-x64/0.25.0: 380 | resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} 381 | engines: {node: '>=18'} 382 | cpu: [x64] 383 | os: [sunos] 384 | dev: true 385 | optional: true 386 | 387 | /@esbuild/win32-arm64/0.25.0: 388 | resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} 389 | engines: {node: '>=18'} 390 | cpu: [arm64] 391 | os: [win32] 392 | dev: true 393 | optional: true 394 | 395 | /@esbuild/win32-ia32/0.25.0: 396 | resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} 397 | engines: {node: '>=18'} 398 | cpu: [ia32] 399 | os: [win32] 400 | dev: true 401 | optional: true 402 | 403 | /@esbuild/win32-x64/0.25.0: 404 | resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} 405 | engines: {node: '>=18'} 406 | cpu: [x64] 407 | os: [win32] 408 | dev: true 409 | optional: true 410 | 411 | /@huggingface/jinja/0.2.2: 412 | resolution: {integrity: sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==} 413 | engines: {node: '>=18'} 414 | dev: false 415 | 416 | /@isaacs/cliui/8.0.2: 417 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 418 | engines: {node: '>=12'} 419 | dependencies: 420 | string-width: 5.1.2 421 | string-width-cjs: /string-width/4.2.3 422 | strip-ansi: 7.1.0 423 | strip-ansi-cjs: /strip-ansi/6.0.1 424 | wrap-ansi: 8.1.0 425 | wrap-ansi-cjs: /wrap-ansi/7.0.0 426 | dev: true 427 | 428 | /@jridgewell/gen-mapping/0.3.8: 429 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 430 | engines: {node: '>=6.0.0'} 431 | dependencies: 432 | '@jridgewell/set-array': 1.2.1 433 | '@jridgewell/sourcemap-codec': 1.5.0 434 | '@jridgewell/trace-mapping': 0.3.25 435 | dev: true 436 | 437 | /@jridgewell/resolve-uri/3.1.2: 438 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 439 | engines: {node: '>=6.0.0'} 440 | dev: true 441 | 442 | /@jridgewell/set-array/1.2.1: 443 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 444 | engines: {node: '>=6.0.0'} 445 | dev: true 446 | 447 | /@jridgewell/sourcemap-codec/1.5.0: 448 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 449 | dev: true 450 | 451 | /@jridgewell/trace-mapping/0.3.25: 452 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 453 | dependencies: 454 | '@jridgewell/resolve-uri': 3.1.2 455 | '@jridgewell/sourcemap-codec': 1.5.0 456 | dev: true 457 | 458 | /@manypkg/find-root/1.1.0: 459 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 460 | dependencies: 461 | '@babel/runtime': 7.26.9 462 | '@types/node': 12.20.55 463 | find-up: 4.1.0 464 | fs-extra: 8.1.0 465 | dev: true 466 | 467 | /@manypkg/get-packages/1.1.3: 468 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 469 | dependencies: 470 | '@babel/runtime': 7.26.9 471 | '@changesets/types': 4.1.0 472 | '@manypkg/find-root': 1.1.0 473 | fs-extra: 8.1.0 474 | globby: 11.1.0 475 | read-yaml-file: 1.1.0 476 | dev: true 477 | 478 | /@nodelib/fs.scandir/2.1.5: 479 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 480 | engines: {node: '>= 8'} 481 | dependencies: 482 | '@nodelib/fs.stat': 2.0.5 483 | run-parallel: 1.2.0 484 | dev: true 485 | 486 | /@nodelib/fs.stat/2.0.5: 487 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 488 | engines: {node: '>= 8'} 489 | dev: true 490 | 491 | /@nodelib/fs.walk/1.2.8: 492 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 493 | engines: {node: '>= 8'} 494 | dependencies: 495 | '@nodelib/fs.scandir': 2.1.5 496 | fastq: 1.19.1 497 | dev: true 498 | 499 | /@pkgjs/parseargs/0.11.0: 500 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 501 | engines: {node: '>=14'} 502 | dev: true 503 | optional: true 504 | 505 | /@protobufjs/aspromise/1.1.2: 506 | resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} 507 | dev: false 508 | 509 | /@protobufjs/base64/1.1.2: 510 | resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} 511 | dev: false 512 | 513 | /@protobufjs/codegen/2.0.4: 514 | resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} 515 | dev: false 516 | 517 | /@protobufjs/eventemitter/1.1.0: 518 | resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} 519 | dev: false 520 | 521 | /@protobufjs/fetch/1.1.0: 522 | resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} 523 | dependencies: 524 | '@protobufjs/aspromise': 1.1.2 525 | '@protobufjs/inquire': 1.1.0 526 | dev: false 527 | 528 | /@protobufjs/float/1.0.2: 529 | resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} 530 | dev: false 531 | 532 | /@protobufjs/inquire/1.1.0: 533 | resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} 534 | dev: false 535 | 536 | /@protobufjs/path/1.1.2: 537 | resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} 538 | dev: false 539 | 540 | /@protobufjs/pool/1.1.0: 541 | resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} 542 | dev: false 543 | 544 | /@protobufjs/utf8/1.1.0: 545 | resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} 546 | dev: false 547 | 548 | /@rollup/rollup-android-arm-eabi/4.34.9: 549 | resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} 550 | cpu: [arm] 551 | os: [android] 552 | dev: true 553 | optional: true 554 | 555 | /@rollup/rollup-android-arm64/4.34.9: 556 | resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} 557 | cpu: [arm64] 558 | os: [android] 559 | dev: true 560 | optional: true 561 | 562 | /@rollup/rollup-darwin-arm64/4.34.9: 563 | resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} 564 | cpu: [arm64] 565 | os: [darwin] 566 | dev: true 567 | optional: true 568 | 569 | /@rollup/rollup-darwin-x64/4.34.9: 570 | resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} 571 | cpu: [x64] 572 | os: [darwin] 573 | dev: true 574 | optional: true 575 | 576 | /@rollup/rollup-freebsd-arm64/4.34.9: 577 | resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} 578 | cpu: [arm64] 579 | os: [freebsd] 580 | dev: true 581 | optional: true 582 | 583 | /@rollup/rollup-freebsd-x64/4.34.9: 584 | resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} 585 | cpu: [x64] 586 | os: [freebsd] 587 | dev: true 588 | optional: true 589 | 590 | /@rollup/rollup-linux-arm-gnueabihf/4.34.9: 591 | resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} 592 | cpu: [arm] 593 | os: [linux] 594 | dev: true 595 | optional: true 596 | 597 | /@rollup/rollup-linux-arm-musleabihf/4.34.9: 598 | resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} 599 | cpu: [arm] 600 | os: [linux] 601 | dev: true 602 | optional: true 603 | 604 | /@rollup/rollup-linux-arm64-gnu/4.34.9: 605 | resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} 606 | cpu: [arm64] 607 | os: [linux] 608 | dev: true 609 | optional: true 610 | 611 | /@rollup/rollup-linux-arm64-musl/4.34.9: 612 | resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} 613 | cpu: [arm64] 614 | os: [linux] 615 | dev: true 616 | optional: true 617 | 618 | /@rollup/rollup-linux-loongarch64-gnu/4.34.9: 619 | resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} 620 | cpu: [loong64] 621 | os: [linux] 622 | dev: true 623 | optional: true 624 | 625 | /@rollup/rollup-linux-powerpc64le-gnu/4.34.9: 626 | resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} 627 | cpu: [ppc64] 628 | os: [linux] 629 | dev: true 630 | optional: true 631 | 632 | /@rollup/rollup-linux-riscv64-gnu/4.34.9: 633 | resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} 634 | cpu: [riscv64] 635 | os: [linux] 636 | dev: true 637 | optional: true 638 | 639 | /@rollup/rollup-linux-s390x-gnu/4.34.9: 640 | resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} 641 | cpu: [s390x] 642 | os: [linux] 643 | dev: true 644 | optional: true 645 | 646 | /@rollup/rollup-linux-x64-gnu/4.34.9: 647 | resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} 648 | cpu: [x64] 649 | os: [linux] 650 | dev: true 651 | optional: true 652 | 653 | /@rollup/rollup-linux-x64-musl/4.34.9: 654 | resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} 655 | cpu: [x64] 656 | os: [linux] 657 | dev: true 658 | optional: true 659 | 660 | /@rollup/rollup-win32-arm64-msvc/4.34.9: 661 | resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} 662 | cpu: [arm64] 663 | os: [win32] 664 | dev: true 665 | optional: true 666 | 667 | /@rollup/rollup-win32-ia32-msvc/4.34.9: 668 | resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} 669 | cpu: [ia32] 670 | os: [win32] 671 | dev: true 672 | optional: true 673 | 674 | /@rollup/rollup-win32-x64-msvc/4.34.9: 675 | resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} 676 | cpu: [x64] 677 | os: [win32] 678 | dev: true 679 | optional: true 680 | 681 | /@types/estree/1.0.6: 682 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 683 | dev: true 684 | 685 | /@types/long/4.0.2: 686 | resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} 687 | dev: false 688 | 689 | /@types/node/12.20.55: 690 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 691 | dev: true 692 | 693 | /@types/node/22.13.8: 694 | resolution: {integrity: sha512-G3EfaZS+iOGYWLLRCEAXdWK9my08oHNZ+FHluRiggIYJPOXzhOiDgpVCUHaUvyIC5/fj7C/p637jdzC666AOKQ==} 695 | dependencies: 696 | undici-types: 6.20.0 697 | dev: false 698 | 699 | /@xenova/transformers/2.17.2: 700 | resolution: {integrity: sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==} 701 | dependencies: 702 | '@huggingface/jinja': 0.2.2 703 | onnxruntime-web: 1.14.0 704 | sharp: 0.32.6 705 | optionalDependencies: 706 | onnxruntime-node: 1.14.0 707 | transitivePeerDependencies: 708 | - bare-buffer 709 | dev: false 710 | 711 | /ansi-colors/4.1.3: 712 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 713 | engines: {node: '>=6'} 714 | dev: true 715 | 716 | /ansi-regex/5.0.1: 717 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 718 | engines: {node: '>=8'} 719 | dev: true 720 | 721 | /ansi-regex/6.1.0: 722 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 723 | engines: {node: '>=12'} 724 | dev: true 725 | 726 | /ansi-styles/4.3.0: 727 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 728 | engines: {node: '>=8'} 729 | dependencies: 730 | color-convert: 2.0.1 731 | dev: true 732 | 733 | /ansi-styles/6.2.1: 734 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 735 | engines: {node: '>=12'} 736 | dev: true 737 | 738 | /any-promise/1.3.0: 739 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 740 | dev: true 741 | 742 | /argparse/1.0.10: 743 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 744 | dependencies: 745 | sprintf-js: 1.0.3 746 | dev: true 747 | 748 | /array-union/2.1.0: 749 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 750 | engines: {node: '>=8'} 751 | dev: true 752 | 753 | /b4a/1.6.7: 754 | resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} 755 | dev: false 756 | 757 | /balanced-match/1.0.2: 758 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 759 | dev: true 760 | 761 | /bare-events/2.5.4: 762 | resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} 763 | dev: false 764 | optional: true 765 | 766 | /bare-fs/4.0.1: 767 | resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==} 768 | engines: {bare: '>=1.7.0'} 769 | dependencies: 770 | bare-events: 2.5.4 771 | bare-path: 3.0.0 772 | bare-stream: 2.6.5_bare-events@2.5.4 773 | transitivePeerDependencies: 774 | - bare-buffer 775 | dev: false 776 | optional: true 777 | 778 | /bare-os/3.5.1: 779 | resolution: {integrity: sha512-LvfVNDcWLw2AnIw5f2mWUgumW3I3N/WYGiWeimhQC1Ybt71n2FjlS9GJKeCnFeg1MKZHxzIFmpFnBXDI+sBeFg==} 780 | engines: {bare: '>=1.14.0'} 781 | dev: false 782 | optional: true 783 | 784 | /bare-path/3.0.0: 785 | resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} 786 | dependencies: 787 | bare-os: 3.5.1 788 | dev: false 789 | optional: true 790 | 791 | /bare-stream/2.6.5_bare-events@2.5.4: 792 | resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} 793 | peerDependencies: 794 | bare-buffer: '*' 795 | bare-events: '*' 796 | peerDependenciesMeta: 797 | bare-buffer: 798 | optional: true 799 | bare-events: 800 | optional: true 801 | dependencies: 802 | bare-events: 2.5.4 803 | streamx: 2.22.0 804 | dev: false 805 | optional: true 806 | 807 | /base64-js/1.5.1: 808 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 809 | dev: false 810 | 811 | /better-path-resolve/1.0.0: 812 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 813 | engines: {node: '>=4'} 814 | dependencies: 815 | is-windows: 1.0.2 816 | dev: true 817 | 818 | /bl/4.1.0: 819 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 820 | dependencies: 821 | buffer: 5.7.1 822 | inherits: 2.0.4 823 | readable-stream: 3.6.2 824 | dev: false 825 | 826 | /brace-expansion/2.0.1: 827 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 828 | dependencies: 829 | balanced-match: 1.0.2 830 | dev: true 831 | 832 | /braces/3.0.3: 833 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 834 | engines: {node: '>=8'} 835 | dependencies: 836 | fill-range: 7.1.1 837 | dev: true 838 | 839 | /buffer/5.7.1: 840 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 841 | dependencies: 842 | base64-js: 1.5.1 843 | ieee754: 1.2.1 844 | dev: false 845 | 846 | /bundle-require/5.1.0_esbuild@0.25.0: 847 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} 848 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 849 | peerDependencies: 850 | esbuild: '>=0.18' 851 | dependencies: 852 | esbuild: 0.25.0 853 | load-tsconfig: 0.2.5 854 | dev: true 855 | 856 | /cac/6.7.14: 857 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 858 | engines: {node: '>=8'} 859 | dev: true 860 | 861 | /chardet/0.7.0: 862 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 863 | dev: true 864 | 865 | /chokidar/4.0.3: 866 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 867 | engines: {node: '>= 14.16.0'} 868 | dependencies: 869 | readdirp: 4.1.2 870 | dev: true 871 | 872 | /chownr/1.1.4: 873 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 874 | dev: false 875 | 876 | /ci-info/3.9.0: 877 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 878 | engines: {node: '>=8'} 879 | dev: true 880 | 881 | /color-convert/2.0.1: 882 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 883 | engines: {node: '>=7.0.0'} 884 | dependencies: 885 | color-name: 1.1.4 886 | 887 | /color-name/1.1.4: 888 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 889 | 890 | /color-string/1.9.1: 891 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 892 | dependencies: 893 | color-name: 1.1.4 894 | simple-swizzle: 0.2.2 895 | dev: false 896 | 897 | /color/4.2.3: 898 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 899 | engines: {node: '>=12.5.0'} 900 | dependencies: 901 | color-convert: 2.0.1 902 | color-string: 1.9.1 903 | dev: false 904 | 905 | /commander/4.1.1: 906 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 907 | engines: {node: '>= 6'} 908 | dev: true 909 | 910 | /consola/3.4.0: 911 | resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} 912 | engines: {node: ^14.18.0 || >=16.10.0} 913 | dev: true 914 | 915 | /cross-spawn/7.0.6: 916 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 917 | engines: {node: '>= 8'} 918 | dependencies: 919 | path-key: 3.1.1 920 | shebang-command: 2.0.0 921 | which: 2.0.2 922 | dev: true 923 | 924 | /debug/4.4.0: 925 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 926 | engines: {node: '>=6.0'} 927 | peerDependencies: 928 | supports-color: '*' 929 | peerDependenciesMeta: 930 | supports-color: 931 | optional: true 932 | dependencies: 933 | ms: 2.1.3 934 | dev: true 935 | 936 | /decompress-response/6.0.0: 937 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} 938 | engines: {node: '>=10'} 939 | dependencies: 940 | mimic-response: 3.1.0 941 | dev: false 942 | 943 | /deep-extend/0.6.0: 944 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 945 | engines: {node: '>=4.0.0'} 946 | dev: false 947 | 948 | /detect-indent/6.1.0: 949 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 950 | engines: {node: '>=8'} 951 | dev: true 952 | 953 | /detect-libc/2.0.3: 954 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 955 | engines: {node: '>=8'} 956 | dev: false 957 | 958 | /dir-glob/3.0.1: 959 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 960 | engines: {node: '>=8'} 961 | dependencies: 962 | path-type: 4.0.0 963 | dev: true 964 | 965 | /eastasianwidth/0.2.0: 966 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 967 | dev: true 968 | 969 | /emoji-regex/8.0.0: 970 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 971 | dev: true 972 | 973 | /emoji-regex/9.2.2: 974 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 975 | dev: true 976 | 977 | /end-of-stream/1.4.4: 978 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 979 | dependencies: 980 | once: 1.4.0 981 | dev: false 982 | 983 | /enquirer/2.4.1: 984 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 985 | engines: {node: '>=8.6'} 986 | dependencies: 987 | ansi-colors: 4.1.3 988 | strip-ansi: 6.0.1 989 | dev: true 990 | 991 | /esbuild/0.25.0: 992 | resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} 993 | engines: {node: '>=18'} 994 | hasBin: true 995 | requiresBuild: true 996 | optionalDependencies: 997 | '@esbuild/aix-ppc64': 0.25.0 998 | '@esbuild/android-arm': 0.25.0 999 | '@esbuild/android-arm64': 0.25.0 1000 | '@esbuild/android-x64': 0.25.0 1001 | '@esbuild/darwin-arm64': 0.25.0 1002 | '@esbuild/darwin-x64': 0.25.0 1003 | '@esbuild/freebsd-arm64': 0.25.0 1004 | '@esbuild/freebsd-x64': 0.25.0 1005 | '@esbuild/linux-arm': 0.25.0 1006 | '@esbuild/linux-arm64': 0.25.0 1007 | '@esbuild/linux-ia32': 0.25.0 1008 | '@esbuild/linux-loong64': 0.25.0 1009 | '@esbuild/linux-mips64el': 0.25.0 1010 | '@esbuild/linux-ppc64': 0.25.0 1011 | '@esbuild/linux-riscv64': 0.25.0 1012 | '@esbuild/linux-s390x': 0.25.0 1013 | '@esbuild/linux-x64': 0.25.0 1014 | '@esbuild/netbsd-arm64': 0.25.0 1015 | '@esbuild/netbsd-x64': 0.25.0 1016 | '@esbuild/openbsd-arm64': 0.25.0 1017 | '@esbuild/openbsd-x64': 0.25.0 1018 | '@esbuild/sunos-x64': 0.25.0 1019 | '@esbuild/win32-arm64': 0.25.0 1020 | '@esbuild/win32-ia32': 0.25.0 1021 | '@esbuild/win32-x64': 0.25.0 1022 | dev: true 1023 | 1024 | /esprima/4.0.1: 1025 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1026 | engines: {node: '>=4'} 1027 | hasBin: true 1028 | dev: true 1029 | 1030 | /expand-template/2.0.3: 1031 | resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} 1032 | engines: {node: '>=6'} 1033 | dev: false 1034 | 1035 | /extendable-error/0.1.7: 1036 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 1037 | dev: true 1038 | 1039 | /external-editor/3.1.0: 1040 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 1041 | engines: {node: '>=4'} 1042 | dependencies: 1043 | chardet: 0.7.0 1044 | iconv-lite: 0.4.24 1045 | tmp: 0.0.33 1046 | dev: true 1047 | 1048 | /fast-fifo/1.3.2: 1049 | resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} 1050 | dev: false 1051 | 1052 | /fast-glob/3.3.3: 1053 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1054 | engines: {node: '>=8.6.0'} 1055 | dependencies: 1056 | '@nodelib/fs.stat': 2.0.5 1057 | '@nodelib/fs.walk': 1.2.8 1058 | glob-parent: 5.1.2 1059 | merge2: 1.4.1 1060 | micromatch: 4.0.8 1061 | dev: true 1062 | 1063 | /fastq/1.19.1: 1064 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1065 | dependencies: 1066 | reusify: 1.1.0 1067 | dev: true 1068 | 1069 | /fdir/6.4.3_picomatch@4.0.2: 1070 | resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} 1071 | peerDependencies: 1072 | picomatch: ^3 || ^4 1073 | peerDependenciesMeta: 1074 | picomatch: 1075 | optional: true 1076 | dependencies: 1077 | picomatch: 4.0.2 1078 | dev: true 1079 | 1080 | /fill-range/7.1.1: 1081 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1082 | engines: {node: '>=8'} 1083 | dependencies: 1084 | to-regex-range: 5.0.1 1085 | dev: true 1086 | 1087 | /find-up/4.1.0: 1088 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1089 | engines: {node: '>=8'} 1090 | dependencies: 1091 | locate-path: 5.0.0 1092 | path-exists: 4.0.0 1093 | dev: true 1094 | 1095 | /flatbuffers/1.12.0: 1096 | resolution: {integrity: sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==} 1097 | dev: false 1098 | 1099 | /foreground-child/3.3.1: 1100 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 1101 | engines: {node: '>=14'} 1102 | dependencies: 1103 | cross-spawn: 7.0.6 1104 | signal-exit: 4.1.0 1105 | dev: true 1106 | 1107 | /fs-constants/1.0.0: 1108 | resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} 1109 | dev: false 1110 | 1111 | /fs-extra/7.0.1: 1112 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 1113 | engines: {node: '>=6 <7 || >=8'} 1114 | dependencies: 1115 | graceful-fs: 4.2.11 1116 | jsonfile: 4.0.0 1117 | universalify: 0.1.2 1118 | dev: true 1119 | 1120 | /fs-extra/8.1.0: 1121 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 1122 | engines: {node: '>=6 <7 || >=8'} 1123 | dependencies: 1124 | graceful-fs: 4.2.11 1125 | jsonfile: 4.0.0 1126 | universalify: 0.1.2 1127 | dev: true 1128 | 1129 | /fsevents/2.3.3: 1130 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1131 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1132 | os: [darwin] 1133 | dev: true 1134 | optional: true 1135 | 1136 | /github-from-package/0.0.0: 1137 | resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} 1138 | dev: false 1139 | 1140 | /glob-parent/5.1.2: 1141 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1142 | engines: {node: '>= 6'} 1143 | dependencies: 1144 | is-glob: 4.0.3 1145 | dev: true 1146 | 1147 | /glob/10.4.5: 1148 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 1149 | hasBin: true 1150 | dependencies: 1151 | foreground-child: 3.3.1 1152 | jackspeak: 3.4.3 1153 | minimatch: 9.0.5 1154 | minipass: 7.1.2 1155 | package-json-from-dist: 1.0.1 1156 | path-scurry: 1.11.1 1157 | dev: true 1158 | 1159 | /globby/11.1.0: 1160 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1161 | engines: {node: '>=10'} 1162 | dependencies: 1163 | array-union: 2.1.0 1164 | dir-glob: 3.0.1 1165 | fast-glob: 3.3.3 1166 | ignore: 5.3.2 1167 | merge2: 1.4.1 1168 | slash: 3.0.0 1169 | dev: true 1170 | 1171 | /graceful-fs/4.2.11: 1172 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1173 | dev: true 1174 | 1175 | /guid-typescript/1.0.9: 1176 | resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} 1177 | dev: false 1178 | 1179 | /human-id/4.1.1: 1180 | resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} 1181 | hasBin: true 1182 | dev: true 1183 | 1184 | /iconv-lite/0.4.24: 1185 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1186 | engines: {node: '>=0.10.0'} 1187 | dependencies: 1188 | safer-buffer: 2.1.2 1189 | dev: true 1190 | 1191 | /ieee754/1.2.1: 1192 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1193 | dev: false 1194 | 1195 | /ignore/5.3.2: 1196 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1197 | engines: {node: '>= 4'} 1198 | dev: true 1199 | 1200 | /inherits/2.0.4: 1201 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1202 | dev: false 1203 | 1204 | /ini/1.3.8: 1205 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 1206 | dev: false 1207 | 1208 | /is-arrayish/0.3.2: 1209 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 1210 | dev: false 1211 | 1212 | /is-extglob/2.1.1: 1213 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1214 | engines: {node: '>=0.10.0'} 1215 | dev: true 1216 | 1217 | /is-fullwidth-code-point/3.0.0: 1218 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1219 | engines: {node: '>=8'} 1220 | dev: true 1221 | 1222 | /is-glob/4.0.3: 1223 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1224 | engines: {node: '>=0.10.0'} 1225 | dependencies: 1226 | is-extglob: 2.1.1 1227 | dev: true 1228 | 1229 | /is-number/7.0.0: 1230 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1231 | engines: {node: '>=0.12.0'} 1232 | dev: true 1233 | 1234 | /is-subdir/1.2.0: 1235 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 1236 | engines: {node: '>=4'} 1237 | dependencies: 1238 | better-path-resolve: 1.0.0 1239 | dev: true 1240 | 1241 | /is-windows/1.0.2: 1242 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1243 | engines: {node: '>=0.10.0'} 1244 | dev: true 1245 | 1246 | /isexe/2.0.0: 1247 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1248 | dev: true 1249 | 1250 | /jackspeak/3.4.3: 1251 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1252 | dependencies: 1253 | '@isaacs/cliui': 8.0.2 1254 | optionalDependencies: 1255 | '@pkgjs/parseargs': 0.11.0 1256 | dev: true 1257 | 1258 | /joycon/3.1.1: 1259 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1260 | engines: {node: '>=10'} 1261 | dev: true 1262 | 1263 | /js-yaml/3.14.1: 1264 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1265 | hasBin: true 1266 | dependencies: 1267 | argparse: 1.0.10 1268 | esprima: 4.0.1 1269 | dev: true 1270 | 1271 | /jsonfile/4.0.0: 1272 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1273 | optionalDependencies: 1274 | graceful-fs: 4.2.11 1275 | dev: true 1276 | 1277 | /lilconfig/3.1.3: 1278 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1279 | engines: {node: '>=14'} 1280 | dev: true 1281 | 1282 | /lines-and-columns/1.2.4: 1283 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1284 | dev: true 1285 | 1286 | /load-tsconfig/0.2.5: 1287 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1288 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1289 | dev: true 1290 | 1291 | /locate-path/5.0.0: 1292 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1293 | engines: {node: '>=8'} 1294 | dependencies: 1295 | p-locate: 4.1.0 1296 | dev: true 1297 | 1298 | /lodash.sortby/4.7.0: 1299 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1300 | dev: true 1301 | 1302 | /lodash.startcase/4.4.0: 1303 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 1304 | dev: true 1305 | 1306 | /long/4.0.0: 1307 | resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} 1308 | dev: false 1309 | 1310 | /long/5.3.1: 1311 | resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==} 1312 | dev: false 1313 | 1314 | /lru-cache/10.4.3: 1315 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1316 | dev: true 1317 | 1318 | /merge2/1.4.1: 1319 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1320 | engines: {node: '>= 8'} 1321 | dev: true 1322 | 1323 | /micromatch/4.0.8: 1324 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1325 | engines: {node: '>=8.6'} 1326 | dependencies: 1327 | braces: 3.0.3 1328 | picomatch: 2.3.1 1329 | dev: true 1330 | 1331 | /mimic-response/3.1.0: 1332 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} 1333 | engines: {node: '>=10'} 1334 | dev: false 1335 | 1336 | /minimatch/9.0.5: 1337 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1338 | engines: {node: '>=16 || 14 >=14.17'} 1339 | dependencies: 1340 | brace-expansion: 2.0.1 1341 | dev: true 1342 | 1343 | /minimist/1.2.8: 1344 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1345 | dev: false 1346 | 1347 | /minipass/7.1.2: 1348 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1349 | engines: {node: '>=16 || 14 >=14.17'} 1350 | dev: true 1351 | 1352 | /mkdirp-classic/0.5.3: 1353 | resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} 1354 | dev: false 1355 | 1356 | /mri/1.2.0: 1357 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1358 | engines: {node: '>=4'} 1359 | dev: true 1360 | 1361 | /ms/2.1.3: 1362 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1363 | dev: true 1364 | 1365 | /mz/2.7.0: 1366 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1367 | dependencies: 1368 | any-promise: 1.3.0 1369 | object-assign: 4.1.1 1370 | thenify-all: 1.6.0 1371 | dev: true 1372 | 1373 | /napi-build-utils/2.0.0: 1374 | resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} 1375 | dev: false 1376 | 1377 | /node-abi/3.74.0: 1378 | resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} 1379 | engines: {node: '>=10'} 1380 | dependencies: 1381 | semver: 7.7.1 1382 | dev: false 1383 | 1384 | /node-addon-api/6.1.0: 1385 | resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} 1386 | dev: false 1387 | 1388 | /object-assign/4.1.1: 1389 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1390 | engines: {node: '>=0.10.0'} 1391 | dev: true 1392 | 1393 | /once/1.4.0: 1394 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1395 | dependencies: 1396 | wrappy: 1.0.2 1397 | dev: false 1398 | 1399 | /onnx-proto/4.0.4: 1400 | resolution: {integrity: sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==} 1401 | dependencies: 1402 | protobufjs: 6.11.4 1403 | dev: false 1404 | 1405 | /onnxruntime-common/1.14.0: 1406 | resolution: {integrity: sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==} 1407 | dev: false 1408 | 1409 | /onnxruntime-common/1.19.2: 1410 | resolution: {integrity: sha512-a4R7wYEVFbZBlp0BfhpbFWqe4opCor3KM+5Wm22Az3NGDcQMiU2hfG/0MfnBs+1ZrlSGmlgWeMcXQkDk1UFb8Q==} 1411 | dev: false 1412 | 1413 | /onnxruntime-node/1.14.0: 1414 | resolution: {integrity: sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==} 1415 | os: [win32, darwin, linux] 1416 | dependencies: 1417 | onnxruntime-common: 1.14.0 1418 | dev: false 1419 | optional: true 1420 | 1421 | /onnxruntime-web/1.14.0: 1422 | resolution: {integrity: sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==} 1423 | dependencies: 1424 | flatbuffers: 1.12.0 1425 | guid-typescript: 1.0.9 1426 | long: 4.0.0 1427 | onnx-proto: 4.0.4 1428 | onnxruntime-common: 1.14.0 1429 | platform: 1.3.6 1430 | dev: false 1431 | 1432 | /onnxruntime-web/1.19.2: 1433 | resolution: {integrity: sha512-r0ok6KpTUXR4WA+rHvUiZn7JoH02e8iS7XE1p5bXk7q3E0UaRFfYvpMNUHqEPiTBMuIssfBxDCQjUihV8dDFPg==} 1434 | dependencies: 1435 | flatbuffers: 1.12.0 1436 | guid-typescript: 1.0.9 1437 | long: 5.3.1 1438 | onnxruntime-common: 1.19.2 1439 | platform: 1.3.6 1440 | protobufjs: 7.4.0 1441 | dev: false 1442 | 1443 | /os-tmpdir/1.0.2: 1444 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 1445 | engines: {node: '>=0.10.0'} 1446 | dev: true 1447 | 1448 | /outdent/0.5.0: 1449 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 1450 | dev: true 1451 | 1452 | /p-filter/2.1.0: 1453 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 1454 | engines: {node: '>=8'} 1455 | dependencies: 1456 | p-map: 2.1.0 1457 | dev: true 1458 | 1459 | /p-limit/2.3.0: 1460 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1461 | engines: {node: '>=6'} 1462 | dependencies: 1463 | p-try: 2.2.0 1464 | dev: true 1465 | 1466 | /p-locate/4.1.0: 1467 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1468 | engines: {node: '>=8'} 1469 | dependencies: 1470 | p-limit: 2.3.0 1471 | dev: true 1472 | 1473 | /p-map/2.1.0: 1474 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 1475 | engines: {node: '>=6'} 1476 | dev: true 1477 | 1478 | /p-try/2.2.0: 1479 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1480 | engines: {node: '>=6'} 1481 | dev: true 1482 | 1483 | /package-json-from-dist/1.0.1: 1484 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1485 | dev: true 1486 | 1487 | /package-manager-detector/0.2.11: 1488 | resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} 1489 | dependencies: 1490 | quansync: 0.2.7 1491 | dev: true 1492 | 1493 | /path-exists/4.0.0: 1494 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1495 | engines: {node: '>=8'} 1496 | dev: true 1497 | 1498 | /path-key/3.1.1: 1499 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1500 | engines: {node: '>=8'} 1501 | dev: true 1502 | 1503 | /path-scurry/1.11.1: 1504 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1505 | engines: {node: '>=16 || 14 >=14.18'} 1506 | dependencies: 1507 | lru-cache: 10.4.3 1508 | minipass: 7.1.2 1509 | dev: true 1510 | 1511 | /path-type/4.0.0: 1512 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1513 | engines: {node: '>=8'} 1514 | dev: true 1515 | 1516 | /picocolors/1.1.1: 1517 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1518 | dev: true 1519 | 1520 | /picomatch/2.3.1: 1521 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1522 | engines: {node: '>=8.6'} 1523 | dev: true 1524 | 1525 | /picomatch/4.0.2: 1526 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1527 | engines: {node: '>=12'} 1528 | dev: true 1529 | 1530 | /pify/4.0.1: 1531 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1532 | engines: {node: '>=6'} 1533 | dev: true 1534 | 1535 | /pirates/4.0.6: 1536 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1537 | engines: {node: '>= 6'} 1538 | dev: true 1539 | 1540 | /platform/1.3.6: 1541 | resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} 1542 | dev: false 1543 | 1544 | /postcss-load-config/6.0.1: 1545 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 1546 | engines: {node: '>= 18'} 1547 | peerDependencies: 1548 | jiti: '>=1.21.0' 1549 | postcss: '>=8.0.9' 1550 | tsx: ^4.8.1 1551 | yaml: ^2.4.2 1552 | peerDependenciesMeta: 1553 | jiti: 1554 | optional: true 1555 | postcss: 1556 | optional: true 1557 | tsx: 1558 | optional: true 1559 | yaml: 1560 | optional: true 1561 | dependencies: 1562 | lilconfig: 3.1.3 1563 | dev: true 1564 | 1565 | /prebuild-install/7.1.3: 1566 | resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} 1567 | engines: {node: '>=10'} 1568 | hasBin: true 1569 | dependencies: 1570 | detect-libc: 2.0.3 1571 | expand-template: 2.0.3 1572 | github-from-package: 0.0.0 1573 | minimist: 1.2.8 1574 | mkdirp-classic: 0.5.3 1575 | napi-build-utils: 2.0.0 1576 | node-abi: 3.74.0 1577 | pump: 3.0.2 1578 | rc: 1.2.8 1579 | simple-get: 4.0.1 1580 | tar-fs: 2.1.2 1581 | tunnel-agent: 0.6.0 1582 | dev: false 1583 | 1584 | /prettier/2.8.8: 1585 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 1586 | engines: {node: '>=10.13.0'} 1587 | hasBin: true 1588 | dev: true 1589 | 1590 | /prettier/3.5.2: 1591 | resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} 1592 | engines: {node: '>=14'} 1593 | hasBin: true 1594 | dev: true 1595 | 1596 | /protobufjs/6.11.4: 1597 | resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} 1598 | hasBin: true 1599 | requiresBuild: true 1600 | dependencies: 1601 | '@protobufjs/aspromise': 1.1.2 1602 | '@protobufjs/base64': 1.1.2 1603 | '@protobufjs/codegen': 2.0.4 1604 | '@protobufjs/eventemitter': 1.1.0 1605 | '@protobufjs/fetch': 1.1.0 1606 | '@protobufjs/float': 1.0.2 1607 | '@protobufjs/inquire': 1.1.0 1608 | '@protobufjs/path': 1.1.2 1609 | '@protobufjs/pool': 1.1.0 1610 | '@protobufjs/utf8': 1.1.0 1611 | '@types/long': 4.0.2 1612 | '@types/node': 22.13.8 1613 | long: 4.0.0 1614 | dev: false 1615 | 1616 | /protobufjs/7.4.0: 1617 | resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} 1618 | engines: {node: '>=12.0.0'} 1619 | requiresBuild: true 1620 | dependencies: 1621 | '@protobufjs/aspromise': 1.1.2 1622 | '@protobufjs/base64': 1.1.2 1623 | '@protobufjs/codegen': 2.0.4 1624 | '@protobufjs/eventemitter': 1.1.0 1625 | '@protobufjs/fetch': 1.1.0 1626 | '@protobufjs/float': 1.0.2 1627 | '@protobufjs/inquire': 1.1.0 1628 | '@protobufjs/path': 1.1.2 1629 | '@protobufjs/pool': 1.1.0 1630 | '@protobufjs/utf8': 1.1.0 1631 | '@types/node': 22.13.8 1632 | long: 5.3.1 1633 | dev: false 1634 | 1635 | /pump/3.0.2: 1636 | resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} 1637 | dependencies: 1638 | end-of-stream: 1.4.4 1639 | once: 1.4.0 1640 | dev: false 1641 | 1642 | /punycode/2.3.1: 1643 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1644 | engines: {node: '>=6'} 1645 | dev: true 1646 | 1647 | /quansync/0.2.7: 1648 | resolution: {integrity: sha512-KZDFlN9/Si3CgKHZsIfLBsrjWKFjqu9KA0zDGJEQoQzPm5HWNDEFc2mkLeYUBBOwEJtxNBSMaNLE/GlvArIEfQ==} 1649 | dev: true 1650 | 1651 | /queue-microtask/1.2.3: 1652 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1653 | dev: true 1654 | 1655 | /rc/1.2.8: 1656 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 1657 | hasBin: true 1658 | dependencies: 1659 | deep-extend: 0.6.0 1660 | ini: 1.3.8 1661 | minimist: 1.2.8 1662 | strip-json-comments: 2.0.1 1663 | dev: false 1664 | 1665 | /read-yaml-file/1.1.0: 1666 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 1667 | engines: {node: '>=6'} 1668 | dependencies: 1669 | graceful-fs: 4.2.11 1670 | js-yaml: 3.14.1 1671 | pify: 4.0.1 1672 | strip-bom: 3.0.0 1673 | dev: true 1674 | 1675 | /readable-stream/3.6.2: 1676 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1677 | engines: {node: '>= 6'} 1678 | dependencies: 1679 | inherits: 2.0.4 1680 | string_decoder: 1.3.0 1681 | util-deprecate: 1.0.2 1682 | dev: false 1683 | 1684 | /readdirp/4.1.2: 1685 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1686 | engines: {node: '>= 14.18.0'} 1687 | dev: true 1688 | 1689 | /regenerator-runtime/0.14.1: 1690 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1691 | dev: true 1692 | 1693 | /resolve-from/5.0.0: 1694 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1695 | engines: {node: '>=8'} 1696 | dev: true 1697 | 1698 | /reusify/1.1.0: 1699 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1700 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1701 | dev: true 1702 | 1703 | /rollup/4.34.9: 1704 | resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} 1705 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1706 | hasBin: true 1707 | dependencies: 1708 | '@types/estree': 1.0.6 1709 | optionalDependencies: 1710 | '@rollup/rollup-android-arm-eabi': 4.34.9 1711 | '@rollup/rollup-android-arm64': 4.34.9 1712 | '@rollup/rollup-darwin-arm64': 4.34.9 1713 | '@rollup/rollup-darwin-x64': 4.34.9 1714 | '@rollup/rollup-freebsd-arm64': 4.34.9 1715 | '@rollup/rollup-freebsd-x64': 4.34.9 1716 | '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 1717 | '@rollup/rollup-linux-arm-musleabihf': 4.34.9 1718 | '@rollup/rollup-linux-arm64-gnu': 4.34.9 1719 | '@rollup/rollup-linux-arm64-musl': 4.34.9 1720 | '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 1721 | '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 1722 | '@rollup/rollup-linux-riscv64-gnu': 4.34.9 1723 | '@rollup/rollup-linux-s390x-gnu': 4.34.9 1724 | '@rollup/rollup-linux-x64-gnu': 4.34.9 1725 | '@rollup/rollup-linux-x64-musl': 4.34.9 1726 | '@rollup/rollup-win32-arm64-msvc': 4.34.9 1727 | '@rollup/rollup-win32-ia32-msvc': 4.34.9 1728 | '@rollup/rollup-win32-x64-msvc': 4.34.9 1729 | fsevents: 2.3.3 1730 | dev: true 1731 | 1732 | /run-parallel/1.2.0: 1733 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1734 | dependencies: 1735 | queue-microtask: 1.2.3 1736 | dev: true 1737 | 1738 | /safe-buffer/5.2.1: 1739 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1740 | dev: false 1741 | 1742 | /safer-buffer/2.1.2: 1743 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1744 | dev: true 1745 | 1746 | /semver/7.7.1: 1747 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1748 | engines: {node: '>=10'} 1749 | hasBin: true 1750 | 1751 | /sharp/0.32.6: 1752 | resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} 1753 | engines: {node: '>=14.15.0'} 1754 | requiresBuild: true 1755 | dependencies: 1756 | color: 4.2.3 1757 | detect-libc: 2.0.3 1758 | node-addon-api: 6.1.0 1759 | prebuild-install: 7.1.3 1760 | semver: 7.7.1 1761 | simple-get: 4.0.1 1762 | tar-fs: 3.0.8 1763 | tunnel-agent: 0.6.0 1764 | transitivePeerDependencies: 1765 | - bare-buffer 1766 | dev: false 1767 | 1768 | /shebang-command/2.0.0: 1769 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1770 | engines: {node: '>=8'} 1771 | dependencies: 1772 | shebang-regex: 3.0.0 1773 | dev: true 1774 | 1775 | /shebang-regex/3.0.0: 1776 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1777 | engines: {node: '>=8'} 1778 | dev: true 1779 | 1780 | /signal-exit/4.1.0: 1781 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1782 | engines: {node: '>=14'} 1783 | dev: true 1784 | 1785 | /simple-concat/1.0.1: 1786 | resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} 1787 | dev: false 1788 | 1789 | /simple-get/4.0.1: 1790 | resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} 1791 | dependencies: 1792 | decompress-response: 6.0.0 1793 | once: 1.4.0 1794 | simple-concat: 1.0.1 1795 | dev: false 1796 | 1797 | /simple-swizzle/0.2.2: 1798 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 1799 | dependencies: 1800 | is-arrayish: 0.3.2 1801 | dev: false 1802 | 1803 | /slash/3.0.0: 1804 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1805 | engines: {node: '>=8'} 1806 | dev: true 1807 | 1808 | /source-map/0.8.0-beta.0: 1809 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1810 | engines: {node: '>= 8'} 1811 | dependencies: 1812 | whatwg-url: 7.1.0 1813 | dev: true 1814 | 1815 | /spawndamnit/3.0.1: 1816 | resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} 1817 | dependencies: 1818 | cross-spawn: 7.0.6 1819 | signal-exit: 4.1.0 1820 | dev: true 1821 | 1822 | /sprintf-js/1.0.3: 1823 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1824 | dev: true 1825 | 1826 | /streamx/2.22.0: 1827 | resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} 1828 | dependencies: 1829 | fast-fifo: 1.3.2 1830 | text-decoder: 1.2.3 1831 | optionalDependencies: 1832 | bare-events: 2.5.4 1833 | dev: false 1834 | 1835 | /string-width/4.2.3: 1836 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1837 | engines: {node: '>=8'} 1838 | dependencies: 1839 | emoji-regex: 8.0.0 1840 | is-fullwidth-code-point: 3.0.0 1841 | strip-ansi: 6.0.1 1842 | dev: true 1843 | 1844 | /string-width/5.1.2: 1845 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1846 | engines: {node: '>=12'} 1847 | dependencies: 1848 | eastasianwidth: 0.2.0 1849 | emoji-regex: 9.2.2 1850 | strip-ansi: 7.1.0 1851 | dev: true 1852 | 1853 | /string_decoder/1.3.0: 1854 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1855 | dependencies: 1856 | safe-buffer: 5.2.1 1857 | dev: false 1858 | 1859 | /strip-ansi/6.0.1: 1860 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1861 | engines: {node: '>=8'} 1862 | dependencies: 1863 | ansi-regex: 5.0.1 1864 | dev: true 1865 | 1866 | /strip-ansi/7.1.0: 1867 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1868 | engines: {node: '>=12'} 1869 | dependencies: 1870 | ansi-regex: 6.1.0 1871 | dev: true 1872 | 1873 | /strip-bom/3.0.0: 1874 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1875 | engines: {node: '>=4'} 1876 | dev: true 1877 | 1878 | /strip-json-comments/2.0.1: 1879 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 1880 | engines: {node: '>=0.10.0'} 1881 | dev: false 1882 | 1883 | /sucrase/3.35.0: 1884 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1885 | engines: {node: '>=16 || 14 >=14.17'} 1886 | hasBin: true 1887 | dependencies: 1888 | '@jridgewell/gen-mapping': 0.3.8 1889 | commander: 4.1.1 1890 | glob: 10.4.5 1891 | lines-and-columns: 1.2.4 1892 | mz: 2.7.0 1893 | pirates: 4.0.6 1894 | ts-interface-checker: 0.1.13 1895 | dev: true 1896 | 1897 | /tar-fs/2.1.2: 1898 | resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} 1899 | dependencies: 1900 | chownr: 1.1.4 1901 | mkdirp-classic: 0.5.3 1902 | pump: 3.0.2 1903 | tar-stream: 2.2.0 1904 | dev: false 1905 | 1906 | /tar-fs/3.0.8: 1907 | resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} 1908 | dependencies: 1909 | pump: 3.0.2 1910 | tar-stream: 3.1.7 1911 | optionalDependencies: 1912 | bare-fs: 4.0.1 1913 | bare-path: 3.0.0 1914 | transitivePeerDependencies: 1915 | - bare-buffer 1916 | dev: false 1917 | 1918 | /tar-stream/2.2.0: 1919 | resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} 1920 | engines: {node: '>=6'} 1921 | dependencies: 1922 | bl: 4.1.0 1923 | end-of-stream: 1.4.4 1924 | fs-constants: 1.0.0 1925 | inherits: 2.0.4 1926 | readable-stream: 3.6.2 1927 | dev: false 1928 | 1929 | /tar-stream/3.1.7: 1930 | resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} 1931 | dependencies: 1932 | b4a: 1.6.7 1933 | fast-fifo: 1.3.2 1934 | streamx: 2.22.0 1935 | dev: false 1936 | 1937 | /term-size/2.2.1: 1938 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 1939 | engines: {node: '>=8'} 1940 | dev: true 1941 | 1942 | /text-decoder/1.2.3: 1943 | resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} 1944 | dependencies: 1945 | b4a: 1.6.7 1946 | dev: false 1947 | 1948 | /thenify-all/1.6.0: 1949 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1950 | engines: {node: '>=0.8'} 1951 | dependencies: 1952 | thenify: 3.3.1 1953 | dev: true 1954 | 1955 | /thenify/3.3.1: 1956 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1957 | dependencies: 1958 | any-promise: 1.3.0 1959 | dev: true 1960 | 1961 | /tinyexec/0.3.2: 1962 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1963 | dev: true 1964 | 1965 | /tinyglobby/0.2.12: 1966 | resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} 1967 | engines: {node: '>=12.0.0'} 1968 | dependencies: 1969 | fdir: 6.4.3_picomatch@4.0.2 1970 | picomatch: 4.0.2 1971 | dev: true 1972 | 1973 | /tmp/0.0.33: 1974 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 1975 | engines: {node: '>=0.6.0'} 1976 | dependencies: 1977 | os-tmpdir: 1.0.2 1978 | dev: true 1979 | 1980 | /to-regex-range/5.0.1: 1981 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1982 | engines: {node: '>=8.0'} 1983 | dependencies: 1984 | is-number: 7.0.0 1985 | dev: true 1986 | 1987 | /tr46/1.0.1: 1988 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1989 | dependencies: 1990 | punycode: 2.3.1 1991 | dev: true 1992 | 1993 | /tree-kill/1.2.2: 1994 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1995 | hasBin: true 1996 | dev: true 1997 | 1998 | /ts-interface-checker/0.1.13: 1999 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2000 | dev: true 2001 | 2002 | /tsup/8.4.0_typescript@5.8.2: 2003 | resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==} 2004 | engines: {node: '>=18'} 2005 | hasBin: true 2006 | peerDependencies: 2007 | '@microsoft/api-extractor': ^7.36.0 2008 | '@swc/core': ^1 2009 | postcss: ^8.4.12 2010 | typescript: '>=4.5.0' 2011 | peerDependenciesMeta: 2012 | '@microsoft/api-extractor': 2013 | optional: true 2014 | '@swc/core': 2015 | optional: true 2016 | postcss: 2017 | optional: true 2018 | typescript: 2019 | optional: true 2020 | dependencies: 2021 | bundle-require: 5.1.0_esbuild@0.25.0 2022 | cac: 6.7.14 2023 | chokidar: 4.0.3 2024 | consola: 3.4.0 2025 | debug: 4.4.0 2026 | esbuild: 0.25.0 2027 | joycon: 3.1.1 2028 | picocolors: 1.1.1 2029 | postcss-load-config: 6.0.1 2030 | resolve-from: 5.0.0 2031 | rollup: 4.34.9 2032 | source-map: 0.8.0-beta.0 2033 | sucrase: 3.35.0 2034 | tinyexec: 0.3.2 2035 | tinyglobby: 0.2.12 2036 | tree-kill: 1.2.2 2037 | typescript: 5.8.2 2038 | transitivePeerDependencies: 2039 | - jiti 2040 | - supports-color 2041 | - tsx 2042 | - yaml 2043 | dev: true 2044 | 2045 | /tunnel-agent/0.6.0: 2046 | resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 2047 | dependencies: 2048 | safe-buffer: 5.2.1 2049 | dev: false 2050 | 2051 | /typescript/5.8.2: 2052 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 2053 | engines: {node: '>=14.17'} 2054 | hasBin: true 2055 | dev: true 2056 | 2057 | /undici-types/6.20.0: 2058 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 2059 | dev: false 2060 | 2061 | /universalify/0.1.2: 2062 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 2063 | engines: {node: '>= 4.0.0'} 2064 | dev: true 2065 | 2066 | /util-deprecate/1.0.2: 2067 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2068 | dev: false 2069 | 2070 | /webidl-conversions/4.0.2: 2071 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 2072 | dev: true 2073 | 2074 | /whatwg-url/7.1.0: 2075 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 2076 | dependencies: 2077 | lodash.sortby: 4.7.0 2078 | tr46: 1.0.1 2079 | webidl-conversions: 4.0.2 2080 | dev: true 2081 | 2082 | /which/2.0.2: 2083 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2084 | engines: {node: '>= 8'} 2085 | hasBin: true 2086 | dependencies: 2087 | isexe: 2.0.0 2088 | dev: true 2089 | 2090 | /wrap-ansi/7.0.0: 2091 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2092 | engines: {node: '>=10'} 2093 | dependencies: 2094 | ansi-styles: 4.3.0 2095 | string-width: 4.2.3 2096 | strip-ansi: 6.0.1 2097 | dev: true 2098 | 2099 | /wrap-ansi/8.1.0: 2100 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2101 | engines: {node: '>=12'} 2102 | dependencies: 2103 | ansi-styles: 6.2.1 2104 | string-width: 5.1.2 2105 | strip-ansi: 7.1.0 2106 | dev: true 2107 | 2108 | /wrappy/1.0.2: 2109 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2110 | dev: false 2111 | -------------------------------------------------------------------------------- /src/interfaces.ts: -------------------------------------------------------------------------------- 1 | import { InferenceSession } from "onnxruntime-common"; 2 | 3 | export type WebOrtLib = 4 | | typeof import("onnxruntime-web") 5 | | typeof import("onnxruntime-web/webgpu") 6 | | typeof import("onnxruntime-web/webgl"); 7 | 8 | export type NodeOrtLib = typeof import("onnxruntime-node"); 9 | 10 | export type ExecutionProvider = "cpu" | "wasm" | "webgpu" | "webgl"; 11 | 12 | // export type ExecutionContext = "web" | "node"; 13 | 14 | export interface IBaseSettings { 15 | modelPath: string | Uint8Array | ArrayBufferLike; 16 | // executionContext: ExecutionContext; 17 | } 18 | 19 | export interface IONNXNodeSettings extends IBaseSettings {} 20 | 21 | export interface IONNXWebSettings extends IBaseSettings { 22 | executionProvider?: ExecutionProvider; 23 | wasmPaths?: string; 24 | multiThread?: boolean; 25 | maxThreads?: number; 26 | fetchBinary?: boolean; 27 | } 28 | 29 | export type IONNXSettings = IONNXNodeSettings | IONNXWebSettings; 30 | 31 | export interface IONNXBaseWrapper { 32 | init(): Promise; 33 | run( 34 | feeds: InferenceSession.FeedsType, 35 | options?: InferenceSession.RunOptions, 36 | ): Promise; 37 | } 38 | 39 | export interface IONNXWebWrapper extends IONNXBaseWrapper { 40 | ort: WebOrtLib; 41 | settings: IONNXWebSettings; 42 | } 43 | 44 | export interface IONNXNodeWrapper extends IONNXBaseWrapper { 45 | ort: NodeOrtLib; 46 | settings: IONNXNodeSettings; 47 | } 48 | 49 | export type ONNXWrapper = IONNXWebWrapper | IONNXNodeWrapper; 50 | 51 | export interface ITransformersSettings { 52 | allowLocalModels: boolean; 53 | useBrowserCache: boolean; 54 | } 55 | 56 | export interface InitConfig { 57 | tokenizerPath: string; 58 | onnxSettings: IONNXSettings; 59 | transformersSettings?: ITransformersSettings; 60 | maxWidth?: number; 61 | modelType?: string; 62 | } 63 | 64 | export interface IInference { 65 | texts: string[]; 66 | entities: string[]; 67 | flatNer?: boolean; 68 | threshold?: number; 69 | multiLabel?: boolean; 70 | } 71 | 72 | export type RawInferenceResult = [string, number, number, string, number][][]; 73 | 74 | export interface IEntityResult { 75 | spanText: string; 76 | start: number; 77 | end: number; 78 | label: string; 79 | score: number; 80 | } 81 | export type InferenceResultSingle = IEntityResult[]; 82 | export type InferenceResultMultiple = InferenceResultSingle[]; 83 | -------------------------------------------------------------------------------- /src/lib/decoder.ts: -------------------------------------------------------------------------------- 1 | import { RawInferenceResult } from "./Gliner"; 2 | 3 | type Spans = [string, number, number, string, number][]; 4 | 5 | // Check if one span is nested inside the other 6 | const isNested = (idx1: number[], idx2: number[]): boolean => { 7 | return (idx1[0] <= idx2[0] && idx1[1] >= idx2[1]) || (idx2[0] <= idx1[0] && idx2[1] >= idx1[1]); 8 | }; 9 | 10 | // Check for any overlap between two spans 11 | const hasOverlapping = (idx1: number[], idx2: number[], multiLabel: boolean = false): boolean => { 12 | if (idx1.slice(0, 2).toString() === idx2.slice(0, 2).toString()) { 13 | return !multiLabel; 14 | } 15 | if (idx1[0] > idx2[1] || idx2[0] > idx1[1]) { 16 | return false; 17 | } 18 | return true; 19 | }; 20 | 21 | // Check if spans overlap but are not nested inside each other 22 | const hasOverlappingNested = ( 23 | idx1: number[], 24 | idx2: number[], 25 | multiLabel: boolean = false, 26 | ): boolean => { 27 | if (idx1.slice(0, 2).toString() === idx2.slice(0, 2).toString()) { 28 | return !multiLabel; 29 | } 30 | if (idx1[0] > idx2[1] || idx2[0] > idx1[1] || isNested(idx1, idx2)) { 31 | return false; 32 | } 33 | return true; 34 | }; 35 | 36 | const sigmoid = (x: number): number => { 37 | return 1 / (1 + Math.exp(-x)); 38 | }; 39 | 40 | // BaseDecoder class using abstract methods 41 | abstract class BaseDecoder { 42 | config: any; 43 | 44 | constructor(config: any) { 45 | if (new.target === BaseDecoder) { 46 | throw new TypeError("Cannot instantiate an abstract class."); 47 | } 48 | this.config = config; 49 | } 50 | 51 | abstract decode(...args: any[]): any; 52 | 53 | greedySearch(spans: Spans, flatNer: boolean = true, multiLabel: boolean = false): Spans { 54 | const hasOv = flatNer 55 | ? (idx1: number[], idx2: number[]) => hasOverlapping(idx1, idx2, multiLabel) 56 | : (idx1: number[], idx2: number[]) => hasOverlappingNested(idx1, idx2, multiLabel); 57 | 58 | const newList: Spans = []; 59 | // Sort spans by their score (last element) in descending order 60 | const spanProb: Spans = spans.slice().sort((a, b) => b[b.length - 1] - a[a.length - 1]); 61 | 62 | for (let i = 0; i < spanProb.length; i++) { 63 | const b = spanProb[i]; 64 | let flag = false; 65 | for (const newSpan of newList) { 66 | // Compare only start and end indices 67 | if (hasOv(b.slice(1, 3), newSpan.slice(1, 3))) { 68 | flag = true; 69 | break; 70 | } 71 | } 72 | if (!flag) { 73 | newList.push(b); 74 | } 75 | } 76 | 77 | // Sort newList by start position (second element) for correct ordering 78 | return newList.sort((a, b) => a[1] - b[1]); 79 | } 80 | } 81 | // SpanDecoder subclass 82 | export class SpanDecoder extends BaseDecoder { 83 | decode( 84 | batchSize: number, 85 | inputLength: number, 86 | maxWidth: number, 87 | numEntities: number, 88 | texts: string[], 89 | batchIds: number[], 90 | batchWordsStartIdx: number[][], 91 | batchWordsEndIdx: number[][], 92 | idToClass: Record, 93 | modelOutput: number[], 94 | flatNer: boolean = false, 95 | threshold: number = 0.5, 96 | multiLabel: boolean = false, 97 | ): RawInferenceResult { 98 | const spans: RawInferenceResult = []; 99 | 100 | for (let batch = 0; batch < batchSize; batch++) { 101 | spans.push([]); 102 | } 103 | 104 | const batchPadding = inputLength * maxWidth * numEntities; 105 | const startTokenPadding = maxWidth * numEntities; 106 | const endTokenPadding = numEntities * 1; 107 | 108 | modelOutput.forEach((value, id) => { 109 | let batch = Math.floor(id / batchPadding); 110 | let startToken = Math.floor(id / startTokenPadding) % inputLength; 111 | let endToken = startToken + (Math.floor(id / endTokenPadding) % maxWidth); 112 | let entity = id % numEntities; 113 | 114 | let prob = sigmoid(value); 115 | 116 | if ( 117 | prob >= threshold && 118 | startToken < batchWordsStartIdx[batch].length && 119 | endToken < batchWordsEndIdx[batch].length 120 | ) { 121 | let globalBatch: number = batchIds[batch]; 122 | let startIdx: number = batchWordsStartIdx[batch][startToken]; 123 | let endIdx: number = batchWordsEndIdx[batch][endToken]; 124 | let spanText: string = texts[globalBatch].slice(startIdx, endIdx); 125 | spans[batch].push([spanText, startIdx, endIdx, idToClass[entity + 1], prob]); 126 | } 127 | }); 128 | const allSelectedSpans: RawInferenceResult = []; 129 | 130 | spans.forEach((resI, id) => { 131 | const selectedSpans = this.greedySearch(resI, flatNer, multiLabel); 132 | allSelectedSpans.push(selectedSpans); 133 | }); 134 | 135 | return allSelectedSpans; 136 | } 137 | } 138 | 139 | // TokenDecoder subclass 140 | export class TokenDecoder extends BaseDecoder { 141 | decode( 142 | batchSize: number, 143 | inputLength: number, 144 | numEntities: number, 145 | texts: string[], 146 | batchIds: number[], 147 | batchWordsStartIdx: number[][], 148 | batchWordsEndIdx: number[][], 149 | idToClass: Record, 150 | modelOutput: number[], 151 | flatNer: boolean = false, 152 | threshold: number = 0.5, 153 | multiLabel: boolean = false, 154 | ): RawInferenceResult { 155 | const positionPadding = batchSize * inputLength * numEntities; 156 | const batchPadding = inputLength * numEntities; 157 | const tokenPadding = numEntities; 158 | 159 | let selectedStarts: any = []; 160 | let selectedEnds: any = []; 161 | let insideScore: number[][][] = []; 162 | 163 | for (let id = 0; id < batchSize; id++) { 164 | selectedStarts.push([]); 165 | selectedEnds.push([]); 166 | let batches: number[][] = []; 167 | for (let j = 0; j < inputLength; j++) { 168 | let sequence: number[] = Array(numEntities).fill(0); 169 | batches.push(sequence); 170 | } 171 | insideScore.push(batches); 172 | } 173 | 174 | modelOutput.forEach((value, id) => { 175 | let position = Math.floor(id / positionPadding); 176 | let batch = Math.floor(id / batchPadding) % batchSize; 177 | let token = Math.floor(id / tokenPadding) % inputLength; 178 | let entity = id % numEntities; 179 | 180 | let prob = sigmoid(value); 181 | 182 | if (prob >= threshold && token < batchWordsEndIdx[batch].length) { 183 | if (position == 0) { 184 | selectedStarts[batch].push([token, entity]); 185 | } else if (position == 1) { 186 | selectedEnds[batch].push([token, entity]); 187 | } 188 | } 189 | if (position == 2) { 190 | insideScore[batch][token][entity] = prob; 191 | } 192 | }); 193 | 194 | const spans: RawInferenceResult = []; 195 | 196 | for (let batch = 0; batch < batchSize; batch++) { 197 | let batchSpans: Spans = []; 198 | 199 | for (let [start, clsSt] of selectedStarts[batch]) { 200 | for (let [end, clsEd] of selectedEnds[batch]) { 201 | if (end >= start && clsSt === clsEd) { 202 | // Calculate the inside span scores 203 | const insideSpanScores = insideScore[batch] 204 | .slice(start, end + 1) 205 | .map((tokenScores) => tokenScores[clsSt]); 206 | 207 | // Check if all scores within the span are above the threshold 208 | if (insideSpanScores.some((score) => score < threshold)) continue; 209 | 210 | // Calculate mean span score 211 | const spanScore = insideSpanScores.reduce((a, b) => a + b, 0) / insideSpanScores.length; 212 | 213 | // Extract the start and end indices and the text for the span 214 | let startIdx = batchWordsStartIdx[batch][start]; 215 | let endIdx = batchWordsEndIdx[batch][end]; 216 | let spanText = texts[batchIds[batch]].slice(startIdx, endIdx); 217 | 218 | // Push the span with its score and class 219 | batchSpans.push([spanText, startIdx, endIdx, idToClass[clsSt + 1], spanScore]); 220 | } 221 | } 222 | } 223 | spans.push(batchSpans); 224 | } 225 | 226 | const allSelectedSpans: RawInferenceResult = []; 227 | 228 | spans.forEach((resI, id) => { 229 | const selectedSpans = this.greedySearch(resI, flatNer, multiLabel); 230 | allSelectedSpans.push(selectedSpans); 231 | }); 232 | 233 | return allSelectedSpans; 234 | } 235 | } 236 | -------------------------------------------------------------------------------- /src/lib/model.ts: -------------------------------------------------------------------------------- 1 | import ort from "onnxruntime-web"; 2 | import { RawInferenceResult, ONNXWrapper } from "../interfaces"; 3 | 4 | export class Model { 5 | constructor( 6 | public config: any, 7 | public processor: any, 8 | public decoder: any, 9 | public onnxWrapper: ONNXWrapper, 10 | ) {} 11 | 12 | async initialize(): Promise { 13 | await this.onnxWrapper.init(); 14 | } 15 | } 16 | 17 | export class SpanModel extends Model { 18 | prepareInputs(batch: any): Record { 19 | const batch_size: number = batch.inputsIds.length; 20 | const num_tokens: number = batch.inputsIds[0].length; 21 | const num_spans: number = batch.spanIdxs[0].length; 22 | 23 | const createTensor = (data: any[], shape: number[], tensorType: any = "int64"): ort.Tensor => { 24 | // @ts-ignore // NOTE: node types not working 25 | return new this.onnxWrapper.ort.Tensor(tensorType, data.flat(Infinity), shape); 26 | }; 27 | 28 | let input_ids: ort.Tensor = createTensor(batch.inputsIds, [batch_size, num_tokens]); 29 | let attention_mask: ort.Tensor = createTensor(batch.attentionMasks, [batch_size, num_tokens]); // NOTE: why convert to bool but type is not bool? 30 | let words_mask: ort.Tensor = createTensor(batch.wordsMasks, [batch_size, num_tokens]); 31 | let text_lengths: ort.Tensor = createTensor(batch.textLengths, [batch_size, 1]); 32 | let span_idx: ort.Tensor = createTensor(batch.spanIdxs, [batch_size, num_spans, 2]); 33 | let span_mask: ort.Tensor = createTensor(batch.spanMasks, [batch_size, num_spans], "bool"); 34 | 35 | const feeds: Record = { 36 | input_ids: input_ids, 37 | attention_mask: attention_mask, 38 | words_mask: words_mask, 39 | text_lengths: text_lengths, 40 | span_idx: span_idx, 41 | span_mask: span_mask, 42 | }; 43 | 44 | return feeds; 45 | } 46 | 47 | async inference( 48 | texts: string[], 49 | entities: string[], 50 | flatNer: boolean = false, 51 | threshold: number = 0.5, 52 | multiLabel: boolean = false, 53 | ): Promise { 54 | let batch: Record = this.processor.prepareBatch(texts, entities); 55 | let feeds: Record = this.prepareInputs(batch); 56 | const results: Record = await this.onnxWrapper.run(feeds); 57 | const modelOutput: any = results["logits"].data; 58 | // const modelOutput = results.logits.data as number[]; 59 | 60 | const batchSize: number = batch.batchTokens.length; 61 | const inputLength: number = Math.max(...batch.textLengths); 62 | const maxWidth: number = this.config.max_width; 63 | const numEntities: number = entities.length; 64 | const batchIds: number[] = Array.from({ length: batchSize }, (_, i) => i); 65 | const decodedSpans: RawInferenceResult = this.decoder.decode( 66 | batchSize, 67 | inputLength, 68 | maxWidth, 69 | numEntities, 70 | texts, 71 | batchIds, 72 | batch.batchWordsStartIdx, 73 | batch.batchWordsEndIdx, 74 | batch.idToClass, 75 | modelOutput, 76 | flatNer, 77 | threshold, 78 | multiLabel, 79 | ); 80 | 81 | return decodedSpans; 82 | } 83 | 84 | async inference_with_chunking( 85 | texts: string[], 86 | entities: string[], 87 | flatNer: boolean = false, 88 | threshold: number = 0.5, 89 | multiLabel: boolean = false, 90 | batch_size: number = 4, 91 | max_words: number = 512, 92 | ): Promise { 93 | const { 94 | idToClass, 95 | }: { 96 | idToClass: Record; 97 | } = this.processor.createMappings(entities); 98 | let batchIds: number[] = []; 99 | let batchTokens: string[][] = []; 100 | let batchWordsStartIdx: number[][] = []; 101 | let batchWordsEndIdx: number[][] = []; 102 | texts.forEach((text, id) => { 103 | let [tokens, wordsStartIdx, wordsEndIdx]: [string[], number[], number[]] = 104 | this.processor.tokenizeText(text); 105 | let num_sub_batches: number = Math.ceil(tokens.length / max_words); 106 | 107 | for (let i = 0; i < num_sub_batches; i++) { 108 | let start: number = i * max_words; 109 | let end: number = Math.min((i + 1) * max_words, tokens.length); 110 | 111 | batchIds.push(id); 112 | batchTokens.push(tokens.slice(start, end)); 113 | batchWordsStartIdx.push(wordsStartIdx.slice(start, end)); 114 | batchWordsEndIdx.push(wordsEndIdx.slice(start, end)); 115 | } 116 | }); 117 | 118 | let num_batches: number = Math.ceil(batchIds.length / batch_size); 119 | 120 | let finalDecodedSpans: RawInferenceResult = []; 121 | for (let id = 0; id < texts.length; id++) { 122 | finalDecodedSpans.push([]); 123 | } 124 | 125 | for (let batch_id = 0; batch_id < num_batches; batch_id++) { 126 | let start: number = batch_id * batch_size; 127 | let end: number = Math.min((batch_id + 1) * batch_size, batchIds.length); 128 | 129 | let currBatchTokens: string[][] = batchTokens.slice(start, end); 130 | let currBatchWordsStartIdx: number[][] = batchWordsStartIdx.slice(start, end); 131 | let currBatchWordsEndIdx: number[][] = batchWordsEndIdx.slice(start, end); 132 | let currBatchIds: number[] = batchIds.slice(start, end); 133 | 134 | let [inputTokens, textLengths, promptLengths]: [string[][], number[], number[]] = 135 | this.processor.prepareTextInputs(currBatchTokens, entities); 136 | 137 | let [inputsIds, attentionMasks, wordsMasks]: [number[][], number[][], number[][]] = 138 | this.processor.encodeInputs(inputTokens, promptLengths); 139 | 140 | inputsIds = this.processor.padArray(inputsIds); 141 | attentionMasks = this.processor.padArray(attentionMasks); 142 | wordsMasks = this.processor.padArray(wordsMasks); 143 | 144 | let { spanIdxs, spanMasks }: { spanIdxs: number[][][]; spanMasks: boolean[][] } = 145 | this.processor.prepareSpans(currBatchTokens, this.config["max_width"]); 146 | 147 | spanIdxs = this.processor.padArray(spanIdxs, 3); 148 | spanMasks = this.processor.padArray(spanMasks); 149 | 150 | let batch: Record = { 151 | inputsIds: inputsIds, 152 | attentionMasks: attentionMasks, 153 | wordsMasks: wordsMasks, 154 | textLengths: textLengths, 155 | spanIdxs: spanIdxs, 156 | spanMasks: spanMasks, 157 | idToClass: idToClass, 158 | batchTokens: currBatchTokens, 159 | batchWordsStartIdx: currBatchWordsStartIdx, 160 | batchWordsEndIdx: currBatchWordsEndIdx, 161 | }; 162 | 163 | let feeds: Record = this.prepareInputs(batch); 164 | const results: Record = await this.onnxWrapper.run(feeds); 165 | const modelOutput = results["logits"].data; 166 | // const modelOutput = results.logits.data as number[]; 167 | 168 | const batchSize: number = batch.batchTokens.length; 169 | const inputLength: number = Math.max(...batch.textLengths); 170 | const maxWidth: number = this.config.max_width; 171 | const numEntities: number = entities.length; 172 | 173 | const decodedSpans: RawInferenceResult = this.decoder.decode( 174 | batchSize, 175 | inputLength, 176 | maxWidth, 177 | numEntities, 178 | texts, 179 | currBatchIds, 180 | batch.batchWordsStartIdx, 181 | batch.batchWordsEndIdx, 182 | batch.idToClass, 183 | modelOutput, 184 | flatNer, 185 | threshold, 186 | multiLabel, 187 | ); 188 | 189 | for (let i = 0; i < currBatchIds.length; i++) { 190 | const originalTextId = currBatchIds[i]; 191 | finalDecodedSpans[originalTextId].push(...decodedSpans[i]); 192 | } 193 | } 194 | 195 | return finalDecodedSpans; 196 | } 197 | } 198 | 199 | export class TokenModel extends Model { 200 | prepareInputs(batch: any): Record { 201 | const batch_size: number = batch.inputsIds.length; 202 | const num_tokens: number = batch.inputsIds[0].length; 203 | 204 | const createTensor = (data: any[], shape: number[], tensorType: any = "int64"): ort.Tensor => { 205 | // @ts-ignore // NOTE: node types not working 206 | return new this.onnxWrapper.ort.Tensor(tensorType, data.flat(Infinity), shape); 207 | }; 208 | 209 | let input_ids: ort.Tensor = createTensor(batch.inputsIds, [batch_size, num_tokens]); 210 | let attention_mask: ort.Tensor = createTensor(batch.attentionMasks, [batch_size, num_tokens]); // NOTE: why convert to bool but type is not bool? 211 | let words_mask: ort.Tensor = createTensor(batch.wordsMasks, [batch_size, num_tokens]); 212 | let text_lengths: ort.Tensor = createTensor(batch.textLengths, [batch_size, 1]); 213 | 214 | const feeds: Record = { 215 | input_ids: input_ids, 216 | attention_mask: attention_mask, 217 | words_mask: words_mask, 218 | text_lengths: text_lengths, 219 | }; 220 | 221 | return feeds; 222 | } 223 | 224 | async inference( 225 | texts: string[], 226 | entities: string[], 227 | flatNer: boolean = false, 228 | threshold: number = 0.5, 229 | multiLabel: boolean = false, 230 | ): Promise { 231 | let batch: Record = this.processor.prepareBatch(texts, entities); 232 | let feeds: Record = this.prepareInputs(batch); 233 | const results: Record = await this.onnxWrapper.run(feeds); 234 | const modelOutput: any = results["logits"].data; 235 | // const modelOutput = results.logits.data as number[]; 236 | 237 | const batchSize: number = batch.batchTokens.length; 238 | const inputLength: number = Math.max(...batch.textLengths); 239 | const numEntities: number = entities.length; 240 | const batchIds: number[] = Array.from({ length: batchSize }, (_, i) => i); 241 | const decodedSpans: RawInferenceResult = this.decoder.decode( 242 | batchSize, 243 | inputLength, 244 | numEntities, 245 | texts, 246 | batchIds, 247 | batch.batchWordsStartIdx, 248 | batch.batchWordsEndIdx, 249 | batch.idToClass, 250 | modelOutput, 251 | flatNer, 252 | threshold, 253 | multiLabel, 254 | ); 255 | 256 | return decodedSpans; 257 | } 258 | async inference_with_chunking( 259 | texts: string[], 260 | entities: string[], 261 | flatNer: boolean = true, 262 | threshold: number = 0.5, 263 | multiLabel: boolean = false, 264 | batch_size: number = 4, 265 | max_words: number = 512, 266 | ): Promise { 267 | const { 268 | idToClass, 269 | }: { 270 | idToClass: Record; 271 | } = this.processor.createMappings(entities); 272 | let batchIds: number[] = []; 273 | let batchTokens: string[][] = []; 274 | let batchWordsStartIdx: number[][] = []; 275 | let batchWordsEndIdx: number[][] = []; 276 | texts.forEach((text, id) => { 277 | let [tokens, wordsStartIdx, wordsEndIdx]: [string[], number[], number[]] = 278 | this.processor.tokenizeText(text); 279 | let num_sub_batches: number = Math.ceil(tokens.length / max_words); 280 | 281 | for (let i = 0; i < num_sub_batches; i++) { 282 | let start: number = i * max_words; 283 | let end: number = Math.min((i + 1) * max_words, tokens.length); 284 | 285 | batchIds.push(id); 286 | batchTokens.push(tokens.slice(start, end)); 287 | batchWordsStartIdx.push(wordsStartIdx.slice(start, end)); 288 | batchWordsEndIdx.push(wordsEndIdx.slice(start, end)); 289 | } 290 | }); 291 | 292 | let num_batches: number = Math.ceil(batchIds.length / batch_size); 293 | 294 | let finalDecodedSpans: RawInferenceResult = []; 295 | for (let id = 0; id < texts.length; id++) { 296 | finalDecodedSpans.push([]); 297 | } 298 | 299 | for (let batch_id = 0; batch_id < num_batches; batch_id++) { 300 | let start: number = batch_id * batch_size; 301 | let end: number = Math.min((batch_id + 1) * batch_size, batchIds.length); 302 | 303 | let currBatchTokens: string[][] = batchTokens.slice(start, end); 304 | let currBatchWordsStartIdx: number[][] = batchWordsStartIdx.slice(start, end); 305 | let currBatchWordsEndIdx: number[][] = batchWordsEndIdx.slice(start, end); 306 | let currBatchIds: number[] = batchIds.slice(start, end); 307 | 308 | let [inputTokens, textLengths, promptLengths]: [string[][], number[], number[]] = 309 | this.processor.prepareTextInputs(currBatchTokens, entities); 310 | 311 | let [inputsIds, attentionMasks, wordsMasks]: [number[][], number[][], number[][]] = 312 | this.processor.encodeInputs(inputTokens, promptLengths); 313 | 314 | inputsIds = this.processor.padArray(inputsIds); 315 | attentionMasks = this.processor.padArray(attentionMasks); 316 | wordsMasks = this.processor.padArray(wordsMasks); 317 | 318 | let batch: Record = { 319 | inputsIds: inputsIds, 320 | attentionMasks: attentionMasks, 321 | wordsMasks: wordsMasks, 322 | textLengths: textLengths, 323 | idToClass: idToClass, 324 | batchTokens: currBatchTokens, 325 | batchWordsStartIdx: currBatchWordsStartIdx, 326 | batchWordsEndIdx: currBatchWordsEndIdx, 327 | }; 328 | 329 | let feeds: Record = this.prepareInputs(batch); 330 | const results: Record = await this.onnxWrapper.run(feeds); 331 | const modelOutput = results["logits"].data; 332 | // const modelOutput = results.logits.data as number[]; 333 | 334 | const batchSize: number = batch.batchTokens.length; 335 | const inputLength: number = Math.max(...batch.textLengths); 336 | const numEntities: number = entities.length; 337 | 338 | const decodedSpans: RawInferenceResult = this.decoder.decode( 339 | batchSize, 340 | inputLength, 341 | numEntities, 342 | texts, 343 | currBatchIds, 344 | batch.batchWordsStartIdx, 345 | batch.batchWordsEndIdx, 346 | batch.idToClass, 347 | modelOutput, 348 | flatNer, 349 | threshold, 350 | multiLabel, 351 | ); 352 | 353 | for (let i = 0; i < currBatchIds.length; i++) { 354 | const originalTextId = currBatchIds[i]; 355 | finalDecodedSpans[originalTextId].push(...decodedSpans[i]); 356 | } 357 | } 358 | 359 | return finalDecodedSpans; 360 | } 361 | } 362 | -------------------------------------------------------------------------------- /src/lib/processor.ts: -------------------------------------------------------------------------------- 1 | export class WhitespaceTokenSplitter { 2 | private whitespacePattern: RegExp; 3 | 4 | constructor() { 5 | this.whitespacePattern = /\w+(?:[-_]\w+)*|\S/g; 6 | } 7 | 8 | *call(text: string): Generator<[string, number, number]> { 9 | let match: RegExpExecArray | null; 10 | while ((match = this.whitespacePattern.exec(text)) !== null) { 11 | yield [match[0], match.index, this.whitespacePattern.lastIndex]; 12 | } 13 | } 14 | } 15 | 16 | export class Processor { 17 | config: any; 18 | tokenizer: any; 19 | wordsSplitter: WhitespaceTokenSplitter; 20 | 21 | constructor(config: any, tokenizer: any, wordsSplitter: WhitespaceTokenSplitter) { 22 | this.config = config; 23 | this.tokenizer = tokenizer; 24 | this.wordsSplitter = wordsSplitter; 25 | } 26 | 27 | tokenizeText(text: string): [string[], number[], number[]] { 28 | let tokens: string[] = []; 29 | let wordsStartIdx: number[] = []; 30 | let wordsEndIdx: number[] = []; 31 | 32 | for (const [token, start, end] of this.wordsSplitter.call(text)) { 33 | tokens.push(token); 34 | wordsStartIdx.push(start); 35 | wordsEndIdx.push(end); 36 | } 37 | return [tokens, wordsStartIdx, wordsEndIdx]; 38 | } 39 | 40 | batchTokenizeText(texts: string[]): [string[][], number[][], number[][]] { 41 | let batchTokens: string[][] = []; 42 | let batchWordsStartIdx: number[][] = []; 43 | let batchWordsEndIdx: number[][] = []; 44 | 45 | for (const text of texts) { 46 | const [tokens, wordsStartIdx, wordsEndIdx] = this.tokenizeText(text); 47 | batchTokens.push(tokens); 48 | batchWordsStartIdx.push(wordsStartIdx); 49 | batchWordsEndIdx.push(wordsEndIdx); 50 | } 51 | 52 | return [batchTokens, batchWordsStartIdx, batchWordsEndIdx]; 53 | } 54 | 55 | createMappings(classes: string[]): { 56 | classToId: Record; 57 | idToClass: Record; 58 | } { 59 | const classToId: Record = {}; 60 | const idToClass: Record = {}; 61 | 62 | classes.forEach((className, index) => { 63 | const id = index + 1; // Start numbering from 1 64 | classToId[className] = id; 65 | idToClass[id] = className; 66 | }); 67 | 68 | return { classToId, idToClass }; 69 | } 70 | 71 | prepareTextInputs(tokens: string[][], entities: string[]): [string[][], number[], number[]] { 72 | const inputTexts: string[][] = []; 73 | const promptLengths: number[] = []; 74 | const textLengths: number[] = []; 75 | 76 | tokens.forEach((text) => { 77 | textLengths.push(text.length); 78 | 79 | let inputText: string[] = []; 80 | for (let ent of entities) { 81 | inputText.push("<>"); 82 | inputText.push(ent); 83 | } 84 | inputText.push("<>"); 85 | const promptLength = inputText.length; 86 | promptLengths.push(promptLength); 87 | inputText = inputText.concat(text); 88 | inputTexts.push(inputText); 89 | }); 90 | return [inputTexts, textLengths, promptLengths]; 91 | } 92 | 93 | encodeInputs( 94 | texts: string[][], 95 | promptLengths: number[] | null = null, 96 | ): [number[][], number[][], number[][]] { 97 | let wordsMasks: number[][] = []; 98 | let inputsIds: number[][] = []; 99 | let attentionMasks: number[][] = []; 100 | 101 | for (let id = 0; id < texts.length; id++) { 102 | let promptLength = promptLengths ? promptLengths[id] : 0; 103 | let tokenizedInputs = texts[id]; 104 | let wordsMask: number[] = [0]; 105 | let inputIds: number[] = [1]; 106 | let attentionMask: number[] = [1]; 107 | 108 | let c = 1; 109 | tokenizedInputs.forEach((word, wordId) => { 110 | let wordTokens = this.tokenizer.encode(word).slice(1, -1); 111 | wordTokens.forEach((token: number, tokenId: number) => { 112 | attentionMask.push(1); 113 | if (wordId < promptLength) { 114 | wordsMask.push(0); 115 | } else if (tokenId === 0) { 116 | wordsMask.push(c); 117 | c++; 118 | } else { 119 | wordsMask.push(0); 120 | } 121 | inputIds.push(token); 122 | }); 123 | }); 124 | wordsMask.push(0); 125 | inputIds.push(this.tokenizer.sep_token_id); 126 | attentionMask.push(1); 127 | 128 | wordsMasks.push(wordsMask); 129 | inputsIds.push(inputIds); 130 | attentionMasks.push(attentionMask); 131 | } 132 | return [inputsIds, attentionMasks, wordsMasks]; 133 | } 134 | 135 | padArray(arr: any[], dimensions: number = 2): any[][] { 136 | if (dimensions < 2 || dimensions > 3) { 137 | throw new Error("Only 2D and 3D arrays are supported"); 138 | } 139 | 140 | const maxLength: number = Math.max(...arr.map((subArr: any[]) => subArr.length)); 141 | const finalDim: number = dimensions === 3 ? arr[0][0].length : 0; 142 | 143 | return arr.map((subArr: any[]) => { 144 | const padCount = maxLength - subArr.length; 145 | const padding = Array(padCount).fill(dimensions === 3 ? Array(finalDim).fill(0) : 0); 146 | return [...subArr, ...padding]; 147 | }); 148 | } 149 | } 150 | 151 | export class SpanProcessor extends Processor { 152 | constructor(config: any, tokenizer: any, wordsSplitter: WhitespaceTokenSplitter) { 153 | super(config, tokenizer, wordsSplitter); 154 | } 155 | 156 | prepareSpans( 157 | batchTokens: string[][], 158 | maxWidth: number = 12, 159 | ): { spanIdxs: number[][][]; spanMasks: boolean[][] } { 160 | let spanIdxs: number[][][] = []; 161 | let spanMasks: boolean[][] = []; 162 | 163 | batchTokens.forEach((tokens) => { 164 | let textLength: number = tokens.length; 165 | let spanIdx: number[][] = []; 166 | let spanMask: boolean[] = []; 167 | 168 | for (let i = 0; i < textLength; i++) { 169 | for (let j = 0; j < maxWidth; j++) { 170 | let endIdx = Math.min(i + j, textLength - 1); 171 | spanIdx.push([i, endIdx]); 172 | spanMask.push(endIdx < textLength ? true : false); 173 | } 174 | } 175 | 176 | spanIdxs.push(spanIdx); 177 | spanMasks.push(spanMask); 178 | }); 179 | 180 | return { spanIdxs, spanMasks }; 181 | } 182 | 183 | prepareBatch(texts: string[], entities: string[]): Record { 184 | const [batchTokens, batchWordsStartIdx, batchWordsEndIdx]: [ 185 | string[][], 186 | number[][], 187 | number[][], 188 | ] = this.batchTokenizeText(texts); 189 | const { idToClass }: { idToClass: Record } = this.createMappings(entities); 190 | const [inputTokens, textLengths, promptLengths]: [string[][], number[], number[]] = 191 | this.prepareTextInputs(batchTokens, entities); 192 | 193 | let [inputsIds, attentionMasks, wordsMasks]: [number[][], number[][], number[][]] = 194 | this.encodeInputs(inputTokens, promptLengths); 195 | 196 | inputsIds = this.padArray(inputsIds); 197 | attentionMasks = this.padArray(attentionMasks); 198 | wordsMasks = this.padArray(wordsMasks); 199 | 200 | let { spanIdxs, spanMasks }: { spanIdxs: number[][][]; spanMasks: boolean[][] } = 201 | this.prepareSpans(batchTokens, this.config["max_width"]); 202 | 203 | spanIdxs = this.padArray(spanIdxs, 3); 204 | spanMasks = this.padArray(spanMasks); 205 | 206 | return { 207 | inputsIds: inputsIds, 208 | attentionMasks: attentionMasks, 209 | wordsMasks: wordsMasks, 210 | textLengths: textLengths, 211 | spanIdxs: spanIdxs, 212 | spanMasks: spanMasks, 213 | idToClass: idToClass, 214 | batchTokens: batchTokens, 215 | batchWordsStartIdx: batchWordsStartIdx, 216 | batchWordsEndIdx: batchWordsEndIdx, 217 | }; 218 | } 219 | } 220 | 221 | export class TokenProcessor extends Processor { 222 | constructor(config: any, tokenizer: any, wordsSplitter: WhitespaceTokenSplitter) { 223 | super(config, tokenizer, wordsSplitter); 224 | } 225 | 226 | prepareBatch(texts: string[], entities: string[]): Record { 227 | const [batchTokens, batchWordsStartIdx, batchWordsEndIdx]: [ 228 | string[][], 229 | number[][], 230 | number[][], 231 | ] = this.batchTokenizeText(texts); 232 | const { idToClass }: { idToClass: Record } = this.createMappings(entities); 233 | const [inputTokens, textLengths, promptLengths]: [string[][], number[], number[]] = 234 | this.prepareTextInputs(batchTokens, entities); 235 | 236 | let [inputsIds, attentionMasks, wordsMasks]: [number[][], number[][], number[][]] = 237 | this.encodeInputs(inputTokens, promptLengths); 238 | 239 | inputsIds = this.padArray(inputsIds); 240 | attentionMasks = this.padArray(attentionMasks); 241 | wordsMasks = this.padArray(wordsMasks); 242 | 243 | return { 244 | inputsIds: inputsIds, 245 | attentionMasks: attentionMasks, 246 | wordsMasks: wordsMasks, 247 | textLengths: textLengths, 248 | idToClass: idToClass, 249 | batchTokens: batchTokens, 250 | batchWordsStartIdx: batchWordsStartIdx, 251 | batchWordsEndIdx: batchWordsEndIdx, 252 | }; 253 | } 254 | } 255 | -------------------------------------------------------------------------------- /src/node/Gliner.ts: -------------------------------------------------------------------------------- 1 | import { AutoTokenizer, env } from "@xenova/transformers"; 2 | import { SpanModel, TokenModel } from "../lib/model"; 3 | import { WhitespaceTokenSplitter, SpanProcessor, TokenProcessor } from "../lib/processor"; 4 | import { SpanDecoder, TokenDecoder } from "../lib/decoder"; 5 | import { ONNXNodeWrapper } from "./ONNXNodeWrapper"; 6 | import { 7 | IEntityResult, 8 | IInference, 9 | InferenceResultMultiple, 10 | InitConfig, 11 | RawInferenceResult, 12 | } from "../interfaces"; 13 | 14 | export class Gliner { 15 | private model: SpanModel | TokenModel | null = null; 16 | 17 | constructor(private config: InitConfig) { 18 | env.allowLocalModels = config.transformersSettings?.allowLocalModels ?? false; 19 | env.useBrowserCache = config.transformersSettings?.useBrowserCache ?? false; 20 | 21 | this.config = { 22 | ...config, 23 | maxWidth: config.maxWidth || 12, 24 | modelType: config.modelType || "span-level", 25 | }; 26 | } 27 | 28 | async initialize(): Promise { 29 | const { tokenizerPath, onnxSettings, maxWidth } = this.config; 30 | 31 | const tokenizer = await AutoTokenizer.from_pretrained(tokenizerPath); 32 | // console.log("Tokenizer loaded."); 33 | 34 | const wordSplitter = new WhitespaceTokenSplitter(); 35 | 36 | const onnxWrapper = new ONNXNodeWrapper(onnxSettings); 37 | 38 | if (this.config.modelType == "span-level") { 39 | // console.log("Initializing Span-level Model..."); 40 | const processor = new SpanProcessor({ max_width: maxWidth }, tokenizer, wordSplitter); 41 | const decoder = new SpanDecoder({ max_width: maxWidth }); 42 | 43 | this.model = new SpanModel({ max_width: maxWidth }, processor, decoder, onnxWrapper); 44 | } else { 45 | // console.log("Initializing Token-level Model..."); 46 | 47 | const processor = new TokenProcessor({ max_width: maxWidth }, tokenizer, wordSplitter); 48 | const decoder = new TokenDecoder({ max_width: maxWidth }); 49 | 50 | this.model = new TokenModel({ max_width: maxWidth }, processor, decoder, onnxWrapper); 51 | } 52 | await this.model.initialize(); 53 | } 54 | 55 | async inference({ 56 | texts, 57 | entities, 58 | flatNer = true, 59 | threshold = 0.5, 60 | multiLabel = false, 61 | }: IInference): Promise { 62 | if (!this.model) { 63 | throw new Error("Model is not initialized. Call initialize() first."); 64 | } 65 | 66 | const result = await this.model.inference(texts, entities, flatNer, threshold, multiLabel); 67 | return this.mapRawResultToResponse(result); 68 | } 69 | 70 | async inference_with_chunking({ 71 | texts, 72 | entities, 73 | flatNer = false, 74 | threshold = 0.5, 75 | }: IInference): Promise { 76 | if (!this.model) { 77 | throw new Error("Model is not initialized. Call initialize() first."); 78 | } 79 | 80 | const result = await this.model.inference_with_chunking(texts, entities, flatNer, threshold); 81 | return this.mapRawResultToResponse(result); 82 | } 83 | 84 | mapRawResultToResponse(rawResult: RawInferenceResult): InferenceResultMultiple { 85 | const response: InferenceResultMultiple = []; 86 | for (const individualResult of rawResult) { 87 | const entityResult: IEntityResult[] = individualResult.map( 88 | ([spanText, start, end, label, score]) => ({ 89 | spanText, 90 | start, 91 | end, 92 | label, 93 | score, 94 | }), 95 | ); 96 | response.push(entityResult); 97 | } 98 | 99 | return response; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/node/ONNXNodeWrapper.ts: -------------------------------------------------------------------------------- 1 | import * as ort from "onnxruntime-node"; 2 | import { IONNXNodeSettings, IONNXNodeWrapper } from "../interfaces"; 3 | 4 | export class ONNXNodeWrapper implements IONNXNodeWrapper { 5 | public ort: typeof ort = ort; 6 | private session: ort.InferenceSession | null = null; 7 | 8 | constructor(public settings: IONNXNodeSettings) {} 9 | 10 | public async init() { 11 | // @ts-ignore 12 | this.session = await this.ort.InferenceSession.create(this.settings.modelPath); 13 | } 14 | 15 | public async run( 16 | feeds: ort.InferenceSession.FeedsType, 17 | options: ort.InferenceSession.RunOptions = {}, 18 | ): Promise { 19 | if (!this.session) { 20 | throw new Error("ONNXWrapper: Session not initialized. Please call init() first."); 21 | } 22 | 23 | return await this.session.run(feeds, options); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/node/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Gliner"; 2 | export { WhitespaceTokenSplitter } from "../lib/processor"; 3 | // Export types from interfaces 4 | export type { 5 | IEntityResult, 6 | InferenceResultSingle, 7 | InferenceResultMultiple, 8 | IInference, 9 | InitConfig, 10 | RawInferenceResult, 11 | IONNXNodeSettings, 12 | ExecutionProvider, 13 | ITransformersSettings, 14 | } from "../interfaces"; 15 | -------------------------------------------------------------------------------- /src/types.d.ts: -------------------------------------------------------------------------------- 1 | declare module "onnxruntime-node" { 2 | export * from "onnxruntime-common"; 3 | } 4 | -------------------------------------------------------------------------------- /src/web/Gliner.ts: -------------------------------------------------------------------------------- 1 | import { AutoTokenizer, env } from "@xenova/transformers"; 2 | import { SpanModel, TokenModel } from "../lib/model"; 3 | import { WhitespaceTokenSplitter, SpanProcessor, TokenProcessor } from "../lib/processor"; 4 | import { SpanDecoder, TokenDecoder } from "../lib/decoder"; 5 | import { 6 | IEntityResult, 7 | IInference, 8 | InferenceResultMultiple, 9 | InitConfig, 10 | RawInferenceResult, 11 | } from "../interfaces"; 12 | import { ONNXWebWrapper } from "./ONNXWebWrapper"; 13 | 14 | export class Gliner { 15 | private model: SpanModel | TokenModel | null = null; 16 | 17 | constructor(private config: InitConfig) { 18 | env.allowLocalModels = config.transformersSettings?.allowLocalModels ?? false; 19 | env.useBrowserCache = config.transformersSettings?.useBrowserCache ?? false; 20 | 21 | this.config = { 22 | ...config, 23 | maxWidth: config.maxWidth || 12, 24 | modelType: config.modelType || "span-level", 25 | }; 26 | } 27 | 28 | async initialize(): Promise { 29 | const { tokenizerPath, onnxSettings, maxWidth } = this.config; 30 | 31 | const tokenizer = await AutoTokenizer.from_pretrained(tokenizerPath); 32 | // console.log("Tokenizer loaded."); 33 | 34 | const wordSplitter = new WhitespaceTokenSplitter(); 35 | 36 | const onnxWrapper = new ONNXWebWrapper(onnxSettings); 37 | 38 | if (this.config.modelType == "span-level") { 39 | // console.log("Initializing Span-level Model..."); 40 | const processor = new SpanProcessor({ max_width: maxWidth }, tokenizer, wordSplitter); 41 | const decoder = new SpanDecoder({ max_width: maxWidth }); 42 | 43 | this.model = new SpanModel({ max_width: maxWidth }, processor, decoder, onnxWrapper); 44 | } else { 45 | // console.log("Initializing Token-level Model..."); 46 | 47 | const processor = new TokenProcessor({ max_width: maxWidth }, tokenizer, wordSplitter); 48 | const decoder = new TokenDecoder({ max_width: maxWidth }); 49 | 50 | this.model = new TokenModel({ max_width: maxWidth }, processor, decoder, onnxWrapper); 51 | } 52 | await this.model.initialize(); 53 | } 54 | 55 | async inference({ 56 | texts, 57 | entities, 58 | flatNer = true, 59 | threshold = 0.5, 60 | multiLabel = false, 61 | }: IInference): Promise { 62 | if (!this.model) { 63 | throw new Error("Model is not initialized. Call initialize() first."); 64 | } 65 | 66 | const result = await this.model.inference(texts, entities, flatNer, threshold, multiLabel); 67 | return this.mapRawResultToResponse(result); 68 | } 69 | 70 | async inference_with_chunking({ 71 | texts, 72 | entities, 73 | flatNer = false, 74 | threshold = 0.5, 75 | }: IInference): Promise { 76 | if (!this.model) { 77 | throw new Error("Model is not initialized. Call initialize() first."); 78 | } 79 | 80 | const result = await this.model.inference_with_chunking(texts, entities, flatNer, threshold); 81 | return this.mapRawResultToResponse(result); 82 | } 83 | 84 | mapRawResultToResponse(rawResult: RawInferenceResult): InferenceResultMultiple { 85 | const response: InferenceResultMultiple = []; 86 | for (const individualResult of rawResult) { 87 | const entityResult: IEntityResult[] = individualResult.map( 88 | ([spanText, start, end, label, score]) => ({ 89 | spanText, 90 | start, 91 | end, 92 | label, 93 | score, 94 | }), 95 | ); 96 | response.push(entityResult); 97 | } 98 | 99 | return response; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/web/ONNXWebWrapper.ts: -------------------------------------------------------------------------------- 1 | import ort_CPU, { InferenceSession } from "onnxruntime-web"; 2 | import ort_WEBGPU from "onnxruntime-web/webgpu"; 3 | import ort_WEBGL from "onnxruntime-web/webgl"; 4 | import { IONNXWebSettings, IONNXWebWrapper, WebOrtLib } from "../interfaces"; 5 | 6 | // NOTE: Version needs to match installed package! 7 | const ONNX_WASM_CDN_URL = "https://cdn.jsdelivr.net/npm/onnxruntime-web@1.19.2/dist/"; 8 | const DEFAULT_WASM_PATHS = ONNX_WASM_CDN_URL; 9 | 10 | export class ONNXWebWrapper implements IONNXWebWrapper { 11 | public ort: WebOrtLib = ort_CPU; 12 | private session: 13 | | ort_CPU.InferenceSession 14 | | ort_WEBGPU.InferenceSession 15 | | ort_WEBGL.InferenceSession 16 | | null = null; 17 | 18 | constructor(public settings: IONNXWebSettings) { 19 | const { executionProvider, wasmPaths = DEFAULT_WASM_PATHS } = settings; 20 | if (!executionProvider) { 21 | this.settings.executionProvider = "webgpu"; 22 | } 23 | switch (this.settings.executionProvider) { 24 | case "cpu": 25 | case "wasm": 26 | break; 27 | case "webgpu": 28 | this.ort = ort_WEBGPU; 29 | break; 30 | case "webgl": 31 | this.ort = ort_WEBGL; 32 | break; 33 | default: 34 | throw new Error(`ONNXWrapper: Invalid execution provider: '${executionProvider}'`); 35 | } 36 | this.ort.env.wasm.wasmPaths = wasmPaths; 37 | } 38 | 39 | public async init() { 40 | if (!this.session) { 41 | const { modelPath, executionProvider, fetchBinary, multiThread } = this.settings; 42 | if (executionProvider === "cpu" || executionProvider === "wasm") { 43 | if (fetchBinary) { 44 | const binaryURL = this.ort.env.wasm.wasmPaths + "ort-wasm-simd-threaded.wasm"; 45 | const response = await fetch(binaryURL); 46 | const binary = await response.arrayBuffer(); 47 | this.ort.env.wasm.wasmBinary = binary; 48 | } 49 | 50 | if (multiThread) { 51 | const maxPossibleThreads = navigator.hardwareConcurrency ?? 0; 52 | const maxThreads = Math.min( 53 | this.settings.maxThreads ?? maxPossibleThreads, 54 | maxPossibleThreads, 55 | ); 56 | this.ort.env.wasm.numThreads = maxThreads; 57 | } 58 | } 59 | 60 | // @ts-ignore 61 | this.session = await this.ort.InferenceSession.create(modelPath, { 62 | executionProviders: [executionProvider], 63 | }); 64 | } 65 | } 66 | 67 | public async run( 68 | feeds: InferenceSession.FeedsType, 69 | options: InferenceSession.RunOptions = {}, 70 | ): Promise { 71 | if (!this.session) { 72 | throw new Error("ONNXWrapper: Session not initialized. Please call init() first."); 73 | } 74 | 75 | return await this.session.run(feeds, options); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/web/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Gliner"; 2 | export { WhitespaceTokenSplitter } from "../lib/processor"; 3 | // Export types from interfaces 4 | export type { 5 | IEntityResult, 6 | InferenceResultSingle, 7 | InferenceResultMultiple, 8 | IInference, 9 | InitConfig, 10 | RawInferenceResult, 11 | IONNXWebSettings, 12 | ExecutionProvider, 13 | ITransformersSettings, 14 | } from "../interfaces"; 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "isolatedModules": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "strict": true, 18 | "noUnusedLocals": true, 19 | "noUnusedParameters": true, 20 | "noFallthroughCasesInSwitch": true 21 | }, 22 | "include": ["src", "example/web/src/main.ts", "src/**/*.ts", "src/**/*.d.ts", "src/types.d.ts"] 23 | } 24 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig([ 4 | // Web Build 5 | { 6 | entry: ["src/web/index.ts"], // Entry for the web build 7 | format: ["cjs", "esm"], // Output formats 8 | dts: true, // Generate TypeScript declarations 9 | outDir: "dist", // Output directory for web 10 | treeshake: true, 11 | esbuildOptions(options, context) { 12 | if (context.format === "esm") { 13 | options.outExtension = { ".js": ".mjs" }; 14 | } else if (context.format === "cjs") { 15 | options.outExtension = { ".js": ".cjs" }; 16 | } 17 | }, 18 | }, 19 | // Node Build 20 | { 21 | entry: ["src/node/index.ts"], // Entry for the Node.js build 22 | format: ["cjs", "esm"], // Output formats 23 | dts: true, // Generate TypeScript declarations 24 | outDir: "dist/node", // Output directory for Node.js 25 | external: ["onnxruntime-web"], // Exclude web-specific runtime 26 | treeshake: true, 27 | esbuildOptions(options, context) { 28 | if (context.format === "esm") { 29 | options.outExtension = { ".js": ".mjs" }; 30 | } else if (context.format === "cjs") { 31 | options.outExtension = { ".js": ".cjs" }; 32 | } 33 | }, 34 | }, 35 | ]); 36 | --------------------------------------------------------------------------------