├── .changeset ├── README.md └── config.json ├── .gitattributes ├── .github └── workflows │ ├── main.yml │ └── release.yml ├── .gitignore ├── .husky ├── pre-commit └── pre-push ├── .vscode ├── extensions.json └── settings.json ├── CHANGELOG.md ├── README.md ├── UNLICENSE ├── biome.json ├── docs ├── app.webp ├── banner.webp ├── hooks.webp ├── jsdoc.webp └── suggestions.webp ├── index.ts ├── package.json ├── pnpm-lock.yaml ├── src ├── constants.ts ├── query.ts ├── types.ts └── utils.ts ├── tests ├── query.test-d.ts └── query.test.ts └── tsconfig.json /.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.1.1/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - "**" 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout Repo 13 | uses: actions/checkout@v4 14 | 15 | - name: Use pnpm 16 | uses: pnpm/action-setup@v4 17 | with: 18 | version: 10 19 | 20 | - name: Setup Node.js 21 | uses: actions/setup-node@v4 22 | with: 23 | node-version: 22 24 | cache: "pnpm" 25 | 26 | - name: Install Dependencies 27 | run: pnpm install --frozen-lockfile 28 | 29 | - name: Lint and Build 30 | run: pnpm lint && pnpm build -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | workflow_run: 5 | workflows: [CI] 6 | branches: [main] 7 | types: [completed] 8 | 9 | concurrency: ${{ github.workflow }}-${{ github.ref }} 10 | 11 | permissions: 12 | contents: write 13 | pull-requests: write 14 | 15 | 16 | jobs: 17 | release: 18 | if: ${{ github.event.workflow_run.conclusion == 'success' }} 19 | name: Release 20 | runs-on: ubuntu-latest 21 | steps: 22 | - name: Checkout Repo 23 | uses: actions/checkout@v4 24 | 25 | - name: Use pnpm 26 | uses: pnpm/action-setup@v4 27 | with: 28 | version: 10 29 | 30 | - name: Setup Node.js 31 | uses: actions/setup-node@v4 32 | with: 33 | node-version: 22 34 | cache: "pnpm" 35 | 36 | - name: Install Dependencies 37 | run: pnpm install --frozen-lockfile 38 | 39 | - name: Create Release Pull Request or Publish to npm 40 | id: changesets 41 | uses: changesets/action@v1 42 | with: 43 | # This expects you to have a script called release which does a build for your packages and calls changeset publish 44 | publish: pnpm release 45 | env: 46 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 47 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | 4 | .env 5 | 6 | tsconfig.vitest-temp.json -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | if sh -c ": >/dev/tty" >/dev/null 2>/dev/null; then exec >/dev/tty 2>&1; fi 2 | 3 | pnpm exec lint-staged 4 | -------------------------------------------------------------------------------- /.husky/pre-push: -------------------------------------------------------------------------------- 1 | if sh -c ": >/dev/tty" >/dev/null 2>/dev/null; then exec >/dev/tty 2>&1; fi 2 | 3 | pnpm test -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["biomejs.biome"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | // Disable the default formatter, use biomejs instead 3 | "prettier.enable": false, 4 | "editor.formatOnSave": false, 5 | "editor.defaultFormatter": "biomejs.biome", 6 | 7 | // Auto fix 8 | "editor.codeActionsOnSave": { 9 | "quickfix.biome": "explicit", 10 | "source.organizeImports.biome": "explicit" 11 | }, 12 | "[typescript]": { 13 | "editor.defaultFormatter": "biomejs.biome" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @sergio9929/pb-query 2 | 3 | ## 0.2.9 4 | 5 | ### Patch Changes 6 | 7 | - Added support for datetime macros 8 | 9 | You can now use [PocketBase's datetime macros](https://pocketbase.io/docs/api-rules-and-filters/#-macros) in your queries. 10 | 11 | - `@now`: Current datetime. 12 | - `@yesterday`: 24 hours before `@now`. 13 | - `@tomorrow`: 24 hours after`@now`. 14 | - `@todayStart`: Current date (00:00:00.000Z). 15 | - `@todayEnd`: Current date (23:59:59.999Z). 16 | - `@monthStart`: Current month (00:00:00.000Z). 17 | - `@monthEnd`: Current month (23:59:59.999Z). 18 | - `@yearStart`: Current year (00:00:00.000Z). 19 | - `@yearEnd`: Current year (23:59:59.999Z). 20 | - And [more...](https://pocketbase.io/docs/api-rules-and-filters/#-macros) 21 | 22 | Example: 23 | 24 | ```ts 25 | pbQuery() 26 | .between("created", new Date("2021-01-01"), "@now") 27 | .build(pb.filter); // (created>='2021-01-01 00:00:00.000Z' && created<=@now) 28 | ``` 29 | 30 | ## 0.2.8 31 | 32 | ### Patch Changes 33 | 34 | - add keywords for npm 35 | 36 | ## 0.2.7 37 | 38 | ### Patch Changes 39 | 40 | - replace MIT license with UNLICENSE 41 | 42 | ## 0.2.6 43 | 44 | ### Patch Changes 45 | 46 | - Greatly improve type hints 47 | 48 | VS Code was previously displaying extremely long and unreadable type hints, for example, when hitting **Ctrl+Space** on `pbQuery().equal|`. This was caused by TypeScript fully expanding deeply recursive types. 49 | 50 | Before: 51 | 52 | ``` 53 | (method) QueryBuilder.equal

(key: P, value: P extends `${infer _Prefix}_via_${infer _Suffix}` ? unknown : P extends `${infer Key}.${infer Rest}` ? Key extends keyof Post ? Post[Key] extends readonly (infer E)[] ? Rest extends `${infer _Prefix}_via_${infer _Suffix}` ? unknown : Rest extends `${infer Key}.${infer Rest}` ? Key extends keyof E ? E[Key] extends readonly (infer E)[] ? Rest extends `${infer _Prefix}_via_${infer _Suffix}` ? unknown : Rest extends `${infer Key}.${infer Rest}` ? Key extends keyof E ? E[Key] extends readonly (infer E)[] ? Rest extends `${infer _Prefix}_via_${infer _Suffix}` ? unknown : Rest extends `${infer Key}.${infer Rest}` ? Key extends keyof E ? E[Key] extends readonly (infer E)[] ? Rest extends `${infer _Prefix}_via_${infer _Suffix}` ? unknown : Rest extends `${infer Key}.${infer Rest}` ? Key extends keyof E ? E[Key] extends readonly (infer E)[] ? Rest extends `${infer _Prefix}_via_${infer _Suffix}` ? unknown : Rest extends `${infer Key}.${infer Rest}` ? Key extends keyof E ? E[Key] extends readonly (infer E)[] ? never : never : never : Rest extends `${infer Key}:${infer Modifier}` ? Key extends keyof E ? HandleModifier<...> : never : Rest extends keyof E ? E[Rest] extends object[] ? string : E[Rest] extends unknown[] ? E[Rest][number] : E[Rest] extends Date ? E[Rest] : E[Rest] extends object ? string : E[Rest] : never : Rest extends `${infer _Prefix}_via_${infer _Suffix}` ? unknown : Rest extends `${infer Key}.${infer Rest}` ? Key extends keyof E[Key] ? E[Key][Key] extends readonly (infer E)[] ? never : never : never : Rest extends `${infer Key}:${infer Modifier}` ? Key ... 54 | --- 55 | Matches records where key equals value. 56 | 57 | @example 58 | 59 | pbQuery().equal('author.name', 'Alice'); // name='Alice' 60 | // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 61 | pbQuery().equal('author.name:lower', 'alice'); // name:lower='alice' 62 | ``` 63 | 64 | After: 65 | 66 | ``` 67 | (method) QueryBuilder.equal

(key: P, value: PathValueHelper): RestrictedQueryBuilder 68 | --- 69 | Matches records where key equals value. 70 | 71 | @example 72 | 73 | pbQuery().equal('author.name', 'Alice'); // name='Alice' 74 | // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 75 | pbQuery().equal('author.name:lower', 'alice'); // name:lower='alice' 76 | ``` 77 | 78 | ## 0.2.5 79 | 80 | ### Patch Changes 81 | 82 | - include MIT license 83 | 84 | ## 0.2.4 85 | 86 | ### Patch Changes 87 | 88 | - fix date output format in the docs 89 | 90 | ## 0.2.3 91 | 92 | ### Patch Changes 93 | 94 | - Update README 95 | 96 | ## 0.2.2 97 | 98 | ### Patch Changes 99 | 100 | - Add documentation for PocketBase Hooks 101 | 102 | ## 0.2.1 103 | 104 | ### Patch Changes 105 | 106 | - fix typos in the docs 107 | 108 | ## 0.2.0 109 | 110 | ### Minor Changes 111 | 112 | - 02be476: Add support for back relations and improve docs 113 | 114 | - Add support for back relations. 115 | - improve docks. 116 | 117 | - Rename `createdAt` to `created`. 118 | - Rename `updatedAt` to `updated`. 119 | - Fix relation field types. 120 | 121 | ## 0.1.1 122 | 123 | ### Patch Changes 124 | 125 | - remove chatgpt crap from readme 126 | 127 | ## 0.1.0 128 | 129 | ### Minor Changes 130 | 131 | - 9f2ca18: fix JSDoc and create README 132 | 133 | ## 0.0.4 134 | 135 | ### Patch Changes 136 | 137 | - 5331920: minify release build 138 | 139 | ## 0.0.3 140 | 141 | ### Patch Changes 142 | 143 | - 17fb3a4: DO NOT PUBLISH THE WHOLE REPO WTF! 144 | 145 | ## 0.0.2 146 | 147 | ### Patch Changes 148 | 149 | - eeae67c: fix MaxDepth and improve JSDoc 150 | 151 | - Remove `.open()` and `.close()`, use `.group()` insetead. 152 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![@sergio9929/pb-query](docs/banner.webp) 2 | 3 | # pb-query 🔍✨ 4 | 5 | **Build type-safe PocketBase queries with the power of TypeScript.** 6 | *Flexible and strongly-typed, with useful helpers to simplify the querying process.* 7 | 8 | [![npm](https://img.shields.io/npm/v/@sergio9929/pb-query)](https://www.npmjs.com/package/@sergio9929/pb-query) 9 | ![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?logo=typescript&logoColor=white) 10 | [![Ask AI](https://img.shields.io/badge/deepwiki-Ask_AI-purple)](https://deepwiki.com/sergio9929/pb-query) 11 | 12 | ## Features 13 | 14 | - **💬 Full TypeScript Integration** – Get autocompletion for fields and type safety based on your schema. 15 | - **🔗 Chainable API** – Easily build complex queries using a functional, intuitive syntax. 16 | - **🛡️ Injection Protection** – Automatically sanitize queries with `pb.filter()`. 17 | - **🧩 Nested Grouping** – Create advanced logic with `.group()`. 18 | - **📅 Date & Array Support** – Seamlessly work with dates and array operations. 19 | - **🔍 Advanced Search** – Perform multi-field searches with a single method call. 20 | - **⚡ Helper Operators** – Use built-in helpers like `.search()`, `.between()`, `.in()`, `.isNull()`, and more. 21 | - **🪝 Works Everywhere** – Use queries both in your app and inside `pb_hooks`. 22 | - **📖 Built-in Documentation** – Get examples and explanations directly in your IDE with JSDoc. 23 | 24 | ## Installation 25 | 26 | ```bash 27 | # npm 28 | npm install @sergio9929/pb-query 29 | 30 | # pnpm 31 | pnpm add @sergio9929/pb-query 32 | 33 | # yarn 34 | yarn add @sergio9929/pb-query 35 | ``` 36 | 37 | ## Quick Start 38 | 39 | ### App 40 | 41 | ```ts 42 | // example.ts 43 | 44 | import { pbQuery } from '@sergio9929/pb-query'; 45 | import PocketBase from 'pocketbase'; 46 | import type { Post } from './types'; 47 | 48 | // PocketBase instance 49 | const pb = new PocketBase("https://example.com"); 50 | 51 | // Build a type-safe query for posts 52 | const query = pbQuery() 53 | .search(['title', 'content', 'tags', 'author'], 'footba') 54 | .and() 55 | .between('created', new Date('2023-01-01'), new Date('2023-12-31')) 56 | .or() 57 | .group((q) => 58 | q.anyLike('tags', 'sports') 59 | .and() 60 | .greaterThan('priority', 5) 61 | ) 62 | .build(pb.filter); 63 | 64 | console.log(query); 65 | // (title~'footba' || content~'footba' || tags~'footba' || author~'footba') 66 | // && (created>='2023-01-01 00:00:00.000Z' && created<='2023-12-31 00:00:00.000Z') 67 | // || (tags?~'sports' && priority>5) 68 | 69 | // Use your query 70 | const records = await pb.collection("posts").getList(1, 20, { 71 | filter: query, 72 | }); 73 | ``` 74 | 75 | > [!IMPORTANT] 76 | > You can use this package without TypeScript, but you would miss out on many of its advantages. 77 | 78 | ### PocketBase Hooks 79 | 80 | [Learn more](https://pocketbase.io/docs/js-overview/) 81 | 82 | ```js 83 | // pb_hooks/example.pb.js 84 | 85 | /// 86 | 87 | routerAdd("GET", "/example", (e) => { 88 | const { pbQuery } = require('@sergio9929/pb-query'); 89 | 90 | const { raw, values } = pbQuery() 91 | .search(['title', 'content', 'tags.title', 'author'], 'footba') 92 | .and() 93 | .between('created', new Date('2023-01-01'), new Date('2024-12-31')) 94 | .or() 95 | .group((q) => 96 | q.anyLike('tags', 'sports') 97 | .and() 98 | .greaterThan('priority', 5) 99 | ) 100 | .build(); 101 | 102 | const records = $app.findRecordsByFilter( 103 | 'posts', 104 | raw, 105 | '', 106 | 20, 107 | 0, 108 | values, 109 | ); 110 | 111 | return e.json(200, records); 112 | }); 113 | ``` 114 | 115 | ## Table of Contents 116 | 117 | - ✨ [Why pb-query?](#why-pb-query) 118 | - 🧠 [Core Concepts](#core-concepts) 119 | - 🔧 [Basic Operators](#basic-operators) 120 | - 🧩 [Combination Operators](#combination-operators) 121 | - 🛠️ [Multiple Operators](#multiple-operators) 122 | - ⚡ [Helper Operators](#helper-operators) 123 | - 💡 [Tips and Tricks](#tips-and-tricks) 124 | - 📜 [Real-World Recipes](#real-world-recipes) 125 | - 🚨 [Troubleshooting](#troubleshooting) 126 | - 🙏 [Credits](#credits) 127 | 128 | ## Why pb-query? 129 | 130 | Our goal was to build a flexible, strongly-typed query builder with useful helpers to simplify the querying process. But more importantly, we wanted to create a tool that helps prevent errors and provides examples and solid autocompletion in the IDE. This way, when we come back to the project after a long time, we won't need to relearn the intricacies of PocketBase's querying syntax. 131 | 132 | ### Code Suggestions and JSDoc 133 | 134 | Documentation directly in your IDE. 135 | 136 | ![JSDoc](docs/jsdoc.webp) 137 | 138 | Leveraging the power of TypeScript, we provide suggestions based on your schema. 139 | 140 | ![Field name suggestions](docs/suggestions.webp) 141 | 142 | ## Core Concepts 143 | 144 | ### Building the Query 145 | 146 | The query is returned (not reset) using `.build()`. 147 | 148 | ```ts 149 | // ❌ Wrong 150 | const query = pbQuery() 151 | .like('content', 'Top Secret%'); 152 | 153 | console.log(query); // object with functions 154 | ``` 155 | 156 | ```ts 157 | // ✅ Right 158 | const query = pbQuery() 159 | .like('content', 'Top Secret%') 160 | .build(); 161 | 162 | console.log(query); // { raw: 'content~{:content1}', values: { content1: 'Top Secret%' } } 163 | ``` 164 | 165 | You can use this principle to create dynamic queries: 166 | 167 | ```ts 168 | const dynamicQuery = pbQuery().like('content', 'Top Secret%'); 169 | 170 | if (user) { 171 | dynamicQuery.and().equal('author', user.id); 172 | } 173 | 174 | const query = dynamicQuery.build(); 175 | ``` 176 | 177 | ### Parameter Safety 178 | 179 | By default, we don't filter your query. Using `.build()` returns the unfiltered query and values separately. 180 | 181 | ```ts 182 | // ❌ Unfiltered query 183 | const { raw, values } = pbQuery() 184 | .search(['title', 'content', 'tags', 'author.name', 'author.surname'], 'Football') 185 | .build(); 186 | 187 | console.log(raw); // "content~{:content1}" 188 | console.log(values); // { content1: "Top Secret%" } 189 | ``` 190 | 191 | We expose a filter function, but we recommend using the native `pb.filter()` function instead. 192 | 193 | ```ts 194 | import PocketBase from 'pocketbase'; 195 | 196 | // PocketBase instance 197 | const pb = new PocketBase("https://example.com"); 198 | 199 | // ✅ Filtered query 200 | const query = pbQuery() 201 | .like('content', 'Top Secret%') 202 | .build(pb.filter); // use PocketBase's filter function 203 | 204 | console.log(query); // "content~'Top Secret%'" 205 | ``` 206 | 207 | ### Key Modifiers 208 | 209 | Native [PocketBase query modifiers](https://pocketbase.io/docs/api-rules-and-filters/#special-identifiers-and-modifiers) are supported: 210 | - `:lower` – Case-insensitive matching (not needed for `.like()` operators). 211 | - `:length` – Array length check. 212 | - `:each` – Array each element check. 213 | 214 | ```ts 215 | pbQuery() 216 | .equal('title:lower', 'hello world') // Case-insensitive (not needed for .like() operators) 217 | .equal('tags:length', 5) // If array length equals 5 218 | .equal('tags:each', 'Tech'); // If every array element equals 'Tech' 219 | ``` 220 | 221 | ### Macros 222 | 223 | Native [PocketBase datetime macros](https://pocketbase.io/docs/api-rules-and-filters/#-macros) are supported: `@now`, `@yesterday`, `@tomorrow`, `@todayStart`, `@todayEnd`, `@monthStart`, `@monthEnd`, `@yearStart`, `@yearEnd` 224 | - `@now` – Current datetime. 225 | - `@yesterday` – 24 hours before `@now`. 226 | - `@tomorrow` – 24 hours after`@now`. 227 | - `@todayStart` – Current date (00:00:00.000Z). 228 | - `@todayEnd` – Current date (23:59:59.999Z). 229 | - `@monthStart` – Current month (00:00:00.000Z). 230 | - `@monthEnd` – Current month (23:59:59.999Z). 231 | - `@yearStart` – Current year (00:00:00.000Z). 232 | - `@yearEnd` – Current year (23:59:59.999Z). 233 | - [more...](https://pocketbase.io/docs/api-rules-and-filters/#-macros) 234 | 235 | ```ts 236 | pbQuery() 237 | .between('created', '@now', '@yesterday') // Created between now and tomorrow 238 | ``` 239 | 240 | 241 | ## Basic Operators 242 | 243 | ### Equality Checks 244 | 245 | #### `.equal(key, value)` 246 | 247 | Matches records where `key` equals `value`. 248 | 249 | ```ts 250 | pbQuery().equal('author.name', 'Alice'); // name='Alice' 251 | // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 252 | pbQuery().equal('author.name:lower', 'alice'); // name:lower='alice' 253 | ``` 254 | 255 | #### `.notEqual(key, value)` 256 | 257 | Matches records where `key` is not equal to `value`. 258 | 259 | ```ts 260 | pbQuery().notEqual('author.name', 'Alice'); // name!='Alice' 261 | // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 262 | pbQuery().notEqual('author.name:lower', 'alice'); // name:lower!='alice' 263 | ``` 264 | 265 | ### Comparisons 266 | 267 | #### `.greaterThan(key, value)` 268 | 269 | Matches records where `key` is greater than `value`. 270 | 271 | ```ts 272 | pbQuery().greaterThan('age', 21); // age>21 273 | ``` 274 | 275 | #### `.greaterThanOrEqual(key, value)` 276 | 277 | Matches records where `key` is greater than or equal to `value`. 278 | 279 | ```ts 280 | pbQuery().greaterThanOrEqual('age', 18); // age>=18 281 | ``` 282 | 283 | #### `.lessThan(key, value)` 284 | 285 | Matches records where `key` is less than `value`. 286 | 287 | ```ts 288 | pbQuery().lessThan('age', 50); // age<50 289 | ``` 290 | 291 | #### `.lessThanOrEqual(key, value)` 292 | 293 | Matches records where `key` is less than or equal to `value`. 294 | 295 | ```ts 296 | pbQuery().lessThanOrEqual('age', 65); // age<=65 297 | ``` 298 | 299 | ### Text Search 300 | 301 | #### `.like(key, value)` 302 | 303 | Matches records where `key` contains `value`. 304 | 305 | It is case-insensitive, so the `:lower` modifier is unnecessary. 306 | 307 | ```ts 308 | // Contains 309 | pbQuery().like('author.name', 'Joh'); // name~'Joh' / name~'%Joh%' 310 | // If not specified, auto-wraps the value in `%` for wildcard matching. 311 | ``` 312 | 313 | ```ts 314 | // Starts with 315 | pbQuery().like('author.name', 'Joh%'); // name~'Joh%' 316 | ``` 317 | 318 | ```ts 319 | // Ends with 320 | pbQuery().like('author.name', '%Doe'); // name~'%Doe' 321 | ``` 322 | 323 | #### `.notLike(key, value)` 324 | 325 | Matches records where `key` doesn't contain `value`. 326 | 327 | It is case-insensitive, so the `:lower` modifier is unnecessary. 328 | 329 | ```ts 330 | // Doesn't contain 331 | pbQuery().notLike('author.name', 'Joh'); // name!~'Joh' / name!~'%Joh%' 332 | // If not specified, auto-wraps the value in `%` for wildcard matching. 333 | ``` 334 | 335 | ```ts 336 | // Doesn't start with 337 | pbQuery().notLike('author.name', 'Joh%'); // name!~'Joh%' 338 | ``` 339 | 340 | ```ts 341 | // Doesn't end with 342 | pbQuery().notLike('author.name', '%Doe'); // name!~'%Doe' 343 | ``` 344 | 345 | ## Combination Operators 346 | 347 | ### Logical Operators 348 | 349 | #### `.and()` 350 | 351 | Combines the previous and the next conditions with an `and` logical operator. 352 | 353 | ```ts 354 | pbQuery().equal('name', 'Alice').and().equal('role', 'admin'); // name='Alice' && role='admin' 355 | ``` 356 | 357 | #### `.or()` 358 | 359 | Combines the previous and the next conditions with an `or` logical operator. 360 | 361 | ```ts 362 | pbQuery().equal('name', 'Alice').or().equal('name', 'Bob'); // name='Alice' || name='Bob' 363 | ``` 364 | 365 | ### Grouping 366 | 367 | #### `.group(callback)` 368 | 369 | Creates a logical group. 370 | 371 | ```ts 372 | pbQuery().group((q) => q.equal('status', 'active').or().equal('status', 'inactive')); // (status~'active' || status~'inactive') 373 | ``` 374 | 375 | ## Multiple Operators 376 | 377 | ### Any Queries (Any/At least one of) 378 | 379 | Useful for queries involving [back-relations](https://pocketbase.io/docs/working-with-relations/#back-relations), [multiple relation](https://pocketbase.io/docs/collections/#relationfield), [multiple select](https://pocketbase.io/docs/collections/#selectfield), or [multiple file](https://pocketbase.io/docs/collections/#filefield). 380 | 381 | Return all authors who have published at least one book about "Harry Potter": 382 | 383 | ```ts 384 | pbQuery().anyLike('books_via_author.title', 'Harry Potter'); // post_via_author.name?~'Harry Potter' 385 | ``` 386 | 387 | Return all authors who have only published books about "Harry Potter": 388 | 389 | ```ts 390 | pbQuery().like('books_via_author.title', 'Harry Potter'); // post_via_author.name~'Harry Potter' 391 | ``` 392 | 393 | > [!NOTE] 394 | > Back-relations by default are resolved as multiple relation field (see the note with the caveats), meaning that similar to all other multi-valued fields (multiple `relation`, `select`, `file`) by default a "match-all" constraint is applied and if you want "any/at-least-one" type of condition then you'll have to prefix the operator with `?`. 395 | > 396 | > @ganigeorgiev in [#6080](https://github.com/pocketbase/pocketbase/discussions/6080#discussioncomment-11526411) 397 | 398 | #### `.anyEqual(key, value)` 399 | 400 | Matches records where at least one of the values in the given `key` equals `value`. 401 | 402 | ```ts 403 | pbQuery().anyEqual('books_via_author.title', 'The Island'); // post_via_author.name?='The Island' 404 | 405 | // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 406 | pbQuery().anyEqual('books_via_author.title:lower', 'the island'); // post_via_author.name:lower?='the island' 407 | ``` 408 | 409 | #### `.anyNotEqual(key, value)` 410 | 411 | Matches records where at least one of the values in the given `key` is not equal to `value`. 412 | 413 | ```ts 414 | pbQuery().anyNotEqual('books_via_author.title', 'The Island'); // post_via_author.name?!='The Island' 415 | 416 | // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 417 | pbQuery().anyNotEqual('books_via_author.title:lower', 'the island'); // post_via_author.name:lower?!='the island' 418 | ``` 419 | 420 | #### `.anyGreaterThan(key, value)` 421 | 422 | Matches records where at least one of the values in the given `key` is greater than `value`. 423 | 424 | ```ts 425 | pbQuery().anyGreaterThan('age', 21); // age?>21 426 | ``` 427 | 428 | #### `.anyGreaterThanOrEqual(key, value)` 429 | 430 | Matches records where at least one of the values in the given `key` is greater than or equal to `value`. 431 | 432 | ```ts 433 | pbQuery().anyGreaterThanOrEqual('age', 18); // age?>=18 434 | ``` 435 | 436 | #### `.anyLessThan(key, value)` 437 | 438 | Matches records where at least one of the values in the given `key` is less than `value`. 439 | 440 | ```ts 441 | pbQuery().anyLessThan('age', 50); // age?<50 442 | ``` 443 | 444 | #### `.anyLessThanOrEqual(key, value)` 445 | 446 | Matches records where at least one of the values in the given `key` is less than or equal to `value`. 447 | 448 | ```ts 449 | pbQuery().anyLessThanOrEqual('age', 65); // age?<=65 450 | ``` 451 | 452 | #### `.anyLike(key, value)` 453 | 454 | Matches records where at least one of the values in the given `key` contains `value`. 455 | 456 | It is case-insensitive, so the `:lower` modifier is unnecessary. 457 | 458 | ```ts 459 | // Contains 460 | pbQuery().anyLike('author.name', 'Joh'); // name?~'Joh' / name?~'%Joh%' 461 | // If not specified, auto-wraps the value in `%` for wildcard matching. 462 | ``` 463 | 464 | ```ts 465 | // Starts with 466 | pbQuery().anyLike('author.name', 'Joh%'); // name?~'Joh%' 467 | ``` 468 | 469 | ```ts 470 | // Ends with 471 | pbQuery().anyLike('author.name', '%Doe'); // name?~'%Doe' 472 | ``` 473 | 474 | #### `.anyNotLike(key, value)` 475 | 476 | Matches records where at least one of the values in the given `key` doesn't contain `value`. 477 | 478 | It is case-insensitive, so the `:lower` modifier is unnecessary. 479 | 480 | ```ts 481 | // Doesn't contain 482 | pbQuery().anyNotLike('author.name', 'Joh'); // name?!~'Joh' / name?!~'%Joh%' 483 | // If not specified, auto-wraps the value in `%` for wildcard matching. 484 | ``` 485 | 486 | ```ts 487 | // Doesn't start with 488 | pbQuery().anyNotLike('author.name', 'Joh%'); // name?!~'Joh%' 489 | ``` 490 | 491 | ```ts 492 | // Doesn't end with 493 | pbQuery().anyNotLike('author.name', '%Doe'); // name?!~'%Doe' 494 | ``` 495 | 496 | ## Helper Operators 497 | 498 | ### Multi-Field Search 499 | 500 | #### `.search(keys, value)` 501 | 502 | Matches records where any of the `keys` contain `value`. 503 | 504 | It can be used to perform a full-text search (FTS). 505 | 506 | It is case-insensitive, so the `:lower` modifier is unnecessary. 507 | 508 | ```ts 509 | // Full-text search 510 | pbQuery().search(['title', 'content', 'tags', 'author.name', 'author.surname'], 'Football'); // (title~'Football' || content~'Football' || tags~'Football' || author.name~'Football' || author.surname~'Football') 511 | ``` 512 | 513 | ```ts 514 | // Contains 515 | pbQuery().search(['name', 'surname'], 'Joh'); // (name~'Joh' || surname~'Joh') / (name~'%Joh%' || surname~'%Joh%') 516 | // If not specified, auto-wraps the value in `%` for wildcard matching. 517 | ``` 518 | 519 | ```ts 520 | // Starts with 521 | pbQuery().search(['name', 'surname'], 'Joh%'); // (name~'Joh%' || surname~'Joh%') 522 | ``` 523 | 524 | ```ts 525 | // Ends with 526 | pbQuery().search(['name', 'surname'], '%Doe'); // (name~'%Doe' || surname~'%Doe') 527 | ``` 528 | 529 | #### `.in(key, values)` 530 | 531 | Matches records where `key` is in `values`. 532 | 533 | ```ts 534 | pbQuery().in('id', ['id_1', 'id_2', 'id_3']); // (id='id_1' || id='id_2' || id='id_3') 535 | ``` 536 | 537 | #### `.notIn(key, values)` 538 | 539 | Matches records where `key` is not in `values`. 540 | 541 | ```ts 542 | pbQuery().notIn('age', [18, 21, 30]); // (age!=18 && age!=21 && age!=30) 543 | ``` 544 | 545 | ### Ranges 546 | 547 | #### `.between(key, from, to)` 548 | 549 | Matches records where `key` is between `from` and `to`. 550 | 551 | ```ts 552 | pbQuery().between('age', 18, 30); // (age>=18 && age<=30) 553 | pbQuery().between('created', new Date('2021-01-01'), new Date('2021-12-31')); // (created>='2021-01-01 00:00:00.000Z' && created<='2021-12-31 00:00:00.000Z') 554 | ``` 555 | 556 | #### `.notBetween(key, from, to)` 557 | 558 | Matches records where `key` is not between `from` and `to`. 559 | 560 | ```ts 561 | pbQuery().notBetween('age', 18, 30); // (age<18 || age>30) 562 | pbQuery().notBetween('created', new Date('2021-01-01'), new Date('2021-12-31')); // (created<'2021-01-01 00:00:00.000Z' || created>'2021-12-31 00:00:00.000Z') 563 | ``` 564 | 565 | ### Null Checks 566 | 567 | #### `.isNull(key)` 568 | 569 | Matches records where `key` is null. 570 | 571 | ```ts 572 | pbQuery().isNull('name'); // name='' 573 | ``` 574 | 575 | #### `.isNotNull(key)` 576 | 577 | Matches records where `key` is not null. 578 | 579 | ```ts 580 | pbQuery().isNotNull('name'); // name!='' 581 | ``` 582 | 583 | ## Tips and tricks 584 | 585 | ### Typed Query Builders 586 | 587 | ```ts 588 | // query-builders.ts 589 | export const queryUsers = pbQuery; 590 | export const queryPosts = pbQuery; 591 | ``` 592 | 593 | ```ts 594 | // posts.ts 595 | const searchQuery = queryPosts() 596 | .search(['title', 'content', 'tags', 'author'], 'footba') 597 | .build(pb.filter); 598 | ``` 599 | 600 | ```ts 601 | // user.ts 602 | const userQuery = queryUsers().equal('username', 'sergio9929').build(pb.filter); 603 | ``` 604 | 605 | ### Cloning queries 606 | 607 | You can clone queries to create new query builders with an initial state. This is useful when you want to reuse a base query but apply additional conditions independently. 608 | 609 | ```ts 610 | // Create a base query for sports-related posts 611 | export const querySportsPosts = () => pbQuery() 612 | .anyLike('tags', 'sports') 613 | .and(); // Initial condition: ags?~'sports' && 614 | 615 | const searchQuery1 = querySportsPosts() 616 | .search(['title', 'content', 'tags', 'author'], 'basketba') 617 | .build(pb.filter); 618 | // tags?~'sports' && (title~'basketba' || content~'basketba' || tags~'basketba' || author~'basketba') 619 | 620 | const searchQuery2 = querySportsPosts() 621 | .search(['title', 'content', 'tags', 'author'], 'footba') 622 | .build(pb.filter); 623 | // tags?~'sports' && (title~'footba' || content~'footba' || tags~'footba' || author~'footba') 624 | ``` 625 | 626 | #### How Cloning Works 627 | 628 | 1. **Initial State**: When you clone a query, it captures the current state of the query builder, including all conditions and values. 629 | 2. **Independent Instances**: Each cloned query is independent, so modifying one does not affect the others. 630 | 3. **Reusability**: Cloning is ideal for creating reusable query templates that can be extended with additional conditions. 631 | 632 | ## 📜 Real-World Recipes 633 | 634 | ### Paginated Admin Dashboard 635 | 636 | ```ts 637 | const buildAdminQuery = ( 638 | searchTerm: string, 639 | options: { 640 | minLogins: number; 641 | roles: string[]; 642 | statuses: string[]; 643 | } 644 | ) => pbQuery() 645 | .search(['name', 'email', 'department'], searchTerm) 646 | .and() 647 | .greaterThanOrEqual('loginCount', options.minLogins) 648 | .and() 649 | .in('role', options.roles) 650 | .and() 651 | .group((q) => 652 | q.in('status', options.statuses) 653 | .or() 654 | .isNull('status') 655 | ) 656 | .build(pb.filter); 657 | ``` 658 | 659 | ### E-Commerce Product Filter 660 | 661 | ```ts 662 | const productQuery = pbQuery() 663 | .between('price', minPrice, maxPrice) 664 | .and() 665 | .anyLike('tags', category) 666 | .and() 667 | .lessThan('stock', 5) 668 | .and() 669 | .group((q) => 670 | q.equal('color', selectedColor) 671 | .or() 672 | .isNotNull('customizationOptions') 673 | ) 674 | .build(pb.filter); 675 | ``` 676 | 677 | ### Dynamic Search Query 678 | 679 | ```ts 680 | function buildSearchQuery(term: string, user: User) { 681 | const dynamicQuery = pbQuery().like('content', term).and(); 682 | 683 | if (user.created < new Date('2020-01-01')) { 684 | return dynamicQuery 685 | .lessThan('created', new Date('2020-01-01')) 686 | .build(pb.filter); // content~'Top Secret' && created<'2020-01-01 00:00:00.000Z' 687 | } 688 | 689 | return dynamicQuery 690 | .greaterThanOrEqual('created', new Date('2020-01-01')) 691 | .build(pb.filter); // content~'Top Secret' && created>='2020-01-01 00:00:00.000Z' 692 | } 693 | 694 | const searchQuery = buildSearchQuery('Top Secret', user); 695 | ``` 696 | 697 | ## Troubleshooting 698 | 699 | ### Common Issues 700 | 701 | **Problem:** Date comparisons not working 702 | **Fix:** Always use Date objects: 703 | ```ts 704 | pbQuery().between('created', new Date('2023-01-01'), new Date()); 705 | ``` 706 | 707 | ### Performance Tips 708 | 709 | 1. **Set Max Depth for TypeScript** 710 | By default, we infer types up to 6 levels deep. You can change this for each query. 711 | 712 | For example, this is 3 levels deep: 713 | 714 | ```ts 715 | // author.info.age 716 | ``` 717 | 718 | ```ts 719 | pbQuery() 720 | .equal('author.info.age', 30) 721 | .and() 722 | .like('author.email', '%@example.com'); 723 | // author.info.age=30 && author.email~'%@example.com' 724 | ``` 725 | 726 | 727 | ## Credits 728 | 729 | This project was inspired by [@emresandikci/pocketbase-query](https://github.com/emresandikci/pocketbase-query). 730 | 731 | --- 732 | 733 | **@sergio9929/pb-query** is maintained by [@sergio9929](https://github.com/sergio9929) with ❤️ 734 | 735 | Found a bug? [Open an issue](https://github.com/sergio9929/pb-query/issues) 736 | 737 | Want to contribute? [Read our guide](CONTRIBUTING.md) 738 | -------------------------------------------------------------------------------- /UNLICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", 3 | "vcs": { 4 | "enabled": true, 5 | "clientKind": "git", 6 | "useIgnoreFile": true 7 | }, 8 | "files": { 9 | "ignoreUnknown": false, 10 | "ignore": [] 11 | }, 12 | "formatter": { 13 | "enabled": true, 14 | "indentStyle": "space", 15 | "indentWidth": 4 16 | }, 17 | "organizeImports": { 18 | "enabled": true 19 | }, 20 | "linter": { 21 | "enabled": true, 22 | "rules": { 23 | "recommended": true, 24 | "correctness": { 25 | "noUnusedImports": "error", 26 | "noUnusedVariables": "error", 27 | "noUnusedFunctionParameters": "error" 28 | }, 29 | "style": { 30 | "useShorthandArrayType": "error", 31 | "useThrowNewError": "error", 32 | "useThrowOnlyError": "error", 33 | "useNamingConvention": { 34 | "level": "error", 35 | "options": { 36 | "requireAscii": true, 37 | "strictCase": false 38 | } 39 | } 40 | } 41 | } 42 | }, 43 | "javascript": { 44 | "formatter": { 45 | "semicolons": "asNeeded", 46 | "quoteStyle": "single", 47 | "jsxQuoteStyle": "single" 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /docs/app.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergio9929/pb-query/5e6ecd4c093d172844f0d9604542cb785f03de71/docs/app.webp -------------------------------------------------------------------------------- /docs/banner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergio9929/pb-query/5e6ecd4c093d172844f0d9604542cb785f03de71/docs/banner.webp -------------------------------------------------------------------------------- /docs/hooks.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergio9929/pb-query/5e6ecd4c093d172844f0d9604542cb785f03de71/docs/hooks.webp -------------------------------------------------------------------------------- /docs/jsdoc.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergio9929/pb-query/5e6ecd4c093d172844f0d9604542cb785f03de71/docs/jsdoc.webp -------------------------------------------------------------------------------- /docs/suggestions.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sergio9929/pb-query/5e6ecd4c093d172844f0d9604542cb785f03de71/docs/suggestions.webp -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | export { pbQuery } from './src/query' 2 | export type { 3 | FilterFunction, 4 | QueryBuilder, 5 | RestrictedQueryBuilder, 6 | } from './src/types' 7 | export { OPERATORS } from './src/constants' 8 | export { filter } from './src/utils' 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@sergio9929/pb-query", 3 | "version": "0.2.9", 4 | "description": "A type-safe PocketBase query builder", 5 | "main": "dist/index.js", 6 | "module": "dist/index.mjs", 7 | "types": "dist/index.d.ts", 8 | "files": ["dist"], 9 | "scripts": { 10 | "prepare": "husky", 11 | "build": "tsdown index.ts --format cjs,esm --dts", 12 | "release:build": "tsdown index.ts --format cjs,esm --dts", 13 | "release:publish": "changeset publish", 14 | "release": "run-s release:*", 15 | "lint": "biome check --write --no-errors-on-unmatched", 16 | "test": "vitest run --typecheck", 17 | "new": "changeset", 18 | "new:apply": "changeset version" 19 | }, 20 | "keywords": [ 21 | "pocketbase", 22 | "pocketbase-js", 23 | "pocketbase-ts", 24 | "pocketbase-jsvm", 25 | "query", 26 | "builder", 27 | "querybuilder", 28 | "typescript", 29 | "ts" 30 | ], 31 | "author": "sergio9929", 32 | "license": "UNLICENSED", 33 | "devDependencies": { 34 | "@biomejs/biome": "^1.9.4", 35 | "@changesets/cli": "^2.28.1", 36 | "husky": "^9.1.7", 37 | "lint-staged": "^16.1.0", 38 | "npm-run-all": "^4.1.5", 39 | "pocketbase": "^0.26.0", 40 | "tsdown": "^0.12.6", 41 | "typescript": "^5.8.3", 42 | "vitest": "^3.2.0" 43 | }, 44 | "lint-staged": { 45 | "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc}": "pnpm lint" 46 | }, 47 | "repository": { 48 | "type": "git", 49 | "url": "git+https://github.com/sergio9929/pb-query.git" 50 | }, 51 | "bugs": { 52 | "url": "https://github.com/sergio9929/pb-query/issues" 53 | }, 54 | "homepage": "https://github.com/sergio9929/pb-query#readme" 55 | } 56 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@biomejs/biome': 12 | specifier: ^1.9.4 13 | version: 1.9.4 14 | '@changesets/cli': 15 | specifier: ^2.28.1 16 | version: 2.28.1 17 | husky: 18 | specifier: ^9.1.7 19 | version: 9.1.7 20 | lint-staged: 21 | specifier: ^16.1.0 22 | version: 16.1.0 23 | npm-run-all: 24 | specifier: ^4.1.5 25 | version: 4.1.5 26 | pocketbase: 27 | specifier: ^0.26.0 28 | version: 0.26.0 29 | tsdown: 30 | specifier: ^0.12.6 31 | version: 0.12.6(typescript@5.8.3) 32 | typescript: 33 | specifier: ^5.8.3 34 | version: 5.8.3 35 | vitest: 36 | specifier: ^3.2.0 37 | version: 3.2.0(jiti@2.4.2)(yaml@2.8.0) 38 | 39 | packages: 40 | 41 | '@babel/generator@7.27.3': 42 | resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==} 43 | engines: {node: '>=6.9.0'} 44 | 45 | '@babel/helper-string-parser@7.27.1': 46 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 47 | engines: {node: '>=6.9.0'} 48 | 49 | '@babel/helper-validator-identifier@7.27.1': 50 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 51 | engines: {node: '>=6.9.0'} 52 | 53 | '@babel/parser@7.27.4': 54 | resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} 55 | engines: {node: '>=6.0.0'} 56 | hasBin: true 57 | 58 | '@babel/runtime@7.27.0': 59 | resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} 60 | engines: {node: '>=6.9.0'} 61 | 62 | '@babel/types@7.27.3': 63 | resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==} 64 | engines: {node: '>=6.9.0'} 65 | 66 | '@biomejs/biome@1.9.4': 67 | resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} 68 | engines: {node: '>=14.21.3'} 69 | hasBin: true 70 | 71 | '@biomejs/cli-darwin-arm64@1.9.4': 72 | resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} 73 | engines: {node: '>=14.21.3'} 74 | cpu: [arm64] 75 | os: [darwin] 76 | 77 | '@biomejs/cli-darwin-x64@1.9.4': 78 | resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} 79 | engines: {node: '>=14.21.3'} 80 | cpu: [x64] 81 | os: [darwin] 82 | 83 | '@biomejs/cli-linux-arm64-musl@1.9.4': 84 | resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} 85 | engines: {node: '>=14.21.3'} 86 | cpu: [arm64] 87 | os: [linux] 88 | 89 | '@biomejs/cli-linux-arm64@1.9.4': 90 | resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} 91 | engines: {node: '>=14.21.3'} 92 | cpu: [arm64] 93 | os: [linux] 94 | 95 | '@biomejs/cli-linux-x64-musl@1.9.4': 96 | resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} 97 | engines: {node: '>=14.21.3'} 98 | cpu: [x64] 99 | os: [linux] 100 | 101 | '@biomejs/cli-linux-x64@1.9.4': 102 | resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} 103 | engines: {node: '>=14.21.3'} 104 | cpu: [x64] 105 | os: [linux] 106 | 107 | '@biomejs/cli-win32-arm64@1.9.4': 108 | resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} 109 | engines: {node: '>=14.21.3'} 110 | cpu: [arm64] 111 | os: [win32] 112 | 113 | '@biomejs/cli-win32-x64@1.9.4': 114 | resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} 115 | engines: {node: '>=14.21.3'} 116 | cpu: [x64] 117 | os: [win32] 118 | 119 | '@changesets/apply-release-plan@7.0.10': 120 | resolution: {integrity: sha512-wNyeIJ3yDsVspYvHnEz1xQDq18D9ifed3lI+wxRQRK4pArUcuHgCTrHv0QRnnwjhVCQACxZ+CBih3wgOct6UXw==} 121 | 122 | '@changesets/assemble-release-plan@6.0.6': 123 | resolution: {integrity: sha512-Frkj8hWJ1FRZiY3kzVCKzS0N5mMwWKwmv9vpam7vt8rZjLL1JMthdh6pSDVSPumHPshTTkKZ0VtNbE0cJHZZUg==} 124 | 125 | '@changesets/changelog-git@0.2.1': 126 | resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} 127 | 128 | '@changesets/cli@2.28.1': 129 | resolution: {integrity: sha512-PiIyGRmSc6JddQJe/W1hRPjiN4VrMvb2VfQ6Uydy2punBioQrsxppyG5WafinKcW1mT0jOe/wU4k9Zy5ff21AA==} 130 | hasBin: true 131 | 132 | '@changesets/config@3.1.1': 133 | resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} 134 | 135 | '@changesets/errors@0.2.0': 136 | resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} 137 | 138 | '@changesets/get-dependents-graph@2.1.3': 139 | resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} 140 | 141 | '@changesets/get-release-plan@4.0.8': 142 | resolution: {integrity: sha512-MM4mq2+DQU1ZT7nqxnpveDMTkMBLnwNX44cX7NSxlXmr7f8hO6/S2MXNiXG54uf/0nYnefv0cfy4Czf/ZL/EKQ==} 143 | 144 | '@changesets/get-version-range-type@0.4.0': 145 | resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} 146 | 147 | '@changesets/git@3.0.2': 148 | resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} 149 | 150 | '@changesets/logger@0.1.1': 151 | resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} 152 | 153 | '@changesets/parse@0.4.1': 154 | resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} 155 | 156 | '@changesets/pre@2.0.2': 157 | resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} 158 | 159 | '@changesets/read@0.6.3': 160 | resolution: {integrity: sha512-9H4p/OuJ3jXEUTjaVGdQEhBdqoT2cO5Ts95JTFsQyawmKzpL8FnIeJSyhTDPW1MBRDnwZlHFEM9SpPwJDY5wIg==} 161 | 162 | '@changesets/should-skip-package@0.1.2': 163 | resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} 164 | 165 | '@changesets/types@4.1.0': 166 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 167 | 168 | '@changesets/types@6.1.0': 169 | resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} 170 | 171 | '@changesets/write@0.4.0': 172 | resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} 173 | 174 | '@esbuild/aix-ppc64@0.25.5': 175 | resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} 176 | engines: {node: '>=18'} 177 | cpu: [ppc64] 178 | os: [aix] 179 | 180 | '@esbuild/android-arm64@0.25.5': 181 | resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} 182 | engines: {node: '>=18'} 183 | cpu: [arm64] 184 | os: [android] 185 | 186 | '@esbuild/android-arm@0.25.5': 187 | resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} 188 | engines: {node: '>=18'} 189 | cpu: [arm] 190 | os: [android] 191 | 192 | '@esbuild/android-x64@0.25.5': 193 | resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} 194 | engines: {node: '>=18'} 195 | cpu: [x64] 196 | os: [android] 197 | 198 | '@esbuild/darwin-arm64@0.25.5': 199 | resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} 200 | engines: {node: '>=18'} 201 | cpu: [arm64] 202 | os: [darwin] 203 | 204 | '@esbuild/darwin-x64@0.25.5': 205 | resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} 206 | engines: {node: '>=18'} 207 | cpu: [x64] 208 | os: [darwin] 209 | 210 | '@esbuild/freebsd-arm64@0.25.5': 211 | resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} 212 | engines: {node: '>=18'} 213 | cpu: [arm64] 214 | os: [freebsd] 215 | 216 | '@esbuild/freebsd-x64@0.25.5': 217 | resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} 218 | engines: {node: '>=18'} 219 | cpu: [x64] 220 | os: [freebsd] 221 | 222 | '@esbuild/linux-arm64@0.25.5': 223 | resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} 224 | engines: {node: '>=18'} 225 | cpu: [arm64] 226 | os: [linux] 227 | 228 | '@esbuild/linux-arm@0.25.5': 229 | resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} 230 | engines: {node: '>=18'} 231 | cpu: [arm] 232 | os: [linux] 233 | 234 | '@esbuild/linux-ia32@0.25.5': 235 | resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} 236 | engines: {node: '>=18'} 237 | cpu: [ia32] 238 | os: [linux] 239 | 240 | '@esbuild/linux-loong64@0.25.5': 241 | resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} 242 | engines: {node: '>=18'} 243 | cpu: [loong64] 244 | os: [linux] 245 | 246 | '@esbuild/linux-mips64el@0.25.5': 247 | resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} 248 | engines: {node: '>=18'} 249 | cpu: [mips64el] 250 | os: [linux] 251 | 252 | '@esbuild/linux-ppc64@0.25.5': 253 | resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} 254 | engines: {node: '>=18'} 255 | cpu: [ppc64] 256 | os: [linux] 257 | 258 | '@esbuild/linux-riscv64@0.25.5': 259 | resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} 260 | engines: {node: '>=18'} 261 | cpu: [riscv64] 262 | os: [linux] 263 | 264 | '@esbuild/linux-s390x@0.25.5': 265 | resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} 266 | engines: {node: '>=18'} 267 | cpu: [s390x] 268 | os: [linux] 269 | 270 | '@esbuild/linux-x64@0.25.5': 271 | resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} 272 | engines: {node: '>=18'} 273 | cpu: [x64] 274 | os: [linux] 275 | 276 | '@esbuild/netbsd-arm64@0.25.5': 277 | resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} 278 | engines: {node: '>=18'} 279 | cpu: [arm64] 280 | os: [netbsd] 281 | 282 | '@esbuild/netbsd-x64@0.25.5': 283 | resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} 284 | engines: {node: '>=18'} 285 | cpu: [x64] 286 | os: [netbsd] 287 | 288 | '@esbuild/openbsd-arm64@0.25.5': 289 | resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} 290 | engines: {node: '>=18'} 291 | cpu: [arm64] 292 | os: [openbsd] 293 | 294 | '@esbuild/openbsd-x64@0.25.5': 295 | resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} 296 | engines: {node: '>=18'} 297 | cpu: [x64] 298 | os: [openbsd] 299 | 300 | '@esbuild/sunos-x64@0.25.5': 301 | resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} 302 | engines: {node: '>=18'} 303 | cpu: [x64] 304 | os: [sunos] 305 | 306 | '@esbuild/win32-arm64@0.25.5': 307 | resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} 308 | engines: {node: '>=18'} 309 | cpu: [arm64] 310 | os: [win32] 311 | 312 | '@esbuild/win32-ia32@0.25.5': 313 | resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} 314 | engines: {node: '>=18'} 315 | cpu: [ia32] 316 | os: [win32] 317 | 318 | '@esbuild/win32-x64@0.25.5': 319 | resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} 320 | engines: {node: '>=18'} 321 | cpu: [x64] 322 | os: [win32] 323 | 324 | '@jridgewell/gen-mapping@0.3.8': 325 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 326 | engines: {node: '>=6.0.0'} 327 | 328 | '@jridgewell/resolve-uri@3.1.2': 329 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 330 | engines: {node: '>=6.0.0'} 331 | 332 | '@jridgewell/set-array@1.2.1': 333 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 334 | engines: {node: '>=6.0.0'} 335 | 336 | '@jridgewell/sourcemap-codec@1.5.0': 337 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 338 | 339 | '@jridgewell/trace-mapping@0.3.25': 340 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 341 | 342 | '@manypkg/find-root@1.1.0': 343 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 344 | 345 | '@manypkg/get-packages@1.1.3': 346 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 347 | 348 | '@nodelib/fs.scandir@2.1.5': 349 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 350 | engines: {node: '>= 8'} 351 | 352 | '@nodelib/fs.stat@2.0.5': 353 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 354 | engines: {node: '>= 8'} 355 | 356 | '@nodelib/fs.walk@1.2.8': 357 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 358 | engines: {node: '>= 8'} 359 | 360 | '@oxc-project/runtime@0.72.1': 361 | resolution: {integrity: sha512-8nU/WPeJWF6QJrT8HtEEIojz26bXn677deDX8BDVpjcz97CVKORVAvFhE2/lfjnBYE0+aqmjFeD17YnJQpCyqg==} 362 | engines: {node: '>=6.9.0'} 363 | 364 | '@oxc-project/types@0.72.1': 365 | resolution: {integrity: sha512-qlvcDuCjISt4W7Izw0i5+GS3zCKJLXkoNDEc+E4ploage35SlZqxahpdKbHDX8uD70KDVNYWtupsHoNETy5kPQ==} 366 | 367 | '@quansync/fs@0.1.3': 368 | resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} 369 | engines: {node: '>=20.0.0'} 370 | 371 | '@rolldown/binding-darwin-arm64@1.0.0-beta.10-commit.87188ed': 372 | resolution: {integrity: sha512-0tuZTzzjQ1TV5gcoRrIHfRRMyBqzOHL9Yl7BZX5iR+J2hIUBJiq1P+mGAvTb/PDgkYWfEgtBde3AUMJtSj8+Hg==} 373 | cpu: [arm64] 374 | os: [darwin] 375 | 376 | '@rolldown/binding-darwin-x64@1.0.0-beta.10-commit.87188ed': 377 | resolution: {integrity: sha512-OmtnJvjXlLsPzdDhUdukImWQBztZWhlnDFSrIaBnMXF9WrqwgIG4FfRwQXXhS/iDyCdHqUVr8473OANzVv7Ang==} 378 | cpu: [x64] 379 | os: [darwin] 380 | 381 | '@rolldown/binding-freebsd-x64@1.0.0-beta.10-commit.87188ed': 382 | resolution: {integrity: sha512-rgtwGtvBGNc5aJROgxvD/ITwC0sY1KdGTADiG3vD1YXmkBCsZIBq1yhCUxz+qUhhIkmohmwqDcgUBCNpa7Wdjw==} 383 | cpu: [x64] 384 | os: [freebsd] 385 | 386 | '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.10-commit.87188ed': 387 | resolution: {integrity: sha512-yeR/cWwnKdv8S/mJGL7ZE+Wt+unSWhhA5FraZtWPavOX6tfelUZIQlAeKrcti2exQbjIMFS4WJ1MyuclyIvFCQ==} 388 | cpu: [arm] 389 | os: [linux] 390 | 391 | '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.10-commit.87188ed': 392 | resolution: {integrity: sha512-kg7yeU3XIGmaoKF1+u8OGJ/NE2XMpwgtQpCWzJh7Z8DhJDjMlszhV3DrnKjywI3NmVNCEXYwGO6mYff31xuHug==} 393 | cpu: [arm64] 394 | os: [linux] 395 | 396 | '@rolldown/binding-linux-arm64-musl@1.0.0-beta.10-commit.87188ed': 397 | resolution: {integrity: sha512-gvXDfeL4C6dql3Catf8HgnBnDy/zr8ZFX3f/edQ+QY0iJVHY/JG+bitRsNPWWOFmsv/Xm+qSyR44e5VW8Pi1oQ==} 398 | cpu: [arm64] 399 | os: [linux] 400 | 401 | '@rolldown/binding-linux-x64-gnu@1.0.0-beta.10-commit.87188ed': 402 | resolution: {integrity: sha512-rpzxr4TyvM3+tXGNjM3AEtgnUM9tpYe6EsIuLiU3fs+KaMKj5vOTr5k/eCACxnjDi4s78ARmqT+Z3ZS2E06U5w==} 403 | cpu: [x64] 404 | os: [linux] 405 | 406 | '@rolldown/binding-linux-x64-musl@1.0.0-beta.10-commit.87188ed': 407 | resolution: {integrity: sha512-cq+Gd1jEie1xxBNllnna21FPaWilWzQK+sI8kF1qMWRI6U909JjS/SzYR0UNLbvNa+neZh8dj37XnxCTQQ40Lw==} 408 | cpu: [x64] 409 | os: [linux] 410 | 411 | '@rolldown/binding-wasm32-wasi@1.0.0-beta.10-commit.87188ed': 412 | resolution: {integrity: sha512-xN4bJ0DQeWJiyerA46d5Lyv5Cor/FoNlbaO9jEOHZDdWz78E2xt/LE3bOND3c59gZa+/YUBEifs4lwixU/wWPg==} 413 | engines: {node: '>=14.21.3'} 414 | cpu: [wasm32] 415 | 416 | '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.10-commit.87188ed': 417 | resolution: {integrity: sha512-xUHManwWX+Lox4zoTY5FiEDGJOjCO9X6hTospFX4f6ELmhJQNnAO4dahZDc/Ph+3wbc3724ZMCGWQvHfTR3wWg==} 418 | cpu: [arm64] 419 | os: [win32] 420 | 421 | '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.10-commit.87188ed': 422 | resolution: {integrity: sha512-RmO3wCz9iD+grSgLyqMido8NJh6GxkPYRmK6Raoxcs5YC9GuKftxGoanBk0gtyjCKJ6jwizWKWNYJNkZSbWnOw==} 423 | cpu: [ia32] 424 | os: [win32] 425 | 426 | '@rolldown/binding-win32-x64-msvc@1.0.0-beta.10-commit.87188ed': 427 | resolution: {integrity: sha512-bWuJ5MoBd1qRCpC9uVxmFKrYjrWkn1ERElKnj0O9N2lWOi30iSTrpDeLMEvwueyiapcJh2PYUxyFE3W9pw29HQ==} 428 | cpu: [x64] 429 | os: [win32] 430 | 431 | '@rolldown/pluginutils@1.0.0-beta.10-commit.87188ed': 432 | resolution: {integrity: sha512-IjVRLSxjO7EzlW4S6O8AoWbCkEi1lOpE30G8Xw5ZK/zl39K/KjzsDPc1AwhftepueQnQHJMgZZG9ITEmxcF5/A==} 433 | 434 | '@rollup/rollup-android-arm-eabi@4.41.1': 435 | resolution: {integrity: sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==} 436 | cpu: [arm] 437 | os: [android] 438 | 439 | '@rollup/rollup-android-arm64@4.41.1': 440 | resolution: {integrity: sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==} 441 | cpu: [arm64] 442 | os: [android] 443 | 444 | '@rollup/rollup-darwin-arm64@4.41.1': 445 | resolution: {integrity: sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==} 446 | cpu: [arm64] 447 | os: [darwin] 448 | 449 | '@rollup/rollup-darwin-x64@4.41.1': 450 | resolution: {integrity: sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==} 451 | cpu: [x64] 452 | os: [darwin] 453 | 454 | '@rollup/rollup-freebsd-arm64@4.41.1': 455 | resolution: {integrity: sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==} 456 | cpu: [arm64] 457 | os: [freebsd] 458 | 459 | '@rollup/rollup-freebsd-x64@4.41.1': 460 | resolution: {integrity: sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==} 461 | cpu: [x64] 462 | os: [freebsd] 463 | 464 | '@rollup/rollup-linux-arm-gnueabihf@4.41.1': 465 | resolution: {integrity: sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==} 466 | cpu: [arm] 467 | os: [linux] 468 | 469 | '@rollup/rollup-linux-arm-musleabihf@4.41.1': 470 | resolution: {integrity: sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==} 471 | cpu: [arm] 472 | os: [linux] 473 | 474 | '@rollup/rollup-linux-arm64-gnu@4.41.1': 475 | resolution: {integrity: sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==} 476 | cpu: [arm64] 477 | os: [linux] 478 | 479 | '@rollup/rollup-linux-arm64-musl@4.41.1': 480 | resolution: {integrity: sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==} 481 | cpu: [arm64] 482 | os: [linux] 483 | 484 | '@rollup/rollup-linux-loongarch64-gnu@4.41.1': 485 | resolution: {integrity: sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==} 486 | cpu: [loong64] 487 | os: [linux] 488 | 489 | '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': 490 | resolution: {integrity: sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==} 491 | cpu: [ppc64] 492 | os: [linux] 493 | 494 | '@rollup/rollup-linux-riscv64-gnu@4.41.1': 495 | resolution: {integrity: sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==} 496 | cpu: [riscv64] 497 | os: [linux] 498 | 499 | '@rollup/rollup-linux-riscv64-musl@4.41.1': 500 | resolution: {integrity: sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==} 501 | cpu: [riscv64] 502 | os: [linux] 503 | 504 | '@rollup/rollup-linux-s390x-gnu@4.41.1': 505 | resolution: {integrity: sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==} 506 | cpu: [s390x] 507 | os: [linux] 508 | 509 | '@rollup/rollup-linux-x64-gnu@4.41.1': 510 | resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==} 511 | cpu: [x64] 512 | os: [linux] 513 | 514 | '@rollup/rollup-linux-x64-musl@4.41.1': 515 | resolution: {integrity: sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==} 516 | cpu: [x64] 517 | os: [linux] 518 | 519 | '@rollup/rollup-win32-arm64-msvc@4.41.1': 520 | resolution: {integrity: sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==} 521 | cpu: [arm64] 522 | os: [win32] 523 | 524 | '@rollup/rollup-win32-ia32-msvc@4.41.1': 525 | resolution: {integrity: sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==} 526 | cpu: [ia32] 527 | os: [win32] 528 | 529 | '@rollup/rollup-win32-x64-msvc@4.41.1': 530 | resolution: {integrity: sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==} 531 | cpu: [x64] 532 | os: [win32] 533 | 534 | '@types/chai@5.2.2': 535 | resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} 536 | 537 | '@types/deep-eql@4.0.2': 538 | resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 539 | 540 | '@types/estree@1.0.7': 541 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 542 | 543 | '@types/node@12.20.55': 544 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 545 | 546 | '@vitest/expect@3.2.0': 547 | resolution: {integrity: sha512-0v4YVbhDKX3SKoy0PHWXpKhj44w+3zZkIoVES9Ex2pq+u6+Bijijbi2ua5kE+h3qT6LBWFTNZSCOEU37H8Y5sA==} 548 | 549 | '@vitest/mocker@3.2.0': 550 | resolution: {integrity: sha512-HFcW0lAMx3eN9vQqis63H0Pscv0QcVMo1Kv8BNysZbxcmHu3ZUYv59DS6BGYiGQ8F5lUkmsfMMlPm4DJFJdf/A==} 551 | peerDependencies: 552 | msw: ^2.4.9 553 | vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 554 | peerDependenciesMeta: 555 | msw: 556 | optional: true 557 | vite: 558 | optional: true 559 | 560 | '@vitest/pretty-format@3.2.0': 561 | resolution: {integrity: sha512-gUUhaUmPBHFkrqnOokmfMGRBMHhgpICud9nrz/xpNV3/4OXCn35oG+Pl8rYYsKaTNd/FAIrqRHnwpDpmYxCYZw==} 562 | 563 | '@vitest/runner@3.2.0': 564 | resolution: {integrity: sha512-bXdmnHxuB7fXJdh+8vvnlwi/m1zvu+I06i1dICVcDQFhyV4iKw2RExC/acavtDn93m/dRuawUObKsrNE1gJacA==} 565 | 566 | '@vitest/snapshot@3.2.0': 567 | resolution: {integrity: sha512-z7P/EneBRMe7hdvWhcHoXjhA6at0Q4ipcoZo6SqgxLyQQ8KSMMCmvw1cSt7FHib3ozt0wnRHc37ivuUMbxzG/A==} 568 | 569 | '@vitest/spy@3.2.0': 570 | resolution: {integrity: sha512-s3+TkCNUIEOX99S0JwNDfsHRaZDDZZR/n8F0mop0PmsEbQGKZikCGpTGZ6JRiHuONKew3Fb5//EPwCP+pUX9cw==} 571 | 572 | '@vitest/utils@3.2.0': 573 | resolution: {integrity: sha512-gXXOe7Fj6toCsZKVQouTRLJftJwmvbhH5lKOBR6rlP950zUq9AitTUjnFoXS/CqjBC2aoejAztLPzzuva++XBw==} 574 | 575 | ansi-colors@4.1.3: 576 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 577 | engines: {node: '>=6'} 578 | 579 | ansi-escapes@7.0.0: 580 | resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} 581 | engines: {node: '>=18'} 582 | 583 | ansi-regex@5.0.1: 584 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 585 | engines: {node: '>=8'} 586 | 587 | ansi-regex@6.1.0: 588 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 589 | engines: {node: '>=12'} 590 | 591 | ansi-styles@3.2.1: 592 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 593 | engines: {node: '>=4'} 594 | 595 | ansi-styles@6.2.1: 596 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 597 | engines: {node: '>=12'} 598 | 599 | ansis@4.1.0: 600 | resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} 601 | engines: {node: '>=14'} 602 | 603 | argparse@1.0.10: 604 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 605 | 606 | array-buffer-byte-length@1.0.2: 607 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 608 | engines: {node: '>= 0.4'} 609 | 610 | array-union@2.1.0: 611 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 612 | engines: {node: '>=8'} 613 | 614 | arraybuffer.prototype.slice@1.0.4: 615 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 616 | engines: {node: '>= 0.4'} 617 | 618 | assertion-error@2.0.1: 619 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 620 | engines: {node: '>=12'} 621 | 622 | ast-kit@2.1.0: 623 | resolution: {integrity: sha512-ROM2LlXbZBZVk97crfw8PGDOBzzsJvN2uJCmwswvPUNyfH14eg90mSN3xNqsri1JS1G9cz0VzeDUhxJkTrr4Ew==} 624 | engines: {node: '>=20.18.0'} 625 | 626 | async-function@1.0.0: 627 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} 628 | engines: {node: '>= 0.4'} 629 | 630 | available-typed-arrays@1.0.7: 631 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 632 | engines: {node: '>= 0.4'} 633 | 634 | balanced-match@1.0.2: 635 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 636 | 637 | better-path-resolve@1.0.0: 638 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 639 | engines: {node: '>=4'} 640 | 641 | birpc@2.3.0: 642 | resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==} 643 | 644 | brace-expansion@1.1.11: 645 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 646 | 647 | braces@3.0.3: 648 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 649 | engines: {node: '>=8'} 650 | 651 | cac@6.7.14: 652 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 653 | engines: {node: '>=8'} 654 | 655 | call-bind-apply-helpers@1.0.2: 656 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 657 | engines: {node: '>= 0.4'} 658 | 659 | call-bind@1.0.8: 660 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 661 | engines: {node: '>= 0.4'} 662 | 663 | call-bound@1.0.4: 664 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 665 | engines: {node: '>= 0.4'} 666 | 667 | chai@5.2.0: 668 | resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} 669 | engines: {node: '>=12'} 670 | 671 | chalk@2.4.2: 672 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 673 | engines: {node: '>=4'} 674 | 675 | chalk@5.4.1: 676 | resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} 677 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 678 | 679 | chardet@0.7.0: 680 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 681 | 682 | check-error@2.1.1: 683 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 684 | engines: {node: '>= 16'} 685 | 686 | chokidar@4.0.3: 687 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 688 | engines: {node: '>= 14.16.0'} 689 | 690 | ci-info@3.9.0: 691 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 692 | engines: {node: '>=8'} 693 | 694 | cli-cursor@5.0.0: 695 | resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} 696 | engines: {node: '>=18'} 697 | 698 | cli-truncate@4.0.0: 699 | resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} 700 | engines: {node: '>=18'} 701 | 702 | color-convert@1.9.3: 703 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 704 | 705 | color-name@1.1.3: 706 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 707 | 708 | colorette@2.0.20: 709 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 710 | 711 | commander@14.0.0: 712 | resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} 713 | engines: {node: '>=20'} 714 | 715 | concat-map@0.0.1: 716 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 717 | 718 | cross-spawn@6.0.6: 719 | resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} 720 | engines: {node: '>=4.8'} 721 | 722 | cross-spawn@7.0.6: 723 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 724 | engines: {node: '>= 8'} 725 | 726 | data-view-buffer@1.0.2: 727 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 728 | engines: {node: '>= 0.4'} 729 | 730 | data-view-byte-length@1.0.2: 731 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 732 | engines: {node: '>= 0.4'} 733 | 734 | data-view-byte-offset@1.0.1: 735 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 736 | engines: {node: '>= 0.4'} 737 | 738 | debug@4.4.1: 739 | resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 740 | engines: {node: '>=6.0'} 741 | peerDependencies: 742 | supports-color: '*' 743 | peerDependenciesMeta: 744 | supports-color: 745 | optional: true 746 | 747 | deep-eql@5.0.2: 748 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 749 | engines: {node: '>=6'} 750 | 751 | define-data-property@1.1.4: 752 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 753 | engines: {node: '>= 0.4'} 754 | 755 | define-properties@1.2.1: 756 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 757 | engines: {node: '>= 0.4'} 758 | 759 | defu@6.1.4: 760 | resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 761 | 762 | detect-indent@6.1.0: 763 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 764 | engines: {node: '>=8'} 765 | 766 | diff@8.0.2: 767 | resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} 768 | engines: {node: '>=0.3.1'} 769 | 770 | dir-glob@3.0.1: 771 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 772 | engines: {node: '>=8'} 773 | 774 | dts-resolver@2.1.0: 775 | resolution: {integrity: sha512-bgBo2md8jS5V11Rfhw23piIxJDEEDAnQ8hzh+jwKjX50P424IQhiZVVwyEe/n6vPWgEIe3NKrlRUyLMK9u0kaQ==} 776 | engines: {node: '>=20.18.0'} 777 | peerDependencies: 778 | oxc-resolver: '>=11.0.0' 779 | peerDependenciesMeta: 780 | oxc-resolver: 781 | optional: true 782 | 783 | dunder-proto@1.0.1: 784 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 785 | engines: {node: '>= 0.4'} 786 | 787 | emoji-regex@10.4.0: 788 | resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} 789 | 790 | empathic@1.1.0: 791 | resolution: {integrity: sha512-rsPft6CK3eHtrlp9Y5ALBb+hfK+DWnA4WFebbazxjWyx8vSm3rZeoM3z9irsjcqO3PYRzlfv27XIB4tz2DV7RA==} 792 | engines: {node: '>=14'} 793 | 794 | enquirer@2.4.1: 795 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 796 | engines: {node: '>=8.6'} 797 | 798 | environment@1.1.0: 799 | resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} 800 | engines: {node: '>=18'} 801 | 802 | error-ex@1.3.2: 803 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 804 | 805 | es-abstract@1.23.9: 806 | resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} 807 | engines: {node: '>= 0.4'} 808 | 809 | es-define-property@1.0.1: 810 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 811 | engines: {node: '>= 0.4'} 812 | 813 | es-errors@1.3.0: 814 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 815 | engines: {node: '>= 0.4'} 816 | 817 | es-module-lexer@1.7.0: 818 | resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 819 | 820 | es-object-atoms@1.1.1: 821 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 822 | engines: {node: '>= 0.4'} 823 | 824 | es-set-tostringtag@2.1.0: 825 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 826 | engines: {node: '>= 0.4'} 827 | 828 | es-to-primitive@1.3.0: 829 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 830 | engines: {node: '>= 0.4'} 831 | 832 | esbuild@0.25.5: 833 | resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} 834 | engines: {node: '>=18'} 835 | hasBin: true 836 | 837 | escape-string-regexp@1.0.5: 838 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 839 | engines: {node: '>=0.8.0'} 840 | 841 | esprima@4.0.1: 842 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 843 | engines: {node: '>=4'} 844 | hasBin: true 845 | 846 | estree-walker@3.0.3: 847 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 848 | 849 | eventemitter3@5.0.1: 850 | resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 851 | 852 | expect-type@1.2.1: 853 | resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} 854 | engines: {node: '>=12.0.0'} 855 | 856 | extendable-error@0.1.7: 857 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 858 | 859 | external-editor@3.1.0: 860 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 861 | engines: {node: '>=4'} 862 | 863 | fast-glob@3.3.3: 864 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 865 | engines: {node: '>=8.6.0'} 866 | 867 | fastq@1.19.1: 868 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 869 | 870 | fdir@6.4.5: 871 | resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} 872 | peerDependencies: 873 | picomatch: ^3 || ^4 874 | peerDependenciesMeta: 875 | picomatch: 876 | optional: true 877 | 878 | fill-range@7.1.1: 879 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 880 | engines: {node: '>=8'} 881 | 882 | find-up@4.1.0: 883 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 884 | engines: {node: '>=8'} 885 | 886 | for-each@0.3.5: 887 | resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} 888 | engines: {node: '>= 0.4'} 889 | 890 | fs-extra@7.0.1: 891 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 892 | engines: {node: '>=6 <7 || >=8'} 893 | 894 | fs-extra@8.1.0: 895 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 896 | engines: {node: '>=6 <7 || >=8'} 897 | 898 | fsevents@2.3.3: 899 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 900 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 901 | os: [darwin] 902 | 903 | function-bind@1.1.2: 904 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 905 | 906 | function.prototype.name@1.1.8: 907 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 908 | engines: {node: '>= 0.4'} 909 | 910 | functions-have-names@1.2.3: 911 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 912 | 913 | get-east-asian-width@1.3.0: 914 | resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} 915 | engines: {node: '>=18'} 916 | 917 | get-intrinsic@1.3.0: 918 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 919 | engines: {node: '>= 0.4'} 920 | 921 | get-proto@1.0.1: 922 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 923 | engines: {node: '>= 0.4'} 924 | 925 | get-symbol-description@1.1.0: 926 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 927 | engines: {node: '>= 0.4'} 928 | 929 | get-tsconfig@4.10.1: 930 | resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} 931 | 932 | glob-parent@5.1.2: 933 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 934 | engines: {node: '>= 6'} 935 | 936 | globalthis@1.0.4: 937 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 938 | engines: {node: '>= 0.4'} 939 | 940 | globby@11.1.0: 941 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 942 | engines: {node: '>=10'} 943 | 944 | gopd@1.2.0: 945 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 946 | engines: {node: '>= 0.4'} 947 | 948 | graceful-fs@4.2.11: 949 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 950 | 951 | has-bigints@1.1.0: 952 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 953 | engines: {node: '>= 0.4'} 954 | 955 | has-flag@3.0.0: 956 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 957 | engines: {node: '>=4'} 958 | 959 | has-property-descriptors@1.0.2: 960 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 961 | 962 | has-proto@1.2.0: 963 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 964 | engines: {node: '>= 0.4'} 965 | 966 | has-symbols@1.1.0: 967 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 968 | engines: {node: '>= 0.4'} 969 | 970 | has-tostringtag@1.0.2: 971 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 972 | engines: {node: '>= 0.4'} 973 | 974 | hasown@2.0.2: 975 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 976 | engines: {node: '>= 0.4'} 977 | 978 | hookable@5.5.3: 979 | resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 980 | 981 | hosted-git-info@2.8.9: 982 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 983 | 984 | human-id@4.1.1: 985 | resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} 986 | hasBin: true 987 | 988 | husky@9.1.7: 989 | resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} 990 | engines: {node: '>=18'} 991 | hasBin: true 992 | 993 | iconv-lite@0.4.24: 994 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 995 | engines: {node: '>=0.10.0'} 996 | 997 | ignore@5.3.2: 998 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 999 | engines: {node: '>= 4'} 1000 | 1001 | internal-slot@1.1.0: 1002 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 1003 | engines: {node: '>= 0.4'} 1004 | 1005 | is-array-buffer@3.0.5: 1006 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 1007 | engines: {node: '>= 0.4'} 1008 | 1009 | is-arrayish@0.2.1: 1010 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1011 | 1012 | is-async-function@2.1.1: 1013 | resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} 1014 | engines: {node: '>= 0.4'} 1015 | 1016 | is-bigint@1.1.0: 1017 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 1018 | engines: {node: '>= 0.4'} 1019 | 1020 | is-boolean-object@1.2.2: 1021 | resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} 1022 | engines: {node: '>= 0.4'} 1023 | 1024 | is-callable@1.2.7: 1025 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1026 | engines: {node: '>= 0.4'} 1027 | 1028 | is-core-module@2.16.1: 1029 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1030 | engines: {node: '>= 0.4'} 1031 | 1032 | is-data-view@1.0.2: 1033 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 1034 | engines: {node: '>= 0.4'} 1035 | 1036 | is-date-object@1.1.0: 1037 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 1038 | engines: {node: '>= 0.4'} 1039 | 1040 | is-extglob@2.1.1: 1041 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1042 | engines: {node: '>=0.10.0'} 1043 | 1044 | is-finalizationregistry@1.1.1: 1045 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 1046 | engines: {node: '>= 0.4'} 1047 | 1048 | is-fullwidth-code-point@4.0.0: 1049 | resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 1050 | engines: {node: '>=12'} 1051 | 1052 | is-fullwidth-code-point@5.0.0: 1053 | resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} 1054 | engines: {node: '>=18'} 1055 | 1056 | is-generator-function@1.1.0: 1057 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} 1058 | engines: {node: '>= 0.4'} 1059 | 1060 | is-glob@4.0.3: 1061 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1062 | engines: {node: '>=0.10.0'} 1063 | 1064 | is-map@2.0.3: 1065 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 1066 | engines: {node: '>= 0.4'} 1067 | 1068 | is-number-object@1.1.1: 1069 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 1070 | engines: {node: '>= 0.4'} 1071 | 1072 | is-number@7.0.0: 1073 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1074 | engines: {node: '>=0.12.0'} 1075 | 1076 | is-regex@1.2.1: 1077 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 1078 | engines: {node: '>= 0.4'} 1079 | 1080 | is-set@2.0.3: 1081 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 1082 | engines: {node: '>= 0.4'} 1083 | 1084 | is-shared-array-buffer@1.0.4: 1085 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 1086 | engines: {node: '>= 0.4'} 1087 | 1088 | is-string@1.1.1: 1089 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 1090 | engines: {node: '>= 0.4'} 1091 | 1092 | is-subdir@1.2.0: 1093 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 1094 | engines: {node: '>=4'} 1095 | 1096 | is-symbol@1.1.1: 1097 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 1098 | engines: {node: '>= 0.4'} 1099 | 1100 | is-typed-array@1.1.15: 1101 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 1102 | engines: {node: '>= 0.4'} 1103 | 1104 | is-weakmap@2.0.2: 1105 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 1106 | engines: {node: '>= 0.4'} 1107 | 1108 | is-weakref@1.1.1: 1109 | resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} 1110 | engines: {node: '>= 0.4'} 1111 | 1112 | is-weakset@2.0.4: 1113 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 1114 | engines: {node: '>= 0.4'} 1115 | 1116 | is-windows@1.0.2: 1117 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 1118 | engines: {node: '>=0.10.0'} 1119 | 1120 | isarray@2.0.5: 1121 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1122 | 1123 | isexe@2.0.0: 1124 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1125 | 1126 | jiti@2.4.2: 1127 | resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 1128 | hasBin: true 1129 | 1130 | js-yaml@3.14.1: 1131 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1132 | hasBin: true 1133 | 1134 | jsesc@3.1.0: 1135 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1136 | engines: {node: '>=6'} 1137 | hasBin: true 1138 | 1139 | json-parse-better-errors@1.0.2: 1140 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 1141 | 1142 | jsonfile@4.0.0: 1143 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1144 | 1145 | lilconfig@3.1.3: 1146 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1147 | engines: {node: '>=14'} 1148 | 1149 | lint-staged@16.1.0: 1150 | resolution: {integrity: sha512-HkpQh69XHxgCjObjejBT3s2ILwNjFx8M3nw+tJ/ssBauDlIpkx2RpqWSi1fBgkXLSSXnbR3iEq1NkVtpvV+FLQ==} 1151 | engines: {node: '>=20.17'} 1152 | hasBin: true 1153 | 1154 | listr2@8.3.3: 1155 | resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} 1156 | engines: {node: '>=18.0.0'} 1157 | 1158 | load-json-file@4.0.0: 1159 | resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} 1160 | engines: {node: '>=4'} 1161 | 1162 | locate-path@5.0.0: 1163 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1164 | engines: {node: '>=8'} 1165 | 1166 | lodash.startcase@4.4.0: 1167 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 1168 | 1169 | log-update@6.1.0: 1170 | resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} 1171 | engines: {node: '>=18'} 1172 | 1173 | loupe@3.1.3: 1174 | resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} 1175 | 1176 | magic-string@0.30.17: 1177 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 1178 | 1179 | math-intrinsics@1.1.0: 1180 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1181 | engines: {node: '>= 0.4'} 1182 | 1183 | memorystream@0.3.1: 1184 | resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} 1185 | engines: {node: '>= 0.10.0'} 1186 | 1187 | merge2@1.4.1: 1188 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1189 | engines: {node: '>= 8'} 1190 | 1191 | micromatch@4.0.8: 1192 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1193 | engines: {node: '>=8.6'} 1194 | 1195 | mimic-function@5.0.1: 1196 | resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} 1197 | engines: {node: '>=18'} 1198 | 1199 | minimatch@3.1.2: 1200 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1201 | 1202 | mri@1.2.0: 1203 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1204 | engines: {node: '>=4'} 1205 | 1206 | ms@2.1.3: 1207 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1208 | 1209 | nano-spawn@1.0.2: 1210 | resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} 1211 | engines: {node: '>=20.17'} 1212 | 1213 | nanoid@3.3.11: 1214 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1215 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1216 | hasBin: true 1217 | 1218 | nice-try@1.0.5: 1219 | resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} 1220 | 1221 | normalize-package-data@2.5.0: 1222 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1223 | 1224 | npm-run-all@4.1.5: 1225 | resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} 1226 | engines: {node: '>= 4'} 1227 | hasBin: true 1228 | 1229 | object-inspect@1.13.4: 1230 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1231 | engines: {node: '>= 0.4'} 1232 | 1233 | object-keys@1.1.1: 1234 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1235 | engines: {node: '>= 0.4'} 1236 | 1237 | object.assign@4.1.7: 1238 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1239 | engines: {node: '>= 0.4'} 1240 | 1241 | onetime@7.0.0: 1242 | resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} 1243 | engines: {node: '>=18'} 1244 | 1245 | os-tmpdir@1.0.2: 1246 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 1247 | engines: {node: '>=0.10.0'} 1248 | 1249 | outdent@0.5.0: 1250 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 1251 | 1252 | own-keys@1.0.1: 1253 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 1254 | engines: {node: '>= 0.4'} 1255 | 1256 | p-filter@2.1.0: 1257 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 1258 | engines: {node: '>=8'} 1259 | 1260 | p-limit@2.3.0: 1261 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1262 | engines: {node: '>=6'} 1263 | 1264 | p-locate@4.1.0: 1265 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1266 | engines: {node: '>=8'} 1267 | 1268 | p-map@2.1.0: 1269 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 1270 | engines: {node: '>=6'} 1271 | 1272 | p-try@2.2.0: 1273 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1274 | engines: {node: '>=6'} 1275 | 1276 | package-manager-detector@0.2.11: 1277 | resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} 1278 | 1279 | parse-json@4.0.0: 1280 | resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} 1281 | engines: {node: '>=4'} 1282 | 1283 | path-exists@4.0.0: 1284 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1285 | engines: {node: '>=8'} 1286 | 1287 | path-key@2.0.1: 1288 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} 1289 | engines: {node: '>=4'} 1290 | 1291 | path-key@3.1.1: 1292 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1293 | engines: {node: '>=8'} 1294 | 1295 | path-parse@1.0.7: 1296 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1297 | 1298 | path-type@3.0.0: 1299 | resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} 1300 | engines: {node: '>=4'} 1301 | 1302 | path-type@4.0.0: 1303 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1304 | engines: {node: '>=8'} 1305 | 1306 | pathe@2.0.3: 1307 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1308 | 1309 | pathval@2.0.0: 1310 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1311 | engines: {node: '>= 14.16'} 1312 | 1313 | picocolors@1.1.1: 1314 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1315 | 1316 | picomatch@2.3.1: 1317 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1318 | engines: {node: '>=8.6'} 1319 | 1320 | picomatch@4.0.2: 1321 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1322 | engines: {node: '>=12'} 1323 | 1324 | pidtree@0.3.1: 1325 | resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} 1326 | engines: {node: '>=0.10'} 1327 | hasBin: true 1328 | 1329 | pidtree@0.6.0: 1330 | resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} 1331 | engines: {node: '>=0.10'} 1332 | hasBin: true 1333 | 1334 | pify@3.0.0: 1335 | resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} 1336 | engines: {node: '>=4'} 1337 | 1338 | pify@4.0.1: 1339 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1340 | engines: {node: '>=6'} 1341 | 1342 | pocketbase@0.26.0: 1343 | resolution: {integrity: sha512-WBBeOgz4Jnrd7a1KEzSBUJqpTortKKCcp16j5KoF+4tNIyQHsmynj+qRSvS56/RVacVMbAqO8Qkfj3N84fpzEw==} 1344 | 1345 | possible-typed-array-names@1.1.0: 1346 | resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 1347 | engines: {node: '>= 0.4'} 1348 | 1349 | postcss@8.5.4: 1350 | resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} 1351 | engines: {node: ^10 || ^12 || >=14} 1352 | 1353 | prettier@2.8.8: 1354 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 1355 | engines: {node: '>=10.13.0'} 1356 | hasBin: true 1357 | 1358 | quansync@0.2.10: 1359 | resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} 1360 | 1361 | queue-microtask@1.2.3: 1362 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1363 | 1364 | read-pkg@3.0.0: 1365 | resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} 1366 | engines: {node: '>=4'} 1367 | 1368 | read-yaml-file@1.1.0: 1369 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 1370 | engines: {node: '>=6'} 1371 | 1372 | readdirp@4.1.2: 1373 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1374 | engines: {node: '>= 14.18.0'} 1375 | 1376 | reflect.getprototypeof@1.0.10: 1377 | resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} 1378 | engines: {node: '>= 0.4'} 1379 | 1380 | regenerator-runtime@0.14.1: 1381 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1382 | 1383 | regexp.prototype.flags@1.5.4: 1384 | resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 1385 | engines: {node: '>= 0.4'} 1386 | 1387 | resolve-from@5.0.0: 1388 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1389 | engines: {node: '>=8'} 1390 | 1391 | resolve-pkg-maps@1.0.0: 1392 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1393 | 1394 | resolve@1.22.10: 1395 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1396 | engines: {node: '>= 0.4'} 1397 | hasBin: true 1398 | 1399 | restore-cursor@5.1.0: 1400 | resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} 1401 | engines: {node: '>=18'} 1402 | 1403 | reusify@1.1.0: 1404 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1405 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1406 | 1407 | rfdc@1.4.1: 1408 | resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 1409 | 1410 | rolldown-plugin-dts@0.13.7: 1411 | resolution: {integrity: sha512-D1ite1Ye8OaNi0utY4yoC/anZMmAjd2vBAYDEKuTrcz5B1hK0/CXiQAsiaPp8RIrsotFAOklj7LvT5i3p0HV6w==} 1412 | engines: {node: '>=20.18.0'} 1413 | peerDependencies: 1414 | rolldown: ^1.0.0-beta.9 1415 | typescript: ^5.0.0 1416 | vue-tsc: ~2.2.0 1417 | peerDependenciesMeta: 1418 | typescript: 1419 | optional: true 1420 | vue-tsc: 1421 | optional: true 1422 | 1423 | rolldown@1.0.0-beta.10-commit.87188ed: 1424 | resolution: {integrity: sha512-D+iim+DHIwK9kbZvubENmtnYFqHfFV0OKwzT8yU/W+xyUK1A71+iRFmJYBGqNUo3fJ2Ob4oIQfan63mhzh614A==} 1425 | hasBin: true 1426 | 1427 | rollup@4.41.1: 1428 | resolution: {integrity: sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==} 1429 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1430 | hasBin: true 1431 | 1432 | run-parallel@1.2.0: 1433 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1434 | 1435 | safe-array-concat@1.1.3: 1436 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1437 | engines: {node: '>=0.4'} 1438 | 1439 | safe-push-apply@1.0.0: 1440 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 1441 | engines: {node: '>= 0.4'} 1442 | 1443 | safe-regex-test@1.1.0: 1444 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1445 | engines: {node: '>= 0.4'} 1446 | 1447 | safer-buffer@2.1.2: 1448 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1449 | 1450 | semver@5.7.2: 1451 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1452 | hasBin: true 1453 | 1454 | semver@7.7.1: 1455 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1456 | engines: {node: '>=10'} 1457 | hasBin: true 1458 | 1459 | semver@7.7.2: 1460 | resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} 1461 | engines: {node: '>=10'} 1462 | hasBin: true 1463 | 1464 | set-function-length@1.2.2: 1465 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1466 | engines: {node: '>= 0.4'} 1467 | 1468 | set-function-name@2.0.2: 1469 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1470 | engines: {node: '>= 0.4'} 1471 | 1472 | set-proto@1.0.0: 1473 | resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} 1474 | engines: {node: '>= 0.4'} 1475 | 1476 | shebang-command@1.2.0: 1477 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 1478 | engines: {node: '>=0.10.0'} 1479 | 1480 | shebang-command@2.0.0: 1481 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1482 | engines: {node: '>=8'} 1483 | 1484 | shebang-regex@1.0.0: 1485 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 1486 | engines: {node: '>=0.10.0'} 1487 | 1488 | shebang-regex@3.0.0: 1489 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1490 | engines: {node: '>=8'} 1491 | 1492 | shell-quote@1.8.2: 1493 | resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} 1494 | engines: {node: '>= 0.4'} 1495 | 1496 | side-channel-list@1.0.0: 1497 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1498 | engines: {node: '>= 0.4'} 1499 | 1500 | side-channel-map@1.0.1: 1501 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1502 | engines: {node: '>= 0.4'} 1503 | 1504 | side-channel-weakmap@1.0.2: 1505 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1506 | engines: {node: '>= 0.4'} 1507 | 1508 | side-channel@1.1.0: 1509 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1510 | engines: {node: '>= 0.4'} 1511 | 1512 | siginfo@2.0.0: 1513 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1514 | 1515 | signal-exit@4.1.0: 1516 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1517 | engines: {node: '>=14'} 1518 | 1519 | slash@3.0.0: 1520 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1521 | engines: {node: '>=8'} 1522 | 1523 | slice-ansi@5.0.0: 1524 | resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 1525 | engines: {node: '>=12'} 1526 | 1527 | slice-ansi@7.1.0: 1528 | resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} 1529 | engines: {node: '>=18'} 1530 | 1531 | source-map-js@1.2.1: 1532 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1533 | engines: {node: '>=0.10.0'} 1534 | 1535 | spawndamnit@3.0.1: 1536 | resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} 1537 | 1538 | spdx-correct@3.2.0: 1539 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1540 | 1541 | spdx-exceptions@2.5.0: 1542 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 1543 | 1544 | spdx-expression-parse@3.0.1: 1545 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1546 | 1547 | spdx-license-ids@3.0.21: 1548 | resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} 1549 | 1550 | sprintf-js@1.0.3: 1551 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1552 | 1553 | stackback@0.0.2: 1554 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1555 | 1556 | std-env@3.9.0: 1557 | resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} 1558 | 1559 | string-argv@0.3.2: 1560 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 1561 | engines: {node: '>=0.6.19'} 1562 | 1563 | string-width@7.2.0: 1564 | resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 1565 | engines: {node: '>=18'} 1566 | 1567 | string.prototype.padend@3.1.6: 1568 | resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} 1569 | engines: {node: '>= 0.4'} 1570 | 1571 | string.prototype.trim@1.2.10: 1572 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1573 | engines: {node: '>= 0.4'} 1574 | 1575 | string.prototype.trimend@1.0.9: 1576 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1577 | engines: {node: '>= 0.4'} 1578 | 1579 | string.prototype.trimstart@1.0.8: 1580 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1581 | engines: {node: '>= 0.4'} 1582 | 1583 | strip-ansi@6.0.1: 1584 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1585 | engines: {node: '>=8'} 1586 | 1587 | strip-ansi@7.1.0: 1588 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1589 | engines: {node: '>=12'} 1590 | 1591 | strip-bom@3.0.0: 1592 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1593 | engines: {node: '>=4'} 1594 | 1595 | supports-color@5.5.0: 1596 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1597 | engines: {node: '>=4'} 1598 | 1599 | supports-preserve-symlinks-flag@1.0.0: 1600 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1601 | engines: {node: '>= 0.4'} 1602 | 1603 | term-size@2.2.1: 1604 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 1605 | engines: {node: '>=8'} 1606 | 1607 | tinybench@2.9.0: 1608 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1609 | 1610 | tinyexec@0.3.2: 1611 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1612 | 1613 | tinyexec@1.0.1: 1614 | resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} 1615 | 1616 | tinyglobby@0.2.14: 1617 | resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} 1618 | engines: {node: '>=12.0.0'} 1619 | 1620 | tinypool@1.1.0: 1621 | resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} 1622 | engines: {node: ^18.0.0 || >=20.0.0} 1623 | 1624 | tinyrainbow@2.0.0: 1625 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1626 | engines: {node: '>=14.0.0'} 1627 | 1628 | tinyspy@4.0.3: 1629 | resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} 1630 | engines: {node: '>=14.0.0'} 1631 | 1632 | tmp@0.0.33: 1633 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 1634 | engines: {node: '>=0.6.0'} 1635 | 1636 | to-regex-range@5.0.1: 1637 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1638 | engines: {node: '>=8.0'} 1639 | 1640 | tsdown@0.12.6: 1641 | resolution: {integrity: sha512-NIqmptXCYc0iZzSGNpFtWATTDM5MyqDfV7bhgqfrw8KJlEFLI9zYyF4uFDheEvudTMNH5dkcQUJaklpmHsA37A==} 1642 | engines: {node: '>=18.0.0'} 1643 | hasBin: true 1644 | peerDependencies: 1645 | '@arethetypeswrong/core': ^0.18.1 1646 | publint: ^0.3.0 1647 | typescript: ^5.0.0 1648 | unplugin-lightningcss: ^0.4.0 1649 | unplugin-unused: ^0.5.0 1650 | peerDependenciesMeta: 1651 | '@arethetypeswrong/core': 1652 | optional: true 1653 | publint: 1654 | optional: true 1655 | typescript: 1656 | optional: true 1657 | unplugin-lightningcss: 1658 | optional: true 1659 | unplugin-unused: 1660 | optional: true 1661 | 1662 | typed-array-buffer@1.0.3: 1663 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1664 | engines: {node: '>= 0.4'} 1665 | 1666 | typed-array-byte-length@1.0.3: 1667 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1668 | engines: {node: '>= 0.4'} 1669 | 1670 | typed-array-byte-offset@1.0.4: 1671 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1672 | engines: {node: '>= 0.4'} 1673 | 1674 | typed-array-length@1.0.7: 1675 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1676 | engines: {node: '>= 0.4'} 1677 | 1678 | typescript@5.8.3: 1679 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1680 | engines: {node: '>=14.17'} 1681 | hasBin: true 1682 | 1683 | unbox-primitive@1.1.0: 1684 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1685 | engines: {node: '>= 0.4'} 1686 | 1687 | unconfig@7.3.2: 1688 | resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} 1689 | 1690 | universalify@0.1.2: 1691 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 1692 | engines: {node: '>= 4.0.0'} 1693 | 1694 | validate-npm-package-license@3.0.4: 1695 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1696 | 1697 | vite-node@3.2.0: 1698 | resolution: {integrity: sha512-8Fc5Ko5Y4URIJkmMF/iFP1C0/OJyY+VGVe9Nw6WAdZyw4bTO+eVg9mwxWkQp/y8NnAoQY3o9KAvE1ZdA2v+Vmg==} 1699 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1700 | hasBin: true 1701 | 1702 | vite@6.3.5: 1703 | resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} 1704 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1705 | hasBin: true 1706 | peerDependencies: 1707 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1708 | jiti: '>=1.21.0' 1709 | less: '*' 1710 | lightningcss: ^1.21.0 1711 | sass: '*' 1712 | sass-embedded: '*' 1713 | stylus: '*' 1714 | sugarss: '*' 1715 | terser: ^5.16.0 1716 | tsx: ^4.8.1 1717 | yaml: ^2.4.2 1718 | peerDependenciesMeta: 1719 | '@types/node': 1720 | optional: true 1721 | jiti: 1722 | optional: true 1723 | less: 1724 | optional: true 1725 | lightningcss: 1726 | optional: true 1727 | sass: 1728 | optional: true 1729 | sass-embedded: 1730 | optional: true 1731 | stylus: 1732 | optional: true 1733 | sugarss: 1734 | optional: true 1735 | terser: 1736 | optional: true 1737 | tsx: 1738 | optional: true 1739 | yaml: 1740 | optional: true 1741 | 1742 | vitest@3.2.0: 1743 | resolution: {integrity: sha512-P7Nvwuli8WBNmeMHHek7PnGW4oAZl9za1fddfRVidZar8wDZRi7hpznLKQePQ8JPLwSBEYDK11g+++j7uFJV8Q==} 1744 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1745 | hasBin: true 1746 | peerDependencies: 1747 | '@edge-runtime/vm': '*' 1748 | '@types/debug': ^4.1.12 1749 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1750 | '@vitest/browser': 3.2.0 1751 | '@vitest/ui': 3.2.0 1752 | happy-dom: '*' 1753 | jsdom: '*' 1754 | peerDependenciesMeta: 1755 | '@edge-runtime/vm': 1756 | optional: true 1757 | '@types/debug': 1758 | optional: true 1759 | '@types/node': 1760 | optional: true 1761 | '@vitest/browser': 1762 | optional: true 1763 | '@vitest/ui': 1764 | optional: true 1765 | happy-dom: 1766 | optional: true 1767 | jsdom: 1768 | optional: true 1769 | 1770 | which-boxed-primitive@1.1.1: 1771 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1772 | engines: {node: '>= 0.4'} 1773 | 1774 | which-builtin-type@1.2.1: 1775 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1776 | engines: {node: '>= 0.4'} 1777 | 1778 | which-collection@1.0.2: 1779 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1780 | engines: {node: '>= 0.4'} 1781 | 1782 | which-typed-array@1.1.19: 1783 | resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} 1784 | engines: {node: '>= 0.4'} 1785 | 1786 | which@1.3.1: 1787 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 1788 | hasBin: true 1789 | 1790 | which@2.0.2: 1791 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1792 | engines: {node: '>= 8'} 1793 | hasBin: true 1794 | 1795 | why-is-node-running@2.3.0: 1796 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1797 | engines: {node: '>=8'} 1798 | hasBin: true 1799 | 1800 | wrap-ansi@9.0.0: 1801 | resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 1802 | engines: {node: '>=18'} 1803 | 1804 | yaml@2.8.0: 1805 | resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} 1806 | engines: {node: '>= 14.6'} 1807 | hasBin: true 1808 | 1809 | snapshots: 1810 | 1811 | '@babel/generator@7.27.3': 1812 | dependencies: 1813 | '@babel/parser': 7.27.4 1814 | '@babel/types': 7.27.3 1815 | '@jridgewell/gen-mapping': 0.3.8 1816 | '@jridgewell/trace-mapping': 0.3.25 1817 | jsesc: 3.1.0 1818 | 1819 | '@babel/helper-string-parser@7.27.1': {} 1820 | 1821 | '@babel/helper-validator-identifier@7.27.1': {} 1822 | 1823 | '@babel/parser@7.27.4': 1824 | dependencies: 1825 | '@babel/types': 7.27.3 1826 | 1827 | '@babel/runtime@7.27.0': 1828 | dependencies: 1829 | regenerator-runtime: 0.14.1 1830 | 1831 | '@babel/types@7.27.3': 1832 | dependencies: 1833 | '@babel/helper-string-parser': 7.27.1 1834 | '@babel/helper-validator-identifier': 7.27.1 1835 | 1836 | '@biomejs/biome@1.9.4': 1837 | optionalDependencies: 1838 | '@biomejs/cli-darwin-arm64': 1.9.4 1839 | '@biomejs/cli-darwin-x64': 1.9.4 1840 | '@biomejs/cli-linux-arm64': 1.9.4 1841 | '@biomejs/cli-linux-arm64-musl': 1.9.4 1842 | '@biomejs/cli-linux-x64': 1.9.4 1843 | '@biomejs/cli-linux-x64-musl': 1.9.4 1844 | '@biomejs/cli-win32-arm64': 1.9.4 1845 | '@biomejs/cli-win32-x64': 1.9.4 1846 | 1847 | '@biomejs/cli-darwin-arm64@1.9.4': 1848 | optional: true 1849 | 1850 | '@biomejs/cli-darwin-x64@1.9.4': 1851 | optional: true 1852 | 1853 | '@biomejs/cli-linux-arm64-musl@1.9.4': 1854 | optional: true 1855 | 1856 | '@biomejs/cli-linux-arm64@1.9.4': 1857 | optional: true 1858 | 1859 | '@biomejs/cli-linux-x64-musl@1.9.4': 1860 | optional: true 1861 | 1862 | '@biomejs/cli-linux-x64@1.9.4': 1863 | optional: true 1864 | 1865 | '@biomejs/cli-win32-arm64@1.9.4': 1866 | optional: true 1867 | 1868 | '@biomejs/cli-win32-x64@1.9.4': 1869 | optional: true 1870 | 1871 | '@changesets/apply-release-plan@7.0.10': 1872 | dependencies: 1873 | '@changesets/config': 3.1.1 1874 | '@changesets/get-version-range-type': 0.4.0 1875 | '@changesets/git': 3.0.2 1876 | '@changesets/should-skip-package': 0.1.2 1877 | '@changesets/types': 6.1.0 1878 | '@manypkg/get-packages': 1.1.3 1879 | detect-indent: 6.1.0 1880 | fs-extra: 7.0.1 1881 | lodash.startcase: 4.4.0 1882 | outdent: 0.5.0 1883 | prettier: 2.8.8 1884 | resolve-from: 5.0.0 1885 | semver: 7.7.1 1886 | 1887 | '@changesets/assemble-release-plan@6.0.6': 1888 | dependencies: 1889 | '@changesets/errors': 0.2.0 1890 | '@changesets/get-dependents-graph': 2.1.3 1891 | '@changesets/should-skip-package': 0.1.2 1892 | '@changesets/types': 6.1.0 1893 | '@manypkg/get-packages': 1.1.3 1894 | semver: 7.7.1 1895 | 1896 | '@changesets/changelog-git@0.2.1': 1897 | dependencies: 1898 | '@changesets/types': 6.1.0 1899 | 1900 | '@changesets/cli@2.28.1': 1901 | dependencies: 1902 | '@changesets/apply-release-plan': 7.0.10 1903 | '@changesets/assemble-release-plan': 6.0.6 1904 | '@changesets/changelog-git': 0.2.1 1905 | '@changesets/config': 3.1.1 1906 | '@changesets/errors': 0.2.0 1907 | '@changesets/get-dependents-graph': 2.1.3 1908 | '@changesets/get-release-plan': 4.0.8 1909 | '@changesets/git': 3.0.2 1910 | '@changesets/logger': 0.1.1 1911 | '@changesets/pre': 2.0.2 1912 | '@changesets/read': 0.6.3 1913 | '@changesets/should-skip-package': 0.1.2 1914 | '@changesets/types': 6.1.0 1915 | '@changesets/write': 0.4.0 1916 | '@manypkg/get-packages': 1.1.3 1917 | ansi-colors: 4.1.3 1918 | ci-info: 3.9.0 1919 | enquirer: 2.4.1 1920 | external-editor: 3.1.0 1921 | fs-extra: 7.0.1 1922 | mri: 1.2.0 1923 | p-limit: 2.3.0 1924 | package-manager-detector: 0.2.11 1925 | picocolors: 1.1.1 1926 | resolve-from: 5.0.0 1927 | semver: 7.7.1 1928 | spawndamnit: 3.0.1 1929 | term-size: 2.2.1 1930 | 1931 | '@changesets/config@3.1.1': 1932 | dependencies: 1933 | '@changesets/errors': 0.2.0 1934 | '@changesets/get-dependents-graph': 2.1.3 1935 | '@changesets/logger': 0.1.1 1936 | '@changesets/types': 6.1.0 1937 | '@manypkg/get-packages': 1.1.3 1938 | fs-extra: 7.0.1 1939 | micromatch: 4.0.8 1940 | 1941 | '@changesets/errors@0.2.0': 1942 | dependencies: 1943 | extendable-error: 0.1.7 1944 | 1945 | '@changesets/get-dependents-graph@2.1.3': 1946 | dependencies: 1947 | '@changesets/types': 6.1.0 1948 | '@manypkg/get-packages': 1.1.3 1949 | picocolors: 1.1.1 1950 | semver: 7.7.1 1951 | 1952 | '@changesets/get-release-plan@4.0.8': 1953 | dependencies: 1954 | '@changesets/assemble-release-plan': 6.0.6 1955 | '@changesets/config': 3.1.1 1956 | '@changesets/pre': 2.0.2 1957 | '@changesets/read': 0.6.3 1958 | '@changesets/types': 6.1.0 1959 | '@manypkg/get-packages': 1.1.3 1960 | 1961 | '@changesets/get-version-range-type@0.4.0': {} 1962 | 1963 | '@changesets/git@3.0.2': 1964 | dependencies: 1965 | '@changesets/errors': 0.2.0 1966 | '@manypkg/get-packages': 1.1.3 1967 | is-subdir: 1.2.0 1968 | micromatch: 4.0.8 1969 | spawndamnit: 3.0.1 1970 | 1971 | '@changesets/logger@0.1.1': 1972 | dependencies: 1973 | picocolors: 1.1.1 1974 | 1975 | '@changesets/parse@0.4.1': 1976 | dependencies: 1977 | '@changesets/types': 6.1.0 1978 | js-yaml: 3.14.1 1979 | 1980 | '@changesets/pre@2.0.2': 1981 | dependencies: 1982 | '@changesets/errors': 0.2.0 1983 | '@changesets/types': 6.1.0 1984 | '@manypkg/get-packages': 1.1.3 1985 | fs-extra: 7.0.1 1986 | 1987 | '@changesets/read@0.6.3': 1988 | dependencies: 1989 | '@changesets/git': 3.0.2 1990 | '@changesets/logger': 0.1.1 1991 | '@changesets/parse': 0.4.1 1992 | '@changesets/types': 6.1.0 1993 | fs-extra: 7.0.1 1994 | p-filter: 2.1.0 1995 | picocolors: 1.1.1 1996 | 1997 | '@changesets/should-skip-package@0.1.2': 1998 | dependencies: 1999 | '@changesets/types': 6.1.0 2000 | '@manypkg/get-packages': 1.1.3 2001 | 2002 | '@changesets/types@4.1.0': {} 2003 | 2004 | '@changesets/types@6.1.0': {} 2005 | 2006 | '@changesets/write@0.4.0': 2007 | dependencies: 2008 | '@changesets/types': 6.1.0 2009 | fs-extra: 7.0.1 2010 | human-id: 4.1.1 2011 | prettier: 2.8.8 2012 | 2013 | '@esbuild/aix-ppc64@0.25.5': 2014 | optional: true 2015 | 2016 | '@esbuild/android-arm64@0.25.5': 2017 | optional: true 2018 | 2019 | '@esbuild/android-arm@0.25.5': 2020 | optional: true 2021 | 2022 | '@esbuild/android-x64@0.25.5': 2023 | optional: true 2024 | 2025 | '@esbuild/darwin-arm64@0.25.5': 2026 | optional: true 2027 | 2028 | '@esbuild/darwin-x64@0.25.5': 2029 | optional: true 2030 | 2031 | '@esbuild/freebsd-arm64@0.25.5': 2032 | optional: true 2033 | 2034 | '@esbuild/freebsd-x64@0.25.5': 2035 | optional: true 2036 | 2037 | '@esbuild/linux-arm64@0.25.5': 2038 | optional: true 2039 | 2040 | '@esbuild/linux-arm@0.25.5': 2041 | optional: true 2042 | 2043 | '@esbuild/linux-ia32@0.25.5': 2044 | optional: true 2045 | 2046 | '@esbuild/linux-loong64@0.25.5': 2047 | optional: true 2048 | 2049 | '@esbuild/linux-mips64el@0.25.5': 2050 | optional: true 2051 | 2052 | '@esbuild/linux-ppc64@0.25.5': 2053 | optional: true 2054 | 2055 | '@esbuild/linux-riscv64@0.25.5': 2056 | optional: true 2057 | 2058 | '@esbuild/linux-s390x@0.25.5': 2059 | optional: true 2060 | 2061 | '@esbuild/linux-x64@0.25.5': 2062 | optional: true 2063 | 2064 | '@esbuild/netbsd-arm64@0.25.5': 2065 | optional: true 2066 | 2067 | '@esbuild/netbsd-x64@0.25.5': 2068 | optional: true 2069 | 2070 | '@esbuild/openbsd-arm64@0.25.5': 2071 | optional: true 2072 | 2073 | '@esbuild/openbsd-x64@0.25.5': 2074 | optional: true 2075 | 2076 | '@esbuild/sunos-x64@0.25.5': 2077 | optional: true 2078 | 2079 | '@esbuild/win32-arm64@0.25.5': 2080 | optional: true 2081 | 2082 | '@esbuild/win32-ia32@0.25.5': 2083 | optional: true 2084 | 2085 | '@esbuild/win32-x64@0.25.5': 2086 | optional: true 2087 | 2088 | '@jridgewell/gen-mapping@0.3.8': 2089 | dependencies: 2090 | '@jridgewell/set-array': 1.2.1 2091 | '@jridgewell/sourcemap-codec': 1.5.0 2092 | '@jridgewell/trace-mapping': 0.3.25 2093 | 2094 | '@jridgewell/resolve-uri@3.1.2': {} 2095 | 2096 | '@jridgewell/set-array@1.2.1': {} 2097 | 2098 | '@jridgewell/sourcemap-codec@1.5.0': {} 2099 | 2100 | '@jridgewell/trace-mapping@0.3.25': 2101 | dependencies: 2102 | '@jridgewell/resolve-uri': 3.1.2 2103 | '@jridgewell/sourcemap-codec': 1.5.0 2104 | 2105 | '@manypkg/find-root@1.1.0': 2106 | dependencies: 2107 | '@babel/runtime': 7.27.0 2108 | '@types/node': 12.20.55 2109 | find-up: 4.1.0 2110 | fs-extra: 8.1.0 2111 | 2112 | '@manypkg/get-packages@1.1.3': 2113 | dependencies: 2114 | '@babel/runtime': 7.27.0 2115 | '@changesets/types': 4.1.0 2116 | '@manypkg/find-root': 1.1.0 2117 | fs-extra: 8.1.0 2118 | globby: 11.1.0 2119 | read-yaml-file: 1.1.0 2120 | 2121 | '@nodelib/fs.scandir@2.1.5': 2122 | dependencies: 2123 | '@nodelib/fs.stat': 2.0.5 2124 | run-parallel: 1.2.0 2125 | 2126 | '@nodelib/fs.stat@2.0.5': {} 2127 | 2128 | '@nodelib/fs.walk@1.2.8': 2129 | dependencies: 2130 | '@nodelib/fs.scandir': 2.1.5 2131 | fastq: 1.19.1 2132 | 2133 | '@oxc-project/runtime@0.72.1': {} 2134 | 2135 | '@oxc-project/types@0.72.1': {} 2136 | 2137 | '@quansync/fs@0.1.3': 2138 | dependencies: 2139 | quansync: 0.2.10 2140 | 2141 | '@rolldown/binding-darwin-arm64@1.0.0-beta.10-commit.87188ed': 2142 | optional: true 2143 | 2144 | '@rolldown/binding-darwin-x64@1.0.0-beta.10-commit.87188ed': 2145 | optional: true 2146 | 2147 | '@rolldown/binding-freebsd-x64@1.0.0-beta.10-commit.87188ed': 2148 | optional: true 2149 | 2150 | '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.10-commit.87188ed': 2151 | optional: true 2152 | 2153 | '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.10-commit.87188ed': 2154 | optional: true 2155 | 2156 | '@rolldown/binding-linux-arm64-musl@1.0.0-beta.10-commit.87188ed': 2157 | optional: true 2158 | 2159 | '@rolldown/binding-linux-x64-gnu@1.0.0-beta.10-commit.87188ed': 2160 | optional: true 2161 | 2162 | '@rolldown/binding-linux-x64-musl@1.0.0-beta.10-commit.87188ed': 2163 | optional: true 2164 | 2165 | '@rolldown/binding-wasm32-wasi@1.0.0-beta.10-commit.87188ed': 2166 | optional: true 2167 | 2168 | '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.10-commit.87188ed': 2169 | optional: true 2170 | 2171 | '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.10-commit.87188ed': 2172 | optional: true 2173 | 2174 | '@rolldown/binding-win32-x64-msvc@1.0.0-beta.10-commit.87188ed': 2175 | optional: true 2176 | 2177 | '@rolldown/pluginutils@1.0.0-beta.10-commit.87188ed': {} 2178 | 2179 | '@rollup/rollup-android-arm-eabi@4.41.1': 2180 | optional: true 2181 | 2182 | '@rollup/rollup-android-arm64@4.41.1': 2183 | optional: true 2184 | 2185 | '@rollup/rollup-darwin-arm64@4.41.1': 2186 | optional: true 2187 | 2188 | '@rollup/rollup-darwin-x64@4.41.1': 2189 | optional: true 2190 | 2191 | '@rollup/rollup-freebsd-arm64@4.41.1': 2192 | optional: true 2193 | 2194 | '@rollup/rollup-freebsd-x64@4.41.1': 2195 | optional: true 2196 | 2197 | '@rollup/rollup-linux-arm-gnueabihf@4.41.1': 2198 | optional: true 2199 | 2200 | '@rollup/rollup-linux-arm-musleabihf@4.41.1': 2201 | optional: true 2202 | 2203 | '@rollup/rollup-linux-arm64-gnu@4.41.1': 2204 | optional: true 2205 | 2206 | '@rollup/rollup-linux-arm64-musl@4.41.1': 2207 | optional: true 2208 | 2209 | '@rollup/rollup-linux-loongarch64-gnu@4.41.1': 2210 | optional: true 2211 | 2212 | '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': 2213 | optional: true 2214 | 2215 | '@rollup/rollup-linux-riscv64-gnu@4.41.1': 2216 | optional: true 2217 | 2218 | '@rollup/rollup-linux-riscv64-musl@4.41.1': 2219 | optional: true 2220 | 2221 | '@rollup/rollup-linux-s390x-gnu@4.41.1': 2222 | optional: true 2223 | 2224 | '@rollup/rollup-linux-x64-gnu@4.41.1': 2225 | optional: true 2226 | 2227 | '@rollup/rollup-linux-x64-musl@4.41.1': 2228 | optional: true 2229 | 2230 | '@rollup/rollup-win32-arm64-msvc@4.41.1': 2231 | optional: true 2232 | 2233 | '@rollup/rollup-win32-ia32-msvc@4.41.1': 2234 | optional: true 2235 | 2236 | '@rollup/rollup-win32-x64-msvc@4.41.1': 2237 | optional: true 2238 | 2239 | '@types/chai@5.2.2': 2240 | dependencies: 2241 | '@types/deep-eql': 4.0.2 2242 | 2243 | '@types/deep-eql@4.0.2': {} 2244 | 2245 | '@types/estree@1.0.7': {} 2246 | 2247 | '@types/node@12.20.55': {} 2248 | 2249 | '@vitest/expect@3.2.0': 2250 | dependencies: 2251 | '@types/chai': 5.2.2 2252 | '@vitest/spy': 3.2.0 2253 | '@vitest/utils': 3.2.0 2254 | chai: 5.2.0 2255 | tinyrainbow: 2.0.0 2256 | 2257 | '@vitest/mocker@3.2.0(vite@6.3.5(jiti@2.4.2)(yaml@2.8.0))': 2258 | dependencies: 2259 | '@vitest/spy': 3.2.0 2260 | estree-walker: 3.0.3 2261 | magic-string: 0.30.17 2262 | optionalDependencies: 2263 | vite: 6.3.5(jiti@2.4.2)(yaml@2.8.0) 2264 | 2265 | '@vitest/pretty-format@3.2.0': 2266 | dependencies: 2267 | tinyrainbow: 2.0.0 2268 | 2269 | '@vitest/runner@3.2.0': 2270 | dependencies: 2271 | '@vitest/utils': 3.2.0 2272 | pathe: 2.0.3 2273 | 2274 | '@vitest/snapshot@3.2.0': 2275 | dependencies: 2276 | '@vitest/pretty-format': 3.2.0 2277 | magic-string: 0.30.17 2278 | pathe: 2.0.3 2279 | 2280 | '@vitest/spy@3.2.0': 2281 | dependencies: 2282 | tinyspy: 4.0.3 2283 | 2284 | '@vitest/utils@3.2.0': 2285 | dependencies: 2286 | '@vitest/pretty-format': 3.2.0 2287 | loupe: 3.1.3 2288 | tinyrainbow: 2.0.0 2289 | 2290 | ansi-colors@4.1.3: {} 2291 | 2292 | ansi-escapes@7.0.0: 2293 | dependencies: 2294 | environment: 1.1.0 2295 | 2296 | ansi-regex@5.0.1: {} 2297 | 2298 | ansi-regex@6.1.0: {} 2299 | 2300 | ansi-styles@3.2.1: 2301 | dependencies: 2302 | color-convert: 1.9.3 2303 | 2304 | ansi-styles@6.2.1: {} 2305 | 2306 | ansis@4.1.0: {} 2307 | 2308 | argparse@1.0.10: 2309 | dependencies: 2310 | sprintf-js: 1.0.3 2311 | 2312 | array-buffer-byte-length@1.0.2: 2313 | dependencies: 2314 | call-bound: 1.0.4 2315 | is-array-buffer: 3.0.5 2316 | 2317 | array-union@2.1.0: {} 2318 | 2319 | arraybuffer.prototype.slice@1.0.4: 2320 | dependencies: 2321 | array-buffer-byte-length: 1.0.2 2322 | call-bind: 1.0.8 2323 | define-properties: 1.2.1 2324 | es-abstract: 1.23.9 2325 | es-errors: 1.3.0 2326 | get-intrinsic: 1.3.0 2327 | is-array-buffer: 3.0.5 2328 | 2329 | assertion-error@2.0.1: {} 2330 | 2331 | ast-kit@2.1.0: 2332 | dependencies: 2333 | '@babel/parser': 7.27.4 2334 | pathe: 2.0.3 2335 | 2336 | async-function@1.0.0: {} 2337 | 2338 | available-typed-arrays@1.0.7: 2339 | dependencies: 2340 | possible-typed-array-names: 1.1.0 2341 | 2342 | balanced-match@1.0.2: {} 2343 | 2344 | better-path-resolve@1.0.0: 2345 | dependencies: 2346 | is-windows: 1.0.2 2347 | 2348 | birpc@2.3.0: {} 2349 | 2350 | brace-expansion@1.1.11: 2351 | dependencies: 2352 | balanced-match: 1.0.2 2353 | concat-map: 0.0.1 2354 | 2355 | braces@3.0.3: 2356 | dependencies: 2357 | fill-range: 7.1.1 2358 | 2359 | cac@6.7.14: {} 2360 | 2361 | call-bind-apply-helpers@1.0.2: 2362 | dependencies: 2363 | es-errors: 1.3.0 2364 | function-bind: 1.1.2 2365 | 2366 | call-bind@1.0.8: 2367 | dependencies: 2368 | call-bind-apply-helpers: 1.0.2 2369 | es-define-property: 1.0.1 2370 | get-intrinsic: 1.3.0 2371 | set-function-length: 1.2.2 2372 | 2373 | call-bound@1.0.4: 2374 | dependencies: 2375 | call-bind-apply-helpers: 1.0.2 2376 | get-intrinsic: 1.3.0 2377 | 2378 | chai@5.2.0: 2379 | dependencies: 2380 | assertion-error: 2.0.1 2381 | check-error: 2.1.1 2382 | deep-eql: 5.0.2 2383 | loupe: 3.1.3 2384 | pathval: 2.0.0 2385 | 2386 | chalk@2.4.2: 2387 | dependencies: 2388 | ansi-styles: 3.2.1 2389 | escape-string-regexp: 1.0.5 2390 | supports-color: 5.5.0 2391 | 2392 | chalk@5.4.1: {} 2393 | 2394 | chardet@0.7.0: {} 2395 | 2396 | check-error@2.1.1: {} 2397 | 2398 | chokidar@4.0.3: 2399 | dependencies: 2400 | readdirp: 4.1.2 2401 | 2402 | ci-info@3.9.0: {} 2403 | 2404 | cli-cursor@5.0.0: 2405 | dependencies: 2406 | restore-cursor: 5.1.0 2407 | 2408 | cli-truncate@4.0.0: 2409 | dependencies: 2410 | slice-ansi: 5.0.0 2411 | string-width: 7.2.0 2412 | 2413 | color-convert@1.9.3: 2414 | dependencies: 2415 | color-name: 1.1.3 2416 | 2417 | color-name@1.1.3: {} 2418 | 2419 | colorette@2.0.20: {} 2420 | 2421 | commander@14.0.0: {} 2422 | 2423 | concat-map@0.0.1: {} 2424 | 2425 | cross-spawn@6.0.6: 2426 | dependencies: 2427 | nice-try: 1.0.5 2428 | path-key: 2.0.1 2429 | semver: 5.7.2 2430 | shebang-command: 1.2.0 2431 | which: 1.3.1 2432 | 2433 | cross-spawn@7.0.6: 2434 | dependencies: 2435 | path-key: 3.1.1 2436 | shebang-command: 2.0.0 2437 | which: 2.0.2 2438 | 2439 | data-view-buffer@1.0.2: 2440 | dependencies: 2441 | call-bound: 1.0.4 2442 | es-errors: 1.3.0 2443 | is-data-view: 1.0.2 2444 | 2445 | data-view-byte-length@1.0.2: 2446 | dependencies: 2447 | call-bound: 1.0.4 2448 | es-errors: 1.3.0 2449 | is-data-view: 1.0.2 2450 | 2451 | data-view-byte-offset@1.0.1: 2452 | dependencies: 2453 | call-bound: 1.0.4 2454 | es-errors: 1.3.0 2455 | is-data-view: 1.0.2 2456 | 2457 | debug@4.4.1: 2458 | dependencies: 2459 | ms: 2.1.3 2460 | 2461 | deep-eql@5.0.2: {} 2462 | 2463 | define-data-property@1.1.4: 2464 | dependencies: 2465 | es-define-property: 1.0.1 2466 | es-errors: 1.3.0 2467 | gopd: 1.2.0 2468 | 2469 | define-properties@1.2.1: 2470 | dependencies: 2471 | define-data-property: 1.1.4 2472 | has-property-descriptors: 1.0.2 2473 | object-keys: 1.1.1 2474 | 2475 | defu@6.1.4: {} 2476 | 2477 | detect-indent@6.1.0: {} 2478 | 2479 | diff@8.0.2: {} 2480 | 2481 | dir-glob@3.0.1: 2482 | dependencies: 2483 | path-type: 4.0.0 2484 | 2485 | dts-resolver@2.1.0: {} 2486 | 2487 | dunder-proto@1.0.1: 2488 | dependencies: 2489 | call-bind-apply-helpers: 1.0.2 2490 | es-errors: 1.3.0 2491 | gopd: 1.2.0 2492 | 2493 | emoji-regex@10.4.0: {} 2494 | 2495 | empathic@1.1.0: {} 2496 | 2497 | enquirer@2.4.1: 2498 | dependencies: 2499 | ansi-colors: 4.1.3 2500 | strip-ansi: 6.0.1 2501 | 2502 | environment@1.1.0: {} 2503 | 2504 | error-ex@1.3.2: 2505 | dependencies: 2506 | is-arrayish: 0.2.1 2507 | 2508 | es-abstract@1.23.9: 2509 | dependencies: 2510 | array-buffer-byte-length: 1.0.2 2511 | arraybuffer.prototype.slice: 1.0.4 2512 | available-typed-arrays: 1.0.7 2513 | call-bind: 1.0.8 2514 | call-bound: 1.0.4 2515 | data-view-buffer: 1.0.2 2516 | data-view-byte-length: 1.0.2 2517 | data-view-byte-offset: 1.0.1 2518 | es-define-property: 1.0.1 2519 | es-errors: 1.3.0 2520 | es-object-atoms: 1.1.1 2521 | es-set-tostringtag: 2.1.0 2522 | es-to-primitive: 1.3.0 2523 | function.prototype.name: 1.1.8 2524 | get-intrinsic: 1.3.0 2525 | get-proto: 1.0.1 2526 | get-symbol-description: 1.1.0 2527 | globalthis: 1.0.4 2528 | gopd: 1.2.0 2529 | has-property-descriptors: 1.0.2 2530 | has-proto: 1.2.0 2531 | has-symbols: 1.1.0 2532 | hasown: 2.0.2 2533 | internal-slot: 1.1.0 2534 | is-array-buffer: 3.0.5 2535 | is-callable: 1.2.7 2536 | is-data-view: 1.0.2 2537 | is-regex: 1.2.1 2538 | is-shared-array-buffer: 1.0.4 2539 | is-string: 1.1.1 2540 | is-typed-array: 1.1.15 2541 | is-weakref: 1.1.1 2542 | math-intrinsics: 1.1.0 2543 | object-inspect: 1.13.4 2544 | object-keys: 1.1.1 2545 | object.assign: 4.1.7 2546 | own-keys: 1.0.1 2547 | regexp.prototype.flags: 1.5.4 2548 | safe-array-concat: 1.1.3 2549 | safe-push-apply: 1.0.0 2550 | safe-regex-test: 1.1.0 2551 | set-proto: 1.0.0 2552 | string.prototype.trim: 1.2.10 2553 | string.prototype.trimend: 1.0.9 2554 | string.prototype.trimstart: 1.0.8 2555 | typed-array-buffer: 1.0.3 2556 | typed-array-byte-length: 1.0.3 2557 | typed-array-byte-offset: 1.0.4 2558 | typed-array-length: 1.0.7 2559 | unbox-primitive: 1.1.0 2560 | which-typed-array: 1.1.19 2561 | 2562 | es-define-property@1.0.1: {} 2563 | 2564 | es-errors@1.3.0: {} 2565 | 2566 | es-module-lexer@1.7.0: {} 2567 | 2568 | es-object-atoms@1.1.1: 2569 | dependencies: 2570 | es-errors: 1.3.0 2571 | 2572 | es-set-tostringtag@2.1.0: 2573 | dependencies: 2574 | es-errors: 1.3.0 2575 | get-intrinsic: 1.3.0 2576 | has-tostringtag: 1.0.2 2577 | hasown: 2.0.2 2578 | 2579 | es-to-primitive@1.3.0: 2580 | dependencies: 2581 | is-callable: 1.2.7 2582 | is-date-object: 1.1.0 2583 | is-symbol: 1.1.1 2584 | 2585 | esbuild@0.25.5: 2586 | optionalDependencies: 2587 | '@esbuild/aix-ppc64': 0.25.5 2588 | '@esbuild/android-arm': 0.25.5 2589 | '@esbuild/android-arm64': 0.25.5 2590 | '@esbuild/android-x64': 0.25.5 2591 | '@esbuild/darwin-arm64': 0.25.5 2592 | '@esbuild/darwin-x64': 0.25.5 2593 | '@esbuild/freebsd-arm64': 0.25.5 2594 | '@esbuild/freebsd-x64': 0.25.5 2595 | '@esbuild/linux-arm': 0.25.5 2596 | '@esbuild/linux-arm64': 0.25.5 2597 | '@esbuild/linux-ia32': 0.25.5 2598 | '@esbuild/linux-loong64': 0.25.5 2599 | '@esbuild/linux-mips64el': 0.25.5 2600 | '@esbuild/linux-ppc64': 0.25.5 2601 | '@esbuild/linux-riscv64': 0.25.5 2602 | '@esbuild/linux-s390x': 0.25.5 2603 | '@esbuild/linux-x64': 0.25.5 2604 | '@esbuild/netbsd-arm64': 0.25.5 2605 | '@esbuild/netbsd-x64': 0.25.5 2606 | '@esbuild/openbsd-arm64': 0.25.5 2607 | '@esbuild/openbsd-x64': 0.25.5 2608 | '@esbuild/sunos-x64': 0.25.5 2609 | '@esbuild/win32-arm64': 0.25.5 2610 | '@esbuild/win32-ia32': 0.25.5 2611 | '@esbuild/win32-x64': 0.25.5 2612 | 2613 | escape-string-regexp@1.0.5: {} 2614 | 2615 | esprima@4.0.1: {} 2616 | 2617 | estree-walker@3.0.3: 2618 | dependencies: 2619 | '@types/estree': 1.0.7 2620 | 2621 | eventemitter3@5.0.1: {} 2622 | 2623 | expect-type@1.2.1: {} 2624 | 2625 | extendable-error@0.1.7: {} 2626 | 2627 | external-editor@3.1.0: 2628 | dependencies: 2629 | chardet: 0.7.0 2630 | iconv-lite: 0.4.24 2631 | tmp: 0.0.33 2632 | 2633 | fast-glob@3.3.3: 2634 | dependencies: 2635 | '@nodelib/fs.stat': 2.0.5 2636 | '@nodelib/fs.walk': 1.2.8 2637 | glob-parent: 5.1.2 2638 | merge2: 1.4.1 2639 | micromatch: 4.0.8 2640 | 2641 | fastq@1.19.1: 2642 | dependencies: 2643 | reusify: 1.1.0 2644 | 2645 | fdir@6.4.5(picomatch@4.0.2): 2646 | optionalDependencies: 2647 | picomatch: 4.0.2 2648 | 2649 | fill-range@7.1.1: 2650 | dependencies: 2651 | to-regex-range: 5.0.1 2652 | 2653 | find-up@4.1.0: 2654 | dependencies: 2655 | locate-path: 5.0.0 2656 | path-exists: 4.0.0 2657 | 2658 | for-each@0.3.5: 2659 | dependencies: 2660 | is-callable: 1.2.7 2661 | 2662 | fs-extra@7.0.1: 2663 | dependencies: 2664 | graceful-fs: 4.2.11 2665 | jsonfile: 4.0.0 2666 | universalify: 0.1.2 2667 | 2668 | fs-extra@8.1.0: 2669 | dependencies: 2670 | graceful-fs: 4.2.11 2671 | jsonfile: 4.0.0 2672 | universalify: 0.1.2 2673 | 2674 | fsevents@2.3.3: 2675 | optional: true 2676 | 2677 | function-bind@1.1.2: {} 2678 | 2679 | function.prototype.name@1.1.8: 2680 | dependencies: 2681 | call-bind: 1.0.8 2682 | call-bound: 1.0.4 2683 | define-properties: 1.2.1 2684 | functions-have-names: 1.2.3 2685 | hasown: 2.0.2 2686 | is-callable: 1.2.7 2687 | 2688 | functions-have-names@1.2.3: {} 2689 | 2690 | get-east-asian-width@1.3.0: {} 2691 | 2692 | get-intrinsic@1.3.0: 2693 | dependencies: 2694 | call-bind-apply-helpers: 1.0.2 2695 | es-define-property: 1.0.1 2696 | es-errors: 1.3.0 2697 | es-object-atoms: 1.1.1 2698 | function-bind: 1.1.2 2699 | get-proto: 1.0.1 2700 | gopd: 1.2.0 2701 | has-symbols: 1.1.0 2702 | hasown: 2.0.2 2703 | math-intrinsics: 1.1.0 2704 | 2705 | get-proto@1.0.1: 2706 | dependencies: 2707 | dunder-proto: 1.0.1 2708 | es-object-atoms: 1.1.1 2709 | 2710 | get-symbol-description@1.1.0: 2711 | dependencies: 2712 | call-bound: 1.0.4 2713 | es-errors: 1.3.0 2714 | get-intrinsic: 1.3.0 2715 | 2716 | get-tsconfig@4.10.1: 2717 | dependencies: 2718 | resolve-pkg-maps: 1.0.0 2719 | 2720 | glob-parent@5.1.2: 2721 | dependencies: 2722 | is-glob: 4.0.3 2723 | 2724 | globalthis@1.0.4: 2725 | dependencies: 2726 | define-properties: 1.2.1 2727 | gopd: 1.2.0 2728 | 2729 | globby@11.1.0: 2730 | dependencies: 2731 | array-union: 2.1.0 2732 | dir-glob: 3.0.1 2733 | fast-glob: 3.3.3 2734 | ignore: 5.3.2 2735 | merge2: 1.4.1 2736 | slash: 3.0.0 2737 | 2738 | gopd@1.2.0: {} 2739 | 2740 | graceful-fs@4.2.11: {} 2741 | 2742 | has-bigints@1.1.0: {} 2743 | 2744 | has-flag@3.0.0: {} 2745 | 2746 | has-property-descriptors@1.0.2: 2747 | dependencies: 2748 | es-define-property: 1.0.1 2749 | 2750 | has-proto@1.2.0: 2751 | dependencies: 2752 | dunder-proto: 1.0.1 2753 | 2754 | has-symbols@1.1.0: {} 2755 | 2756 | has-tostringtag@1.0.2: 2757 | dependencies: 2758 | has-symbols: 1.1.0 2759 | 2760 | hasown@2.0.2: 2761 | dependencies: 2762 | function-bind: 1.1.2 2763 | 2764 | hookable@5.5.3: {} 2765 | 2766 | hosted-git-info@2.8.9: {} 2767 | 2768 | human-id@4.1.1: {} 2769 | 2770 | husky@9.1.7: {} 2771 | 2772 | iconv-lite@0.4.24: 2773 | dependencies: 2774 | safer-buffer: 2.1.2 2775 | 2776 | ignore@5.3.2: {} 2777 | 2778 | internal-slot@1.1.0: 2779 | dependencies: 2780 | es-errors: 1.3.0 2781 | hasown: 2.0.2 2782 | side-channel: 1.1.0 2783 | 2784 | is-array-buffer@3.0.5: 2785 | dependencies: 2786 | call-bind: 1.0.8 2787 | call-bound: 1.0.4 2788 | get-intrinsic: 1.3.0 2789 | 2790 | is-arrayish@0.2.1: {} 2791 | 2792 | is-async-function@2.1.1: 2793 | dependencies: 2794 | async-function: 1.0.0 2795 | call-bound: 1.0.4 2796 | get-proto: 1.0.1 2797 | has-tostringtag: 1.0.2 2798 | safe-regex-test: 1.1.0 2799 | 2800 | is-bigint@1.1.0: 2801 | dependencies: 2802 | has-bigints: 1.1.0 2803 | 2804 | is-boolean-object@1.2.2: 2805 | dependencies: 2806 | call-bound: 1.0.4 2807 | has-tostringtag: 1.0.2 2808 | 2809 | is-callable@1.2.7: {} 2810 | 2811 | is-core-module@2.16.1: 2812 | dependencies: 2813 | hasown: 2.0.2 2814 | 2815 | is-data-view@1.0.2: 2816 | dependencies: 2817 | call-bound: 1.0.4 2818 | get-intrinsic: 1.3.0 2819 | is-typed-array: 1.1.15 2820 | 2821 | is-date-object@1.1.0: 2822 | dependencies: 2823 | call-bound: 1.0.4 2824 | has-tostringtag: 1.0.2 2825 | 2826 | is-extglob@2.1.1: {} 2827 | 2828 | is-finalizationregistry@1.1.1: 2829 | dependencies: 2830 | call-bound: 1.0.4 2831 | 2832 | is-fullwidth-code-point@4.0.0: {} 2833 | 2834 | is-fullwidth-code-point@5.0.0: 2835 | dependencies: 2836 | get-east-asian-width: 1.3.0 2837 | 2838 | is-generator-function@1.1.0: 2839 | dependencies: 2840 | call-bound: 1.0.4 2841 | get-proto: 1.0.1 2842 | has-tostringtag: 1.0.2 2843 | safe-regex-test: 1.1.0 2844 | 2845 | is-glob@4.0.3: 2846 | dependencies: 2847 | is-extglob: 2.1.1 2848 | 2849 | is-map@2.0.3: {} 2850 | 2851 | is-number-object@1.1.1: 2852 | dependencies: 2853 | call-bound: 1.0.4 2854 | has-tostringtag: 1.0.2 2855 | 2856 | is-number@7.0.0: {} 2857 | 2858 | is-regex@1.2.1: 2859 | dependencies: 2860 | call-bound: 1.0.4 2861 | gopd: 1.2.0 2862 | has-tostringtag: 1.0.2 2863 | hasown: 2.0.2 2864 | 2865 | is-set@2.0.3: {} 2866 | 2867 | is-shared-array-buffer@1.0.4: 2868 | dependencies: 2869 | call-bound: 1.0.4 2870 | 2871 | is-string@1.1.1: 2872 | dependencies: 2873 | call-bound: 1.0.4 2874 | has-tostringtag: 1.0.2 2875 | 2876 | is-subdir@1.2.0: 2877 | dependencies: 2878 | better-path-resolve: 1.0.0 2879 | 2880 | is-symbol@1.1.1: 2881 | dependencies: 2882 | call-bound: 1.0.4 2883 | has-symbols: 1.1.0 2884 | safe-regex-test: 1.1.0 2885 | 2886 | is-typed-array@1.1.15: 2887 | dependencies: 2888 | which-typed-array: 1.1.19 2889 | 2890 | is-weakmap@2.0.2: {} 2891 | 2892 | is-weakref@1.1.1: 2893 | dependencies: 2894 | call-bound: 1.0.4 2895 | 2896 | is-weakset@2.0.4: 2897 | dependencies: 2898 | call-bound: 1.0.4 2899 | get-intrinsic: 1.3.0 2900 | 2901 | is-windows@1.0.2: {} 2902 | 2903 | isarray@2.0.5: {} 2904 | 2905 | isexe@2.0.0: {} 2906 | 2907 | jiti@2.4.2: {} 2908 | 2909 | js-yaml@3.14.1: 2910 | dependencies: 2911 | argparse: 1.0.10 2912 | esprima: 4.0.1 2913 | 2914 | jsesc@3.1.0: {} 2915 | 2916 | json-parse-better-errors@1.0.2: {} 2917 | 2918 | jsonfile@4.0.0: 2919 | optionalDependencies: 2920 | graceful-fs: 4.2.11 2921 | 2922 | lilconfig@3.1.3: {} 2923 | 2924 | lint-staged@16.1.0: 2925 | dependencies: 2926 | chalk: 5.4.1 2927 | commander: 14.0.0 2928 | debug: 4.4.1 2929 | lilconfig: 3.1.3 2930 | listr2: 8.3.3 2931 | micromatch: 4.0.8 2932 | nano-spawn: 1.0.2 2933 | pidtree: 0.6.0 2934 | string-argv: 0.3.2 2935 | yaml: 2.8.0 2936 | transitivePeerDependencies: 2937 | - supports-color 2938 | 2939 | listr2@8.3.3: 2940 | dependencies: 2941 | cli-truncate: 4.0.0 2942 | colorette: 2.0.20 2943 | eventemitter3: 5.0.1 2944 | log-update: 6.1.0 2945 | rfdc: 1.4.1 2946 | wrap-ansi: 9.0.0 2947 | 2948 | load-json-file@4.0.0: 2949 | dependencies: 2950 | graceful-fs: 4.2.11 2951 | parse-json: 4.0.0 2952 | pify: 3.0.0 2953 | strip-bom: 3.0.0 2954 | 2955 | locate-path@5.0.0: 2956 | dependencies: 2957 | p-locate: 4.1.0 2958 | 2959 | lodash.startcase@4.4.0: {} 2960 | 2961 | log-update@6.1.0: 2962 | dependencies: 2963 | ansi-escapes: 7.0.0 2964 | cli-cursor: 5.0.0 2965 | slice-ansi: 7.1.0 2966 | strip-ansi: 7.1.0 2967 | wrap-ansi: 9.0.0 2968 | 2969 | loupe@3.1.3: {} 2970 | 2971 | magic-string@0.30.17: 2972 | dependencies: 2973 | '@jridgewell/sourcemap-codec': 1.5.0 2974 | 2975 | math-intrinsics@1.1.0: {} 2976 | 2977 | memorystream@0.3.1: {} 2978 | 2979 | merge2@1.4.1: {} 2980 | 2981 | micromatch@4.0.8: 2982 | dependencies: 2983 | braces: 3.0.3 2984 | picomatch: 2.3.1 2985 | 2986 | mimic-function@5.0.1: {} 2987 | 2988 | minimatch@3.1.2: 2989 | dependencies: 2990 | brace-expansion: 1.1.11 2991 | 2992 | mri@1.2.0: {} 2993 | 2994 | ms@2.1.3: {} 2995 | 2996 | nano-spawn@1.0.2: {} 2997 | 2998 | nanoid@3.3.11: {} 2999 | 3000 | nice-try@1.0.5: {} 3001 | 3002 | normalize-package-data@2.5.0: 3003 | dependencies: 3004 | hosted-git-info: 2.8.9 3005 | resolve: 1.22.10 3006 | semver: 5.7.2 3007 | validate-npm-package-license: 3.0.4 3008 | 3009 | npm-run-all@4.1.5: 3010 | dependencies: 3011 | ansi-styles: 3.2.1 3012 | chalk: 2.4.2 3013 | cross-spawn: 6.0.6 3014 | memorystream: 0.3.1 3015 | minimatch: 3.1.2 3016 | pidtree: 0.3.1 3017 | read-pkg: 3.0.0 3018 | shell-quote: 1.8.2 3019 | string.prototype.padend: 3.1.6 3020 | 3021 | object-inspect@1.13.4: {} 3022 | 3023 | object-keys@1.1.1: {} 3024 | 3025 | object.assign@4.1.7: 3026 | dependencies: 3027 | call-bind: 1.0.8 3028 | call-bound: 1.0.4 3029 | define-properties: 1.2.1 3030 | es-object-atoms: 1.1.1 3031 | has-symbols: 1.1.0 3032 | object-keys: 1.1.1 3033 | 3034 | onetime@7.0.0: 3035 | dependencies: 3036 | mimic-function: 5.0.1 3037 | 3038 | os-tmpdir@1.0.2: {} 3039 | 3040 | outdent@0.5.0: {} 3041 | 3042 | own-keys@1.0.1: 3043 | dependencies: 3044 | get-intrinsic: 1.3.0 3045 | object-keys: 1.1.1 3046 | safe-push-apply: 1.0.0 3047 | 3048 | p-filter@2.1.0: 3049 | dependencies: 3050 | p-map: 2.1.0 3051 | 3052 | p-limit@2.3.0: 3053 | dependencies: 3054 | p-try: 2.2.0 3055 | 3056 | p-locate@4.1.0: 3057 | dependencies: 3058 | p-limit: 2.3.0 3059 | 3060 | p-map@2.1.0: {} 3061 | 3062 | p-try@2.2.0: {} 3063 | 3064 | package-manager-detector@0.2.11: 3065 | dependencies: 3066 | quansync: 0.2.10 3067 | 3068 | parse-json@4.0.0: 3069 | dependencies: 3070 | error-ex: 1.3.2 3071 | json-parse-better-errors: 1.0.2 3072 | 3073 | path-exists@4.0.0: {} 3074 | 3075 | path-key@2.0.1: {} 3076 | 3077 | path-key@3.1.1: {} 3078 | 3079 | path-parse@1.0.7: {} 3080 | 3081 | path-type@3.0.0: 3082 | dependencies: 3083 | pify: 3.0.0 3084 | 3085 | path-type@4.0.0: {} 3086 | 3087 | pathe@2.0.3: {} 3088 | 3089 | pathval@2.0.0: {} 3090 | 3091 | picocolors@1.1.1: {} 3092 | 3093 | picomatch@2.3.1: {} 3094 | 3095 | picomatch@4.0.2: {} 3096 | 3097 | pidtree@0.3.1: {} 3098 | 3099 | pidtree@0.6.0: {} 3100 | 3101 | pify@3.0.0: {} 3102 | 3103 | pify@4.0.1: {} 3104 | 3105 | pocketbase@0.26.0: {} 3106 | 3107 | possible-typed-array-names@1.1.0: {} 3108 | 3109 | postcss@8.5.4: 3110 | dependencies: 3111 | nanoid: 3.3.11 3112 | picocolors: 1.1.1 3113 | source-map-js: 1.2.1 3114 | 3115 | prettier@2.8.8: {} 3116 | 3117 | quansync@0.2.10: {} 3118 | 3119 | queue-microtask@1.2.3: {} 3120 | 3121 | read-pkg@3.0.0: 3122 | dependencies: 3123 | load-json-file: 4.0.0 3124 | normalize-package-data: 2.5.0 3125 | path-type: 3.0.0 3126 | 3127 | read-yaml-file@1.1.0: 3128 | dependencies: 3129 | graceful-fs: 4.2.11 3130 | js-yaml: 3.14.1 3131 | pify: 4.0.1 3132 | strip-bom: 3.0.0 3133 | 3134 | readdirp@4.1.2: {} 3135 | 3136 | reflect.getprototypeof@1.0.10: 3137 | dependencies: 3138 | call-bind: 1.0.8 3139 | define-properties: 1.2.1 3140 | es-abstract: 1.23.9 3141 | es-errors: 1.3.0 3142 | es-object-atoms: 1.1.1 3143 | get-intrinsic: 1.3.0 3144 | get-proto: 1.0.1 3145 | which-builtin-type: 1.2.1 3146 | 3147 | regenerator-runtime@0.14.1: {} 3148 | 3149 | regexp.prototype.flags@1.5.4: 3150 | dependencies: 3151 | call-bind: 1.0.8 3152 | define-properties: 1.2.1 3153 | es-errors: 1.3.0 3154 | get-proto: 1.0.1 3155 | gopd: 1.2.0 3156 | set-function-name: 2.0.2 3157 | 3158 | resolve-from@5.0.0: {} 3159 | 3160 | resolve-pkg-maps@1.0.0: {} 3161 | 3162 | resolve@1.22.10: 3163 | dependencies: 3164 | is-core-module: 2.16.1 3165 | path-parse: 1.0.7 3166 | supports-preserve-symlinks-flag: 1.0.0 3167 | 3168 | restore-cursor@5.1.0: 3169 | dependencies: 3170 | onetime: 7.0.0 3171 | signal-exit: 4.1.0 3172 | 3173 | reusify@1.1.0: {} 3174 | 3175 | rfdc@1.4.1: {} 3176 | 3177 | rolldown-plugin-dts@0.13.7(rolldown@1.0.0-beta.10-commit.87188ed)(typescript@5.8.3): 3178 | dependencies: 3179 | '@babel/generator': 7.27.3 3180 | '@babel/parser': 7.27.4 3181 | '@babel/types': 7.27.3 3182 | ast-kit: 2.1.0 3183 | birpc: 2.3.0 3184 | debug: 4.4.1 3185 | dts-resolver: 2.1.0 3186 | get-tsconfig: 4.10.1 3187 | rolldown: 1.0.0-beta.10-commit.87188ed 3188 | optionalDependencies: 3189 | typescript: 5.8.3 3190 | transitivePeerDependencies: 3191 | - oxc-resolver 3192 | - supports-color 3193 | 3194 | rolldown@1.0.0-beta.10-commit.87188ed: 3195 | dependencies: 3196 | '@oxc-project/runtime': 0.72.1 3197 | '@oxc-project/types': 0.72.1 3198 | '@rolldown/pluginutils': 1.0.0-beta.10-commit.87188ed 3199 | ansis: 4.1.0 3200 | optionalDependencies: 3201 | '@rolldown/binding-darwin-arm64': 1.0.0-beta.10-commit.87188ed 3202 | '@rolldown/binding-darwin-x64': 1.0.0-beta.10-commit.87188ed 3203 | '@rolldown/binding-freebsd-x64': 1.0.0-beta.10-commit.87188ed 3204 | '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.10-commit.87188ed 3205 | '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.10-commit.87188ed 3206 | '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.10-commit.87188ed 3207 | '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.10-commit.87188ed 3208 | '@rolldown/binding-linux-x64-musl': 1.0.0-beta.10-commit.87188ed 3209 | '@rolldown/binding-wasm32-wasi': 1.0.0-beta.10-commit.87188ed 3210 | '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.10-commit.87188ed 3211 | '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.10-commit.87188ed 3212 | '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.10-commit.87188ed 3213 | 3214 | rollup@4.41.1: 3215 | dependencies: 3216 | '@types/estree': 1.0.7 3217 | optionalDependencies: 3218 | '@rollup/rollup-android-arm-eabi': 4.41.1 3219 | '@rollup/rollup-android-arm64': 4.41.1 3220 | '@rollup/rollup-darwin-arm64': 4.41.1 3221 | '@rollup/rollup-darwin-x64': 4.41.1 3222 | '@rollup/rollup-freebsd-arm64': 4.41.1 3223 | '@rollup/rollup-freebsd-x64': 4.41.1 3224 | '@rollup/rollup-linux-arm-gnueabihf': 4.41.1 3225 | '@rollup/rollup-linux-arm-musleabihf': 4.41.1 3226 | '@rollup/rollup-linux-arm64-gnu': 4.41.1 3227 | '@rollup/rollup-linux-arm64-musl': 4.41.1 3228 | '@rollup/rollup-linux-loongarch64-gnu': 4.41.1 3229 | '@rollup/rollup-linux-powerpc64le-gnu': 4.41.1 3230 | '@rollup/rollup-linux-riscv64-gnu': 4.41.1 3231 | '@rollup/rollup-linux-riscv64-musl': 4.41.1 3232 | '@rollup/rollup-linux-s390x-gnu': 4.41.1 3233 | '@rollup/rollup-linux-x64-gnu': 4.41.1 3234 | '@rollup/rollup-linux-x64-musl': 4.41.1 3235 | '@rollup/rollup-win32-arm64-msvc': 4.41.1 3236 | '@rollup/rollup-win32-ia32-msvc': 4.41.1 3237 | '@rollup/rollup-win32-x64-msvc': 4.41.1 3238 | fsevents: 2.3.3 3239 | 3240 | run-parallel@1.2.0: 3241 | dependencies: 3242 | queue-microtask: 1.2.3 3243 | 3244 | safe-array-concat@1.1.3: 3245 | dependencies: 3246 | call-bind: 1.0.8 3247 | call-bound: 1.0.4 3248 | get-intrinsic: 1.3.0 3249 | has-symbols: 1.1.0 3250 | isarray: 2.0.5 3251 | 3252 | safe-push-apply@1.0.0: 3253 | dependencies: 3254 | es-errors: 1.3.0 3255 | isarray: 2.0.5 3256 | 3257 | safe-regex-test@1.1.0: 3258 | dependencies: 3259 | call-bound: 1.0.4 3260 | es-errors: 1.3.0 3261 | is-regex: 1.2.1 3262 | 3263 | safer-buffer@2.1.2: {} 3264 | 3265 | semver@5.7.2: {} 3266 | 3267 | semver@7.7.1: {} 3268 | 3269 | semver@7.7.2: {} 3270 | 3271 | set-function-length@1.2.2: 3272 | dependencies: 3273 | define-data-property: 1.1.4 3274 | es-errors: 1.3.0 3275 | function-bind: 1.1.2 3276 | get-intrinsic: 1.3.0 3277 | gopd: 1.2.0 3278 | has-property-descriptors: 1.0.2 3279 | 3280 | set-function-name@2.0.2: 3281 | dependencies: 3282 | define-data-property: 1.1.4 3283 | es-errors: 1.3.0 3284 | functions-have-names: 1.2.3 3285 | has-property-descriptors: 1.0.2 3286 | 3287 | set-proto@1.0.0: 3288 | dependencies: 3289 | dunder-proto: 1.0.1 3290 | es-errors: 1.3.0 3291 | es-object-atoms: 1.1.1 3292 | 3293 | shebang-command@1.2.0: 3294 | dependencies: 3295 | shebang-regex: 1.0.0 3296 | 3297 | shebang-command@2.0.0: 3298 | dependencies: 3299 | shebang-regex: 3.0.0 3300 | 3301 | shebang-regex@1.0.0: {} 3302 | 3303 | shebang-regex@3.0.0: {} 3304 | 3305 | shell-quote@1.8.2: {} 3306 | 3307 | side-channel-list@1.0.0: 3308 | dependencies: 3309 | es-errors: 1.3.0 3310 | object-inspect: 1.13.4 3311 | 3312 | side-channel-map@1.0.1: 3313 | dependencies: 3314 | call-bound: 1.0.4 3315 | es-errors: 1.3.0 3316 | get-intrinsic: 1.3.0 3317 | object-inspect: 1.13.4 3318 | 3319 | side-channel-weakmap@1.0.2: 3320 | dependencies: 3321 | call-bound: 1.0.4 3322 | es-errors: 1.3.0 3323 | get-intrinsic: 1.3.0 3324 | object-inspect: 1.13.4 3325 | side-channel-map: 1.0.1 3326 | 3327 | side-channel@1.1.0: 3328 | dependencies: 3329 | es-errors: 1.3.0 3330 | object-inspect: 1.13.4 3331 | side-channel-list: 1.0.0 3332 | side-channel-map: 1.0.1 3333 | side-channel-weakmap: 1.0.2 3334 | 3335 | siginfo@2.0.0: {} 3336 | 3337 | signal-exit@4.1.0: {} 3338 | 3339 | slash@3.0.0: {} 3340 | 3341 | slice-ansi@5.0.0: 3342 | dependencies: 3343 | ansi-styles: 6.2.1 3344 | is-fullwidth-code-point: 4.0.0 3345 | 3346 | slice-ansi@7.1.0: 3347 | dependencies: 3348 | ansi-styles: 6.2.1 3349 | is-fullwidth-code-point: 5.0.0 3350 | 3351 | source-map-js@1.2.1: {} 3352 | 3353 | spawndamnit@3.0.1: 3354 | dependencies: 3355 | cross-spawn: 7.0.6 3356 | signal-exit: 4.1.0 3357 | 3358 | spdx-correct@3.2.0: 3359 | dependencies: 3360 | spdx-expression-parse: 3.0.1 3361 | spdx-license-ids: 3.0.21 3362 | 3363 | spdx-exceptions@2.5.0: {} 3364 | 3365 | spdx-expression-parse@3.0.1: 3366 | dependencies: 3367 | spdx-exceptions: 2.5.0 3368 | spdx-license-ids: 3.0.21 3369 | 3370 | spdx-license-ids@3.0.21: {} 3371 | 3372 | sprintf-js@1.0.3: {} 3373 | 3374 | stackback@0.0.2: {} 3375 | 3376 | std-env@3.9.0: {} 3377 | 3378 | string-argv@0.3.2: {} 3379 | 3380 | string-width@7.2.0: 3381 | dependencies: 3382 | emoji-regex: 10.4.0 3383 | get-east-asian-width: 1.3.0 3384 | strip-ansi: 7.1.0 3385 | 3386 | string.prototype.padend@3.1.6: 3387 | dependencies: 3388 | call-bind: 1.0.8 3389 | define-properties: 1.2.1 3390 | es-abstract: 1.23.9 3391 | es-object-atoms: 1.1.1 3392 | 3393 | string.prototype.trim@1.2.10: 3394 | dependencies: 3395 | call-bind: 1.0.8 3396 | call-bound: 1.0.4 3397 | define-data-property: 1.1.4 3398 | define-properties: 1.2.1 3399 | es-abstract: 1.23.9 3400 | es-object-atoms: 1.1.1 3401 | has-property-descriptors: 1.0.2 3402 | 3403 | string.prototype.trimend@1.0.9: 3404 | dependencies: 3405 | call-bind: 1.0.8 3406 | call-bound: 1.0.4 3407 | define-properties: 1.2.1 3408 | es-object-atoms: 1.1.1 3409 | 3410 | string.prototype.trimstart@1.0.8: 3411 | dependencies: 3412 | call-bind: 1.0.8 3413 | define-properties: 1.2.1 3414 | es-object-atoms: 1.1.1 3415 | 3416 | strip-ansi@6.0.1: 3417 | dependencies: 3418 | ansi-regex: 5.0.1 3419 | 3420 | strip-ansi@7.1.0: 3421 | dependencies: 3422 | ansi-regex: 6.1.0 3423 | 3424 | strip-bom@3.0.0: {} 3425 | 3426 | supports-color@5.5.0: 3427 | dependencies: 3428 | has-flag: 3.0.0 3429 | 3430 | supports-preserve-symlinks-flag@1.0.0: {} 3431 | 3432 | term-size@2.2.1: {} 3433 | 3434 | tinybench@2.9.0: {} 3435 | 3436 | tinyexec@0.3.2: {} 3437 | 3438 | tinyexec@1.0.1: {} 3439 | 3440 | tinyglobby@0.2.14: 3441 | dependencies: 3442 | fdir: 6.4.5(picomatch@4.0.2) 3443 | picomatch: 4.0.2 3444 | 3445 | tinypool@1.1.0: {} 3446 | 3447 | tinyrainbow@2.0.0: {} 3448 | 3449 | tinyspy@4.0.3: {} 3450 | 3451 | tmp@0.0.33: 3452 | dependencies: 3453 | os-tmpdir: 1.0.2 3454 | 3455 | to-regex-range@5.0.1: 3456 | dependencies: 3457 | is-number: 7.0.0 3458 | 3459 | tsdown@0.12.6(typescript@5.8.3): 3460 | dependencies: 3461 | ansis: 4.1.0 3462 | cac: 6.7.14 3463 | chokidar: 4.0.3 3464 | debug: 4.4.1 3465 | diff: 8.0.2 3466 | empathic: 1.1.0 3467 | hookable: 5.5.3 3468 | rolldown: 1.0.0-beta.10-commit.87188ed 3469 | rolldown-plugin-dts: 0.13.7(rolldown@1.0.0-beta.10-commit.87188ed)(typescript@5.8.3) 3470 | semver: 7.7.2 3471 | tinyexec: 1.0.1 3472 | tinyglobby: 0.2.14 3473 | unconfig: 7.3.2 3474 | optionalDependencies: 3475 | typescript: 5.8.3 3476 | transitivePeerDependencies: 3477 | - oxc-resolver 3478 | - supports-color 3479 | - vue-tsc 3480 | 3481 | typed-array-buffer@1.0.3: 3482 | dependencies: 3483 | call-bound: 1.0.4 3484 | es-errors: 1.3.0 3485 | is-typed-array: 1.1.15 3486 | 3487 | typed-array-byte-length@1.0.3: 3488 | dependencies: 3489 | call-bind: 1.0.8 3490 | for-each: 0.3.5 3491 | gopd: 1.2.0 3492 | has-proto: 1.2.0 3493 | is-typed-array: 1.1.15 3494 | 3495 | typed-array-byte-offset@1.0.4: 3496 | dependencies: 3497 | available-typed-arrays: 1.0.7 3498 | call-bind: 1.0.8 3499 | for-each: 0.3.5 3500 | gopd: 1.2.0 3501 | has-proto: 1.2.0 3502 | is-typed-array: 1.1.15 3503 | reflect.getprototypeof: 1.0.10 3504 | 3505 | typed-array-length@1.0.7: 3506 | dependencies: 3507 | call-bind: 1.0.8 3508 | for-each: 0.3.5 3509 | gopd: 1.2.0 3510 | is-typed-array: 1.1.15 3511 | possible-typed-array-names: 1.1.0 3512 | reflect.getprototypeof: 1.0.10 3513 | 3514 | typescript@5.8.3: {} 3515 | 3516 | unbox-primitive@1.1.0: 3517 | dependencies: 3518 | call-bound: 1.0.4 3519 | has-bigints: 1.1.0 3520 | has-symbols: 1.1.0 3521 | which-boxed-primitive: 1.1.1 3522 | 3523 | unconfig@7.3.2: 3524 | dependencies: 3525 | '@quansync/fs': 0.1.3 3526 | defu: 6.1.4 3527 | jiti: 2.4.2 3528 | quansync: 0.2.10 3529 | 3530 | universalify@0.1.2: {} 3531 | 3532 | validate-npm-package-license@3.0.4: 3533 | dependencies: 3534 | spdx-correct: 3.2.0 3535 | spdx-expression-parse: 3.0.1 3536 | 3537 | vite-node@3.2.0(jiti@2.4.2)(yaml@2.8.0): 3538 | dependencies: 3539 | cac: 6.7.14 3540 | debug: 4.4.1 3541 | es-module-lexer: 1.7.0 3542 | pathe: 2.0.3 3543 | vite: 6.3.5(jiti@2.4.2)(yaml@2.8.0) 3544 | transitivePeerDependencies: 3545 | - '@types/node' 3546 | - jiti 3547 | - less 3548 | - lightningcss 3549 | - sass 3550 | - sass-embedded 3551 | - stylus 3552 | - sugarss 3553 | - supports-color 3554 | - terser 3555 | - tsx 3556 | - yaml 3557 | 3558 | vite@6.3.5(jiti@2.4.2)(yaml@2.8.0): 3559 | dependencies: 3560 | esbuild: 0.25.5 3561 | fdir: 6.4.5(picomatch@4.0.2) 3562 | picomatch: 4.0.2 3563 | postcss: 8.5.4 3564 | rollup: 4.41.1 3565 | tinyglobby: 0.2.14 3566 | optionalDependencies: 3567 | fsevents: 2.3.3 3568 | jiti: 2.4.2 3569 | yaml: 2.8.0 3570 | 3571 | vitest@3.2.0(jiti@2.4.2)(yaml@2.8.0): 3572 | dependencies: 3573 | '@types/chai': 5.2.2 3574 | '@vitest/expect': 3.2.0 3575 | '@vitest/mocker': 3.2.0(vite@6.3.5(jiti@2.4.2)(yaml@2.8.0)) 3576 | '@vitest/pretty-format': 3.2.0 3577 | '@vitest/runner': 3.2.0 3578 | '@vitest/snapshot': 3.2.0 3579 | '@vitest/spy': 3.2.0 3580 | '@vitest/utils': 3.2.0 3581 | chai: 5.2.0 3582 | debug: 4.4.1 3583 | expect-type: 1.2.1 3584 | magic-string: 0.30.17 3585 | pathe: 2.0.3 3586 | picomatch: 4.0.2 3587 | std-env: 3.9.0 3588 | tinybench: 2.9.0 3589 | tinyexec: 0.3.2 3590 | tinyglobby: 0.2.14 3591 | tinypool: 1.1.0 3592 | tinyrainbow: 2.0.0 3593 | vite: 6.3.5(jiti@2.4.2)(yaml@2.8.0) 3594 | vite-node: 3.2.0(jiti@2.4.2)(yaml@2.8.0) 3595 | why-is-node-running: 2.3.0 3596 | transitivePeerDependencies: 3597 | - jiti 3598 | - less 3599 | - lightningcss 3600 | - msw 3601 | - sass 3602 | - sass-embedded 3603 | - stylus 3604 | - sugarss 3605 | - supports-color 3606 | - terser 3607 | - tsx 3608 | - yaml 3609 | 3610 | which-boxed-primitive@1.1.1: 3611 | dependencies: 3612 | is-bigint: 1.1.0 3613 | is-boolean-object: 1.2.2 3614 | is-number-object: 1.1.1 3615 | is-string: 1.1.1 3616 | is-symbol: 1.1.1 3617 | 3618 | which-builtin-type@1.2.1: 3619 | dependencies: 3620 | call-bound: 1.0.4 3621 | function.prototype.name: 1.1.8 3622 | has-tostringtag: 1.0.2 3623 | is-async-function: 2.1.1 3624 | is-date-object: 1.1.0 3625 | is-finalizationregistry: 1.1.1 3626 | is-generator-function: 1.1.0 3627 | is-regex: 1.2.1 3628 | is-weakref: 1.1.1 3629 | isarray: 2.0.5 3630 | which-boxed-primitive: 1.1.1 3631 | which-collection: 1.0.2 3632 | which-typed-array: 1.1.19 3633 | 3634 | which-collection@1.0.2: 3635 | dependencies: 3636 | is-map: 2.0.3 3637 | is-set: 2.0.3 3638 | is-weakmap: 2.0.2 3639 | is-weakset: 2.0.4 3640 | 3641 | which-typed-array@1.1.19: 3642 | dependencies: 3643 | available-typed-arrays: 1.0.7 3644 | call-bind: 1.0.8 3645 | call-bound: 1.0.4 3646 | for-each: 0.3.5 3647 | get-proto: 1.0.1 3648 | gopd: 1.2.0 3649 | has-tostringtag: 1.0.2 3650 | 3651 | which@1.3.1: 3652 | dependencies: 3653 | isexe: 2.0.0 3654 | 3655 | which@2.0.2: 3656 | dependencies: 3657 | isexe: 2.0.0 3658 | 3659 | why-is-node-running@2.3.0: 3660 | dependencies: 3661 | siginfo: 2.0.0 3662 | stackback: 0.0.2 3663 | 3664 | wrap-ansi@9.0.0: 3665 | dependencies: 3666 | ansi-styles: 6.2.1 3667 | string-width: 7.2.0 3668 | strip-ansi: 7.1.0 3669 | 3670 | yaml@2.8.0: {} 3671 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | export const OPERATORS = { 2 | equal: '=', 3 | notEqual: '!=', 4 | greaterThan: '>', 5 | greaterThanOrEqual: '>=', 6 | lessThan: '<', 7 | lessThanOrEqual: '<=', 8 | like: '~', 9 | notLike: '!~', 10 | anyEqual: '?=', 11 | anyNotEqual: '?!=', 12 | anyGreaterThan: '?>', 13 | anyGreaterThanOrEqual: '?>=', 14 | anyLessThan: '?<', 15 | anyLessThanOrEqual: '?<=', 16 | anyLike: '?~', 17 | anyNotLike: '?!~', 18 | } as const 19 | 20 | export const DATETIME_MACROS = [ 21 | '@now', 22 | '@second', 23 | '@minute', 24 | '@hour', 25 | '@weekday', 26 | '@day', 27 | '@month', 28 | '@year', 29 | '@yesterday', 30 | '@tomorrow', 31 | '@todayStart', 32 | '@todayEnd', 33 | '@monthStart', 34 | '@monthEnd', 35 | '@yearStart', 36 | '@yearEnd', 37 | ] as const 38 | -------------------------------------------------------------------------------- /src/query.ts: -------------------------------------------------------------------------------- 1 | import { OPERATORS } from './constants' 2 | import type { 3 | FilterFunction, 4 | Path, 5 | PathValue, 6 | QueryBuilder, 7 | RawQueryObject, 8 | RestrictedQueryBuilder, 9 | } from './types' 10 | import { isDateMacro } from './utils' 11 | 12 | export function pbQuery(): QueryBuilder< 13 | T, 14 | MaxDepth 15 | > { 16 | let query = '' 17 | 18 | const keyCounter = new Map, number>() 19 | const valueMap = new Map() 20 | 21 | const incrementKeyCounter = (key: Path) => { 22 | const count = keyCounter.get(key) || 0 23 | const newCount = count + 1 24 | keyCounter.set(key, newCount) 25 | 26 | return newCount 27 | } 28 | 29 | const saveValue =

>( 30 | key: P, 31 | value: PathValue, 32 | ) => { 33 | const count = incrementKeyCounter(key) 34 | const newName = `${String(key)}${count}` 35 | valueMap.set(newName, value) 36 | 37 | return newName 38 | } 39 | 40 | const expression =

>( 41 | key: P, 42 | operator: string, 43 | value: PathValue, 44 | ) => { 45 | if (isDateMacro(value)) { 46 | query += `${String(key)}${operator}${value}` 47 | } else { 48 | const newName = saveValue(key, value) 49 | query += `${String(key)}${operator}{:${newName}}` 50 | } 51 | } 52 | 53 | type BuilderFunction =

>( 54 | key: P, 55 | values: PathValue, 56 | ) => RestrictedQueryBuilder 57 | 58 | const builderFunctions = {} as Record< 59 | keyof typeof OPERATORS, 60 | BuilderFunction 61 | > 62 | for (const [name, operator] of Object.entries(OPERATORS)) { 63 | const key = name as keyof typeof OPERATORS 64 | builderFunctions[key] =

>( 65 | key: P, 66 | value: PathValue, 67 | ) => { 68 | expression(key, operator, value) 69 | return restrictedQueryBuilder 70 | } 71 | } 72 | 73 | function build(): RawQueryObject 74 | function build(filter: FilterFunction): string 75 | function build(filter?: FilterFunction): RawQueryObject | string { 76 | if (typeof filter === 'function') { 77 | return filter(query, Object.fromEntries(valueMap)) 78 | } 79 | return { raw: query, values: Object.fromEntries(valueMap) } 80 | } 81 | 82 | const queryBuilder: QueryBuilder = { 83 | ...builderFunctions, 84 | search(keys, value) { 85 | query += '(' 86 | const cleanedPaths = keys.filter((key) => key) 87 | cleanedPaths.forEach((key, index) => { 88 | expression(key, '~', value) 89 | query += index < cleanedPaths.length - 1 ? ' || ' : '' 90 | }) 91 | query += ')' 92 | return restrictedQueryBuilder 93 | }, 94 | in(key, values) { 95 | query += '(' 96 | values.forEach((value, index) => { 97 | expression(key, '=', value) 98 | query += index < values.length - 1 ? ' || ' : '' 99 | }) 100 | query += ')' 101 | return restrictedQueryBuilder 102 | }, 103 | notIn(key, values) { 104 | query += '(' 105 | values.forEach((value, index) => { 106 | expression(key, '!=', value) 107 | query += index < values.length - 1 ? ' && ' : '' 108 | }) 109 | query += ')' 110 | return restrictedQueryBuilder 111 | }, 112 | between(key, from, to) { 113 | query += '(' 114 | expression(key, '>=', from) 115 | query += ' && ' 116 | expression(key, '<=', to) 117 | query += ')' 118 | return restrictedQueryBuilder 119 | }, 120 | notBetween(key, from, to) { 121 | query += '(' 122 | expression(key, '<', from) 123 | query += ' || ' 124 | expression(key, '>', to) 125 | query += ')' 126 | return restrictedQueryBuilder 127 | }, 128 | isNull(key) { 129 | query += `${String(key)}=''` 130 | return restrictedQueryBuilder 131 | }, 132 | isNotNull(key) { 133 | query += `${String(key)}!=''` 134 | return restrictedQueryBuilder 135 | }, 136 | custom(raw) { 137 | query += raw 138 | return restrictedQueryBuilder 139 | }, 140 | group(callback) { 141 | query += '(' 142 | callback(queryBuilder) 143 | query += ')' 144 | return restrictedQueryBuilder 145 | }, 146 | build, 147 | } 148 | 149 | const restrictedQueryBuilder: RestrictedQueryBuilder = { 150 | and() { 151 | query += ' && ' 152 | return queryBuilder 153 | }, 154 | or() { 155 | query += ' || ' 156 | return queryBuilder 157 | }, 158 | build, 159 | } 160 | 161 | return queryBuilder 162 | } 163 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import type { DATETIME_MACROS } from './constants' 2 | 3 | export type FilterFunction = ( 4 | raw: string, 5 | params?: { 6 | [key: string]: unknown 7 | }, 8 | ) => string 9 | 10 | export type DatetimeMacro = (typeof DATETIME_MACROS)[number] 11 | 12 | export type RawQueryObject = { raw: string; values: Record } 13 | 14 | type DepthCounter = [1, 2, 3, 4, 5, 6, never] 15 | 16 | export type Path< 17 | T, 18 | MaxDepth extends number, 19 | K extends keyof T = keyof T, 20 | D extends number = 0, 21 | > = D extends MaxDepth 22 | ? never 23 | : K extends string // This filters out symbol keys 24 | ? KeyPaths // Now K is guaranteed to be string key 25 | : never 26 | 27 | type KeyPaths< 28 | T, 29 | K extends string & keyof T, 30 | MaxDepth extends number, 31 | D extends number, 32 | > = T[K] extends string 33 | ? `${K}` | `${K}:lower` 34 | : T[K] extends readonly object[] 35 | ? 36 | | `${K}` 37 | | `${K}:each` 38 | | `${K}:length` 39 | | `${K}.${Path}` 40 | : T[K] extends readonly unknown[] 41 | ? `${K}` | `${K}:each` | `${K}:length` 42 | : T[K] extends Date 43 | ? `${K}` 44 | : T[K] extends object 45 | ? 46 | | `${K}` 47 | | `${K}.${Path}` 48 | | `${string}_via_${K}` 49 | | `${string}_via_${K}.${string}` 50 | : `${K}` 51 | 52 | type PathValueHelper< 53 | T, 54 | P extends string, 55 | MaxDepth extends number, 56 | D extends number, 57 | > = P extends `${infer _Prefix}_via_${infer _Suffix}` 58 | ? unknown 59 | : P extends `${infer Key}.${infer Rest}` 60 | ? Key extends keyof T 61 | ? T[Key] extends readonly (infer E)[] 62 | ? PathValue // If it's an array, continue resolving on its elements 63 | : PathValue // Otherwise, continue resolving normally 64 | : never 65 | : P extends `${infer Key}:${infer Modifier}` 66 | ? Key extends keyof T 67 | ? HandleModifier 68 | : never 69 | : P extends keyof T 70 | ? T[P] extends object[] 71 | ? string 72 | : T[P] extends unknown[] 73 | ? T[P][number] 74 | : T[P] extends Date 75 | ? T[P] | DatetimeMacro 76 | : T[P] extends object 77 | ? string 78 | : T[P] 79 | : never 80 | 81 | export type PathValue< 82 | T, 83 | P extends string, 84 | MaxDepth extends number, 85 | D extends number = 0, 86 | > = D extends MaxDepth ? never : PathValueHelper 87 | 88 | export type HandleModifier = Modifier extends 'each' 89 | ? V extends number[] 90 | ? number 91 | : string 92 | : Modifier extends 'length' 93 | ? number 94 | : Modifier extends 'lower' 95 | ? string 96 | : never 97 | 98 | export interface QueryBuilder { 99 | /** 100 | * Matches records where `key` equals `value`. 101 | * @example 102 | * pbQuery().equal('author.name', 'Alice'); // name='Alice' 103 | * // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 104 | * pbQuery().equal('author.name:lower', 'alice'); // name:lower='alice' 105 | */ 106 | equal

>( 107 | key: P, 108 | value: PathValue, 109 | ): RestrictedQueryBuilder 110 | 111 | /** 112 | * Matches records where `key` is not equal to `value`. 113 | * @example 114 | * pbQuery().notEqual('author.name', 'Alice'); // name!='Alice' 115 | * // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 116 | * pbQuery().notEqual('author.name:lower', 'alice'); // name:lower!='alice' 117 | */ 118 | notEqual

>( 119 | key: P, 120 | value: PathValue, 121 | ): RestrictedQueryBuilder 122 | 123 | /** 124 | * Matches records where `key` is greater than `value`. 125 | * 126 | * [PocketBase's datetime macros](https://pocketbase.io/docs/api-rules-and-filters/#-macros) could be helpful when comparing dates: `@now`, `@yesterday`, `@tomorrow`, `@todayStart`, `@todayEnd`, `@monthStart`, `@monthEnd`, `@yearStart`, `@yearEnd`, [more...](https://pocketbase.io/docs/api-rules-and-filters/#-macros) 127 | * @example 128 | * pbQuery().greaterThan('age', 21); // age>21 129 | * pbQuery().greaterThan('created', new Date('2021-01-01')); // created>'2021-01-01 00:00:00.000Z' 130 | */ 131 | greaterThan

>( 132 | key: P, 133 | value: PathValue, 134 | ): RestrictedQueryBuilder 135 | 136 | /** 137 | * Matches records where `key` is greater than or equal to `value`. 138 | * 139 | * [PocketBase's datetime macros](https://pocketbase.io/docs/api-rules-and-filters/#-macros) could be helpful when comparing dates: `@now`, `@yesterday`, `@tomorrow`, `@todayStart`, `@todayEnd`, `@monthStart`, `@monthEnd`, `@yearStart`, `@yearEnd`, [more...](https://pocketbase.io/docs/api-rules-and-filters/#-macros) 140 | * @example 141 | * pbQuery().greaterThanOrEqual('age', 18); // age>=18 142 | * pbQuery().greaterThanOrEqual('created', new Date('2021-01-01')); // created>='2021-01-01 00:00:00.000Z' 143 | */ 144 | greaterThanOrEqual

>( 145 | key: P, 146 | value: PathValue, 147 | ): RestrictedQueryBuilder 148 | 149 | /** 150 | * Matches records where `key` is less than `value`. 151 | * 152 | * [PocketBase's datetime macros](https://pocketbase.io/docs/api-rules-and-filters/#-macros) could be helpful when comparing dates: `@now`, `@yesterday`, `@tomorrow`, `@todayStart`, `@todayEnd`, `@monthStart`, `@monthEnd`, `@yearStart`, `@yearEnd`, [more...](https://pocketbase.io/docs/api-rules-and-filters/#-macros) 153 | * @example 154 | * pbQuery().lessThan('age', 50); // age<50 155 | * pbQuery().lessThan('created', new Date('2021-01-01')); // created<'2021-01-01 00:00:00.000Z' 156 | */ 157 | lessThan

>( 158 | key: P, 159 | value: PathValue, 160 | ): RestrictedQueryBuilder 161 | 162 | /** 163 | * Matches records where `key` is less than or equal to `value`. 164 | * 165 | * [PocketBase's datetime macros](https://pocketbase.io/docs/api-rules-and-filters/#-macros) could be helpful when comparing dates: `@now`, `@yesterday`, `@tomorrow`, `@todayStart`, `@todayEnd`, `@monthStart`, `@monthEnd`, `@yearStart`, `@yearEnd`, [more...](https://pocketbase.io/docs/api-rules-and-filters/#-macros) 166 | * @example 167 | * pbQuery().lessThanOrEqual('age', 65); // age<=65 168 | * pbQuery().lessThanOrEqual('created', new Date('2021-01-01')); // created<='2021-01-01 00:00:00.000Z' 169 | */ 170 | lessThanOrEqual

>( 171 | key: P, 172 | value: PathValue, 173 | ): RestrictedQueryBuilder 174 | 175 | /** 176 | * Matches records where `key` contains `value`. 177 | * 178 | * It is case-insensitive, so the `:lower` [modifier](https://pocketbase.io/docs/api-rules-and-filters/#special-identifiers-and-modifiers) is unnecessary. 179 | * 180 | * @example 181 | * // Contains 182 | * pbQuery().like('author.name', 'Joh'); // name~'Joh' / name~'%Joh%' 183 | * // If not specified, auto-wraps the value in `%` for wildcard matching. 184 | * 185 | * @example 186 | * // Starts with 187 | * pbQuery().like('author.name', 'Joh%'); // name~'Joh%' 188 | * 189 | * @example 190 | * // Ends with 191 | * pbQuery().like('author.name', '%Doe'); // name~'%Doe' 192 | */ 193 | like

>( 194 | key: P, 195 | value: PathValue, 196 | ): RestrictedQueryBuilder 197 | 198 | /** 199 | * Matches records where `key` doesn't contain `value`. 200 | * 201 | * It is case-insensitive, so the `:lower` [modifier](https://pocketbase.io/docs/api-rules-and-filters/#special-identifiers-and-modifiers) is unnecessary. 202 | * 203 | * @example 204 | * // Doesn't contain 205 | * pbQuery().notLike('author.name', 'Joh'); // name!~'Joh' / name!~'%Joh%' 206 | * // If not specified, auto-wraps the value in `%` for wildcard matching. 207 | * 208 | * @example 209 | * // Doesn't start with 210 | * pbQuery().notLike('author.name', 'Joh%'); // name!~'Joh%' 211 | * 212 | * @example 213 | * // Doesn't end with 214 | * pbQuery().notLike('author.name', '%Doe'); // name!~'%Doe' 215 | */ 216 | notLike

>( 217 | key: P, 218 | value: PathValue, 219 | ): RestrictedQueryBuilder 220 | 221 | /** 222 | * Useful for queries involving [back-relations](https://pocketbase.io/docs/working-with-relations/#back-relations), [multiple relation](https://pocketbase.io/docs/collections/#relationfield), [multiple select](https://pocketbase.io/docs/collections/#selectfield), or [multiple file](https://pocketbase.io/docs/collections/#filefield). 223 | * 224 | * Matches records where at least one of the values in the given `key` equals `value`. 225 | * @example 226 | * pbQuery().anyEqual('books_via_author.title', 'The Island'); // post_via_author.name?='The Island' 227 | * 228 | * // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 229 | * pbQuery().anyEqual('books_via_author.title:lower', 'the island'); // post_via_author.name:lower?='the island' 230 | */ 231 | anyEqual

>( 232 | key: P, 233 | value: PathValue, 234 | ): RestrictedQueryBuilder 235 | 236 | /** 237 | * Useful for queries involving [back-relations](https://pocketbase.io/docs/working-with-relations/#back-relations), [multiple relation](https://pocketbase.io/docs/collections/#relationfield), [multiple select](https://pocketbase.io/docs/collections/#selectfield), or [multiple file](https://pocketbase.io/docs/collections/#filefield). 238 | * 239 | * Matches records where at least one of the values in the given `key` is not equal to `value`. 240 | * @example 241 | * pbQuery().anyNotEqual('books_via_author.title', 'The Island'); // post_via_author.name?!='The Island' 242 | * 243 | * // This is case-sensitive. Use the `:lower` modifier for case-insensitive matching. 244 | * pbQuery().anyNotEqual('books_via_author.title:lower', 'the island'); // post_via_author.name:lower?!='the island' 245 | */ 246 | anyNotEqual

>( 247 | key: P, 248 | value: PathValue, 249 | ): RestrictedQueryBuilder 250 | 251 | /** 252 | * Useful for queries involving [back-relations](https://pocketbase.io/docs/working-with-relations/#back-relations), [multiple relation](https://pocketbase.io/docs/collections/#relationfield), [multiple select](https://pocketbase.io/docs/collections/#selectfield), or [multiple file](https://pocketbase.io/docs/collections/#filefield). 253 | * 254 | * Matches records where at least one of the values in the given `key` is greater than `value`. 255 | * @example pbQuery().anyGreaterThan('age', 21); // age?>21 256 | */ 257 | anyGreaterThan

>( 258 | key: P, 259 | value: PathValue, 260 | ): RestrictedQueryBuilder 261 | 262 | /** 263 | * Useful for queries involving [back-relations](https://pocketbase.io/docs/working-with-relations/#back-relations), [multiple relation](https://pocketbase.io/docs/collections/#relationfield), [multiple select](https://pocketbase.io/docs/collections/#selectfield), or [multiple file](https://pocketbase.io/docs/collections/#filefield). 264 | * 265 | * Matches records where at least one of the values in the given `key` is greater than or equal to `value`. 266 | * @example pbQuery().anyGreaterThanOrEqual('age', 18); // age?>=18 267 | */ 268 | anyGreaterThanOrEqual

>( 269 | key: P, 270 | value: PathValue, 271 | ): RestrictedQueryBuilder 272 | 273 | /** 274 | * Useful for queries involving [back-relations](https://pocketbase.io/docs/working-with-relations/#back-relations), [multiple relation](https://pocketbase.io/docs/collections/#relationfield), [multiple select](https://pocketbase.io/docs/collections/#selectfield), or [multiple file](https://pocketbase.io/docs/collections/#filefield). 275 | * 276 | * Matches records where at least one of the values in the given `key` is less than `value`. 277 | * @example pbQuery().anyLessThan('age', 50); // age?<50 278 | */ 279 | anyLessThan

>( 280 | key: P, 281 | value: PathValue, 282 | ): RestrictedQueryBuilder 283 | 284 | /** 285 | * Useful for queries involving [back-relations](https://pocketbase.io/docs/working-with-relations/#back-relations), [multiple relation](https://pocketbase.io/docs/collections/#relationfield), [multiple select](https://pocketbase.io/docs/collections/#selectfield), or [multiple file](https://pocketbase.io/docs/collections/#filefield). 286 | * 287 | * Matches records where at least one of the values in the given `key` is less than or equal to `value`. 288 | * @example pbQuery().anyLessThanOrEqual('age', 65); // age?<=65 289 | */ 290 | anyLessThanOrEqual

>( 291 | key: P, 292 | value: PathValue, 293 | ): RestrictedQueryBuilder 294 | 295 | /** 296 | * Useful for queries involving [back-relations](https://pocketbase.io/docs/working-with-relations/#back-relations), [multiple relation](https://pocketbase.io/docs/collections/#relationfield), [multiple select](https://pocketbase.io/docs/collections/#selectfield), or [multiple file](https://pocketbase.io/docs/collections/#filefield). 297 | * 298 | * Matches records where at least one of the values in the given `key` contains `value`. 299 | * 300 | * It is case-insensitive, so the `:lower` [modifier](https://pocketbase.io/docs/api-rules-and-filters/#special-identifiers-and-modifiers) is unnecessary. 301 | * 302 | * @example 303 | * // Contains 304 | * pbQuery().anyLike('author.name', 'Joh'); // name?~'Joh' / name?~'%Joh%' 305 | * // If not specified, auto-wraps the value in `%` for wildcard matching. 306 | * 307 | * @example 308 | * // Starts with 309 | * pbQuery().anyLike('author.name', 'Joh%'); // name?~'Joh%' 310 | * 311 | * @example 312 | * // Ends with 313 | * pbQuery().anyLike('author.name', '%Doe'); // name?~'%Doe' 314 | */ 315 | anyLike

>( 316 | key: P, 317 | value: PathValue, 318 | ): RestrictedQueryBuilder 319 | 320 | /** 321 | * Useful for queries involving [back-relations](https://pocketbase.io/docs/working-with-relations/#back-relations), [multiple relation](https://pocketbase.io/docs/collections/#relationfield), [multiple select](https://pocketbase.io/docs/collections/#selectfield), or [multiple file](https://pocketbase.io/docs/collections/#filefield). 322 | * 323 | * Matches records where at least one of the values in the given `key` doesn't contain `value`. 324 | * 325 | * It is case-insensitive, so the `:lower` [modifier](https://pocketbase.io/docs/api-rules-and-filters/#special-identifiers-and-modifiers) is unnecessary. 326 | * 327 | * @example 328 | * // Doesn't contain 329 | * pbQuery().anyNotLike('author.name', 'Joh'); // name?!~'Joh' / name?!~'%Joh%' 330 | * // If not specified, auto-wraps the value in `%` for wildcard matching. 331 | * 332 | * @example 333 | * // Doesn't start with 334 | * pbQuery().anyNotLike('author.name', 'Joh%'); // name?!~'Joh%' 335 | * 336 | * @example 337 | * // Doesn't end with 338 | * pbQuery().anyNotLike('author.name', '%Doe'); // name?!~'%Doe' 339 | */ 340 | anyNotLike

>( 341 | key: P, 342 | value: PathValue, 343 | ): RestrictedQueryBuilder 344 | 345 | /** 346 | * **_Helper_** 347 | * 348 | * Matches records where any of the `keys` contain `value`. 349 | * 350 | * It can be used to perform a full-text search (FTS). 351 | * 352 | * It is case-insensitive, so the `:lower` [modifier](https://pocketbase.io/docs/api-rules-and-filters/#special-identifiers-and-modifiers) is unnecessary. 353 | * 354 | * @example 355 | * // Full text search 356 | * pbQuery().search(['title', 'content', 'tags', 'author.name', 'author.surname'], 'Football'); // (title~'Football' || content~'Football' || tags~'Football' || author.name~'Football' || author.surname~'Football') 357 | * 358 | * @example 359 | * // Contains 360 | * pbQuery().search(['name', 'surname'], 'Joh'); // (name~'Joh' || surname~'Joh') / (name~'%Joh%' || surname~'%Joh%') 361 | * // If not specified, auto-wraps the value in `%` for wildcard matching. 362 | * 363 | * @example 364 | * // Starts with 365 | * pbQuery().search(['name', 'surname'], 'Joh%'); // (name~'Joh%' || surname~'Joh%') 366 | * 367 | * @example 368 | * // Ends with 369 | * pbQuery().search(['name', 'surname'], '%Doe'); // (name~'%Doe' || surname~'%Doe') 370 | */ 371 | search

>( 372 | keys: P[], 373 | value: PathValue, 374 | ): RestrictedQueryBuilder 375 | 376 | /** 377 | * **_Helper_** 378 | * 379 | * Matches records where `key` is in `values`. 380 | * @example pbQuery().in('id', ['id_1', 'id_2', 'id_3']); // (id='id_1' || id='id_2' || id='id_3') 381 | */ 382 | in

>( 383 | key: P, 384 | values: PathValue[], 385 | ): RestrictedQueryBuilder 386 | 387 | /** 388 | * **_Helper_** 389 | * 390 | * Matches records where `key` is not in `values`. 391 | * @example pbQuery().notIn('age', [18, 21, 30]); // (age!=18 && age!=21 && age!=30) 392 | */ 393 | notIn

>( 394 | key: P, 395 | values: PathValue[], 396 | ): RestrictedQueryBuilder 397 | 398 | /** 399 | * **_Helper_** 400 | * 401 | * Matches records where `key` is between `from` and `to`. 402 | * 403 | * [PocketBase's datetime macros](https://pocketbase.io/docs/api-rules-and-filters/#-macros) could be helpful when comparing dates: `@now`, `@yesterday`, `@tomorrow`, `@todayStart`, `@todayEnd`, `@monthStart`, `@monthEnd`, `@yearStart`, `@yearEnd`, [more...](https://pocketbase.io/docs/api-rules-and-filters/#-macros) 404 | * @example 405 | * pbQuery().between('age', 18, 30); // (age>=18 && age<=30) 406 | * pbQuery().between('created', new Date('2021-01-01'), '@now'); // (created>='2021-01-01 00:00:00.000Z' && created<=@now) 407 | */ 408 | between

>( 409 | key: P, 410 | from: PathValue, 411 | to: PathValue, 412 | ): RestrictedQueryBuilder 413 | 414 | /** 415 | * **_Helper_** 416 | * 417 | * Matches records where `key` is not between `from` and `to`. 418 | * 419 | * [PocketBase's datetime macros](https://pocketbase.io/docs/api-rules-and-filters/#-macros) could be helpful when comparing dates: `@now`, `@yesterday`, `@tomorrow`, `@todayStart`, `@todayEnd`, `@monthStart`, `@monthEnd`, `@yearStart`, `@yearEnd`, [more...](https://pocketbase.io/docs/api-rules-and-filters/#-macros) 420 | * @example 421 | * pbQuery().notBetween('age', 18, 30); // (age<18 || age>30) 422 | * pbQuery().notBetween('created', new Date('2021-01-01'), '@yesterday'); // (created<'2021-01-01 00:00:00.000Z' || created>@yesterday) 423 | */ 424 | notBetween

>( 425 | key: P, 426 | from: PathValue, 427 | to: PathValue, 428 | ): RestrictedQueryBuilder 429 | 430 | /** 431 | * **_Helper_** 432 | * 433 | * Matches records where `key` is null. 434 | * @example pbQuery().isNull('name'); // name='' 435 | */ 436 | isNull

>( 437 | key: P, 438 | ): RestrictedQueryBuilder 439 | 440 | /** 441 | * **_Helper_** 442 | * 443 | * Matches records where `key` is not null. 444 | * @example pbQuery().isNotNull('name'); // name!='' 445 | */ 446 | isNotNull

>( 447 | key: P, 448 | ): RestrictedQueryBuilder 449 | 450 | /** 451 | * **_Helper_** 452 | * 453 | * Executes a custom query. 454 | * 455 | * This helper is safe to use with `pb.filter()`, but we recommend using it as a last resort. 456 | * 457 | * If you have a special use case that might be useful to other developers, consider [opening an issue](https://github.com/sergio9929/pb-query/issues), and we may implement it as a new _helper_ in the future. 458 | * 459 | * @example 460 | * pbQuery().custom('age > 21'); // age > 21 461 | * 462 | * // We recommend using Pocketbase's native `pb.filter()` function 463 | * pbQuery().custom(pb.filter('age > {:age}', { age: 21 })); // age > 21 464 | */ 465 | custom(raw: string): RestrictedQueryBuilder 466 | 467 | /** 468 | * Creates a logical group. 469 | * @example pbQuery().group((q) => q.equal('status', 'active').or().equal('status', 'inactive')); // (status~'active' || status~'inactive') 470 | */ 471 | group( 472 | callback: ( 473 | q: QueryBuilder, 474 | ) => RestrictedQueryBuilder, 475 | ): RestrictedQueryBuilder 476 | 477 | /** 478 | * Returns the query string and values. 479 | * @example 480 | * // We recommend using Pocketbase's native `pb.filter()` function 481 | * const query = pbQuery().equal('name', 'Alice').build(pb.filter); 482 | * 483 | * // You can also filter it later 484 | * const query = pbQuery().equal('name', 'Alice').build(); 485 | * console.log(query.raw); // name={:name1} 486 | * console.log(query.values); // { name: 'Alice' } 487 | * console.log(pb.filter(query.raw, query.values)); // name='Alice' 488 | */ 489 | build(): { raw: string; values: Record } 490 | build(filter: FilterFunction): string 491 | build( 492 | filter?: FilterFunction, 493 | ): { raw: string; values: Record } | string 494 | } 495 | 496 | export interface RestrictedQueryBuilder { 497 | /** 498 | * Combines the previous and the next conditions with an `and` logical operator. 499 | * @example pbQuery().equal('name', 'Alice').and().equal('role', 'admin'); // name='Alice' && role='admin' 500 | */ 501 | and(): Omit, 'build'> 502 | /** 503 | * Combines the previous and the next conditions with an `or` logical operator. 504 | * @example pbQuery().equal('name', 'Alice').or().equal('name', 'Bob'); // name='Alice' || name='Bob' 505 | */ 506 | or(): Omit, 'build'> 507 | 508 | /** 509 | * Returns the query string and values. 510 | * @example 511 | * // We recommend using Pocketbase's native `pb.filter()` function 512 | * const query = pbQuery().equal('name', 'Alice').build(pb.filter); 513 | * 514 | * // You can also filter it later 515 | * const query = pbQuery().equal('name', 'Alice').build(); 516 | * console.log(query.raw); // name={:name1} 517 | * console.log(query.values); // { name: 'Alice' } 518 | * console.log(pb.filter(query.raw, query.values)); // name='Alice' 519 | */ 520 | build(): { raw: string; values: Record } 521 | build(filter: FilterFunction): string 522 | build( 523 | filter?: FilterFunction, 524 | ): { raw: string; values: Record } | string 525 | } 526 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { DATETIME_MACROS } from './constants' 2 | import type { DatetimeMacro } from './types' 3 | 4 | /** 5 | * We expose a filter function, but we recommend using the native `pb.filter()` function instead. 6 | * @deprecated Use native `pb.filter()`, not this. 7 | */ 8 | export function filter( 9 | raw: string, 10 | params?: { [key: string]: unknown }, 11 | ): string { 12 | if (!params) { 13 | return raw 14 | } 15 | 16 | let sanitizedQuery = raw 17 | 18 | for (const key in params) { 19 | let val = params[key] 20 | switch (typeof val) { 21 | case 'boolean': 22 | case 'number': 23 | val = `${val}` 24 | break 25 | case 'string': 26 | val = `'${val.replace(/'/g, "\\'")}'` 27 | break 28 | default: 29 | if (val === null) { 30 | val = 'null' 31 | } else if (val instanceof Date) { 32 | val = `'${val.toISOString().replace('T', ' ')}'` 33 | } else { 34 | val = `'${JSON.stringify(val).replace(/'/g, "\\'")}'` 35 | } 36 | } 37 | sanitizedQuery = sanitizedQuery.replaceAll(`{:${key}}`, val as string) 38 | } 39 | 40 | return sanitizedQuery 41 | } 42 | 43 | export function isDateMacro(value: unknown): value is DatetimeMacro { 44 | if (!isMacro(value)) { 45 | return false 46 | } 47 | 48 | return DATETIME_MACROS.includes(value as DatetimeMacro) 49 | } 50 | 51 | function isMacro(value: unknown): value is string { 52 | if (typeof value !== 'string') { 53 | return false 54 | } 55 | 56 | return value.length > 1 && value.startsWith('@') 57 | } 58 | -------------------------------------------------------------------------------- /tests/query.test-d.ts: -------------------------------------------------------------------------------- 1 | import { assertType, test } from 'vitest' 2 | import { pbQuery } from '../src/query' 3 | import type { RawQueryObject } from '../src/types' 4 | import { filter } from '../src/utils' 5 | 6 | interface User { 7 | id: string 8 | name: string 9 | age: number 10 | city: string 11 | permissions: string[] 12 | } 13 | 14 | interface Category { 15 | id: string 16 | name: string 17 | priority: number 18 | } 19 | 20 | interface Post { 21 | id: string 22 | title: string 23 | content: string 24 | created: Date 25 | update: Date 26 | user: User 27 | tags: string[] 28 | categories: Category[] 29 | numbers: number[] 30 | isVisible: boolean 31 | } 32 | 33 | test('build function types', () => { 34 | const { build } = pbQuery() 35 | 36 | assertType(build(filter)) 37 | assertType(build()) 38 | }) 39 | 40 | test('all possible keys', () => { 41 | const { equal } = pbQuery() 42 | 43 | equal('categories', 'hola') 44 | equal('categories:each', 'hola').build() 45 | equal('categories:length', 1).build() 46 | equal('categories.id', 'hola').build() 47 | equal('categories.id:lower', 'hola').build() 48 | equal('categories.priority', 1).build() 49 | equal('title', 'hola').build() 50 | equal('title:lower', 'hola').build() 51 | equal('tags', 'hola').build() 52 | equal('tags:each', 'hola').build() 53 | equal('tags:length', 1).build() 54 | equal('numbers', 1).build() 55 | equal('numbers:each', 1).build() 56 | equal('numbers:length', 1).build() 57 | equal('created', new Date()).build() 58 | equal('created', '@now').build() 59 | equal('isVisible', true).build() 60 | equal('user', 'hola').build() 61 | equal('user.age', 18).build() 62 | equal('anything_via_user', new Date()).build() 63 | equal('anything_via_user.anything', new Date()).build() 64 | }) 65 | -------------------------------------------------------------------------------- /tests/query.test.ts: -------------------------------------------------------------------------------- 1 | import PocketBase from 'pocketbase' 2 | import { expect, test } from 'vitest' 3 | import { pbQuery } from '../src/query' 4 | import { filter } from '../src/utils' 5 | 6 | interface User { 7 | id: string 8 | name: string 9 | age: number 10 | city: string 11 | permissions: string[] 12 | created: Date 13 | updated: Date 14 | } 15 | 16 | interface SpecialPost { 17 | id: string 18 | title: string 19 | content: string 20 | created: Date 21 | updated: Date 22 | } 23 | 24 | interface Post { 25 | id: string 26 | title: string 27 | content: string 28 | author: User 29 | isVisible: boolean 30 | tags: string[] 31 | related: SpecialPost[] 32 | created: Date 33 | updated: Date 34 | } 35 | 36 | const pb = new PocketBase() 37 | 38 | test('filter discrepancy', () => { 39 | const query1 = pbQuery() 40 | .equal('author.name', 'John') 41 | .and() 42 | .in('author.age', [20, 30, 40]) 43 | .and() 44 | .notIn('author.city', ['Chicago', 'Miami']) 45 | .and() 46 | .between('created', new Date('2021-01-01'), new Date('2021-12-31')) 47 | .and() 48 | .notBetween('author.age', 20, 30) 49 | .and() 50 | .search(['title', 'content', 'tags'], 'alice') 51 | .and() 52 | .isNull('content') 53 | .and() 54 | .custom(filter('content~{:content}', { content: 'test' })) 55 | .build(filter) 56 | 57 | const query2 = pbQuery() 58 | .equal('author.name', 'John') 59 | .and() 60 | .in('author.age', [20, 30, 40]) 61 | .and() 62 | .notIn('author.city', ['Chicago', 'Miami']) 63 | .and() 64 | .between('created', new Date('2021-01-01'), new Date('2021-12-31')) 65 | .and() 66 | .notBetween('author.age', 20, 30) 67 | .and() 68 | .search(['title', 'content', 'tags'], 'alice') 69 | .and() 70 | .isNull('content') 71 | .and() 72 | .custom(pb.filter('content~{:content}', { content: 'test' })) 73 | .build(pb.filter) 74 | 75 | expect(query1).toBe(query2) 76 | }) 77 | 78 | test('post query', () => { 79 | const postQuery = pbQuery 80 | 81 | expect(postQuery().equal('author.name', 'John').build(filter)).toBe( 82 | "author.name='John'", 83 | ) 84 | expect( 85 | postQuery() 86 | .equal('author.name', 'John') 87 | .and() 88 | .equal('author.age', 20) 89 | .build(filter), 90 | ).toBe("author.name='John' && author.age=20") 91 | }) 92 | 93 | test('multiple queries', () => { 94 | const query = pbQuery() 95 | .equal('name', 'John') 96 | .and() 97 | .group((q) => q.notEqual('age', 20).or().notEqual('age', 30)) 98 | .and() 99 | .equal('city', 'New York') 100 | .build(filter) 101 | 102 | expect(query).toBe("name='John' && (age!=20 || age!=30) && city='New York'") 103 | 104 | const query1 = pbQuery() 105 | .equal('author.name', 'John') 106 | .and() 107 | .group((q) => q.anyNotLike('title', 'foo').or().anyLike('title', 'bar')) 108 | .and() 109 | .in('author.age', [20, 30, 40]) 110 | .and() 111 | .between('created', new Date('2021-01-01'), new Date('2021-12-31')) 112 | .and() 113 | .notBetween('author.age', 20, 30) 114 | .and() 115 | .in('author.city', ['New York', 'Los Angeles']) 116 | .and() 117 | .notIn('author.city', ['Chicago', 'Miami']) 118 | .and() 119 | .custom(filter('content~{:content}', { content: 'test' })) 120 | .build() 121 | 122 | expect(filter(query1.raw, query1.values)).toBe( 123 | "author.name='John' && (title?!~'foo' || title?~'bar') && (author.age=20 || author.age=30 || author.age=40) && (created>='2021-01-01 00:00:00.000Z' && created<='2021-12-31 00:00:00.000Z') && (author.age<20 || author.age>30) && (author.city='New York' || author.city='Los Angeles') && (author.city!='Chicago' && author.city!='Miami') && content~'test'", 124 | ) 125 | 126 | const groupTest = pbQuery() 127 | .equal('name', 'Alice') 128 | .or() 129 | .equal('name', 'Bob') 130 | .and() 131 | .group((q) => q.equal('name', 'Alice').or().equal('name', 'Bob')) 132 | .build(filter) 133 | 134 | expect(groupTest).toBe( 135 | "name='Alice' || name='Bob' && (name='Alice' || name='Bob')", 136 | ) 137 | }) 138 | 139 | test('nested groups', () => { 140 | const groupTest = pbQuery() 141 | .equal('name', 'Alice') 142 | .or() 143 | .equal('name', 'Bob') 144 | .and() 145 | .group((q) => q.equal('name', 'Alice').or().equal('name', 'Bob')) 146 | .and() 147 | .group((q) => 148 | q 149 | .isNotNull('name') 150 | .and() 151 | .group((q) => 152 | q.equal('name', 'Alice').or().equal('name', 'Bob'), 153 | ), 154 | ) 155 | .build(filter) 156 | 157 | expect(groupTest).toBe( 158 | "name='Alice' || name='Bob' && (name='Alice' || name='Bob') && (name!='' && (name='Alice' || name='Bob'))", 159 | ) 160 | }) 161 | 162 | test('back-relations', () => { 163 | const groupTest = pbQuery() 164 | .equal('anything_via_author', new Date('2021-12-31')) 165 | .and() 166 | .equal('anything_via_author.anything', new Date('2021-12-31')) 167 | .build(filter) 168 | 169 | expect(groupTest).toBe( 170 | "anything_via_author='2021-12-31 00:00:00.000Z' && anything_via_author.anything='2021-12-31 00:00:00.000Z'", 171 | ) 172 | }) 173 | 174 | test('cloned query', () => { 175 | const querySportsPosts = () => 176 | pbQuery().anyLike('tags', 'sports').and() 177 | 178 | const searchQuery1 = querySportsPosts() 179 | .search(['title', 'content', 'tags', 'author'], 'basketba') 180 | .build(pb.filter) 181 | expect(searchQuery1).toBe( 182 | "tags?~'sports' && (title~'basketba' || content~'basketba' || tags~'basketba' || author~'basketba')", 183 | ) 184 | 185 | const searchQuery2 = querySportsPosts() 186 | .search(['title', 'content', 'tags', 'author'], 'footba') 187 | .build(pb.filter) 188 | expect(searchQuery2).toBe( 189 | "tags?~'sports' && (title~'footba' || content~'footba' || tags~'footba' || author~'footba')", 190 | ) 191 | }) 192 | 193 | test('date macros', () => { 194 | const query1 = pbQuery().greaterThan('created', '@now').build(filter) 195 | expect(query1).toBe('created>@now') 196 | 197 | const query2 = pbQuery() 198 | .between('created', '@now', '@yesterday') 199 | .build(filter) 200 | expect(query2).toBe('(created>=@now && created<=@yesterday)') 201 | 202 | const query3 = pbQuery() 203 | .greaterThan('created', '@test' as '@now') 204 | .build(filter) 205 | expect(query3).toBe("created>'@test'") 206 | }) 207 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Language and Environment */ 6 | "target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 7 | 8 | /* Modules */ 9 | "module": "ESNext" /* Specify what module code is generated. */, 10 | "moduleResolution": "node", 11 | 12 | /* Emit */ 13 | "noEmit": true /* Disable emitting files from a compilation. */, 14 | 15 | /* Interop Constraints */ 16 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 17 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 18 | 19 | /* Type Checking */ 20 | "strict": true /* Enable all strict type-checking options. */, 21 | "noUncheckedIndexedAccess": true /* Add 'undefined' to a type when accessed using an index. */, 22 | 23 | /* Completeness */ 24 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 25 | } 26 | } 27 | --------------------------------------------------------------------------------