├── .nvmrc ├── .gitignore ├── .npmrc ├── .npmignore ├── biome.json ├── .github ├── dependabot.yml └── workflows │ ├── ci.yml │ └── cd.yml ├── tsconfig.json ├── .husky └── pre-commit ├── test ├── exports.test.js ├── error.test-d.ts ├── constructor.test-d.ts ├── ok.test-d.ts ├── commons.test.js ├── try.test-d.ts ├── index.test.js └── try.test.js ├── LICENSE ├── package.json ├── lib ├── index.js └── index.d.ts ├── README.md └── pnpm-lock.yaml /.nvmrc: -------------------------------------------------------------------------------- 1 | v24 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | coverage 3 | dist 4 | node_modules 5 | tsconfig.tsbuildinfo -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=true 2 | enable-pre-post-scripts=true 3 | package-manager-strict=false 4 | shell-emulator=true -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # whitelist approach 2 | 3 | * 4 | 5 | !lib/index.js 6 | !lib/index.d.ts 7 | !dist/index.cjs 8 | !dist/index.cjs.map 9 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/2.3.8/schema.json", 3 | "extends": ["@arthurfiorette/biomejs-config"] 4 | } 5 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: 'npm' 4 | directory: './' 5 | schedule: 6 | interval: 'monthly' 7 | 8 | - package-ecosystem: 'github-actions' 9 | directory: './' 10 | schedule: 11 | interval: 'monthly' -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "checkJs": true, 5 | "module": "NodeNext", 6 | "moduleResolution": "NodeNext", 7 | "noEmit": true, 8 | "skipDefaultLibCheck": true, 9 | "skipLibCheck": false, 10 | "strict": true 11 | }, 12 | "include": ["lib", "test"] 13 | } 14 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | FILES=$(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g') 2 | [ -z "$FILES" ] && exit 0 3 | 4 | # Prettify all selected files 5 | echo "$FILES" | xargs ./node_modules/.bin/biome check --write --unsafe --no-errors-on-unmatched 6 | 7 | # Add back the modified/prettified files to staging 8 | echo "$FILES" | xargs git add 9 | 10 | exit 0 -------------------------------------------------------------------------------- /test/exports.test.js: -------------------------------------------------------------------------------- 1 | import assert from 'node:assert'; 2 | import { describe, test } from 'node:test'; 3 | import { error, ok, Result, t } from '../lib/index.js'; 4 | 5 | describe('export {}', () => { 6 | test('Result.ok === ok', () => { 7 | assert.strictEqual(Result.ok, ok); 8 | }); 9 | 10 | test('Result.error === error', () => { 11 | assert.strictEqual(Result.error, error); 12 | }); 13 | 14 | test('Result.try === t', () => { 15 | assert.strictEqual(Result.try, t); 16 | }); 17 | 18 | test('Result is a class', () => { 19 | assert.strictEqual(typeof Result, 'function'); 20 | assert.strictEqual(Result.prototype.constructor, Result); 21 | }); 22 | 23 | test('only 4 exports', async () => { 24 | const keys = Object.keys(await import('../lib/index.js')); 25 | assert.strictEqual(keys.length, 4); 26 | assert.deepStrictEqual(keys.sort(), ['Result', 'error', 'ok', 't']); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Code CI 2 | 3 | on: 4 | push: 5 | workflow_dispatch: 6 | 7 | jobs: 8 | build: 9 | name: Test code 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v5 15 | 16 | - name: Setup pnpm 17 | uses: pnpm/action-setup@v4 18 | 19 | - name: Setup node and restore cached dependencies 20 | uses: actions/setup-node@v6 21 | with: 22 | node-version-file: '.nvmrc' 23 | cache: 'pnpm' 24 | 25 | - name: Install packages 26 | run: pnpm install --frozen-lockfile 27 | 28 | - name: Lint 29 | run: pnpm lint-ci 30 | 31 | - name: Typecheck 32 | run: pnpm test-types 33 | 34 | - name: Test 35 | run: pnpm test 36 | 37 | - name: Upload coverage reports to Codecov 38 | uses: codecov/codecov-action@v5 39 | with: 40 | token: ${{ secrets.CODECOV_TOKEN }} 41 | -------------------------------------------------------------------------------- /test/error.test-d.ts: -------------------------------------------------------------------------------- 1 | import { expectAssignable, expectType } from 'tsd'; 2 | import { type ErrorResult, error, Result, type ResultConstructor } from '../lib/index.js'; 3 | 4 | // Same function 5 | expectAssignable(error); 6 | 7 | // never changes the return type 8 | expectType(error(42)); 9 | expectType(error('42')); 10 | expectType(error(new Error('42'))); 11 | 12 | // Ensures iterator type is destructures correctly 13 | declare const [ok, err, val]: ErrorResult; 14 | expectType(ok); 15 | expectType(err); 16 | expectType(val); 17 | 18 | // Works with destructuring 19 | declare const result: ErrorResult; 20 | expectType(result.ok); 21 | expectType(result.error); 22 | expectType(result.value); 23 | 24 | // Ensures constructor falls back to ErrorResult type if params are incorrect 25 | // @ts-expect-error 26 | const res = new Result(false, new Error('Some Error'), 1); 27 | expectType(res); 28 | -------------------------------------------------------------------------------- /test/constructor.test-d.ts: -------------------------------------------------------------------------------- 1 | import { expectError, expectNotType, expectType } from 'tsd'; 2 | import { type ErrorResult, Result, type ValueResult } from '../lib/index.js'; 3 | 4 | // Always error types 5 | expectType(new Result(false, new Error('str'))); 6 | expectType(new Result(false, 123)); 7 | expectType(new Result(false, 'str')); 8 | 9 | // Always result types 10 | expectType>(new Result(true, undefined, 123)); 11 | expectType>(new Result(true, undefined, 'str')); 12 | 13 | // Does not unwraps promise 14 | const promiseResult = new Result(true, undefined, Promise.resolve(123)); 15 | expectType>>(promiseResult); 16 | expectNotType>>(promiseResult); 17 | 18 | // Does not uses result when when ErrorResult 19 | expectError(new Result(false, new Error('str'), 123)); 20 | expectError(new Result(false, 123, 'str')); 21 | 22 | // Does not uses error when when ValueResult 23 | expectError(new Result(true, 123, new Error('str'))); 24 | expectError(new Result(true, 'str', new Error('str'))); 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Arthur Fiorette 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /test/ok.test-d.ts: -------------------------------------------------------------------------------- 1 | import { expectAssignable, expectNotType, expectType } from 'tsd'; 2 | import { 3 | type ErrorResult, 4 | ok, 5 | Result, 6 | type ResultConstructor, 7 | type ValueResult 8 | } from '../lib/index.js'; 9 | 10 | // Same function 11 | expectAssignable(ok); 12 | 13 | // never changes the return type 14 | expectType>(ok(42)); 15 | expectType>(ok('42')); 16 | 17 | // does not unwraps promise 18 | const promiseResult = ok(Promise.resolve(42)); 19 | expectType>>(promiseResult); 20 | expectNotType>>(promiseResult); 21 | 22 | // Ensures iterator type is destructures correctly 23 | declare const [_ok, err, val]: ValueResult; 24 | expectType(_ok); 25 | expectType(err); 26 | expectType(val); 27 | 28 | // Works with destructuring 29 | declare const result: ValueResult; 30 | expectType(result.ok); 31 | expectType(result.error); 32 | expectType(result.value); 33 | 34 | // Ensures constructor falls back to ErrorResult type if params are incorrect 35 | // @ts-expect-error 36 | const res = new Result(true, new Error('Some Error'), 1); 37 | expectType(res); 38 | -------------------------------------------------------------------------------- /.github/workflows/cd.yml: -------------------------------------------------------------------------------- 1 | name: Publish to NPM 2 | 3 | on: 4 | release: 5 | types: [published] 6 | workflow_dispatch: 7 | 8 | permissions: 9 | id-token: write 10 | 11 | jobs: 12 | publish: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v5 18 | with: 19 | ref: ${{ github.head_ref }} 20 | fetch-depth: 0 21 | 22 | - name: Setup pnpm 23 | uses: pnpm/action-setup@v4 24 | 25 | - name: Setup node and restore cached dependencies 26 | uses: actions/setup-node@v6 27 | with: 28 | cache: 'pnpm' 29 | node-version-file: '.nvmrc' 30 | registry-url: 'https://registry.npmjs.org/' 31 | 32 | - name: Install packages 33 | run: pnpm install --frozen-lockfile 34 | 35 | - name: Lint 36 | run: pnpm lint-ci 37 | 38 | - name: Typecheck 39 | run: pnpm test-types 40 | 41 | - name: Test 42 | run: pnpm test 43 | 44 | - name: Build CJS bundle 45 | run: pnpm build-cjs 46 | 47 | - name: Update NPM 48 | run: npm i -g npm@latest 49 | 50 | - name: Publish to NPM 51 | run: pnpm publish --no-git-checks 52 | env: 53 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 54 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "try", 3 | "version": "1.0.3", 4 | "description": "A 373-byte Spec-Compliant Runtime-Only Implementation of the ECMAScript Try Operator Proposal Result class", 5 | "keywords": [ 6 | "try", 7 | "operator", 8 | "result", 9 | "safe", 10 | "error", 11 | "proposal" 12 | ], 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/arthurfiorette/try.git" 16 | }, 17 | "funding": "https://github.com/arthurfiorette/try?sponsor=1", 18 | "license": "MIT", 19 | "author": { 20 | "name": "Arthur Fiorette", 21 | "url": "https://arthur.place" 22 | }, 23 | "contributors": [ 24 | { 25 | "name": "Szymon Wygnański", 26 | "url": "https://finalclass.net" 27 | } 28 | ], 29 | "sideEffects": false, 30 | "type": "module", 31 | "exports": { 32 | "import": "./lib/index.js", 33 | "require": "./dist/index.cjs", 34 | "types": "./lib/index.d.ts" 35 | }, 36 | "main": "lib/index.js", 37 | "types": "lib/index.d.ts", 38 | "scripts": { 39 | "build-cjs": "tsdown lib/index.js --no-dts --sourcemap --platform neutral --format=cjs", 40 | "format": "biome format --write .", 41 | "lint": "biome check .", 42 | "lint-ci": "biome ci .", 43 | "lint-fix": "biome check --write --unsafe .", 44 | "prepare": "husky", 45 | "test": "c8 --reporter lcov node --test test/**/*.js", 46 | "test-types": "tsd --show-diff -f test", 47 | "test-watch": "node --watch --test test/**/*.js" 48 | }, 49 | "devDependencies": { 50 | "@arthurfiorette/biomejs-config": "^2.0.1", 51 | "@biomejs/biome": "^2.3.8", 52 | "@types/node": "^24.10.1", 53 | "c8": "^10.1.3", 54 | "husky": "^9.1.7", 55 | "tsd": "^0.33.0", 56 | "tsdown": "^0.17.1", 57 | "typescript": "^5.9.3" 58 | }, 59 | "packageManager": "pnpm@10.23.0", 60 | "publishConfig": { 61 | "access": "public", 62 | "provenance": true, 63 | "tag": "latest" 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | /** @template V */ 4 | export class Result { 5 | /** 6 | * @param {boolean} ok 7 | * @param {unknown} [error] 8 | * @param {V} [value] 9 | */ 10 | constructor(ok, error, value) { 11 | this.ok = !!ok; 12 | 13 | // must not set the other field to allow for 14 | // 'error' in result checks 15 | if (this.ok) { 16 | this.value = value; 17 | } else { 18 | this.error = error; 19 | } 20 | } 21 | 22 | *[Symbol.iterator]() { 23 | yield this.ok; 24 | yield this.error; 25 | yield this.value; 26 | } 27 | 28 | /** 29 | * @this void 30 | * @template T 31 | * @param {T} value 32 | */ 33 | static ok(value) { 34 | return new Result(true, undefined, value); 35 | } 36 | 37 | /** 38 | * @this void 39 | * @param {unknown} error 40 | */ 41 | static error(error) { 42 | return new Result(false, error); 43 | } 44 | 45 | /** 46 | * @this void 47 | * @template T 48 | * @param {any} result 49 | * @param {...any} args 50 | * @returns {Promise> | Result} 51 | */ 52 | static try(result, ...args) { 53 | // Wraps everything because `try` should never throw. 54 | try { 55 | // If syncFn() is passed directly, it throws before try() runs. 56 | // To prevent this, wrap it in a function and unwrap its result. 57 | if (typeof result === 'function') { 58 | result = result.apply(undefined, args); 59 | } 60 | 61 | // Promises must return a valid Promise> 62 | if (result instanceof Promise) { 63 | return result.then(Result.ok, Result.error); 64 | } 65 | 66 | // If the result is not a function or a Promise, we can be sure its a success 67 | return Result.ok(result); 68 | } catch (error) { 69 | return Result.error(error); 70 | } 71 | } 72 | } 73 | 74 | // Aliases 75 | export const error = Result.error; 76 | export const ok = Result.ok; 77 | export const t = Result.try; 78 | -------------------------------------------------------------------------------- /test/commons.test.js: -------------------------------------------------------------------------------- 1 | import assert from 'node:assert'; 2 | import fs from 'node:fs'; 3 | import { describe, test } from 'node:test'; 4 | import { Result } from '../lib/index.js'; 5 | 6 | describe('Usage', () => { 7 | test('JSON.parse', () => { 8 | const result = Result.try(JSON.parse, '{"ok":true}'); 9 | assert.strictEqual(result.ok, true); 10 | assert.strictEqual(result.value.ok, true); 11 | 12 | const result2 = Result.try(JSON.parse, '{"ok":true'); 13 | assert.strictEqual(result2.ok, false); 14 | assert.strictEqual(result2.error instanceof SyntaxError, true); 15 | }); 16 | 17 | test('JSON.stringify', () => { 18 | const result = Result.try(JSON.stringify, { ok: true }); 19 | assert.strictEqual(result.ok, true); 20 | assert.strictEqual(result.value, '{"ok":true}'); 21 | 22 | const result2 = Result.try( 23 | JSON.stringify, 24 | new Proxy( 25 | {}, 26 | { 27 | get: () => { 28 | throw new TypeError('err'); 29 | } 30 | } 31 | ) 32 | ); 33 | assert.strictEqual(result2.ok, false); 34 | assert.strictEqual(result2.error instanceof TypeError, true); 35 | }); 36 | 37 | test('fs.readFile', async () => { 38 | const result = await Result.try(fs.promises.readFile, 'test/commons.test.js', 'utf8'); 39 | assert.strictEqual(result.ok, true); 40 | assert.strictEqual(typeof result.value, 'string'); 41 | 42 | const result2 = await Result.try(fs.promises.readFile, 'nonexistent.txt', 'utf8'); 43 | assert.strictEqual(result2.ok, false); 44 | assert.strictEqual(result2.error instanceof Error, true); 45 | }); 46 | 47 | test('fs.readFileSync', () => { 48 | const result = Result.try(fs.readFileSync, 'test/commons.test.js', 'utf8'); 49 | assert.strictEqual(result.ok, true); 50 | assert.strictEqual(typeof result.value, 'string'); 51 | 52 | const result2 = Result.try(fs.readFileSync, 'nonexistent.txt', 'utf8'); 53 | assert.strictEqual(result2.ok, false); 54 | assert.strictEqual(result2.error instanceof Error, true); 55 | }); 56 | }); 57 | -------------------------------------------------------------------------------- /test/try.test-d.ts: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs'; 2 | import { expectAssignable, expectError, expectType } from 'tsd'; 3 | import { 4 | type ErrorResult, 5 | type Result, 6 | type ResultConstructor, 7 | t, 8 | type ValueResult 9 | } from '../lib/index.js'; 10 | 11 | // Same function 12 | expectAssignable(t); 13 | 14 | // Keeps any when no type is provided 15 | expectType>(t(() => JSON.parse('{"foo": "bar"}'))); 16 | expectType>(t(JSON.parse, '{"foo": "bar"}')); 17 | expectType>(t(JSON.parse('{"foo": "bar"}'))); 18 | 19 | async function asyncFn(json: string) { 20 | return JSON.parse(json); 21 | } 22 | expectType>>(t(async () => JSON.parse('{"foo": "bar"}'))); 23 | expectType>>(t(async (args) => JSON.parse(args), '{"foo": "bar"}')); 24 | expectType>>(t(asyncFn, '{"foo": "bar"}')); 25 | 26 | // Supports promise overloads 27 | expectType>>(t(fs.promises.readFile('package.json', 'utf-8'))); 28 | expectType>>(t(() => fs.promises.readFile('package.json', 'utf-8'))); 29 | expectType>>(t(async () => fs.promises.readFile('package.json', 'utf-8'))); 30 | 31 | // readFileSync also works 32 | expectType>(t(() => fs.readFileSync('package.json', 'utf-8'))); 33 | expectType>>(t(async () => fs.readFileSync('package.json', 'utf-8'))); 34 | 35 | // Ensures iterator type is destructures correctly 36 | declare const [_ok, err, val]: Result; 37 | 38 | expectType(_ok); 39 | expectType(err); 40 | expectType(val); 41 | 42 | if (_ok) { 43 | expectType(_ok); 44 | expectType(err); 45 | expectType(val); 46 | } else { 47 | expectType(_ok); 48 | expectType(err); 49 | expectType(val); 50 | } 51 | 52 | // Works with destructuring 53 | declare const result: Result; 54 | expectType(result.ok); 55 | expectType(result.error); 56 | expectType(result.value); 57 | 58 | if (result.ok) { 59 | expectType(result.ok); 60 | expectType(result.error); 61 | expectType(result.value); 62 | } else { 63 | expectType(result.ok); 64 | expectType(result.error); 65 | expectType(result.value); 66 | } 67 | 68 | // Synchronous throwing function 69 | expectType( 70 | t(() => { 71 | throw new Error('sync error'); 72 | }) 73 | ); 74 | 75 | // Asynchronous throwing function 76 | expectType>( 77 | t(async () => { 78 | throw new Error('async error'); 79 | }) 80 | ); 81 | 82 | // Null and undefined handling 83 | expectType>(t(() => null)); 84 | expectType>(t(() => undefined)); 85 | 86 | // Wrapping primitive values 87 | expectType>(t(true)); 88 | expectType>(t(42)); 89 | expectType>(t('text')); 90 | 91 | // Passing a function that doesn't throw 92 | expectType>(t(Math.random)); 93 | 94 | // Function with args 95 | function multiply(a: number, b: number) { 96 | return a * b; 97 | } 98 | expectType>(t(multiply, 2, 3)); 99 | 100 | async function asyncString(): Promise { 101 | return 'async result'; 102 | } 103 | expectType>>(t(asyncString)); 104 | 105 | // Function returning a promise that resolves to number 106 | function promiseNumber() { 107 | return Promise.resolve(42); 108 | } 109 | expectType>>(t(promiseNumber)); 110 | 111 | // Wrapping a manually created Promise 112 | expectType>>(t(new Promise((resolve) => resolve('ok')))); 113 | 114 | t(() => Promise.resolve('chain')).then((res) => { 115 | expectType>(res); 116 | }); 117 | 118 | t(Promise.resolve('chain')).then((res) => { 119 | expectType>(res); 120 | }); 121 | 122 | // Does not unwraps thenables 123 | expectType>( 124 | t(() => ({ 125 | // biome-ignore lint/suspicious/noThenProperty: This is a test 126 | then(): boolean { 127 | return true; 128 | } 129 | })) 130 | ); 131 | expectType>( 132 | t(() => ({ 133 | // biome-ignore lint/suspicious/noThenProperty: This is a test 134 | then() { 135 | throw new Error('error'); 136 | } 137 | })) 138 | ); 139 | 140 | // Breaks with instance methods 141 | function instanceMethod(this: { foo: number }, param: number) { 142 | return this.foo + param; 143 | } 144 | expectError(t(instanceMethod, 123)); 145 | -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | import assert from 'node:assert'; 2 | import { describe, test } from 'node:test'; 3 | import { Result } from '../lib/index.js'; 4 | 5 | const err = new Error('Test error'); 6 | 7 | describe('Result', () => { 8 | test('Result.ok()', () => { 9 | const result = Result.ok(42); 10 | assert.strictEqual(result.ok, true); 11 | assert.strictEqual(result.value, 42); 12 | }); 13 | 14 | test('Result.error()', () => { 15 | const result = Result.error(err); 16 | assert.strictEqual(result.ok, false); 17 | assert.strictEqual(result.error, err); 18 | }); 19 | 20 | test("'error' in Result", () => { 21 | const result = Result.ok(42); 22 | assert.strictEqual('error' in result, false); 23 | }); 24 | 25 | test("'value' in Result", () => { 26 | const result = Result.error(err); 27 | assert.strictEqual('value' in result, false); 28 | }); 29 | 30 | test('Result[Symbol.iterator]', () => { 31 | assert.ok(Symbol.iterator in Result.prototype); 32 | assert.deepStrictEqual([...Result.ok(42)], [true, undefined, 42]); 33 | assert.deepStrictEqual([...Result.error(err)], [false, err, undefined]); 34 | }); 35 | 36 | test('Result instanceof Array', () => { 37 | assert.strictEqual(Array.isArray(Result.ok(42)), false); 38 | assert.strictEqual(Array.isArray(Result.error(err)), false); 39 | }); 40 | 41 | // TODO: This behavior is not described in the proposal. 42 | test('PromiseLike', async () => { 43 | // biome-ignore lint/suspicious/noThenProperty: intentionally using a thenable 44 | const thenable = { then: () => Promise.resolve() }; 45 | const result = await Result.ok(thenable); 46 | assert.strictEqual(result.ok, true); 47 | assert.deepStrictEqual(result.value, thenable); 48 | }); 49 | 50 | test('typeof Result#ok', () => { 51 | assert.strictEqual(typeof new Result(true, null, 42).ok, 'boolean'); 52 | assert.strictEqual(typeof new Result(false, 42).ok, 'boolean'); 53 | //@ts-expect-error 54 | assert.strictEqual(typeof new Result('', 42).ok, 'boolean'); 55 | //@ts-expect-error 56 | assert.strictEqual(typeof new Result(1, null, 42).ok, 'boolean'); 57 | //@ts-expect-error 58 | assert.strictEqual(typeof new Result({ a: 1 }, null, { a: 1 }).ok, 'boolean'); 59 | }); 60 | }); 61 | 62 | describe('Result(Result)', () => { 63 | // tests all combinations of nested Result objects and ensure they are not inlined 64 | test('Result.ok(Result.ok())', () => { 65 | const innerResult = Result.ok('inner'); 66 | const result = Result.ok(innerResult); 67 | assert.strictEqual(result.ok, true); 68 | assert.strictEqual(result.value, innerResult); 69 | }); 70 | 71 | test('Result.error(Result.error())', () => { 72 | const innerError = Result.error('inner error'); 73 | const result = Result.error(innerError); 74 | assert.strictEqual(result.ok, false); 75 | assert.strictEqual(result.error, innerError); 76 | }); 77 | 78 | test('Result.ok(Result.error())', () => { 79 | const innerError = Result.error('inner error'); 80 | const result = Result.ok(innerError); 81 | assert.strictEqual(result.ok, true); 82 | assert.strictEqual(result.value, innerError); 83 | }); 84 | 85 | test('Result.error(Result.ok())', () => { 86 | const innerResult = Result.ok('inner'); 87 | const result = Result.error(innerResult); 88 | assert.strictEqual(result.ok, false); 89 | assert.strictEqual(result.error, innerResult); 90 | }); 91 | 92 | test('Result.ok(Result.ok(Result.ok()))', () => { 93 | const innerInnerResult = Result.ok('inner inner'); 94 | const innerResult = Result.ok(innerInnerResult); 95 | const result = Result.ok(innerResult); 96 | assert.strictEqual(result.ok, true); 97 | assert.strictEqual(result.value, innerResult); 98 | assert.strictEqual(result.value.ok, true); 99 | assert.strictEqual(result.value.value, innerInnerResult); 100 | }); 101 | 102 | test('Result.error(Result.error(Result.error()))', () => { 103 | const innerInnerError = Result.error('inner inner error'); 104 | const innerError = Result.error(innerInnerError); 105 | const result = Result.error(innerError); 106 | assert.strictEqual(result.ok, false); 107 | assert.strictEqual(result.error, innerError); 108 | assert.strictEqual(result.error.ok, false); 109 | assert.strictEqual(result.error.error, innerInnerError); 110 | }); 111 | 112 | test('Result.try(Result.ok())', () => { 113 | const innerResult = Result.ok('inner'); 114 | const result = Result.try(() => innerResult); 115 | assert.strictEqual(result.ok, true); 116 | assert.strictEqual(result.value, innerResult); 117 | }); 118 | 119 | test('Result.try(Result.error())', () => { 120 | const innerError = Result.error('inner error'); 121 | const result = Result.try(() => innerError); 122 | assert.strictEqual(result.ok, true); 123 | assert.strictEqual(result.value, innerError); 124 | }); 125 | 126 | test('Result.try(throw Result.ok())', () => { 127 | const innerResult = Result.ok('inner'); 128 | const result = Result.try(() => { 129 | throw innerResult; 130 | }); 131 | assert.strictEqual(result.ok, false); 132 | assert.strictEqual(result.error, innerResult); 133 | }); 134 | 135 | test('Result.try(throw Result.error())', () => { 136 | const innerError = Result.error('inner error'); 137 | const result = Result.try(() => { 138 | throw innerError; 139 | }); 140 | assert.strictEqual(result.ok, false); 141 | assert.strictEqual(result.error, innerError); 142 | }); 143 | }); 144 | -------------------------------------------------------------------------------- /lib/index.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Represents a failed result. 3 | * 4 | * This object can be destructured like a tuple: `[ok, error, value]`, or accessed via 5 | * named properties: (`ok`, `error`, `value`). 6 | * 7 | * @see {@linkcode Result} 8 | * @see {@linkcode ValueResult} 9 | */ 10 | type ErrorResult = { 11 | ok: false; 12 | error: unknown; 13 | value: undefined; 14 | } & [ok: false, error: unknown, value: undefined]; 15 | 16 | /** 17 | * Represents a successful result. 18 | * 19 | * This object can be destructured like a tuple: `[ok, error, value]`, or accessed via 20 | * named properties: (`ok`, `error`, `value`). 21 | * 22 | * @see {@linkcode Result} 23 | * @see {@linkcode ErrorResult} 24 | */ 25 | type ValueResult = { 26 | ok: true; 27 | error: undefined; 28 | value: V; 29 | } & [ok: true, error: undefined, value: V]; 30 | 31 | /** 32 | * A `Result` represents the outcome of an operation, encapsulating either a success (`ok: 33 | * true`) or a failure (`ok: false`). 34 | * 35 | * **Even though it type has array-like properties, it is not an array and those 36 | * properties does not exists at runtime.** 37 | * 38 | * It can be used as both a named object and a destructurable tuple. 39 | */ 40 | export type Result = ErrorResult | ValueResult; 41 | 42 | type WrapResult

= 43 | // checks for any 44 | 0 extends 1 & P 45 | ? // intentionally omit Promise> return type to simplify usage 46 | Result 47 | : // checks for never 48 | [P] extends [never] 49 | ? ErrorResult 50 | : // promise never 51 | P extends Promise 52 | ? Promise 53 | : // unwraps any promise return type 54 | P extends Promise 55 | ? Promise>> 56 | : // normal return type 57 | Result

; 58 | 59 | interface ResultConstructor { 60 | /** 61 | * Creates a failed `Result` with an error. 62 | * 63 | * @example 64 | * 65 | * ```ts 66 | * new Result(false, new Error('Something went wrong')); 67 | * ``` 68 | */ 69 | new (ok: false, error: unknown, value?: undefined | null): ErrorResult; 70 | 71 | /** 72 | * Creates a successful `Result` with a value. 73 | * 74 | * @example 75 | * 76 | * ```ts 77 | * new Result(true, undefined, 42); 78 | * new Result(false, new Error('Something went wrong')); 79 | * ``` 80 | */ 81 | new (ok: true, error: undefined | null, value: V): ValueResult; 82 | 83 | /** 84 | * Creates a successful `Result`. 85 | * 86 | * @param value The value to wrap. 87 | * @returns A `Result` with `ok: true`. 88 | */ 89 | ok(this: void, value: V): ValueResult; 90 | 91 | /** 92 | * Creates a failed `Result`. 93 | * 94 | * @param error The error to wrap. 95 | * @returns A `Result` with `ok: false`. 96 | */ 97 | error(this: void, error: unknown): ErrorResult; 98 | 99 | /** 100 | * Wraps a promise in a `Result`. The returned promise never rejects. 101 | * 102 | * @example 103 | * 104 | * ```ts 105 | * const [ok, error, value] = await Result.try(Promise.resolve('pass')); 106 | * const [ok, error, value] = await Result.try(Promise.reject('fail')); 107 | * ``` 108 | * 109 | * @param promise A promise to wrap. 110 | * @returns A promise that resolves to a `Result`. 111 | */ 112 | try

>(this: void, promise: P): WrapResult

; 113 | 114 | /** 115 | * Executes a function and wraps its return value in a `Result`. 116 | * 117 | * If the function returns a promise, the result is awaited and wrapped. If the function 118 | * throws, the error is captured as a failed `Result`. 119 | * 120 | * @example 121 | * 122 | * ```ts 123 | * const [ok, error, value] = Result.try(syncFn, arg1, arg2); 124 | * const [ok, error, value] = await Result.try(asyncFn, arg1, arg2); 125 | * 126 | * const [ok, error, value] = Result.try(() => syncFn(arg1, arg2)); 127 | * const [ok, error, value] = await Result.try(async () => await asyncFn(arg1, arg2)); 128 | * ``` 129 | * 130 | * @param fn The function to execute. 131 | * @param args Arguments to pass to the function. 132 | * @returns A `Result` or a `Promise`, depending on the function type. 133 | */ 134 | try any>( 135 | this: void, 136 | fn: F, 137 | ...args: Parameters 138 | ): WrapResult>; 139 | 140 | /** 141 | * An alias for {@linkcode Result.ok}. 142 | * 143 | * @example 144 | * 145 | * ```ts 146 | * const [ok, error, value] = await Result.try(myObject); 147 | * const [ok, error, value] = await Result.try(myArray); 148 | * ``` 149 | * 150 | * @param value The value to wrap. 151 | * @returns A `Result` with `ok: true`. 152 | */ 153 | try(this: void, value: V): ValueResult; 154 | } 155 | 156 | /** The main `Result` namespace for constructing and handling operation results. */ 157 | export declare const Result: ResultConstructor; 158 | 159 | /** Shorthand for {@linkcode Result.ok}. */ 160 | export declare const ok: ResultConstructor['ok']; 161 | 162 | /** Shorthand for {@linkcode Result.error}. */ 163 | export declare const error: ResultConstructor['error']; 164 | 165 | /** 166 | * Shorthand for {@linkcode Result.try}. 167 | * 168 | * This overload supports both function and promise-based usage. 169 | * 170 | * @example 171 | * 172 | * ```ts 173 | * const [ok, error, value] = Result.try(syncFn, arg1, arg2); 174 | * const [ok, error, value] = await Result.try(asyncFn, arg1, arg2); 175 | * 176 | * const [ok, error, value] = Result.try(() => syncFn(arg1, arg2)); 177 | * const [ok, error, value] = await Result.try(async () => await asyncFn(arg1, arg2)); 178 | * 179 | * const [ok, error, value] = await Result.try(Promise.resolve('pass')); 180 | * const [ok, error, value] = await Result.try(Promise.reject('fail')); 181 | * ``` 182 | */ 183 | export declare const t: ResultConstructor['try']; 184 | -------------------------------------------------------------------------------- /test/try.test.js: -------------------------------------------------------------------------------- 1 | import assert from 'node:assert'; 2 | import { describe, test } from 'node:test'; 3 | import { Result } from '../lib/index.js'; 4 | 5 | function syncOk() { 6 | return 'ok'; 7 | } 8 | 9 | function syncErr() { 10 | throw 'err'; 11 | } 12 | 13 | async function asyncResolve() { 14 | return 'resolve'; 15 | } 16 | 17 | async function asyncReject() { 18 | throw 'reject'; 19 | } 20 | 21 | function syncResolve() { 22 | return asyncResolve(); 23 | } 24 | 25 | function syncReject() { 26 | return asyncReject(); 27 | } 28 | 29 | function syncArgs(a = 0, b = 0) { 30 | return a + b; 31 | } 32 | 33 | function syncErrArgs(e = '', r = '', r2 = '') { 34 | throw e + r + r2; 35 | } 36 | 37 | async function asyncResolveArgs(a = '', b = '') { 38 | return a + b; 39 | } 40 | 41 | async function asyncRejectArgs(err = new Error('reject')) { 42 | throw err; 43 | } 44 | 45 | describe('Result.try(fn)', () => { 46 | test('syncOk()', () => { 47 | const result = Result.try(syncOk); 48 | assert.strictEqual(result.ok, true); 49 | assert.strictEqual(result.value, 'ok'); 50 | }); 51 | 52 | test('syncErr()', () => { 53 | const result = Result.try(syncErr); 54 | assert.strictEqual(result.ok, false); 55 | assert.strictEqual(result.error, 'err'); 56 | }); 57 | 58 | test('asyncResolve()', async () => { 59 | const result = await Result.try(asyncResolve); 60 | assert.strictEqual(result.ok, true); 61 | assert.strictEqual(result.value, 'resolve'); 62 | }); 63 | 64 | test('asyncReject()', async () => { 65 | const result = await Result.try(asyncReject); 66 | assert.strictEqual(result.ok, false); 67 | assert.strictEqual(result.error, 'reject'); 68 | }); 69 | 70 | test('syncResolve()', async () => { 71 | const result = await Result.try(syncResolve); 72 | assert.strictEqual(result.ok, true); 73 | assert.strictEqual(result.value, 'resolve'); 74 | }); 75 | 76 | test('syncReject()', async () => { 77 | const result = await Result.try(syncReject); 78 | assert.strictEqual(result.ok, false); 79 | assert.strictEqual(result.error, 'reject'); 80 | }); 81 | }); 82 | 83 | describe('Result.try(fn, ...args)', () => { 84 | test('syncArgs(1, 2)', () => { 85 | const result = Result.try(syncArgs, 1, 2); 86 | assert.strictEqual(result.ok, true); 87 | assert.strictEqual(result.value, 3); 88 | }); 89 | 90 | test('syncErrArgs()', () => { 91 | const result = Result.try(syncErrArgs, 'ar', 'th', 'ur'); 92 | assert.strictEqual(result.ok, false); 93 | assert.strictEqual(result.error, 'arthur'); 94 | }); 95 | 96 | test('asyncResolveArgs(1, 2)', async () => { 97 | const result = await Result.try(asyncResolveArgs, 'art', 'hur'); 98 | assert.strictEqual(result.ok, true); 99 | assert.strictEqual(result.value, 'arthur'); 100 | }); 101 | 102 | test('asyncRejectArgs()', async () => { 103 | const err = new Error('123'); 104 | const result = await Result.try(asyncRejectArgs, err); 105 | assert.strictEqual(result.ok, false); 106 | assert.strictEqual(result.error, err); 107 | }); 108 | }); 109 | 110 | describe('Result.try(Promise)', () => { 111 | test('Promise.resolve()', async () => { 112 | const result = await Result.try(Promise.resolve(42)); 113 | assert.strictEqual(result.ok, true); 114 | assert.strictEqual(result.value, 42); 115 | }); 116 | 117 | test('Promise.reject()', async () => { 118 | const err = new Error('Test error'); 119 | const result = await Result.try(Promise.reject(err)); 120 | assert.strictEqual(result.ok, false); 121 | assert.strictEqual(result.error, err); 122 | }); 123 | 124 | test('Promise.resolve(Function)', async () => { 125 | const result = await Result.try(Promise.resolve(() => {})); 126 | 127 | assert.strictEqual(result.ok, true); 128 | assert.strictEqual(typeof result.value, 'function'); 129 | }); 130 | 131 | test('Promise.reject(Function)', async () => { 132 | const result = await Result.try(Promise.reject(() => {})); 133 | 134 | assert.strictEqual(result.ok, false); 135 | assert.strictEqual(typeof result.error, 'function'); 136 | }); 137 | 138 | test('() => PromiseLike', () => { 139 | const thenable = { 140 | // biome-ignore lint/suspicious/noThenProperty: This is a test 141 | then() { 142 | return true; 143 | } 144 | }; 145 | 146 | const result = Result.try(() => { 147 | return thenable; 148 | }); 149 | 150 | // Should not execute then-ables 151 | assert.strictEqual(result.ok, true); 152 | assert.strictEqual(result.value, thenable); 153 | }); 154 | 155 | test('() => throw PromiseLike', () => { 156 | const thenable = { 157 | // biome-ignore lint/suspicious/noThenProperty: This is a test 158 | then() { 159 | throw new Error('Test error'); 160 | } 161 | }; 162 | 163 | const result = Result.try(() => { 164 | return thenable; 165 | }); 166 | 167 | // Should not execute then-ables 168 | assert.strictEqual(result.ok, true); 169 | assert.strictEqual(result.value, thenable); 170 | }); 171 | }); 172 | 173 | describe('Result.try(Literal)', () => { 174 | test('String', () => { 175 | const result = Result.try('ok'); 176 | assert.strictEqual(result.ok, true); 177 | assert.strictEqual(result.value, 'ok'); 178 | }); 179 | 180 | test('Number', () => { 181 | const result = Result.try(42); 182 | assert.strictEqual(result.ok, true); 183 | assert.strictEqual(result.value, 42); 184 | }); 185 | 186 | test('Boolean', () => { 187 | const result = Result.try(true); 188 | assert.strictEqual(result.ok, true); 189 | assert.strictEqual(result.value, true); 190 | }); 191 | 192 | test('Object', () => { 193 | const result = Result.try({ ok: true }); 194 | assert.strictEqual(result.ok, true); 195 | assert.deepStrictEqual(result.value, { ok: true }); 196 | }); 197 | 198 | test('Array', () => { 199 | const result = Result.try([1, 2, 3]); 200 | assert.strictEqual(result.ok, true); 201 | assert.deepStrictEqual(result.value, [1, 2, 3]); 202 | }); 203 | }); 204 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Using this package? Please consider donating to support the proposal ❤️ 3 |
4 | 5 | Help try grow! Star and share this amazing repository with your friends and co-workers! 6 | 7 |

8 | 9 |

10 | License 11 | Downloads 12 | Bundlephobia 13 | Last commit 14 | Codecov 15 | 16 |

17 | 18 |
19 | 20 |

TRY

21 | 22 | > A [373-byte](https://bundlephobia.com/package/try) spec-compliant runtime-only implementation of the [`Result` class from the ECMAScript Try Operator proposal](https://github.com/arthurfiorette/proposal-try-operator). 23 | 24 | ```ts 25 | import { t } from 'try'; 26 | 27 | const [ok, error, value] = t(() => JSON.parse('{"foo": "bar"}')); 28 | const [ok, error, value] = await t(axios.get('https://arthur.place')); 29 | ``` 30 | 31 |
32 | 33 | This package is a minimal and precise reference implementation of the [`Result` class](https://github.com/arthurfiorette/proposal-try-operator#result-class) as described in the [Try Operator](https://github.com/arthurfiorette/proposal-try-operator) proposal for JavaScript. 34 | 35 | It aims to provide a lightweight and fast runtime utility that reflects exactly how the proposed `try` operator would behave, and **will not evolve independently of the proposal**. 36 | 37 | If you'd like to suggest changes or improvements to the behavior or API, please [open an issue on the proposal repository](https://github.com/arthurfiorette/proposal-try-operator/issues/new/choose). Once discussed and approved there, changes will be reflected in this package. 38 | 39 |
40 | 41 | - [Why This Exists](#why-this-exists) 42 | - [Usage](#usage) 43 | - [Wrapping a Function Call](#wrapping-a-function-call) 44 | - [`t()` alias](#t-alias) 45 | - [Prefer Using the Result Object in Multi-Try Scenarios](#prefer-using-the-result-object-in-multi-try-scenarios) 46 | - [Works With Promises Too!](#works-with-promises-too) 47 | - [No `Result.bind`](#no-resultbind) 48 | - [Creating Results Manually](#creating-results-manually) 49 | - [Learn More](#learn-more) 50 | - [Acknowledgements](#acknowledgements) 51 | - [License](#license) 52 | 53 |
54 | 55 | ```ts 56 | import { Result, ok, error, t } from 'try'; 57 | 58 | // Synchronous function call 59 | const [ok1, err1, val1] = t(JSON.parse, '{"foo":"bar"}'); 60 | 61 | // Arrow function context 62 | const [ok2, err2, val2] = t(() => decoder.decode(buffer)); 63 | 64 | // Promise call 65 | const [ok3, err3, val3] = await t(fetch, 'https://api.example.com'); 66 | 67 | // Promise-safe call (safely catches both sync and async errors) 68 | const [ok4, err4, val4] = await t(() => readFile('./config.json')); 69 | 70 | // Argument passthrough 71 | const [ok5, err5, val5] = t((a, b) => a + b, 2, 3); 72 | 73 | // Keep full result object for readability 74 | const result = await t(fetch, 'https://arthur.place'); 75 | if (result.ok) console.log(await result.value.text()); 76 | 77 | // Manual success and error results 78 | const success = ok(42); 79 | const failure = error(new Error('nope')); 80 | 81 | // Manual Result creation via class 82 | const successObj = Result.ok('done'); 83 | const failureObj = Result.error('fail'); 84 | ``` 85 | 86 |
87 | 88 | ## Why This Exists 89 | 90 | JavaScript error handling can be verbose and inconsistent. The [Try Operator proposal](https://github.com/arthurfiorette/proposal-try-operator) introduces a new pattern that returns structured `Result` objects instead of throwing exceptions, simplifying async and sync error flows alike. 91 | 92 | While the proposal is still in the works, this package provides a way to experiment with the new pattern in a standardized way. 93 | 94 | This package provides a drop-in utility: `Result.try()` (or the shorter `t()`) to wrap expressions and handle errors in a clean, tuple-like form. 95 | 96 | ```ts 97 | const [ok, error, value] = t(JSON.parse, '{"foo":"bar"}'); 98 | 99 | if (ok) { 100 | console.log(value.foo); 101 | } else { 102 | console.error('Invalid JSON', error); 103 | } 104 | ``` 105 | 106 | > You can destructure the result into `[ok, error, value]`, or access `.ok`, `.error`, and `.value` directly depending on your use case. 107 | 108 |
109 | 110 | ## Usage 111 | 112 | All methods are documented via TSDoc, so your editor will guide you with full type support and autocomplete. 113 | 114 | ### Wrapping a Function Call 115 | 116 | Use `Result.try()` or `t()` to wrap a potentially failing operation: 117 | 118 | ```ts 119 | const [ok, error, value] = Result.try(() => JSON.parse(request.body)); 120 | 121 | if (ok) { 122 | console.log(`Hello ${value.name}`); 123 | } else { 124 | console.error(`Invalid JSON!`); 125 | } 126 | ``` 127 | 128 | > [!NOTE] 129 | > `Result.try(() => fn())` is verbose compared to the proposal's future `try fn()` syntax. Always prefer to use the `t()` alias for cleaner code. 130 | 131 |
132 | 133 | ### `t()` alias 134 | 135 | To make code cleaner and more ergonomic while we wait for language-level syntax sugar, this package also exports `t`, a shortcut for `Result.try`. 136 | 137 | ```ts 138 | import { readFile } from 'node:fs/promises'; 139 | import { readFileSync } from 'node:fs'; 140 | 141 | // Example (this is void) 142 | const [ok, error, value] = t(readFileSync, './config.json'); 143 | // If `this` matters in your context 144 | const [ok, error, value] = t(() => decoder.decode(request.body)); 145 | // Promises don't need wrapping 146 | const [ok, error, value] = await t(axios.get('http://example.com')); 147 | // Safer way even for promises (catches sync errors before returning a promise) 148 | const [ok, error, value] = await t(readFile, path); 149 | ``` 150 | 151 | The `t(fn, ...args)` form is ideal: it automatically passes arguments to your function, preserves full TypeScript inference, and keeps code short and readable. 152 | 153 | ```ts 154 | function divide(a: number, b: number) { 155 | return a / b; 156 | } 157 | 158 | const [ok, error, value] = t(divide, 10, 2); 159 | // ok: true, value: 5 160 | ``` 161 | 162 |
163 | 164 | ### Prefer Using the Result Object in Multi-Try Scenarios 165 | 166 | While destructuring works well for simple use cases, it can lead to awkward variable naming and clutter when handling multiple `try` results. In these cases, **it's recommended to keep the full result object and access `.ok`, `.error`, and `.value` directly** for better clarity and readability. 167 | 168 | ❌ Bad (managing variable names becomes cumbersome): 169 | 170 | ```ts 171 | // error handling omitted for brevity 172 | const [ok1, error1, value1] = Result.try(() => axios.get(...)); 173 | const [ok2, error2, value2] = Result.try(() => value1.data.property); 174 | ``` 175 | 176 | ✅ Better (clearer structure and easier to follow): 177 | 178 | ```ts 179 | // error handling omitted for brevity 180 | const response = await Result.try(fetch('https://arthur.place')); 181 | const data = await Result.try(() => response.value.text())); 182 | ``` 183 | 184 | Using the result object directly avoids unnecessary boilerplate and naming inconsistencies, especially in nested or sequential operations. It's a cleaner, more scalable pattern that mirrors real-world error handling flows. 185 | 186 |
187 | 188 | ## Works With Promises Too! 189 | 190 | You can pass a `Promise` directly and get a `Result`-wrapped version: 191 | 192 | ```ts 193 | const [ok, error, value] = await t( 194 | fs.promises.readFile('./config.json') 195 | ); 196 | 197 | if (ok) { 198 | const config = JSON.parse(value.toString()); 199 | } else { 200 | console.error('Failed to read file', error); 201 | } 202 | ``` 203 | 204 | The return value of `t()` is automatically `await`-able if the function returns a promise, no extra handling required. 205 | 206 |
207 | 208 | ## No `Result.bind` 209 | 210 | This implementation **will never provide a `Result.bind()`** (like `util.promisify`) because the Try Operator follows the [Caller’s Approach](https://github.com/arthurfiorette/proposal-try-operator/tree/main#callers-approach) model. 211 | 212 | That means **error handling belongs to the calling context**, not the function itself. Wrapping a function with `bind()` would push error encapsulation into the callee, breaking that principle. 213 | 214 | **In short:** the caller chooses to wrap a function call in `Result.try`, not the function author. 215 | 216 |
217 | 218 | ## Creating Results Manually 219 | 220 | You can also create `Result` objects directly: 221 | 222 | ```ts 223 | import { Result, ok, error } from 'try'; 224 | 225 | // With full Result class 226 | const res1 = Result.ok('done'); 227 | const res2 = Result.error('fail'); 228 | 229 | // Shorthand 230 | const okRes = ok(42); 231 | const errRes = error('oops'); 232 | ``` 233 | 234 | This is useful when bridging non-try-based code or mocking results. 235 | 236 |
237 | 238 | ## Learn More 239 | 240 | To learn about the underlying proposal, including syntax goals and motivation, visit: 241 | 242 | 🔗 https://github.com/arthurfiorette/proposal-try-operator 243 | 244 |
245 | 246 | ## Acknowledgements 247 | 248 | Many thanks to [Szymon Wygnański](https://finalclass.net) for transferring the `try` package name on NPM to this project. Versions below `1.0.0` served a different purpose, but with his permission, the project was repurposed to host an implementation of the proposal’s `Result` class. 249 | 250 |
251 | 252 | ## License 253 | 254 | Both the project and the proposal are licensed under the [MIT](./LICENSE) license. 255 | 256 |
257 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@arthurfiorette/biomejs-config': 12 | specifier: ^2.0.1 13 | version: 2.0.1 14 | '@biomejs/biome': 15 | specifier: ^2.3.8 16 | version: 2.3.8 17 | '@types/node': 18 | specifier: ^24.10.1 19 | version: 24.10.1 20 | c8: 21 | specifier: ^10.1.3 22 | version: 10.1.3 23 | husky: 24 | specifier: ^9.1.7 25 | version: 9.1.7 26 | tsd: 27 | specifier: ^0.33.0 28 | version: 0.33.0 29 | tsdown: 30 | specifier: ^0.17.1 31 | version: 0.17.1(typescript@5.9.3) 32 | typescript: 33 | specifier: ^5.9.3 34 | version: 5.9.3 35 | 36 | packages: 37 | 38 | '@arthurfiorette/biomejs-config@2.0.1': 39 | resolution: {integrity: sha512-XrfWe/xtKjt2cFBjMKQSMDNTzEvS0dHMn1ycjw9xrHh+/UNoK/XuNA/GpIkDU6BZSIHT5SqeMcQ+Y+PLobFi5A==} 40 | 41 | '@babel/code-frame@7.27.1': 42 | resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 43 | engines: {node: '>=6.9.0'} 44 | 45 | '@babel/generator@7.28.5': 46 | resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} 47 | engines: {node: '>=6.9.0'} 48 | 49 | '@babel/helper-string-parser@7.27.1': 50 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 51 | engines: {node: '>=6.9.0'} 52 | 53 | '@babel/helper-validator-identifier@7.28.5': 54 | resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 55 | engines: {node: '>=6.9.0'} 56 | 57 | '@babel/parser@7.28.5': 58 | resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} 59 | engines: {node: '>=6.0.0'} 60 | hasBin: true 61 | 62 | '@babel/types@7.28.5': 63 | resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} 64 | engines: {node: '>=6.9.0'} 65 | 66 | '@bcoe/v8-coverage@1.0.2': 67 | resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} 68 | engines: {node: '>=18'} 69 | 70 | '@biomejs/biome@2.3.8': 71 | resolution: {integrity: sha512-Qjsgoe6FEBxWAUzwFGFrB+1+M8y/y5kwmg5CHac+GSVOdmOIqsAiXM5QMVGZJ1eCUCLlPZtq4aFAQ0eawEUuUA==} 72 | engines: {node: '>=14.21.3'} 73 | hasBin: true 74 | 75 | '@biomejs/cli-darwin-arm64@2.3.8': 76 | resolution: {integrity: sha512-HM4Zg9CGQ3txTPflxD19n8MFPrmUAjaC7PQdLkugeeC0cQ+PiVrd7i09gaBS/11QKsTDBJhVg85CEIK9f50Qww==} 77 | engines: {node: '>=14.21.3'} 78 | cpu: [arm64] 79 | os: [darwin] 80 | 81 | '@biomejs/cli-darwin-x64@2.3.8': 82 | resolution: {integrity: sha512-lUDQ03D7y/qEao7RgdjWVGCu+BLYadhKTm40HkpJIi6kn8LSv5PAwRlew/DmwP4YZ9ke9XXoTIQDO1vAnbRZlA==} 83 | engines: {node: '>=14.21.3'} 84 | cpu: [x64] 85 | os: [darwin] 86 | 87 | '@biomejs/cli-linux-arm64-musl@2.3.8': 88 | resolution: {integrity: sha512-PShR4mM0sjksUMyxbyPNMxoKFPVF48fU8Qe8Sfx6w6F42verbwRLbz+QiKNiDPRJwUoMG1nPM50OBL3aOnTevA==} 89 | engines: {node: '>=14.21.3'} 90 | cpu: [arm64] 91 | os: [linux] 92 | 93 | '@biomejs/cli-linux-arm64@2.3.8': 94 | resolution: {integrity: sha512-Uo1OJnIkJgSgF+USx970fsM/drtPcQ39I+JO+Fjsaa9ZdCN1oysQmy6oAGbyESlouz+rzEckLTF6DS7cWse95g==} 95 | engines: {node: '>=14.21.3'} 96 | cpu: [arm64] 97 | os: [linux] 98 | 99 | '@biomejs/cli-linux-x64-musl@2.3.8': 100 | resolution: {integrity: sha512-YGLkqU91r1276uwSjiUD/xaVikdxgV1QpsicT0bIA1TaieM6E5ibMZeSyjQ/izBn4tKQthUSsVZacmoJfa3pDA==} 101 | engines: {node: '>=14.21.3'} 102 | cpu: [x64] 103 | os: [linux] 104 | 105 | '@biomejs/cli-linux-x64@2.3.8': 106 | resolution: {integrity: sha512-QDPMD5bQz6qOVb3kiBui0zKZXASLo0NIQ9JVJio5RveBEFgDgsvJFUvZIbMbUZT3T00M/1wdzwWXk4GIh0KaAw==} 107 | engines: {node: '>=14.21.3'} 108 | cpu: [x64] 109 | os: [linux] 110 | 111 | '@biomejs/cli-win32-arm64@2.3.8': 112 | resolution: {integrity: sha512-H4IoCHvL1fXKDrTALeTKMiE7GGWFAraDwBYFquE/L/5r1927Te0mYIGseXi4F+lrrwhSWbSGt5qPFswNoBaCxg==} 113 | engines: {node: '>=14.21.3'} 114 | cpu: [arm64] 115 | os: [win32] 116 | 117 | '@biomejs/cli-win32-x64@2.3.8': 118 | resolution: {integrity: sha512-RguzimPoZWtBapfKhKjcWXBVI91tiSprqdBYu7tWhgN8pKRZhw24rFeNZTNf6UiBfjCYCi9eFQs/JzJZIhuK4w==} 119 | engines: {node: '>=14.21.3'} 120 | cpu: [x64] 121 | os: [win32] 122 | 123 | '@emnapi/core@1.7.1': 124 | resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} 125 | 126 | '@emnapi/runtime@1.7.1': 127 | resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} 128 | 129 | '@emnapi/wasi-threads@1.1.0': 130 | resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} 131 | 132 | '@isaacs/cliui@8.0.2': 133 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 134 | engines: {node: '>=12'} 135 | 136 | '@istanbuljs/schema@0.1.3': 137 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 138 | engines: {node: '>=8'} 139 | 140 | '@jest/schemas@29.6.3': 141 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 142 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 143 | 144 | '@jridgewell/gen-mapping@0.3.13': 145 | resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 146 | 147 | '@jridgewell/resolve-uri@3.1.2': 148 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 149 | engines: {node: '>=6.0.0'} 150 | 151 | '@jridgewell/sourcemap-codec@1.5.5': 152 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 153 | 154 | '@jridgewell/trace-mapping@0.3.31': 155 | resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 156 | 157 | '@napi-rs/wasm-runtime@1.1.0': 158 | resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==} 159 | 160 | '@nodelib/fs.scandir@2.1.5': 161 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 162 | engines: {node: '>= 8'} 163 | 164 | '@nodelib/fs.stat@2.0.5': 165 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 166 | engines: {node: '>= 8'} 167 | 168 | '@nodelib/fs.walk@1.2.8': 169 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 170 | engines: {node: '>= 8'} 171 | 172 | '@oxc-project/runtime@0.101.0': 173 | resolution: {integrity: sha512-t3qpfVZIqSiLQ5Kqt/MC4Ge/WCOGrrcagAdzTcDaggupjiGxUx4nJF2v6wUCXWSzWHn5Ns7XLv13fCJEwCOERQ==} 174 | engines: {node: ^20.19.0 || >=22.12.0} 175 | 176 | '@oxc-project/types@0.101.0': 177 | resolution: {integrity: sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ==} 178 | 179 | '@pkgjs/parseargs@0.11.0': 180 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 181 | engines: {node: '>=14'} 182 | 183 | '@quansync/fs@1.0.0': 184 | resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} 185 | 186 | '@rolldown/binding-android-arm64@1.0.0-beta.53': 187 | resolution: {integrity: sha512-Ok9V8o7o6YfSdTTYA/uHH30r3YtOxLD6G3wih/U9DO0ucBBFq8WPt/DslU53OgfteLRHITZny9N/qCUxMf9kjQ==} 188 | engines: {node: ^20.19.0 || >=22.12.0} 189 | cpu: [arm64] 190 | os: [android] 191 | 192 | '@rolldown/binding-darwin-arm64@1.0.0-beta.53': 193 | resolution: {integrity: sha512-yIsKqMz0CtRnVa6x3Pa+mzTihr4Ty+Z6HfPbZ7RVbk1Uxnco4+CUn7Qbm/5SBol1JD/7nvY8rphAgyAi7Lj6Vg==} 194 | engines: {node: ^20.19.0 || >=22.12.0} 195 | cpu: [arm64] 196 | os: [darwin] 197 | 198 | '@rolldown/binding-darwin-x64@1.0.0-beta.53': 199 | resolution: {integrity: sha512-GTXe+mxsCGUnJOFMhfGWmefP7Q9TpYUseHvhAhr21nCTgdS8jPsvirb0tJwM3lN0/u/cg7bpFNa16fQrjKrCjQ==} 200 | engines: {node: ^20.19.0 || >=22.12.0} 201 | cpu: [x64] 202 | os: [darwin] 203 | 204 | '@rolldown/binding-freebsd-x64@1.0.0-beta.53': 205 | resolution: {integrity: sha512-9Tmp7bBvKqyDkMcL4e089pH3RsjD3SUungjmqWtyhNOxoQMh0fSmINTyYV8KXtE+JkxYMPWvnEt+/mfpVCkk8w==} 206 | engines: {node: ^20.19.0 || >=22.12.0} 207 | cpu: [x64] 208 | os: [freebsd] 209 | 210 | '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.53': 211 | resolution: {integrity: sha512-a1y5fiB0iovuzdbjUxa7+Zcvgv+mTmlGGC4XydVIsyl48eoxgaYkA3l9079hyTyhECsPq+mbr0gVQsFU11OJAQ==} 212 | engines: {node: ^20.19.0 || >=22.12.0} 213 | cpu: [arm] 214 | os: [linux] 215 | 216 | '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.53': 217 | resolution: {integrity: sha512-bpIGX+ov9PhJYV+wHNXl9rzq4F0QvILiURn0y0oepbQx+7stmQsKA0DhPGwmhfvF856wq+gbM8L92SAa/CBcLg==} 218 | engines: {node: ^20.19.0 || >=22.12.0} 219 | cpu: [arm64] 220 | os: [linux] 221 | 222 | '@rolldown/binding-linux-arm64-musl@1.0.0-beta.53': 223 | resolution: {integrity: sha512-bGe5EBB8FVjHBR1mOLOPEFg1Lp3//7geqWkU5NIhxe+yH0W8FVrQ6WRYOap4SUTKdklD/dC4qPLREkMMQ855FA==} 224 | engines: {node: ^20.19.0 || >=22.12.0} 225 | cpu: [arm64] 226 | os: [linux] 227 | 228 | '@rolldown/binding-linux-x64-gnu@1.0.0-beta.53': 229 | resolution: {integrity: sha512-qL+63WKVQs1CMvFedlPt0U9PiEKJOAL/bsHMKUDS6Vp2Q+YAv/QLPu8rcvkfIMvQ0FPU2WL0aX4eWwF6e/GAnA==} 230 | engines: {node: ^20.19.0 || >=22.12.0} 231 | cpu: [x64] 232 | os: [linux] 233 | 234 | '@rolldown/binding-linux-x64-musl@1.0.0-beta.53': 235 | resolution: {integrity: sha512-VGl9JIGjoJh3H8Mb+7xnVqODajBmrdOOb9lxWXdcmxyI+zjB2sux69br0hZJDTyLJfvBoYm439zPACYbCjGRmw==} 236 | engines: {node: ^20.19.0 || >=22.12.0} 237 | cpu: [x64] 238 | os: [linux] 239 | 240 | '@rolldown/binding-openharmony-arm64@1.0.0-beta.53': 241 | resolution: {integrity: sha512-B4iIserJXuSnNzA5xBLFUIjTfhNy7d9sq4FUMQY3GhQWGVhS2RWWzzDnkSU6MUt7/aHUrep0CdQfXUJI9D3W7A==} 242 | engines: {node: ^20.19.0 || >=22.12.0} 243 | cpu: [arm64] 244 | os: [openharmony] 245 | 246 | '@rolldown/binding-wasm32-wasi@1.0.0-beta.53': 247 | resolution: {integrity: sha512-BUjAEgpABEJXilGq/BPh7jeU3WAJ5o15c1ZEgHaDWSz3LB881LQZnbNJHmUiM4d1JQWMYYyR1Y490IBHi2FPJg==} 248 | engines: {node: '>=14.0.0'} 249 | cpu: [wasm32] 250 | 251 | '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.53': 252 | resolution: {integrity: sha512-s27uU7tpCWSjHBnxyVXHt3rMrQdJq5MHNv3BzsewCIroIw3DJFjMH1dzCPPMUFxnh1r52Nf9IJ/eWp6LDoyGcw==} 253 | engines: {node: ^20.19.0 || >=22.12.0} 254 | cpu: [arm64] 255 | os: [win32] 256 | 257 | '@rolldown/binding-win32-x64-msvc@1.0.0-beta.53': 258 | resolution: {integrity: sha512-cjWL/USPJ1g0en2htb4ssMjIycc36RvdQAx1WlXnS6DpULswiUTVXPDesTifSKYSyvx24E0YqQkEm0K/M2Z/AA==} 259 | engines: {node: ^20.19.0 || >=22.12.0} 260 | cpu: [x64] 261 | os: [win32] 262 | 263 | '@rolldown/pluginutils@1.0.0-beta.53': 264 | resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} 265 | 266 | '@sinclair/typebox@0.27.8': 267 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 268 | 269 | '@tsd/typescript@5.9.3': 270 | resolution: {integrity: sha512-JSSdNiS0wgd8GHhBwnMAI18Y8XPhLVN+dNelPfZCXFhy9Lb3NbnFyp9JKxxr54jSUkEJPk3cidvCoHducSaRMQ==} 271 | engines: {node: '>=14.17'} 272 | 273 | '@tybys/wasm-util@0.10.1': 274 | resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} 275 | 276 | '@types/eslint@7.29.0': 277 | resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==} 278 | 279 | '@types/estree@1.0.8': 280 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 281 | 282 | '@types/istanbul-lib-coverage@2.0.6': 283 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 284 | 285 | '@types/json-schema@7.0.15': 286 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 287 | 288 | '@types/minimist@1.2.5': 289 | resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} 290 | 291 | '@types/node@24.10.1': 292 | resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} 293 | 294 | '@types/normalize-package-data@2.4.4': 295 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 296 | 297 | ansi-escapes@4.3.2: 298 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 299 | engines: {node: '>=8'} 300 | 301 | ansi-regex@5.0.1: 302 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 303 | engines: {node: '>=8'} 304 | 305 | ansi-regex@6.2.2: 306 | resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} 307 | engines: {node: '>=12'} 308 | 309 | ansi-styles@4.3.0: 310 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 311 | engines: {node: '>=8'} 312 | 313 | ansi-styles@5.2.0: 314 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 315 | engines: {node: '>=10'} 316 | 317 | ansi-styles@6.2.3: 318 | resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} 319 | engines: {node: '>=12'} 320 | 321 | ansis@4.2.0: 322 | resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} 323 | engines: {node: '>=14'} 324 | 325 | array-union@2.1.0: 326 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 327 | engines: {node: '>=8'} 328 | 329 | arrify@1.0.1: 330 | resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} 331 | engines: {node: '>=0.10.0'} 332 | 333 | ast-kit@2.2.0: 334 | resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} 335 | engines: {node: '>=20.19.0'} 336 | 337 | balanced-match@1.0.2: 338 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 339 | 340 | birpc@3.0.0: 341 | resolution: {integrity: sha512-by+04pHuxpCEQcucAXqzopqfhyI8TLK5Qg5MST0cB6MP+JhHna9ollrtK9moVh27aq6Q6MEJgebD0cVm//yBkg==} 342 | 343 | brace-expansion@2.0.2: 344 | resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} 345 | 346 | braces@3.0.3: 347 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 348 | engines: {node: '>=8'} 349 | 350 | c8@10.1.3: 351 | resolution: {integrity: sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==} 352 | engines: {node: '>=18'} 353 | hasBin: true 354 | peerDependencies: 355 | monocart-coverage-reports: ^2 356 | peerDependenciesMeta: 357 | monocart-coverage-reports: 358 | optional: true 359 | 360 | cac@6.7.14: 361 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 362 | engines: {node: '>=8'} 363 | 364 | camelcase-keys@6.2.2: 365 | resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 366 | engines: {node: '>=8'} 367 | 368 | camelcase@5.3.1: 369 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 370 | engines: {node: '>=6'} 371 | 372 | chalk@4.1.2: 373 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 374 | engines: {node: '>=10'} 375 | 376 | cliui@8.0.1: 377 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 378 | engines: {node: '>=12'} 379 | 380 | color-convert@2.0.1: 381 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 382 | engines: {node: '>=7.0.0'} 383 | 384 | color-name@1.1.4: 385 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 386 | 387 | convert-source-map@2.0.0: 388 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 389 | 390 | cross-spawn@7.0.6: 391 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 392 | engines: {node: '>= 8'} 393 | 394 | decamelize-keys@1.1.1: 395 | resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} 396 | engines: {node: '>=0.10.0'} 397 | 398 | decamelize@1.2.0: 399 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 400 | engines: {node: '>=0.10.0'} 401 | 402 | diff-sequences@29.6.3: 403 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 404 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 405 | 406 | dir-glob@3.0.1: 407 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 408 | engines: {node: '>=8'} 409 | 410 | dts-resolver@2.1.3: 411 | resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} 412 | engines: {node: '>=20.19.0'} 413 | peerDependencies: 414 | oxc-resolver: '>=11.0.0' 415 | peerDependenciesMeta: 416 | oxc-resolver: 417 | optional: true 418 | 419 | eastasianwidth@0.2.0: 420 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 421 | 422 | emoji-regex@8.0.0: 423 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 424 | 425 | emoji-regex@9.2.2: 426 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 427 | 428 | empathic@2.0.0: 429 | resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} 430 | engines: {node: '>=14'} 431 | 432 | error-ex@1.3.4: 433 | resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} 434 | 435 | escalade@3.2.0: 436 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 437 | engines: {node: '>=6'} 438 | 439 | eslint-formatter-pretty@4.1.0: 440 | resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==} 441 | engines: {node: '>=10'} 442 | 443 | eslint-rule-docs@1.1.235: 444 | resolution: {integrity: sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==} 445 | 446 | fast-glob@3.3.3: 447 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 448 | engines: {node: '>=8.6.0'} 449 | 450 | fastq@1.19.1: 451 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 452 | 453 | fdir@6.5.0: 454 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 455 | engines: {node: '>=12.0.0'} 456 | peerDependencies: 457 | picomatch: ^3 || ^4 458 | peerDependenciesMeta: 459 | picomatch: 460 | optional: true 461 | 462 | fill-range@7.1.1: 463 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 464 | engines: {node: '>=8'} 465 | 466 | find-up@4.1.0: 467 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 468 | engines: {node: '>=8'} 469 | 470 | find-up@5.0.0: 471 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 472 | engines: {node: '>=10'} 473 | 474 | foreground-child@3.3.1: 475 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 476 | engines: {node: '>=14'} 477 | 478 | function-bind@1.1.2: 479 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 480 | 481 | get-caller-file@2.0.5: 482 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 483 | engines: {node: 6.* || 8.* || >= 10.*} 484 | 485 | get-tsconfig@4.13.0: 486 | resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} 487 | 488 | glob-parent@5.1.2: 489 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 490 | engines: {node: '>= 6'} 491 | 492 | glob@10.5.0: 493 | resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} 494 | hasBin: true 495 | 496 | globby@11.1.0: 497 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 498 | engines: {node: '>=10'} 499 | 500 | hard-rejection@2.1.0: 501 | resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 502 | engines: {node: '>=6'} 503 | 504 | has-flag@4.0.0: 505 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 506 | engines: {node: '>=8'} 507 | 508 | hasown@2.0.2: 509 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 510 | engines: {node: '>= 0.4'} 511 | 512 | hookable@5.5.3: 513 | resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 514 | 515 | hosted-git-info@2.8.9: 516 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 517 | 518 | hosted-git-info@4.1.0: 519 | resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} 520 | engines: {node: '>=10'} 521 | 522 | html-escaper@2.0.2: 523 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 524 | 525 | husky@9.1.7: 526 | resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} 527 | engines: {node: '>=18'} 528 | hasBin: true 529 | 530 | ignore@5.3.2: 531 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 532 | engines: {node: '>= 4'} 533 | 534 | import-without-cache@0.2.2: 535 | resolution: {integrity: sha512-4TTuRrZ0jBULXzac3EoX9ZviOs8Wn9iAbNhJEyLhTpAGF9eNmYSruaMMN/Tec/yqaO7H6yS2kALfQDJ5FxfatA==} 536 | engines: {node: '>=20.19.0'} 537 | 538 | indent-string@4.0.0: 539 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 540 | engines: {node: '>=8'} 541 | 542 | irregular-plurals@3.5.0: 543 | resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} 544 | engines: {node: '>=8'} 545 | 546 | is-arrayish@0.2.1: 547 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 548 | 549 | is-core-module@2.16.1: 550 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 551 | engines: {node: '>= 0.4'} 552 | 553 | is-extglob@2.1.1: 554 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 555 | engines: {node: '>=0.10.0'} 556 | 557 | is-fullwidth-code-point@3.0.0: 558 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 559 | engines: {node: '>=8'} 560 | 561 | is-glob@4.0.3: 562 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 563 | engines: {node: '>=0.10.0'} 564 | 565 | is-number@7.0.0: 566 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 567 | engines: {node: '>=0.12.0'} 568 | 569 | is-plain-obj@1.1.0: 570 | resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} 571 | engines: {node: '>=0.10.0'} 572 | 573 | is-unicode-supported@0.1.0: 574 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} 575 | engines: {node: '>=10'} 576 | 577 | isexe@2.0.0: 578 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 579 | 580 | istanbul-lib-coverage@3.2.2: 581 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 582 | engines: {node: '>=8'} 583 | 584 | istanbul-lib-report@3.0.1: 585 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 586 | engines: {node: '>=10'} 587 | 588 | istanbul-reports@3.2.0: 589 | resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} 590 | engines: {node: '>=8'} 591 | 592 | jackspeak@3.4.3: 593 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 594 | 595 | jest-diff@29.7.0: 596 | resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} 597 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 598 | 599 | jest-get-type@29.6.3: 600 | resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} 601 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 602 | 603 | js-tokens@4.0.0: 604 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 605 | 606 | jsesc@3.1.0: 607 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 608 | engines: {node: '>=6'} 609 | hasBin: true 610 | 611 | json-parse-even-better-errors@2.3.1: 612 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 613 | 614 | kind-of@6.0.3: 615 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 616 | engines: {node: '>=0.10.0'} 617 | 618 | lines-and-columns@1.2.4: 619 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 620 | 621 | locate-path@5.0.0: 622 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 623 | engines: {node: '>=8'} 624 | 625 | locate-path@6.0.0: 626 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 627 | engines: {node: '>=10'} 628 | 629 | log-symbols@4.1.0: 630 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} 631 | engines: {node: '>=10'} 632 | 633 | lru-cache@10.4.3: 634 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 635 | 636 | lru-cache@6.0.0: 637 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 638 | engines: {node: '>=10'} 639 | 640 | magic-string@0.30.21: 641 | resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 642 | 643 | make-dir@4.0.0: 644 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 645 | engines: {node: '>=10'} 646 | 647 | map-obj@1.0.1: 648 | resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} 649 | engines: {node: '>=0.10.0'} 650 | 651 | map-obj@4.3.0: 652 | resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} 653 | engines: {node: '>=8'} 654 | 655 | meow@9.0.0: 656 | resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} 657 | engines: {node: '>=10'} 658 | 659 | merge2@1.4.1: 660 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 661 | engines: {node: '>= 8'} 662 | 663 | micromatch@4.0.8: 664 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 665 | engines: {node: '>=8.6'} 666 | 667 | min-indent@1.0.1: 668 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 669 | engines: {node: '>=4'} 670 | 671 | minimatch@9.0.5: 672 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 673 | engines: {node: '>=16 || 14 >=14.17'} 674 | 675 | minimist-options@4.1.0: 676 | resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 677 | engines: {node: '>= 6'} 678 | 679 | minipass@7.1.2: 680 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 681 | engines: {node: '>=16 || 14 >=14.17'} 682 | 683 | normalize-package-data@2.5.0: 684 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 685 | 686 | normalize-package-data@3.0.3: 687 | resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} 688 | engines: {node: '>=10'} 689 | 690 | obug@2.1.1: 691 | resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} 692 | 693 | p-limit@2.3.0: 694 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 695 | engines: {node: '>=6'} 696 | 697 | p-limit@3.1.0: 698 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 699 | engines: {node: '>=10'} 700 | 701 | p-locate@4.1.0: 702 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 703 | engines: {node: '>=8'} 704 | 705 | p-locate@5.0.0: 706 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 707 | engines: {node: '>=10'} 708 | 709 | p-try@2.2.0: 710 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 711 | engines: {node: '>=6'} 712 | 713 | package-json-from-dist@1.0.1: 714 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 715 | 716 | parse-json@5.2.0: 717 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 718 | engines: {node: '>=8'} 719 | 720 | path-exists@4.0.0: 721 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 722 | engines: {node: '>=8'} 723 | 724 | path-key@3.1.1: 725 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 726 | engines: {node: '>=8'} 727 | 728 | path-parse@1.0.7: 729 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 730 | 731 | path-scurry@1.11.1: 732 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 733 | engines: {node: '>=16 || 14 >=14.18'} 734 | 735 | path-type@4.0.0: 736 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 737 | engines: {node: '>=8'} 738 | 739 | pathe@2.0.3: 740 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 741 | 742 | picocolors@1.1.1: 743 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 744 | 745 | picomatch@2.3.1: 746 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 747 | engines: {node: '>=8.6'} 748 | 749 | picomatch@4.0.3: 750 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 751 | engines: {node: '>=12'} 752 | 753 | plur@4.0.0: 754 | resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==} 755 | engines: {node: '>=10'} 756 | 757 | pretty-format@29.7.0: 758 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 759 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 760 | 761 | quansync@1.0.0: 762 | resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} 763 | 764 | queue-microtask@1.2.3: 765 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 766 | 767 | quick-lru@4.0.1: 768 | resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} 769 | engines: {node: '>=8'} 770 | 771 | react-is@18.3.1: 772 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 773 | 774 | read-pkg-up@7.0.1: 775 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 776 | engines: {node: '>=8'} 777 | 778 | read-pkg@5.2.0: 779 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 780 | engines: {node: '>=8'} 781 | 782 | redent@3.0.0: 783 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 784 | engines: {node: '>=8'} 785 | 786 | require-directory@2.1.1: 787 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 788 | engines: {node: '>=0.10.0'} 789 | 790 | resolve-pkg-maps@1.0.0: 791 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 792 | 793 | resolve@1.22.11: 794 | resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} 795 | engines: {node: '>= 0.4'} 796 | hasBin: true 797 | 798 | reusify@1.1.0: 799 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 800 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 801 | 802 | rolldown-plugin-dts@0.18.3: 803 | resolution: {integrity: sha512-rd1LZ0Awwfyn89UndUF/HoFF4oH9a5j+2ZeuKSJYM80vmeN/p0gslYMnHTQHBEXPhUlvAlqGA3tVgXB/1qFNDg==} 804 | engines: {node: '>=20.19.0'} 805 | peerDependencies: 806 | '@ts-macro/tsc': ^0.3.6 807 | '@typescript/native-preview': '>=7.0.0-dev.20250601.1' 808 | rolldown: ^1.0.0-beta.51 809 | typescript: ^5.0.0 810 | vue-tsc: ~3.1.0 811 | peerDependenciesMeta: 812 | '@ts-macro/tsc': 813 | optional: true 814 | '@typescript/native-preview': 815 | optional: true 816 | typescript: 817 | optional: true 818 | vue-tsc: 819 | optional: true 820 | 821 | rolldown@1.0.0-beta.53: 822 | resolution: {integrity: sha512-Qd9c2p0XKZdgT5AYd+KgAMggJ8ZmCs3JnS9PTMWkyUfteKlfmKtxJbWTHkVakxwXs1Ub7jrRYVeFeF7N0sQxyw==} 823 | engines: {node: ^20.19.0 || >=22.12.0} 824 | hasBin: true 825 | 826 | run-parallel@1.2.0: 827 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 828 | 829 | semver@5.7.2: 830 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 831 | hasBin: true 832 | 833 | semver@7.7.3: 834 | resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 835 | engines: {node: '>=10'} 836 | hasBin: true 837 | 838 | shebang-command@2.0.0: 839 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 840 | engines: {node: '>=8'} 841 | 842 | shebang-regex@3.0.0: 843 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 844 | engines: {node: '>=8'} 845 | 846 | signal-exit@4.1.0: 847 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 848 | engines: {node: '>=14'} 849 | 850 | slash@3.0.0: 851 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 852 | engines: {node: '>=8'} 853 | 854 | spdx-correct@3.2.0: 855 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 856 | 857 | spdx-exceptions@2.5.0: 858 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 859 | 860 | spdx-expression-parse@3.0.1: 861 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 862 | 863 | spdx-license-ids@3.0.22: 864 | resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} 865 | 866 | string-width@4.2.3: 867 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 868 | engines: {node: '>=8'} 869 | 870 | string-width@5.1.2: 871 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 872 | engines: {node: '>=12'} 873 | 874 | strip-ansi@6.0.1: 875 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 876 | engines: {node: '>=8'} 877 | 878 | strip-ansi@7.1.2: 879 | resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} 880 | engines: {node: '>=12'} 881 | 882 | strip-indent@3.0.0: 883 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 884 | engines: {node: '>=8'} 885 | 886 | supports-color@7.2.0: 887 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 888 | engines: {node: '>=8'} 889 | 890 | supports-hyperlinks@2.3.0: 891 | resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} 892 | engines: {node: '>=8'} 893 | 894 | supports-preserve-symlinks-flag@1.0.0: 895 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 896 | engines: {node: '>= 0.4'} 897 | 898 | test-exclude@7.0.1: 899 | resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} 900 | engines: {node: '>=18'} 901 | 902 | tinyexec@1.0.2: 903 | resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} 904 | engines: {node: '>=18'} 905 | 906 | tinyglobby@0.2.15: 907 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 908 | engines: {node: '>=12.0.0'} 909 | 910 | to-regex-range@5.0.1: 911 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 912 | engines: {node: '>=8.0'} 913 | 914 | tree-kill@1.2.2: 915 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 916 | hasBin: true 917 | 918 | trim-newlines@3.0.1: 919 | resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} 920 | engines: {node: '>=8'} 921 | 922 | tsd@0.33.0: 923 | resolution: {integrity: sha512-/PQtykJFVw90QICG7zyPDMIyueOXKL7jOJVoX5pILnb3Ux+7QqynOxfVvarE+K+yi7BZyOSY4r+OZNWSWRiEwQ==} 924 | engines: {node: '>=14.16'} 925 | hasBin: true 926 | 927 | tsdown@0.17.1: 928 | resolution: {integrity: sha512-SqRyd/wliY0CgOhxbE3gJVUQioHVWMibeiswOruBa9XxJuFTy7xEuC9vqCCkuJ6Owqt2/F7S3vG9tXCQWQN+Fg==} 929 | engines: {node: '>=20.19.0'} 930 | hasBin: true 931 | peerDependencies: 932 | '@arethetypeswrong/core': ^0.18.1 933 | '@vitejs/devtools': ^0.0.0-alpha.19 934 | publint: ^0.3.0 935 | typescript: ^5.0.0 936 | unplugin-lightningcss: ^0.4.0 937 | unplugin-unused: ^0.5.0 938 | peerDependenciesMeta: 939 | '@arethetypeswrong/core': 940 | optional: true 941 | '@vitejs/devtools': 942 | optional: true 943 | publint: 944 | optional: true 945 | typescript: 946 | optional: true 947 | unplugin-lightningcss: 948 | optional: true 949 | unplugin-unused: 950 | optional: true 951 | 952 | tslib@2.8.1: 953 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 954 | 955 | type-fest@0.18.1: 956 | resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} 957 | engines: {node: '>=10'} 958 | 959 | type-fest@0.21.3: 960 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 961 | engines: {node: '>=10'} 962 | 963 | type-fest@0.6.0: 964 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 965 | engines: {node: '>=8'} 966 | 967 | type-fest@0.8.1: 968 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 969 | engines: {node: '>=8'} 970 | 971 | typescript@5.9.3: 972 | resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 973 | engines: {node: '>=14.17'} 974 | hasBin: true 975 | 976 | unconfig-core@7.4.2: 977 | resolution: {integrity: sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg==} 978 | 979 | undici-types@7.16.0: 980 | resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} 981 | 982 | unrun@0.2.17: 983 | resolution: {integrity: sha512-mumOyjZp1K1bsa1QwfRPw7+9TxyVHSgx6LHB2dBWI4m1hGDG9b2TK3fS3H8vCl/Gl9YTSxhZ9XuLbWv3QF8GEA==} 984 | engines: {node: '>=20.19.0'} 985 | hasBin: true 986 | peerDependencies: 987 | synckit: ^0.11.11 988 | peerDependenciesMeta: 989 | synckit: 990 | optional: true 991 | 992 | v8-to-istanbul@9.3.0: 993 | resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} 994 | engines: {node: '>=10.12.0'} 995 | 996 | validate-npm-package-license@3.0.4: 997 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 998 | 999 | which@2.0.2: 1000 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1001 | engines: {node: '>= 8'} 1002 | hasBin: true 1003 | 1004 | wrap-ansi@7.0.0: 1005 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1006 | engines: {node: '>=10'} 1007 | 1008 | wrap-ansi@8.1.0: 1009 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1010 | engines: {node: '>=12'} 1011 | 1012 | y18n@5.0.8: 1013 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1014 | engines: {node: '>=10'} 1015 | 1016 | yallist@4.0.0: 1017 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1018 | 1019 | yargs-parser@20.2.9: 1020 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 1021 | engines: {node: '>=10'} 1022 | 1023 | yargs-parser@21.1.1: 1024 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1025 | engines: {node: '>=12'} 1026 | 1027 | yargs@17.7.2: 1028 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1029 | engines: {node: '>=12'} 1030 | 1031 | yocto-queue@0.1.0: 1032 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1033 | engines: {node: '>=10'} 1034 | 1035 | snapshots: 1036 | 1037 | '@arthurfiorette/biomejs-config@2.0.1': {} 1038 | 1039 | '@babel/code-frame@7.27.1': 1040 | dependencies: 1041 | '@babel/helper-validator-identifier': 7.28.5 1042 | js-tokens: 4.0.0 1043 | picocolors: 1.1.1 1044 | 1045 | '@babel/generator@7.28.5': 1046 | dependencies: 1047 | '@babel/parser': 7.28.5 1048 | '@babel/types': 7.28.5 1049 | '@jridgewell/gen-mapping': 0.3.13 1050 | '@jridgewell/trace-mapping': 0.3.31 1051 | jsesc: 3.1.0 1052 | 1053 | '@babel/helper-string-parser@7.27.1': {} 1054 | 1055 | '@babel/helper-validator-identifier@7.28.5': {} 1056 | 1057 | '@babel/parser@7.28.5': 1058 | dependencies: 1059 | '@babel/types': 7.28.5 1060 | 1061 | '@babel/types@7.28.5': 1062 | dependencies: 1063 | '@babel/helper-string-parser': 7.27.1 1064 | '@babel/helper-validator-identifier': 7.28.5 1065 | 1066 | '@bcoe/v8-coverage@1.0.2': {} 1067 | 1068 | '@biomejs/biome@2.3.8': 1069 | optionalDependencies: 1070 | '@biomejs/cli-darwin-arm64': 2.3.8 1071 | '@biomejs/cli-darwin-x64': 2.3.8 1072 | '@biomejs/cli-linux-arm64': 2.3.8 1073 | '@biomejs/cli-linux-arm64-musl': 2.3.8 1074 | '@biomejs/cli-linux-x64': 2.3.8 1075 | '@biomejs/cli-linux-x64-musl': 2.3.8 1076 | '@biomejs/cli-win32-arm64': 2.3.8 1077 | '@biomejs/cli-win32-x64': 2.3.8 1078 | 1079 | '@biomejs/cli-darwin-arm64@2.3.8': 1080 | optional: true 1081 | 1082 | '@biomejs/cli-darwin-x64@2.3.8': 1083 | optional: true 1084 | 1085 | '@biomejs/cli-linux-arm64-musl@2.3.8': 1086 | optional: true 1087 | 1088 | '@biomejs/cli-linux-arm64@2.3.8': 1089 | optional: true 1090 | 1091 | '@biomejs/cli-linux-x64-musl@2.3.8': 1092 | optional: true 1093 | 1094 | '@biomejs/cli-linux-x64@2.3.8': 1095 | optional: true 1096 | 1097 | '@biomejs/cli-win32-arm64@2.3.8': 1098 | optional: true 1099 | 1100 | '@biomejs/cli-win32-x64@2.3.8': 1101 | optional: true 1102 | 1103 | '@emnapi/core@1.7.1': 1104 | dependencies: 1105 | '@emnapi/wasi-threads': 1.1.0 1106 | tslib: 2.8.1 1107 | optional: true 1108 | 1109 | '@emnapi/runtime@1.7.1': 1110 | dependencies: 1111 | tslib: 2.8.1 1112 | optional: true 1113 | 1114 | '@emnapi/wasi-threads@1.1.0': 1115 | dependencies: 1116 | tslib: 2.8.1 1117 | optional: true 1118 | 1119 | '@isaacs/cliui@8.0.2': 1120 | dependencies: 1121 | string-width: 5.1.2 1122 | string-width-cjs: string-width@4.2.3 1123 | strip-ansi: 7.1.2 1124 | strip-ansi-cjs: strip-ansi@6.0.1 1125 | wrap-ansi: 8.1.0 1126 | wrap-ansi-cjs: wrap-ansi@7.0.0 1127 | 1128 | '@istanbuljs/schema@0.1.3': {} 1129 | 1130 | '@jest/schemas@29.6.3': 1131 | dependencies: 1132 | '@sinclair/typebox': 0.27.8 1133 | 1134 | '@jridgewell/gen-mapping@0.3.13': 1135 | dependencies: 1136 | '@jridgewell/sourcemap-codec': 1.5.5 1137 | '@jridgewell/trace-mapping': 0.3.31 1138 | 1139 | '@jridgewell/resolve-uri@3.1.2': {} 1140 | 1141 | '@jridgewell/sourcemap-codec@1.5.5': {} 1142 | 1143 | '@jridgewell/trace-mapping@0.3.31': 1144 | dependencies: 1145 | '@jridgewell/resolve-uri': 3.1.2 1146 | '@jridgewell/sourcemap-codec': 1.5.5 1147 | 1148 | '@napi-rs/wasm-runtime@1.1.0': 1149 | dependencies: 1150 | '@emnapi/core': 1.7.1 1151 | '@emnapi/runtime': 1.7.1 1152 | '@tybys/wasm-util': 0.10.1 1153 | optional: true 1154 | 1155 | '@nodelib/fs.scandir@2.1.5': 1156 | dependencies: 1157 | '@nodelib/fs.stat': 2.0.5 1158 | run-parallel: 1.2.0 1159 | 1160 | '@nodelib/fs.stat@2.0.5': {} 1161 | 1162 | '@nodelib/fs.walk@1.2.8': 1163 | dependencies: 1164 | '@nodelib/fs.scandir': 2.1.5 1165 | fastq: 1.19.1 1166 | 1167 | '@oxc-project/runtime@0.101.0': {} 1168 | 1169 | '@oxc-project/types@0.101.0': {} 1170 | 1171 | '@pkgjs/parseargs@0.11.0': 1172 | optional: true 1173 | 1174 | '@quansync/fs@1.0.0': 1175 | dependencies: 1176 | quansync: 1.0.0 1177 | 1178 | '@rolldown/binding-android-arm64@1.0.0-beta.53': 1179 | optional: true 1180 | 1181 | '@rolldown/binding-darwin-arm64@1.0.0-beta.53': 1182 | optional: true 1183 | 1184 | '@rolldown/binding-darwin-x64@1.0.0-beta.53': 1185 | optional: true 1186 | 1187 | '@rolldown/binding-freebsd-x64@1.0.0-beta.53': 1188 | optional: true 1189 | 1190 | '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.53': 1191 | optional: true 1192 | 1193 | '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.53': 1194 | optional: true 1195 | 1196 | '@rolldown/binding-linux-arm64-musl@1.0.0-beta.53': 1197 | optional: true 1198 | 1199 | '@rolldown/binding-linux-x64-gnu@1.0.0-beta.53': 1200 | optional: true 1201 | 1202 | '@rolldown/binding-linux-x64-musl@1.0.0-beta.53': 1203 | optional: true 1204 | 1205 | '@rolldown/binding-openharmony-arm64@1.0.0-beta.53': 1206 | optional: true 1207 | 1208 | '@rolldown/binding-wasm32-wasi@1.0.0-beta.53': 1209 | dependencies: 1210 | '@napi-rs/wasm-runtime': 1.1.0 1211 | optional: true 1212 | 1213 | '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.53': 1214 | optional: true 1215 | 1216 | '@rolldown/binding-win32-x64-msvc@1.0.0-beta.53': 1217 | optional: true 1218 | 1219 | '@rolldown/pluginutils@1.0.0-beta.53': {} 1220 | 1221 | '@sinclair/typebox@0.27.8': {} 1222 | 1223 | '@tsd/typescript@5.9.3': {} 1224 | 1225 | '@tybys/wasm-util@0.10.1': 1226 | dependencies: 1227 | tslib: 2.8.1 1228 | optional: true 1229 | 1230 | '@types/eslint@7.29.0': 1231 | dependencies: 1232 | '@types/estree': 1.0.8 1233 | '@types/json-schema': 7.0.15 1234 | 1235 | '@types/estree@1.0.8': {} 1236 | 1237 | '@types/istanbul-lib-coverage@2.0.6': {} 1238 | 1239 | '@types/json-schema@7.0.15': {} 1240 | 1241 | '@types/minimist@1.2.5': {} 1242 | 1243 | '@types/node@24.10.1': 1244 | dependencies: 1245 | undici-types: 7.16.0 1246 | 1247 | '@types/normalize-package-data@2.4.4': {} 1248 | 1249 | ansi-escapes@4.3.2: 1250 | dependencies: 1251 | type-fest: 0.21.3 1252 | 1253 | ansi-regex@5.0.1: {} 1254 | 1255 | ansi-regex@6.2.2: {} 1256 | 1257 | ansi-styles@4.3.0: 1258 | dependencies: 1259 | color-convert: 2.0.1 1260 | 1261 | ansi-styles@5.2.0: {} 1262 | 1263 | ansi-styles@6.2.3: {} 1264 | 1265 | ansis@4.2.0: {} 1266 | 1267 | array-union@2.1.0: {} 1268 | 1269 | arrify@1.0.1: {} 1270 | 1271 | ast-kit@2.2.0: 1272 | dependencies: 1273 | '@babel/parser': 7.28.5 1274 | pathe: 2.0.3 1275 | 1276 | balanced-match@1.0.2: {} 1277 | 1278 | birpc@3.0.0: {} 1279 | 1280 | brace-expansion@2.0.2: 1281 | dependencies: 1282 | balanced-match: 1.0.2 1283 | 1284 | braces@3.0.3: 1285 | dependencies: 1286 | fill-range: 7.1.1 1287 | 1288 | c8@10.1.3: 1289 | dependencies: 1290 | '@bcoe/v8-coverage': 1.0.2 1291 | '@istanbuljs/schema': 0.1.3 1292 | find-up: 5.0.0 1293 | foreground-child: 3.3.1 1294 | istanbul-lib-coverage: 3.2.2 1295 | istanbul-lib-report: 3.0.1 1296 | istanbul-reports: 3.2.0 1297 | test-exclude: 7.0.1 1298 | v8-to-istanbul: 9.3.0 1299 | yargs: 17.7.2 1300 | yargs-parser: 21.1.1 1301 | 1302 | cac@6.7.14: {} 1303 | 1304 | camelcase-keys@6.2.2: 1305 | dependencies: 1306 | camelcase: 5.3.1 1307 | map-obj: 4.3.0 1308 | quick-lru: 4.0.1 1309 | 1310 | camelcase@5.3.1: {} 1311 | 1312 | chalk@4.1.2: 1313 | dependencies: 1314 | ansi-styles: 4.3.0 1315 | supports-color: 7.2.0 1316 | 1317 | cliui@8.0.1: 1318 | dependencies: 1319 | string-width: 4.2.3 1320 | strip-ansi: 6.0.1 1321 | wrap-ansi: 7.0.0 1322 | 1323 | color-convert@2.0.1: 1324 | dependencies: 1325 | color-name: 1.1.4 1326 | 1327 | color-name@1.1.4: {} 1328 | 1329 | convert-source-map@2.0.0: {} 1330 | 1331 | cross-spawn@7.0.6: 1332 | dependencies: 1333 | path-key: 3.1.1 1334 | shebang-command: 2.0.0 1335 | which: 2.0.2 1336 | 1337 | decamelize-keys@1.1.1: 1338 | dependencies: 1339 | decamelize: 1.2.0 1340 | map-obj: 1.0.1 1341 | 1342 | decamelize@1.2.0: {} 1343 | 1344 | diff-sequences@29.6.3: {} 1345 | 1346 | dir-glob@3.0.1: 1347 | dependencies: 1348 | path-type: 4.0.0 1349 | 1350 | dts-resolver@2.1.3: {} 1351 | 1352 | eastasianwidth@0.2.0: {} 1353 | 1354 | emoji-regex@8.0.0: {} 1355 | 1356 | emoji-regex@9.2.2: {} 1357 | 1358 | empathic@2.0.0: {} 1359 | 1360 | error-ex@1.3.4: 1361 | dependencies: 1362 | is-arrayish: 0.2.1 1363 | 1364 | escalade@3.2.0: {} 1365 | 1366 | eslint-formatter-pretty@4.1.0: 1367 | dependencies: 1368 | '@types/eslint': 7.29.0 1369 | ansi-escapes: 4.3.2 1370 | chalk: 4.1.2 1371 | eslint-rule-docs: 1.1.235 1372 | log-symbols: 4.1.0 1373 | plur: 4.0.0 1374 | string-width: 4.2.3 1375 | supports-hyperlinks: 2.3.0 1376 | 1377 | eslint-rule-docs@1.1.235: {} 1378 | 1379 | fast-glob@3.3.3: 1380 | dependencies: 1381 | '@nodelib/fs.stat': 2.0.5 1382 | '@nodelib/fs.walk': 1.2.8 1383 | glob-parent: 5.1.2 1384 | merge2: 1.4.1 1385 | micromatch: 4.0.8 1386 | 1387 | fastq@1.19.1: 1388 | dependencies: 1389 | reusify: 1.1.0 1390 | 1391 | fdir@6.5.0(picomatch@4.0.3): 1392 | optionalDependencies: 1393 | picomatch: 4.0.3 1394 | 1395 | fill-range@7.1.1: 1396 | dependencies: 1397 | to-regex-range: 5.0.1 1398 | 1399 | find-up@4.1.0: 1400 | dependencies: 1401 | locate-path: 5.0.0 1402 | path-exists: 4.0.0 1403 | 1404 | find-up@5.0.0: 1405 | dependencies: 1406 | locate-path: 6.0.0 1407 | path-exists: 4.0.0 1408 | 1409 | foreground-child@3.3.1: 1410 | dependencies: 1411 | cross-spawn: 7.0.6 1412 | signal-exit: 4.1.0 1413 | 1414 | function-bind@1.1.2: {} 1415 | 1416 | get-caller-file@2.0.5: {} 1417 | 1418 | get-tsconfig@4.13.0: 1419 | dependencies: 1420 | resolve-pkg-maps: 1.0.0 1421 | 1422 | glob-parent@5.1.2: 1423 | dependencies: 1424 | is-glob: 4.0.3 1425 | 1426 | glob@10.5.0: 1427 | dependencies: 1428 | foreground-child: 3.3.1 1429 | jackspeak: 3.4.3 1430 | minimatch: 9.0.5 1431 | minipass: 7.1.2 1432 | package-json-from-dist: 1.0.1 1433 | path-scurry: 1.11.1 1434 | 1435 | globby@11.1.0: 1436 | dependencies: 1437 | array-union: 2.1.0 1438 | dir-glob: 3.0.1 1439 | fast-glob: 3.3.3 1440 | ignore: 5.3.2 1441 | merge2: 1.4.1 1442 | slash: 3.0.0 1443 | 1444 | hard-rejection@2.1.0: {} 1445 | 1446 | has-flag@4.0.0: {} 1447 | 1448 | hasown@2.0.2: 1449 | dependencies: 1450 | function-bind: 1.1.2 1451 | 1452 | hookable@5.5.3: {} 1453 | 1454 | hosted-git-info@2.8.9: {} 1455 | 1456 | hosted-git-info@4.1.0: 1457 | dependencies: 1458 | lru-cache: 6.0.0 1459 | 1460 | html-escaper@2.0.2: {} 1461 | 1462 | husky@9.1.7: {} 1463 | 1464 | ignore@5.3.2: {} 1465 | 1466 | import-without-cache@0.2.2: {} 1467 | 1468 | indent-string@4.0.0: {} 1469 | 1470 | irregular-plurals@3.5.0: {} 1471 | 1472 | is-arrayish@0.2.1: {} 1473 | 1474 | is-core-module@2.16.1: 1475 | dependencies: 1476 | hasown: 2.0.2 1477 | 1478 | is-extglob@2.1.1: {} 1479 | 1480 | is-fullwidth-code-point@3.0.0: {} 1481 | 1482 | is-glob@4.0.3: 1483 | dependencies: 1484 | is-extglob: 2.1.1 1485 | 1486 | is-number@7.0.0: {} 1487 | 1488 | is-plain-obj@1.1.0: {} 1489 | 1490 | is-unicode-supported@0.1.0: {} 1491 | 1492 | isexe@2.0.0: {} 1493 | 1494 | istanbul-lib-coverage@3.2.2: {} 1495 | 1496 | istanbul-lib-report@3.0.1: 1497 | dependencies: 1498 | istanbul-lib-coverage: 3.2.2 1499 | make-dir: 4.0.0 1500 | supports-color: 7.2.0 1501 | 1502 | istanbul-reports@3.2.0: 1503 | dependencies: 1504 | html-escaper: 2.0.2 1505 | istanbul-lib-report: 3.0.1 1506 | 1507 | jackspeak@3.4.3: 1508 | dependencies: 1509 | '@isaacs/cliui': 8.0.2 1510 | optionalDependencies: 1511 | '@pkgjs/parseargs': 0.11.0 1512 | 1513 | jest-diff@29.7.0: 1514 | dependencies: 1515 | chalk: 4.1.2 1516 | diff-sequences: 29.6.3 1517 | jest-get-type: 29.6.3 1518 | pretty-format: 29.7.0 1519 | 1520 | jest-get-type@29.6.3: {} 1521 | 1522 | js-tokens@4.0.0: {} 1523 | 1524 | jsesc@3.1.0: {} 1525 | 1526 | json-parse-even-better-errors@2.3.1: {} 1527 | 1528 | kind-of@6.0.3: {} 1529 | 1530 | lines-and-columns@1.2.4: {} 1531 | 1532 | locate-path@5.0.0: 1533 | dependencies: 1534 | p-locate: 4.1.0 1535 | 1536 | locate-path@6.0.0: 1537 | dependencies: 1538 | p-locate: 5.0.0 1539 | 1540 | log-symbols@4.1.0: 1541 | dependencies: 1542 | chalk: 4.1.2 1543 | is-unicode-supported: 0.1.0 1544 | 1545 | lru-cache@10.4.3: {} 1546 | 1547 | lru-cache@6.0.0: 1548 | dependencies: 1549 | yallist: 4.0.0 1550 | 1551 | magic-string@0.30.21: 1552 | dependencies: 1553 | '@jridgewell/sourcemap-codec': 1.5.5 1554 | 1555 | make-dir@4.0.0: 1556 | dependencies: 1557 | semver: 7.7.3 1558 | 1559 | map-obj@1.0.1: {} 1560 | 1561 | map-obj@4.3.0: {} 1562 | 1563 | meow@9.0.0: 1564 | dependencies: 1565 | '@types/minimist': 1.2.5 1566 | camelcase-keys: 6.2.2 1567 | decamelize: 1.2.0 1568 | decamelize-keys: 1.1.1 1569 | hard-rejection: 2.1.0 1570 | minimist-options: 4.1.0 1571 | normalize-package-data: 3.0.3 1572 | read-pkg-up: 7.0.1 1573 | redent: 3.0.0 1574 | trim-newlines: 3.0.1 1575 | type-fest: 0.18.1 1576 | yargs-parser: 20.2.9 1577 | 1578 | merge2@1.4.1: {} 1579 | 1580 | micromatch@4.0.8: 1581 | dependencies: 1582 | braces: 3.0.3 1583 | picomatch: 2.3.1 1584 | 1585 | min-indent@1.0.1: {} 1586 | 1587 | minimatch@9.0.5: 1588 | dependencies: 1589 | brace-expansion: 2.0.2 1590 | 1591 | minimist-options@4.1.0: 1592 | dependencies: 1593 | arrify: 1.0.1 1594 | is-plain-obj: 1.1.0 1595 | kind-of: 6.0.3 1596 | 1597 | minipass@7.1.2: {} 1598 | 1599 | normalize-package-data@2.5.0: 1600 | dependencies: 1601 | hosted-git-info: 2.8.9 1602 | resolve: 1.22.11 1603 | semver: 5.7.2 1604 | validate-npm-package-license: 3.0.4 1605 | 1606 | normalize-package-data@3.0.3: 1607 | dependencies: 1608 | hosted-git-info: 4.1.0 1609 | is-core-module: 2.16.1 1610 | semver: 7.7.3 1611 | validate-npm-package-license: 3.0.4 1612 | 1613 | obug@2.1.1: {} 1614 | 1615 | p-limit@2.3.0: 1616 | dependencies: 1617 | p-try: 2.2.0 1618 | 1619 | p-limit@3.1.0: 1620 | dependencies: 1621 | yocto-queue: 0.1.0 1622 | 1623 | p-locate@4.1.0: 1624 | dependencies: 1625 | p-limit: 2.3.0 1626 | 1627 | p-locate@5.0.0: 1628 | dependencies: 1629 | p-limit: 3.1.0 1630 | 1631 | p-try@2.2.0: {} 1632 | 1633 | package-json-from-dist@1.0.1: {} 1634 | 1635 | parse-json@5.2.0: 1636 | dependencies: 1637 | '@babel/code-frame': 7.27.1 1638 | error-ex: 1.3.4 1639 | json-parse-even-better-errors: 2.3.1 1640 | lines-and-columns: 1.2.4 1641 | 1642 | path-exists@4.0.0: {} 1643 | 1644 | path-key@3.1.1: {} 1645 | 1646 | path-parse@1.0.7: {} 1647 | 1648 | path-scurry@1.11.1: 1649 | dependencies: 1650 | lru-cache: 10.4.3 1651 | minipass: 7.1.2 1652 | 1653 | path-type@4.0.0: {} 1654 | 1655 | pathe@2.0.3: {} 1656 | 1657 | picocolors@1.1.1: {} 1658 | 1659 | picomatch@2.3.1: {} 1660 | 1661 | picomatch@4.0.3: {} 1662 | 1663 | plur@4.0.0: 1664 | dependencies: 1665 | irregular-plurals: 3.5.0 1666 | 1667 | pretty-format@29.7.0: 1668 | dependencies: 1669 | '@jest/schemas': 29.6.3 1670 | ansi-styles: 5.2.0 1671 | react-is: 18.3.1 1672 | 1673 | quansync@1.0.0: {} 1674 | 1675 | queue-microtask@1.2.3: {} 1676 | 1677 | quick-lru@4.0.1: {} 1678 | 1679 | react-is@18.3.1: {} 1680 | 1681 | read-pkg-up@7.0.1: 1682 | dependencies: 1683 | find-up: 4.1.0 1684 | read-pkg: 5.2.0 1685 | type-fest: 0.8.1 1686 | 1687 | read-pkg@5.2.0: 1688 | dependencies: 1689 | '@types/normalize-package-data': 2.4.4 1690 | normalize-package-data: 2.5.0 1691 | parse-json: 5.2.0 1692 | type-fest: 0.6.0 1693 | 1694 | redent@3.0.0: 1695 | dependencies: 1696 | indent-string: 4.0.0 1697 | strip-indent: 3.0.0 1698 | 1699 | require-directory@2.1.1: {} 1700 | 1701 | resolve-pkg-maps@1.0.0: {} 1702 | 1703 | resolve@1.22.11: 1704 | dependencies: 1705 | is-core-module: 2.16.1 1706 | path-parse: 1.0.7 1707 | supports-preserve-symlinks-flag: 1.0.0 1708 | 1709 | reusify@1.1.0: {} 1710 | 1711 | rolldown-plugin-dts@0.18.3(rolldown@1.0.0-beta.53)(typescript@5.9.3): 1712 | dependencies: 1713 | '@babel/generator': 7.28.5 1714 | '@babel/parser': 7.28.5 1715 | '@babel/types': 7.28.5 1716 | ast-kit: 2.2.0 1717 | birpc: 3.0.0 1718 | dts-resolver: 2.1.3 1719 | get-tsconfig: 4.13.0 1720 | magic-string: 0.30.21 1721 | obug: 2.1.1 1722 | rolldown: 1.0.0-beta.53 1723 | optionalDependencies: 1724 | typescript: 5.9.3 1725 | transitivePeerDependencies: 1726 | - oxc-resolver 1727 | 1728 | rolldown@1.0.0-beta.53: 1729 | dependencies: 1730 | '@oxc-project/types': 0.101.0 1731 | '@rolldown/pluginutils': 1.0.0-beta.53 1732 | optionalDependencies: 1733 | '@rolldown/binding-android-arm64': 1.0.0-beta.53 1734 | '@rolldown/binding-darwin-arm64': 1.0.0-beta.53 1735 | '@rolldown/binding-darwin-x64': 1.0.0-beta.53 1736 | '@rolldown/binding-freebsd-x64': 1.0.0-beta.53 1737 | '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.53 1738 | '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.53 1739 | '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.53 1740 | '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.53 1741 | '@rolldown/binding-linux-x64-musl': 1.0.0-beta.53 1742 | '@rolldown/binding-openharmony-arm64': 1.0.0-beta.53 1743 | '@rolldown/binding-wasm32-wasi': 1.0.0-beta.53 1744 | '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.53 1745 | '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.53 1746 | 1747 | run-parallel@1.2.0: 1748 | dependencies: 1749 | queue-microtask: 1.2.3 1750 | 1751 | semver@5.7.2: {} 1752 | 1753 | semver@7.7.3: {} 1754 | 1755 | shebang-command@2.0.0: 1756 | dependencies: 1757 | shebang-regex: 3.0.0 1758 | 1759 | shebang-regex@3.0.0: {} 1760 | 1761 | signal-exit@4.1.0: {} 1762 | 1763 | slash@3.0.0: {} 1764 | 1765 | spdx-correct@3.2.0: 1766 | dependencies: 1767 | spdx-expression-parse: 3.0.1 1768 | spdx-license-ids: 3.0.22 1769 | 1770 | spdx-exceptions@2.5.0: {} 1771 | 1772 | spdx-expression-parse@3.0.1: 1773 | dependencies: 1774 | spdx-exceptions: 2.5.0 1775 | spdx-license-ids: 3.0.22 1776 | 1777 | spdx-license-ids@3.0.22: {} 1778 | 1779 | string-width@4.2.3: 1780 | dependencies: 1781 | emoji-regex: 8.0.0 1782 | is-fullwidth-code-point: 3.0.0 1783 | strip-ansi: 6.0.1 1784 | 1785 | string-width@5.1.2: 1786 | dependencies: 1787 | eastasianwidth: 0.2.0 1788 | emoji-regex: 9.2.2 1789 | strip-ansi: 7.1.2 1790 | 1791 | strip-ansi@6.0.1: 1792 | dependencies: 1793 | ansi-regex: 5.0.1 1794 | 1795 | strip-ansi@7.1.2: 1796 | dependencies: 1797 | ansi-regex: 6.2.2 1798 | 1799 | strip-indent@3.0.0: 1800 | dependencies: 1801 | min-indent: 1.0.1 1802 | 1803 | supports-color@7.2.0: 1804 | dependencies: 1805 | has-flag: 4.0.0 1806 | 1807 | supports-hyperlinks@2.3.0: 1808 | dependencies: 1809 | has-flag: 4.0.0 1810 | supports-color: 7.2.0 1811 | 1812 | supports-preserve-symlinks-flag@1.0.0: {} 1813 | 1814 | test-exclude@7.0.1: 1815 | dependencies: 1816 | '@istanbuljs/schema': 0.1.3 1817 | glob: 10.5.0 1818 | minimatch: 9.0.5 1819 | 1820 | tinyexec@1.0.2: {} 1821 | 1822 | tinyglobby@0.2.15: 1823 | dependencies: 1824 | fdir: 6.5.0(picomatch@4.0.3) 1825 | picomatch: 4.0.3 1826 | 1827 | to-regex-range@5.0.1: 1828 | dependencies: 1829 | is-number: 7.0.0 1830 | 1831 | tree-kill@1.2.2: {} 1832 | 1833 | trim-newlines@3.0.1: {} 1834 | 1835 | tsd@0.33.0: 1836 | dependencies: 1837 | '@tsd/typescript': 5.9.3 1838 | eslint-formatter-pretty: 4.1.0 1839 | globby: 11.1.0 1840 | jest-diff: 29.7.0 1841 | meow: 9.0.0 1842 | path-exists: 4.0.0 1843 | read-pkg-up: 7.0.1 1844 | 1845 | tsdown@0.17.1(typescript@5.9.3): 1846 | dependencies: 1847 | ansis: 4.2.0 1848 | cac: 6.7.14 1849 | empathic: 2.0.0 1850 | hookable: 5.5.3 1851 | import-without-cache: 0.2.2 1852 | obug: 2.1.1 1853 | rolldown: 1.0.0-beta.53 1854 | rolldown-plugin-dts: 0.18.3(rolldown@1.0.0-beta.53)(typescript@5.9.3) 1855 | semver: 7.7.3 1856 | tinyexec: 1.0.2 1857 | tinyglobby: 0.2.15 1858 | tree-kill: 1.2.2 1859 | unconfig-core: 7.4.2 1860 | unrun: 0.2.17 1861 | optionalDependencies: 1862 | typescript: 5.9.3 1863 | transitivePeerDependencies: 1864 | - '@ts-macro/tsc' 1865 | - '@typescript/native-preview' 1866 | - oxc-resolver 1867 | - synckit 1868 | - vue-tsc 1869 | 1870 | tslib@2.8.1: 1871 | optional: true 1872 | 1873 | type-fest@0.18.1: {} 1874 | 1875 | type-fest@0.21.3: {} 1876 | 1877 | type-fest@0.6.0: {} 1878 | 1879 | type-fest@0.8.1: {} 1880 | 1881 | typescript@5.9.3: {} 1882 | 1883 | unconfig-core@7.4.2: 1884 | dependencies: 1885 | '@quansync/fs': 1.0.0 1886 | quansync: 1.0.0 1887 | 1888 | undici-types@7.16.0: {} 1889 | 1890 | unrun@0.2.17: 1891 | dependencies: 1892 | '@oxc-project/runtime': 0.101.0 1893 | rolldown: 1.0.0-beta.53 1894 | 1895 | v8-to-istanbul@9.3.0: 1896 | dependencies: 1897 | '@jridgewell/trace-mapping': 0.3.31 1898 | '@types/istanbul-lib-coverage': 2.0.6 1899 | convert-source-map: 2.0.0 1900 | 1901 | validate-npm-package-license@3.0.4: 1902 | dependencies: 1903 | spdx-correct: 3.2.0 1904 | spdx-expression-parse: 3.0.1 1905 | 1906 | which@2.0.2: 1907 | dependencies: 1908 | isexe: 2.0.0 1909 | 1910 | wrap-ansi@7.0.0: 1911 | dependencies: 1912 | ansi-styles: 4.3.0 1913 | string-width: 4.2.3 1914 | strip-ansi: 6.0.1 1915 | 1916 | wrap-ansi@8.1.0: 1917 | dependencies: 1918 | ansi-styles: 6.2.3 1919 | string-width: 5.1.2 1920 | strip-ansi: 7.1.2 1921 | 1922 | y18n@5.0.8: {} 1923 | 1924 | yallist@4.0.0: {} 1925 | 1926 | yargs-parser@20.2.9: {} 1927 | 1928 | yargs-parser@21.1.1: {} 1929 | 1930 | yargs@17.7.2: 1931 | dependencies: 1932 | cliui: 8.0.1 1933 | escalade: 3.2.0 1934 | get-caller-file: 2.0.5 1935 | require-directory: 2.1.1 1936 | string-width: 4.2.3 1937 | y18n: 5.0.8 1938 | yargs-parser: 21.1.1 1939 | 1940 | yocto-queue@0.1.0: {} 1941 | --------------------------------------------------------------------------------