diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 5680d7d35..3af971177 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -7,11 +7,11 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v6 with: - node-version: 22 - - uses: pnpm/action-setup@v4 + node-version: 26 + - uses: pnpm/action-setup@v6 - name: Install dependencies run: pnpm install diff --git a/.github/workflows/publish-canary.yaml b/.github/workflows/publish-canary.yaml index cc68986f0..639073dac 100644 --- a/.github/workflows/publish-canary.yaml +++ b/.github/workflows/publish-canary.yaml @@ -24,7 +24,7 @@ jobs: - name: Get PR head SHA for comment trigger if: github.event_name == 'issue_comment' id: get_pr_head_sha - uses: actions/github-script@v7 + uses: actions/github-script@v9 with: script: | const { owner, repo } = context.repo; @@ -36,14 +36,14 @@ jobs: core.setOutput('sha', pr.head.sha); - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: ref: ${{ github.event_name == 'issue_comment' && steps.get_pr_head_sha.outputs.sha || github.ref }} - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v6 with: - node-version: 22 - - uses: pnpm/action-setup@v4 + node-version: 26 + - uses: pnpm/action-setup@v6 - name: Install dependencies run: pnpm build:prepare @@ -67,7 +67,7 @@ jobs: - name: Comment on PR with Success if: github.event_name == 'issue_comment' && steps.changesets.outputs.published == 'true' - uses: actions/github-script@v7 + uses: actions/github-script@v9 with: script: | const { owner, repo } = context.repo; @@ -86,7 +86,7 @@ jobs: - name: Comment on PR on Failure if: failure() && github.event_name == 'issue_comment' - uses: actions/github-script@v7 + uses: actions/github-script@v9 with: script: | const { owner, repo } = context.repo; diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 1b0dfbce5..fea504198 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -17,11 +17,11 @@ jobs: name: Release runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v6 with: - node-version: 22 - - uses: pnpm/action-setup@v4 + node-version: 26 + - uses: pnpm/action-setup@v6 - name: Install dependencies run: pnpm build:prepare diff --git a/.gitignore b/.gitignore index 2ae4b0725..95cb4ec71 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ lerna-debug.log coverage packages/*/dist* +*.tsbuildinfo .vscode .env* diff --git a/config/tsconfig.commonjs.json b/config/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/config/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/config/tsconfig.json b/config/tsconfig.json index df22faeca..3399c6f67 100644 --- a/config/tsconfig.json +++ b/config/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/config/tsdown.config.mts b/config/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/config/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/package.json b/package.json index b615afd34..6ae274b4c 100644 --- a/package.json +++ b/package.json @@ -19,33 +19,18 @@ "docs": "typedoc" }, "devDependencies": { - "@changesets/changelog-github": "^0.5.1", - "@changesets/cli": "^2.29.6", + "@changesets/changelog-github": "^0.7.0", + "@changesets/cli": "^2.31.0", "@types/jest": "^30.0.0", - "@vitest/coverage-v8": "3.2.4", - "jest": "30.1.1", - "ts-jest": "^29.4.1", - "typedoc": "0.28.7", - "typedoc-material-theme": "^1.4.0", + "@vitest/coverage-v8": "4.1.9", + "jest": "30.4.2", + "ts-jest": "^29.4.11", + "typedoc": "0.28.19", + "typedoc-material-theme": "^1.4.1", "typedoc-plugin-extras": "^4.0.1", - "typedoc-plugin-ga": "^1.0.5", - "typescript": "^5.9.2", - "vitest": "^3.2.4" + "typedoc-plugin-ga": "^1.1.1", + "typescript": "^6.0.3", + "vitest": "^4.1.9" }, - "pnpm": { - "patchedDependencies": { - "bs58check@4.0.0": "patches/bs58check@4.0.0.patch" - }, - "onlyBuiltDependencies": [ - "@nestjs/core", - "@tailwindcss/oxide", - "core-js", - "core-js-pure", - "esbuild", - "secp256k1", - "sharp", - "unrs-resolver" - ] - }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/ccc/CHANGELOG.md b/packages/ccc/CHANGELOG.md index 38ed5c9a8..4e2474aca 100644 --- a/packages/ccc/CHANGELOG.md +++ b/packages/ccc/CHANGELOG.md @@ -1,5 +1,44 @@ # @ckb-ccc/ccc +## 1.2.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/utxo-global@1.1.0 + - @ckb-ccc/eip6963@1.1.0 + - @ckb-ccc/uni-sat@1.1.0 + - @ckb-ccc/joy-id@1.1.0 + - @ckb-ccc/xverse@1.1.0 + - @ckb-ccc/nip07@1.1.0 + - @ckb-ccc/shell@1.3.0 + - @ckb-ccc/okx@1.1.0 + - @ckb-ccc/rei@1.1.0 + +## 1.1.26 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`3bd5130`](https://github.com/ckb-devrel/ccc/commit/3bd51300d9602482dd781752f618f6cfd642675c), [`0366786`](https://github.com/ckb-devrel/ccc/commit/03667865d1bc6d091d9144d39f6b434abe4ce18b), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346)]: + - @ckb-ccc/joy-id@1.0.33 + - @ckb-ccc/okx@1.0.33 + - @ckb-ccc/uni-sat@1.0.33 + - @ckb-ccc/utxo-global@1.0.33 + - @ckb-ccc/xverse@1.0.33 + - @ckb-ccc/shell@1.2.0 + - @ckb-ccc/eip6963@1.0.33 + - @ckb-ccc/nip07@1.0.33 + - @ckb-ccc/rei@1.0.33 + ## 1.1.25 ### Patch Changes diff --git a/packages/ccc/package.json b/packages/ccc/package.json index 05efb0489..ccd502e38 100644 --- a/packages/ccc/package.json +++ b/packages/ccc/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/ccc", - "version": "1.1.25", + "version": "1.2.0", "description": "CCC - CKBer's Codebase. Common Chains Connector.", "author": "Hanssen0 ", "license": "MIT", @@ -36,21 +36,20 @@ } }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", + "@eslint/js": "^10.0.1", "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" @@ -66,5 +65,5 @@ "@ckb-ccc/utxo-global": "workspace:*", "@ckb-ccc/xverse": "workspace:*" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/ccc/tsconfig.base.json b/packages/ccc/tsconfig.base.json index 7e5ac952b..246eb012d 100644 --- a/packages/ccc/tsconfig.base.json +++ b/packages/ccc/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2020", + "target": "es2022", "incremental": true, "allowJs": true, "importHelpers": false, @@ -16,7 +16,8 @@ "alwaysStrict": true, "noFallthroughCasesInSwitch": true, "forceConsistentCasingInFileNames": true, - "skipLibCheck": true + "skipLibCheck": true, + "rootDir": "./src" }, "include": ["src/**/*"] } diff --git a/packages/ckb-ccc/CHANGELOG.md b/packages/ckb-ccc/CHANGELOG.md index ee3bd1101..37765ac08 100644 --- a/packages/ckb-ccc/CHANGELOG.md +++ b/packages/ckb-ccc/CHANGELOG.md @@ -1,5 +1,28 @@ # ckb-ccc +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/ccc@1.2.0 + +## 1.0.34 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346)]: + - @ckb-ccc/ccc@1.1.26 + ## 1.0.33 ### Patch Changes diff --git a/packages/ckb-ccc/package.json b/packages/ckb-ccc/package.json index 71d74d547..c91a18b6b 100644 --- a/packages/ckb-ccc/package.json +++ b/packages/ckb-ccc/package.json @@ -1,6 +1,6 @@ { "name": "ckb-ccc", - "version": "1.0.33", + "version": "1.1.0", "description": "CCC - CKBer's Codebase. Common Chains Connector.", "author": "Hanssen0 ", "license": "MIT", @@ -13,21 +13,20 @@ "main": "dist.commonjs/index.js", "module": "dist/index.js", "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", + "@eslint/js": "^10.0.1", "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" @@ -35,5 +34,5 @@ "dependencies": { "@ckb-ccc/ccc": "workspace:*" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/ckb-ccc/tsconfig.base.json b/packages/ckb-ccc/tsconfig.base.json index 7e5ac952b..246eb012d 100644 --- a/packages/ckb-ccc/tsconfig.base.json +++ b/packages/ckb-ccc/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2020", + "target": "es2022", "incremental": true, "allowJs": true, "importHelpers": false, @@ -16,7 +16,8 @@ "alwaysStrict": true, "noFallthroughCasesInSwitch": true, "forceConsistentCasingInFileNames": true, - "skipLibCheck": true + "skipLibCheck": true, + "rootDir": "./src" }, "include": ["src/**/*"] } diff --git a/packages/connector-react/CHANGELOG.md b/packages/connector-react/CHANGELOG.md index edd53e02a..cabc8131a 100644 --- a/packages/connector-react/CHANGELOG.md +++ b/packages/connector-react/CHANGELOG.md @@ -1,5 +1,28 @@ # @ckb-ccc/connector-react +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/connector@1.1.0 + +## 1.0.36 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346)]: + - @ckb-ccc/connector@1.0.34 + ## 1.0.35 ### Patch Changes diff --git a/packages/connector-react/package.json b/packages/connector-react/package.json index 629a90aa9..1e411ba46 100644 --- a/packages/connector-react/package.json +++ b/packages/connector-react/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/connector-react", - "version": "1.0.35", + "version": "1.1.0", "description": "CCC - CKBer's Codebase. Common Chains Connector UI Component for React", "author": "Hanssen0 ", "license": "MIT", @@ -19,20 +19,19 @@ "./advanced": "./dist/advanced.js" }, "scripts": { - "build": "rimraf ./dist && tsc", + "build": "tsc", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" @@ -42,8 +41,8 @@ "@lit/react": "^1.0.8" }, "peerDependencies": { - "react": ">=16", - "@types/react": ">=16" + "@types/react": ">=16", + "react": ">=16" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/connector-react/tsconfig.base.json b/packages/connector-react/tsconfig.base.json index 3e8ccc480..2e7d253fd 100644 --- a/packages/connector-react/tsconfig.base.json +++ b/packages/connector-react/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2020", + "target": "es2022", "jsx": "react", "incremental": true, "allowJs": true, @@ -17,7 +17,8 @@ "alwaysStrict": true, "noFallthroughCasesInSwitch": true, "forceConsistentCasingInFileNames": true, - "skipLibCheck": true + "skipLibCheck": true, + "rootDir": "./src" }, "include": ["src/**/*"] } diff --git a/packages/connector/CHANGELOG.md b/packages/connector/CHANGELOG.md index de88116f2..9c71f456c 100644 --- a/packages/connector/CHANGELOG.md +++ b/packages/connector/CHANGELOG.md @@ -1,5 +1,28 @@ # @ckb-ccc/connector +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/ccc@1.2.0 + +## 1.0.34 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346)]: + - @ckb-ccc/ccc@1.1.26 + ## 1.0.33 ### Patch Changes diff --git a/packages/connector/package.json b/packages/connector/package.json index 577b11e7b..ef3c97d83 100644 --- a/packages/connector/package.json +++ b/packages/connector/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/connector", - "version": "1.0.33", + "version": "1.1.0", "description": "CCC - CKBer's Codebase. Common Chains Connector UI", "author": "Hanssen0 ", "license": "MIT", @@ -19,27 +19,26 @@ "./advanced": "./dist/advanced.js" }, "scripts": { - "build": "rimraf ./dist && tsc", + "build": "tsc", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { "@ckb-ccc/ccc": "workspace:*", - "lit": "^3.3.1" + "lit": "^3.3.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/connector/tsconfig.base.json b/packages/connector/tsconfig.base.json index 7e5ac952b..246eb012d 100644 --- a/packages/connector/tsconfig.base.json +++ b/packages/connector/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2020", + "target": "es2022", "incremental": true, "allowJs": true, "importHelpers": false, @@ -16,7 +16,8 @@ "alwaysStrict": true, "noFallthroughCasesInSwitch": true, "forceConsistentCasingInFileNames": true, - "skipLibCheck": true + "skipLibCheck": true, + "rootDir": "./src" }, "include": ["src/**/*"] } diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index d8b38dca3..2783e131f 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,56 @@ # @ckb-ccc/core +## 1.14.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + +## 1.13.0 +### Minor Changes + + + +- [#337](https://github.com/ckb-devrel/ccc/pull/337) [`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat(core): extract a universal `Codec` from `mol.Codec` + + + +- [#314](https://github.com/ckb-devrel/ccc/pull/314) [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d) Thanks [@phroi](https://github.com/phroi)! - feat(Epoch): transform `Epoch` into a class and add utilities + + + +- [#346](https://github.com/ckb-devrel/ccc/pull/346) [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72) Thanks [@fghdotio](https://github.com/fghdotio)! - feat(core): add BTC PSBT signing support + + - Add `SignerBtc.signPsbt()`, `signAndBroadcastPsbt()`, and `broadcastPsbt()` for signing and broadcasting PSBTs + - Add `SignPsbtOptions` and `InputToSign` for configuring PSBT signing + + +- [#314](https://github.com/ckb-devrel/ccc/pull/314) [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d) Thanks [@phroi](https://github.com/phroi)! - feat(core): `mol.padding` for padding codec + + + +- [#359](https://github.com/ckb-devrel/ccc/pull/359) [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e) Thanks [@phroi](https://github.com/phroi)! - feat(core): add isDaoOutputLimitExceeded utility for NervosDAO 64-output guard + + + +- [#337](https://github.com/ckb-devrel/ccc/pull/337) [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat(core): add known script did ckb + + + +- [#380](https://github.com/ckb-devrel/ccc/pull/380) [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat: bump @noble packages + + + +- [#337](https://github.com/ckb-devrel/ccc/pull/337) [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat(core): auto complete cell capacity if it's not enough + + +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + ## 1.12.5 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 40640b81d..c4cbfe897 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/core", - "version": "1.12.5", + "version": "1.14.0", "description": "Core of CCC - CKBer's Codebase", "author": "Hanssen0 ", "license": "MIT", @@ -12,64 +12,72 @@ }, "sideEffects": false, "main": "./dist.commonjs/index.js", - "module": "./dist/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, - "./barrel": { - "import": "./dist/barrel.js", - "require": "./dist.commonjs/barrel.js", - "default": "./dist.commonjs/barrel.js" + "./advanced": { + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" }, "./advancedBarrel": { - "import": "./dist/advancedBarrel.js", - "require": "./dist.commonjs/advancedBarrel.js", - "default": "./dist.commonjs/advancedBarrel.js" + "import": "./dist/advancedBarrel.mjs", + "require": "./dist.commonjs/advancedBarrel.js" }, - "./advanced": { - "import": "./dist/advanced.js", - "require": "./dist.commonjs/advanced.js", - "default": "./dist.commonjs/advanced.js" - } + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { "test": "vitest", "test:ci": "vitest run", - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", + "@eslint/js": "^10.0.1", "@types/ws": "^8.18.1", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0", - "vitest": "^3.2.4" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "tsdown": "0.22.3", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1", + "vitest": "^4.1.9" }, "publishConfig": { "access": "public" }, "dependencies": { - "@joyid/ckb": "^1.1.2", - "@noble/ciphers": "^0.5.3", - "@noble/curves": "^1.9.7", - "@noble/hashes": "^1.8.0", + "@joyid/ckb": "^1.1.4", + "@noble/ciphers": "^2.2.0", + "@noble/curves": "^2.2.0", + "@noble/hashes": "^2.2.0", "bech32": "^2.0.0", "bs58check": "^4.0.0", "buffer": "^6.0.3", - "ethers": "^6.15.0", + "ethers": "^6.17.0", "isomorphic-ws": "^5.0.0", - "ws": "^8.18.3" + "ws": "^8.21.0" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts", + "inlinedDependencies": { + "@noble/ciphers": "2.2.0", + "@noble/curves": "2.2.0", + "@noble/hashes": [ + "1.8.0", + "2.2.0" + ], + "base-x": "5.0.1", + "bs58": "6.0.0", + "bs58check": "4.0.0" + } } diff --git a/packages/core/src/address/address.advanced.ts b/packages/core/src/address/address.advanced.ts index 69ca175eb..4622a1e2d 100644 --- a/packages/core/src/address/address.advanced.ts +++ b/packages/core/src/address/address.advanced.ts @@ -30,10 +30,10 @@ export function addressPayloadFromString(address: string): { try { const { words, prefix } = bech32m.decode(address, ADDRESS_BECH32_LIMIT); const decoded = bech32m.fromWords(words); - const formatType = decoded[0]; + const formatType: AddressFormat = decoded[0]; const payload = decoded.slice(1); - if (formatType === (AddressFormat.Full as number)) { + if (formatType === AddressFormat.Full) { return { prefix, format: AddressFormat.Full, payload }; } } catch (_) {} @@ -42,7 +42,7 @@ export function addressPayloadFromString(address: string): { try { const { prefix, words } = bech32.decode(address, ADDRESS_BECH32_LIMIT); const decoded = bech32.fromWords(words); - const formatType = decoded[0]; + const formatType: AddressFormat = decoded[0]; const payload = decoded.slice(1); if ( [ diff --git a/packages/core/src/barrel.ts b/packages/core/src/barrel.ts index a92855072..85d942322 100644 --- a/packages/core/src/barrel.ts +++ b/packages/core/src/barrel.ts @@ -2,6 +2,7 @@ export * from "./address/index.js"; export * from "./bytes/index.js"; export * from "./ckb/index.js"; export * from "./client/index.js"; +export * from "./codec/index.js"; export * from "./fixedPoint/index.js"; export * from "./hasher/index.js"; export * from "./hex/index.js"; diff --git a/packages/core/src/ckb/epoch.test.ts b/packages/core/src/ckb/epoch.test.ts new file mode 100644 index 000000000..e969db408 --- /dev/null +++ b/packages/core/src/ckb/epoch.test.ts @@ -0,0 +1,241 @@ +import { describe, expect, it } from "vitest"; +import type { ClientBlockHeader } from "../client/index.js"; +import { Epoch, epochFrom, epochFromHex, epochToHex } from "./epoch"; + +describe("Epoch", () => { + it("constructs from tuple and object via from()", () => { + const a = Epoch.from([1n, 2n, 3n]); + expect(a.integer).toBe(1n); + expect(a.numerator).toBe(2n); + expect(a.denominator).toBe(3n); + + const b = Epoch.from({ integer: 4n, numerator: 5n, denominator: 6n }); + expect(b.integer).toBe(4n); + expect(b.numerator).toBe(5n); + expect(b.denominator).toBe(6n); + + const c = new Epoch(7n, 8n, 9n); + expect(Epoch.from(c)).toBe(c); + }); + + it("packs and unpacks numeric layout (toNum/fromNum) and hex conversion", () => { + const e = new Epoch(0x010203n, 0x0405n, 0x0607n); // use values within bit widths + const packed1 = e.toNum(); + // integer in lower 24 bits, numerator next 16, denominator next 16 + expect(packed1 & 0xffffffn).toBe(0x010203n); + expect((packed1 >> 24n) & 0xffffn).toBe(0x0405n); + expect((packed1 >> 40n) & 0xffffn).toBe(0x0607n); + + const hex = e.toPackedHex(); + expect(typeof hex).toBe("string"); + expect(hex.startsWith("0x")).toBe(true); + + // round-trip + const decoded = Epoch.fromNum(packed1); + expect(decoded.integer).toBe(e.integer); + expect(decoded.numerator).toBe(e.numerator); + expect(decoded.denominator).toBe(e.denominator); + }); + + it("throws when packing negative components with toNum", () => { + const e = new Epoch(-1n, 0n, 1n); + expect(() => e.toNum()).toThrow(); + + const e2 = new Epoch(0n, -1n, 1n); + expect(() => e2.toNum()).toThrow(); + + const e3 = new Epoch(0n, 0n, -1n); + expect(() => e3.toNum()).toThrow(); + }); + + it("throws when packing components too big with toNum", () => { + const e = new Epoch(1n << 24n, 1n, 1n); // integer = 16777215 (24-bit limit + 1) + expect(() => e.toNum()).toThrow(); + + const e2 = new Epoch(1n, 1n << 16n, 1n); // numerator = 65536 (16-bit limit + 1) + expect(() => e2.toNum()).toThrow(); + + const e3 = new Epoch(1n, 1n, 1n << 16n); // denominator = 65536 (16-bit limit + 1) + expect(() => e3.toNum()).toThrow(); + }); + + it("normalizeBase fixes zero or negative denominators", () => { + const a = new Epoch(1n, 2n, 0n).normalizeBase(); + expect(a.denominator).toBe(1n); + expect(a.numerator).toBe(0n); + + const b = new Epoch(1n, 2n, -3n).normalizeBase(); + expect(b.denominator).toBe(3n); + expect(b.numerator).toBe(-2n); + }); + + it("normalizeCanonical reduces fractions and carries/borrows correctly", () => { + // reduction by gcd: 2/4 -> 1/2 + const a = new Epoch(1n, 2n, 4n).normalizeCanonical(); + expect(a.integer).toBe(1n); + expect(a.numerator).toBe(1n); + expect(a.denominator).toBe(2n); + + // carry: 5/2 -> +2 integer, remainder 1/2 + const b = new Epoch(0n, 5n, 2n).normalizeCanonical(); + expect(b.integer).toBe(2n); + expect(b.numerator).toBe(1n); + expect(b.denominator).toBe(2n); + + // borrow when numerator negative + const c = new Epoch(5n, -1n, 2n).normalizeCanonical(); + // -1/2 borrowed: integer 4, numerator becomes 1/2 + expect(c.integer).toBe(4n); + expect(c.numerator).toBe(1n); + expect(c.denominator).toBe(2n); + }); + + it("clone returns a deep copy", () => { + const e = new Epoch(1n, 1n, 1n); + const c = e.clone(); + expect(c).not.toBe(e); + expect(c.integer).toBe(e.integer); + expect(c.numerator).toBe(e.numerator); + expect(c.denominator).toBe(e.denominator); + }); + + it("Genesis and OneNervosDaoCycle helpers", () => { + const g = Epoch.Genesis; + expect(g.integer).toBe(0n); + expect(g.numerator).toBe(0n); + expect(g.denominator).toBe(0n); + + const o = Epoch.OneNervosDaoCycle; + expect(o.integer).toBe(180n); + expect(o.numerator).toBe(0n); + expect(o.denominator).toBe(1n); + }); + + it("comparison operations and compare()", () => { + const a = new Epoch(1n, 0n, 1n); + const b = new Epoch(1n, 1n, 2n); + const c = new Epoch(2n, 0n, 1n); + + expect(a.compare(b)).toBe(-1); + expect(b.compare(a)).toBe(1); + expect(a.compare(a)).toBe(0); + + expect(a.lt(b)).toBe(true); + expect(b.le(b)).toBe(true); + expect(b.eq(new Epoch(1n, 2n, 4n))).toBe(true); // 1 + 1/2 == 1 + 2/4 + expect(c.gt(b)).toBe(true); + expect(c.ge(b)).toBe(true); + }); + + it("add and sub arithmetic with differing denominators", () => { + const a = new Epoch(1n, 1n, 2n); // 1.5 + const b = new Epoch(2n, 1n, 3n); // 2 + 1/3 + const s = a.add(b); + // compute expected: whole = 3, fractional = 1/2 + 1/3 = 5/6 -> 3 + 5/6 + expect(s.integer).toBe(3n); + expect(s.numerator).toBe(5n); + expect(s.denominator).toBe(6n); + + const sub = s.sub(new Epoch(1n, 5n, 6n)); + expect(sub.integer).toBe(2n); + expect(sub.numerator).toBe(0n); + expect(sub.denominator).toBe(1n); + }); + + it("toUnix estimates timestamp using a reference header", () => { + const refEpoch = new Epoch(1n, 0n, 1n); + // Provide a minimal shaped header for toUnix without using `any`. + const refHeader = { + epoch: refEpoch, + timestamp: 1000n, + }; + + // target epoch is 2 + 1/2 + const target = new Epoch(2n, 1n, 2n); + const delta = target.sub(refEpoch); // should be 1 + 1/2 + + // Test default behavior (4 hours) + const expectedDefault = + refHeader.timestamp + + DEFAULT_EPOCH_IN_MILLISECONDS * delta.integer + + (DEFAULT_EPOCH_IN_MILLISECONDS * delta.numerator) / delta.denominator; + + expect(target.toUnix(refHeader)).toBe(expectedDefault); + + // Test custom epoch duration (10 minutes) + const customEpochMs = 10n * 60n * 1000n; + const expectedCustom = + refHeader.timestamp + + customEpochMs * delta.integer + + (customEpochMs * delta.numerator) / delta.denominator; + + expect(target.toUnix(refHeader, customEpochMs)).toBe(expectedCustom); + }); + + it("toUnix accepts full ClientBlockHeader", () => { + const refEpoch = new Epoch(1n, 0n, 1n); + // Simulate a full ClientBlockHeader object + const fullHeader: ClientBlockHeader = { + epoch: refEpoch, + timestamp: 1000n, + compactTarget: 0n, + hash: "0x1234567890abcdef", + number: 100n, + parentHash: "0xabcdef1234567890", + version: 0n, + nonce: 0n, + dao: { c: 0n, ar: 0n, s: 0n, u: 0n }, + extraHash: "0x0000000000000000", + proposalsHash: "0x0000000000000000", + transactionsRoot: "0x0000000000000000", + }; + + const target = new Epoch(2n, 1n, 2n); + const delta = target.sub(fullHeader.epoch); + const expected = + fullHeader.timestamp + + DEFAULT_EPOCH_IN_MILLISECONDS * delta.integer + + (DEFAULT_EPOCH_IN_MILLISECONDS * delta.numerator) / delta.denominator; + + // Full ClientBlockHeader should work due to structural typing + expect(target.toUnix(fullHeader)).toBe(expected); + }); + + it("toUnix accepts object literal with exact required properties", () => { + const target = new Epoch(2n, 1n, 2n); + const minimalRef = { + epoch: new Epoch(1n, 0n, 1n), + timestamp: 1000n, + }; + + const delta = target.sub(minimalRef.epoch); + const expected = + minimalRef.timestamp + + DEFAULT_EPOCH_IN_MILLISECONDS * delta.integer + + (DEFAULT_EPOCH_IN_MILLISECONDS * delta.numerator) / delta.denominator; + + expect(target.toUnix(minimalRef)).toBe(expected); + }); + + it("deprecated helpers epochFrom / epochFromHex / epochToHex", () => { + const e = new Epoch(3n, 4n, 5n); + expect(epochFrom(e)).toBe(e); + + const hex = epochToHex(e); + expect(typeof hex).toBe("string"); + expect(hex.startsWith("0x")).toBe(true); + + const decoded = epochFromHex(hex); + expect(decoded.integer).toBe(e.integer); + expect(decoded.numerator).toBe(e.numerator); + expect(decoded.denominator).toBe(e.denominator); + }); +}); + +/** + * DEFAULT_EPOCH_IN_MILLISECONDS + * + * Constant duration of a single standard ideal epoch expressed in milliseconds. + * Defined as 4 hours = 4 * 60 * 60 * 1000 ms. + */ +const DEFAULT_EPOCH_IN_MILLISECONDS = 4n * 60n * 60n * 1000n; diff --git a/packages/core/src/ckb/epoch.ts b/packages/core/src/ckb/epoch.ts new file mode 100644 index 000000000..8ee254ad5 --- /dev/null +++ b/packages/core/src/ckb/epoch.ts @@ -0,0 +1,489 @@ +import type { ClientBlockHeader } from "../client/clientTypes.js"; +import { codec, codecPadding, codecUint, Entity } from "../codec/index.js"; +import { Zero } from "../fixedPoint/index.js"; +import { type Hex, type HexLike } from "../hex/index.js"; +import { mol } from "../molecule/index.js"; +import { numFrom, NumLike, numToHex, type Num } from "../num/index.js"; +import { gcd } from "../utils/index.js"; + +/** + * EpochLike + * + * Union type that represents any allowed input shapes that can be converted + * into an Epoch instance. + * + * Accepted shapes: + * - Tuple: [integer, numerator, denominator] where each element is NumLike + * - Object: { integer, numerator, denominator } where each field is NumLike + * - Packed numeric form: Num (bigint) or Hex (RPC-style packed hex) + * + * Notes: + * - When constructing an Epoch from a Num or Hex the packed numeric representation + * encodes integer (24 bits), numerator (16 bits) and denominator (16 bits). + * - Use Epoch.from() to convert any EpochLike into an Epoch instance. + * + * @example + * // From tuple + * Epoch.from([1n, 0n, 1n]); + */ +export type EpochLike = + | [NumLike, NumLike, NumLike] + | { + integer: NumLike; + numerator: NumLike; + denominator: NumLike; + } + | Num + | Hex; + +/** + * Epoch + * + * Represents a blockchain epoch consisting of a whole integer part and an + * optional fractional part represented as numerator/denominator. + * + * Behavior highlights: + * - Internally stores values as Num (bigint). + * - Provides normalization routines to canonicalize the fractional part: + * - normalizeBase(): fixes zero/negative denominators + * - normalizeCanonical(): reduces fraction, borrows/carries whole units + * - Supports arithmetic (add/sub), comparison and conversion utilities. + * + * @example + * const e = new Epoch(1n, 1n, 2n); // 1 + 1/2 + * + * @remarks + * This class is primarily a thin value-object; operations return new Epoch instances. + */ +@codec( + mol.struct({ + padding: codecPadding(1), + denominator: codecUint(2), + numerator: codecUint(2), + integer: codecUint(3), + }), +) +export class Epoch extends Entity.Base() { + /** + * Construct a new Epoch instance. + * + * @param integer - Whole epoch units (Num/bigint) + * @param numerator - Fractional numerator (Num). + * @param denominator - Fractional denominator (Num). + */ + public constructor( + public readonly integer: Num, + public readonly numerator: Num, + public readonly denominator: Num, + ) { + super(); + } + + /** + * Normalize simpler base invariants: + * - If denominator === 0, set denominator to 1 and numerator to 0 for arithmetic convenience. + * - If denominator is negative flip signs of numerator and denominator to keep denominator positive. + * + * This is a minimal correction used before arithmetic or canonical normalization. + * + * @returns New Epoch with denominator corrected (but fraction not reduced). + */ + normalizeBase(): Epoch { + if (this.denominator === Zero) { + return new Epoch(this.integer, Zero, numFrom(1)); + } + + if (this.denominator < Zero) { + return new Epoch(this.integer, -this.numerator, -this.denominator); + } + + return this; + } + + /** + * Perform full canonical normalization of the epoch value. + * + * Steps: + * 1. Apply base normalization (normalizeBase). + * 2. If numerator is negative, borrow whole denominator(s) from the integer part + * so numerator becomes non-negative. This ensures 0 <= numerator < denominator whenever possible. + * 3. Reduce numerator/denominator by their greatest common divisor (gcd). + * 4. Carry any whole units from the reduced numerator into the integer part. + * 5. Ensure numerator is the strict remainder (numerator < denominator). + * + * @returns Canonicalized Epoch with a non-negative, reduced fractional part and integer adjusted accordingly. + */ + normalizeCanonical(): Epoch { + let { integer, numerator, denominator } = this.normalizeBase(); + + // If numerator is negative, borrow enough whole denominators from integer so numerator >= 0. + if (numerator < Zero) { + // n is the minimal non-negative integer such that numerator + n * denominator >= 0 + const n = (-numerator + denominator - 1n) / denominator; + integer -= n; + numerator += denominator * n; + } + + // Reduce the fractional part to lowest terms to keep canonical form and avoid unnecessarily large multiples. + const g = gcd(numerator, denominator); + numerator /= g; + denominator /= g; + + // Move any full units contained in the fraction into integer (e.g., 5/2 => +2 integer, remainder 1/2). + integer += numerator / denominator; + + // Remainder numerator after removing whole units; ensures numerator < denominator. + numerator %= denominator; + + return new Epoch(integer, numerator, denominator); + } + + /** + * Backwards-compatible array-style index 0 referencing the whole epoch integer. + * + * @returns integer portion (Num) + * @deprecated Use `.integer` property instead. + */ + get 0(): Num { + return this.integer; + } + + /** + * Backwards-compatible array-style index 1 referencing the epoch fractional numerator. + * + * @returns numerator portion (Num) + * @deprecated Use `.numerator` property instead. + */ + get 1(): Num { + return this.numerator; + } + + /** + * Backwards-compatible array-style index 2 referencing the epoch fractional denominator. + * + * @returns denominator portion (Num) + * @deprecated Use `.denominator` property instead. + */ + get 2(): Num { + return this.denominator; + } + + /** + * Convert this Epoch into its RPC-style packed numeric representation (Num). + * + * Packing layout (little-endian style fields): + * - integer: lower 24 bits + * - numerator: next 16 bits + * - denominator: next 16 bits + * + * Throws if any component is negative since packed representation assumes non-negative components. + * + * @throws {Error} If integer, numerator or denominator are negative. + * @throws {Error} If integer, numerator or denominator overflow the packing limits. + * @returns Packed numeric representation (Num) suitable for RPC packing. + */ + toNum(): Num { + if ( + this.integer < Zero || + this.numerator < Zero || + this.denominator < Zero + ) { + throw Error("Negative values in Epoch to Num conversion"); + } + + if ( + this.integer >= numFrom("0x1000000") || // 24-bit limit + this.numerator >= numFrom("0x10000") || // 16-bit limit + this.denominator >= numFrom("0x10000") // 16-bit limit + ) { + throw Error( + "Integer must be < 2^24, numerator and denominator must be < 2^16", + ); + } + + return ( + this.integer + + (this.numerator << numFrom(24)) + + (this.denominator << numFrom(40)) + ); + } + + /** + * Convert epoch to hex string representation of the RPC-style packed numeric form. + * + * Returns the same representation used by CKB RPC responses where the + * packed numeric bytes may be trimmed of leading zeros, see {@link numToHex} + * + * @returns Hex string corresponding to the packed epoch. + */ + toPackedHex(): Hex { + return numToHex(this.toNum()); + } + + /** + * Construct an Epoch by unpacking a RPC-style packed numeric form. + * + * @param v - NumLike packed epoch (like Num and Hex) + * @returns Epoch whose integer, numerator and denominator are extracted from the packed layout. + */ + static fromNum(v: NumLike): Epoch { + const num = numFrom(v); + + return new Epoch( + num & numFrom("0xffffff"), + (num >> numFrom(24)) & numFrom("0xffff"), + (num >> numFrom(40)) & numFrom("0xffff"), + ); + } + + /** + * Create an Epoch from an EpochLike value. + * + * Accepts: + * - an Epoch instance (returned as-is) + * - an array [integer, numerator, denominator] where each element is NumLike + * - an object { integer, numerator, denominator } where each field is NumLike + * - a packed numeric-like value handled by fromNum + * + * All numeric-like inputs are converted with numFrom() to produce internal Num values. + * + * @param e - Value convertible to Epoch + * @returns Epoch instance + */ + static override from(e: EpochLike): Epoch { + if (e instanceof Epoch) { + return e; + } + + if (Array.isArray(e)) { + return new Epoch(numFrom(e[0]), numFrom(e[1]), numFrom(e[2])); + } + + if (typeof e === "object") { + return new Epoch( + numFrom(e.integer), + numFrom(e.numerator), + numFrom(e.denominator), + ); + } + + return Epoch.fromNum(e); + } + + /** + * Return a deep copy of this Epoch. + * + * @returns New Epoch instance with identical components. + */ + override clone(): Epoch { + return new Epoch(this.integer, this.numerator, this.denominator); + } + + /** + * Return the genesis epoch. + * + * Note: for historical reasons the genesis epoch is represented with all-zero + * fields, no other epoch instance should use a zero denominator. + * + * @returns Epoch with integer = 0, numerator = 0, denominator = 0. + */ + static get Genesis(): Epoch { + return new Epoch(Zero, Zero, Zero); + } + + /** + * Return an Epoch representing one Nervos DAO cycle (180 epochs exactly). + * + * @returns Epoch equal to 180 with denominator set to 1 to represent an exact whole unit. + */ + static get OneNervosDaoCycle(): Epoch { + return new Epoch(numFrom(180), Zero, numFrom(1)); + } + + /** + * Compare this epoch to another EpochLike. + * + * The comparison computes scaled integer values so fractions are compared without precision loss: + * scaled = (integer * denominator + numerator) * other.denominator + * + * Special-case: identical object references return equality immediately. + * + * @param other - Epoch-like value to compare against. + * @returns 1 if this > other, 0 if equal, -1 if this < other. + * + * @example + * epochA.compare(epochB); // -1|0|1 + */ + compare(other: EpochLike): 1 | 0 | -1 { + if (this === other) { + return 0; + } + + const t = this.normalizeBase(); + const o = Epoch.from(other).normalizeBase(); + + // Compute scaled representations to compare fractions without floating-point arithmetic. + const a = (t.integer * t.denominator + t.numerator) * o.denominator; + const b = (o.integer * o.denominator + o.numerator) * t.denominator; + + return a > b ? 1 : a < b ? -1 : 0; + } + + /** + * Check whether this epoch is less than another EpochLike. + * + * @param other - EpochLike to compare against. + * @returns true if this < other. + */ + lt(other: EpochLike): boolean { + return this.compare(other) < 0; + } + + /** + * Check whether this epoch is less than or equal to another EpochLike. + * + * @param other - EpochLike to compare against. + * @returns true if this <= other. + */ + le(other: EpochLike): boolean { + return this.compare(other) <= 0; + } + + /** + * Check whether this epoch equals another EpochLike. + * + * @param other - EpochLike to compare against. + * @returns true if equal. + */ + eq(other: EpochLike): boolean { + return this.compare(other) === 0; + } + + /** + * Check whether this epoch is greater than or equal to another EpochLike. + * + * @param other - EpochLike to compare against. + * @returns true if this >= other. + */ + ge(other: EpochLike): boolean { + return this.compare(other) >= 0; + } + + /** + * Check whether this epoch is greater than another EpochLike. + * + * @param other - EpochLike to compare against. + * @returns true if this > other. + */ + gt(other: EpochLike): boolean { + return this.compare(other) > 0; + } + + /** + * Add another EpochLike to this epoch and return the normalized result. + * + * Rules and edge-cases: + * - Whole parts are added directly; fractional parts are aligned to a common denominator and added. + * - Final result is canonicalized to reduce the fraction and carry any overflow to the integer part. + * + * @param other - Epoch-like value to add. + * @returns Normalized Epoch representing the sum. + */ + add(other: EpochLike): Epoch { + const t = this.normalizeBase(); + const o = Epoch.from(other).normalizeBase(); + + // Sum whole integer parts. + const integer = t.integer + o.integer; + let numerator: Num; + let denominator: Num; + + // Align denominators if they differ; use multiplication to obtain a common denominator. + if (t.denominator !== o.denominator) { + // Numerators & Denominators are generally small (<= 2000n); multiplication produces a safe common denominator. + numerator = t.numerator * o.denominator + o.numerator * t.denominator; + denominator = t.denominator * o.denominator; + } else { + numerator = t.numerator + o.numerator; + denominator = t.denominator; + } + + // Normalize to reduce fraction and carry whole units into integer. + return new Epoch(integer, numerator, denominator).normalizeCanonical(); + } + + /** + * Subtract an EpochLike from this epoch and return the normalized result. + * + * Implementation notes: + * - Delegates to add by negating the other epoch's integer and numerator while preserving denominator. + * - normalizeCanonical will handle negative numerators by borrowing from integer as necessary. + * + * @param other - Epoch-like value to subtract. + * @returns Normalized Epoch representing this - other. + */ + sub(other: EpochLike): Epoch { + const { integer, numerator, denominator } = Epoch.from(other); + return this.add(new Epoch(-integer, -numerator, denominator)); + } + + /** + * Convert this epoch to an estimated Unix timestamp in milliseconds using a reference header. + * + * Note: This is an estimation that assumes a constant epoch duration. + * + * @param reference - Object providing `epoch` (Epoch) and `timestamp` (Num) fields, such as a ClientBlockHeader. + * @param epochInMilliseconds - Duration of a single epoch in milliseconds. Defaults to 4 hours. + * @returns Estimated Unix timestamp in milliseconds as bigint. + */ + toUnix( + reference: Pick, + epochInMilliseconds: Num = numFrom(4 * 60 * 60 * 1000), + ): bigint { + // Compute relative epoch difference against the reference header. + const { integer, numerator, denominator } = this.sub(reference.epoch); + + // Add whole epoch duration and fractional epoch duration to the reference timestamp. + return ( + reference.timestamp + + epochInMilliseconds * integer + + (epochInMilliseconds * numerator) / denominator + ); + } +} + +/** + * epochFrom + * + * @deprecated prefer using Epoch.from() directly. + * + * @param epochLike - Epoch-like value to convert. + * @returns Epoch instance corresponding to the input. + */ +export function epochFrom(epochLike: EpochLike): Epoch { + return Epoch.from(epochLike); +} + +/** + * epochFromHex + * + * @deprecated use Epoch.fromNum() with numeric input instead. + * + * @param hex - Hex-like or numeric-like value encoding a packed epoch. + * @returns Decoded Epoch instance. + */ +export function epochFromHex(hex: HexLike): Epoch { + return Epoch.fromNum(hex); +} + +/** + * epochToHex + * + * @deprecated use Epoch.from(epochLike).toPackedHex() instead. + * + * @param epochLike - Value convertible to an Epoch (object, tuple or Epoch). + * @returns Hex string representing the packed epoch encoding. + */ +export function epochToHex(epochLike: EpochLike): Hex { + return Epoch.from(epochLike).toPackedHex(); +} diff --git a/packages/core/src/ckb/index.ts b/packages/core/src/ckb/index.ts index 7d20b37d0..198c09299 100644 --- a/packages/core/src/ckb/index.ts +++ b/packages/core/src/ckb/index.ts @@ -1,3 +1,4 @@ +export * from "./epoch.js"; export * from "./hash.js"; export * from "./script.js"; export * from "./transaction.js"; diff --git a/packages/core/src/ckb/script.ts b/packages/core/src/ckb/script.ts index 1de3c7ac0..21405c8a5 100644 --- a/packages/core/src/ckb/script.ts +++ b/packages/core/src/ckb/script.ts @@ -1,6 +1,7 @@ import { Bytes, BytesLike, bytesFrom } from "../bytes/index.js"; import type { Client } from "../client/index.js"; import { KnownScript } from "../client/knownScript.js"; +import { Codec, Entity, codec } from "../codec/index.js"; import { Hex, HexLike, hexFrom } from "../hex/index.js"; import { mol } from "../molecule/index.js"; import { @@ -9,7 +10,7 @@ import { NUM_TO_HASH_TYPE, } from "./script.advanced.js"; -export const HashTypeCodec: mol.Codec = mol.Codec.from({ +export const HashTypeCodec: Codec = Codec.from({ byteLength: 1, encode: hashTypeToBytes, decode: hashTypeFromBytes, @@ -108,14 +109,14 @@ export type ScriptLike = { /** * @public */ -@mol.codec( +@codec( mol.table({ codeHash: mol.Byte32, hashType: HashTypeCodec, args: mol.Bytes, }), ) -export class Script extends mol.Entity.Base() { +export class Script extends Entity.Base() { /** * Creates an instance of Script. * diff --git a/packages/core/src/ckb/transaction.test.ts b/packages/core/src/ckb/transaction.test.ts index 6271517d4..c6a3a9d46 100644 --- a/packages/core/src/ckb/transaction.test.ts +++ b/packages/core/src/ckb/transaction.test.ts @@ -385,6 +385,9 @@ describe("Transaction", () => { { previousOutput: mockCapacityCells[0].outPoint, }, + { + previousOutput: mockCapacityCells[1].outPoint, + }, ], outputs: [ { @@ -647,22 +650,13 @@ describe("Transaction", () => { describe("Automatic Capacity Completion", () => { describe("CellOutput.from", () => { - it("should use explicit capacity when provided", () => { - const cellOutput = ccc.CellOutput.from({ - capacity: 1000n, - lock, - }); - - expect(cellOutput.capacity).toBe(1000n); - }); - it("should not modify capacity when data is not provided", () => { const cellOutput = ccc.CellOutput.from({ - capacity: 0n, + capacity: 100n, lock, }); - expect(cellOutput.capacity).toBe(0n); + expect(cellOutput.capacity).toBe(100n); }); it("should calculate capacity automatically when capacity is 0", () => { @@ -679,6 +673,20 @@ describe("Transaction", () => { expect(cellOutput.capacity).toBe(ccc.fixedPointFrom(expectedCapacity)); }); + it("should calculate capacity automatically when capacity is less than min requirement", () => { + const outputData = "0x1234"; // 2 bytes + const cellOutput = ccc.CellOutput.from( + { + capacity: 1000n, + lock, + }, + outputData, + ); + + const expectedCapacity = cellOutput.occupiedSize + 2; // occupiedSize + outputData length + expect(cellOutput.capacity).toBe(ccc.fixedPointFrom(expectedCapacity)); + }); + it("should calculate capacity automatically when capacity is omitted", () => { const outputData = "0x5678"; // 2 bytes const cellOutput = ccc.CellOutput.from( @@ -732,9 +740,9 @@ describe("Transaction", () => { expect(cellOutput.capacity).toBe(ccc.fixedPointFrom(expectedCapacity)); }); - it("should not auto-calculate when capacity is explicitly provided even with outputData", () => { + it("should not auto-calculate when capacity is enough even with outputData", () => { const outputData = "0x1234"; // 2 bytes - const explicitCapacity = 5000n; + const explicitCapacity = ccc.fixedPointFrom(100); const cellOutput = ccc.CellOutput.from( { capacity: explicitCapacity, @@ -745,21 +753,6 @@ describe("Transaction", () => { expect(cellOutput.capacity).toBe(explicitCapacity); }); - - it("should handle the overloaded signature correctly", () => { - // Test the overloaded signature where capacity is omitted and outputData is required - const outputData = "0xabcd"; - const cellOutput = ccc.CellOutput.from( - { - lock, - type, - }, - outputData, - ); - - const expectedCapacity = cellOutput.occupiedSize + 2; - expect(cellOutput.capacity).toBe(ccc.fixedPointFrom(expectedCapacity)); - }); }); describe("Transaction.from", () => { @@ -798,7 +791,7 @@ describe("Transaction", () => { it("should handle mixed explicit and automatic capacity calculation", () => { const outputsData = ["0x12", "0x3456"]; - const explicitCapacity = 5000n; + const explicitCapacity = ccc.fixedPointFrom(100); const tx = ccc.Transaction.from({ outputs: [ { @@ -951,7 +944,7 @@ describe("Transaction", () => { it("should add output with explicit capacity", () => { const tx = ccc.Transaction.default(); const outputData = "0x12"; - const explicitCapacity = 10000n; + const explicitCapacity = ccc.fixedPointFrom(100); tx.addOutput( { @@ -1142,7 +1135,7 @@ describe("Transaction", () => { it("should calculate capacityFree correctly", () => { const outputData = "0x1234"; - const explicitCapacity = 1000n; + const explicitCapacity = ccc.fixedPointFrom(100); const cell = ccc.Cell.from({ outPoint: { txHash: "0x" + "0".repeat(64), diff --git a/packages/core/src/ckb/transaction.ts b/packages/core/src/ckb/transaction.ts index 35fc4a727..3d3bc325c 100644 --- a/packages/core/src/ckb/transaction.ts +++ b/packages/core/src/ckb/transaction.ts @@ -7,6 +7,7 @@ import { type ClientBlockHeaderLike, } from "../client/index.js"; import { KnownScript } from "../client/knownScript.js"; +import { Codec, Entity, codec } from "../codec/index.js"; import { Zero, fixedPointFrom } from "../fixedPoint/index.js"; import { Hasher, HasherCkb, hashCkb } from "../hasher/index.js"; import { Hex, HexLike, hexFrom } from "../hex/index.js"; @@ -16,11 +17,13 @@ import { NumLike, numFrom, numFromBytes, + numMax, numToBytes, numToHex, } from "../num/index.js"; import type { Signer } from "../signer/index.js"; import { apply, reduceAsync } from "../utils/index.js"; +import { Epoch } from "./epoch.js"; import { Script, ScriptLike, ScriptOpt } from "./script.js"; import { DEP_TYPE_TO_NUM, NUM_TO_DEP_TYPE } from "./transaction.advanced.js"; import { @@ -29,7 +32,7 @@ import { } from "./transactionErrors.js"; import type { LumosTransactionSkeletonType } from "./transactionLumos.js"; -export const DepTypeCodec: mol.Codec = mol.Codec.from({ +export const DepTypeCodec: Codec = Codec.from({ byteLength: 1, encode: depTypeToBytes, decode: depTypeFromBytes, @@ -124,13 +127,13 @@ export type OutPointLike = { /** * @public */ -@mol.codec( +@codec( mol.struct({ txHash: mol.Byte32, index: mol.Uint32, }), ) -export class OutPoint extends mol.Entity.Base() { +export class OutPoint extends Entity.Base() { /** * Creates an instance of OutPoint. * @@ -205,14 +208,14 @@ export type CellOutputLike = { /** * @public */ -@mol.codec( +@codec( mol.table({ capacity: mol.Uint64, lock: Script, type: ScriptOpt, }), ) -export class CellOutput extends mol.Entity.Base() { +export class CellOutput extends Entity.Base() { /** * Creates an instance of CellOutput. * @@ -273,9 +276,10 @@ export class CellOutput extends mol.Entity.Base() { ); })(); - if (output.capacity === Zero && outputData != null) { - output.capacity = fixedPointFrom( - output.occupiedSize + bytesFrom(outputData).length, + if (outputData != null) { + output.capacity = numMax( + output.capacity, + fixedPointFrom(output.occupiedSize + bytesFrom(outputData).length), ); } @@ -650,45 +654,6 @@ export class Cell extends CellAny { } } -/** - * @public - */ -export type EpochLike = [NumLike, NumLike, NumLike]; -/** - * @public - */ -export type Epoch = [Num, Num, Num]; -/** - * @public - */ -export function epochFrom(epochLike: EpochLike): Epoch { - return [numFrom(epochLike[0]), numFrom(epochLike[1]), numFrom(epochLike[2])]; -} -/** - * @public - */ -export function epochFromHex(hex: HexLike): Epoch { - const num = numFrom(hexFrom(hex)); - - return [ - num & numFrom("0xffffff"), - (num >> numFrom(24)) & numFrom("0xffff"), - (num >> numFrom(40)) & numFrom("0xffff"), - ]; -} -/** - * @public - */ -export function epochToHex(epochLike: EpochLike): Hex { - const epoch = epochFrom(epochLike); - - return numToHex( - numFrom(epoch[0]) + - (numFrom(epoch[1]) << numFrom(24)) + - (numFrom(epoch[2]) << numFrom(40)), - ); -} - /** * @public */ @@ -702,10 +667,10 @@ export type SinceLike = /** * @public */ -@mol.codec( +@codec( mol.Uint64.mapIn((encodable: SinceLike) => Since.from(encodable).toNum()), ) -export class Since extends mol.Entity.Base() { +export class Since extends Entity.Base() { /** * Creates an instance of Since. * @@ -823,7 +788,7 @@ export type CellInputLike = ( /** * @public */ -@mol.codec( +@codec( mol .struct({ since: Since, @@ -831,7 +796,7 @@ export type CellInputLike = ( }) .mapIn((encodable: CellInputLike) => CellInput.from(encodable)), ) -export class CellInput extends mol.Entity.Base() { +export class CellInput extends Entity.Base() { /** * Creates an instance of CellInput. * @@ -960,13 +925,13 @@ export type CellDepLike = { /** * @public */ -@mol.codec( +@codec( mol.struct({ outPoint: OutPoint, depType: DepTypeCodec, }), ) -export class CellDep extends mol.Entity.Base() { +export class CellDep extends Entity.Base() { /** * Creates an instance of CellDep. * @@ -1034,17 +999,14 @@ export type WitnessArgsLike = { /** * @public */ -@mol.codec( +@codec( mol.table({ lock: mol.BytesOpt, inputType: mol.BytesOpt, outputType: mol.BytesOpt, }), ) -export class WitnessArgs extends mol.Entity.Base< - WitnessArgsLike, - WitnessArgs ->() { +export class WitnessArgs extends Entity.Base() { /** * Creates an instance of WitnessArgs. * @@ -1127,7 +1089,7 @@ export type TransactionLike = { /** * @public */ -@mol.codec( +@codec( mol .table({ raw: RawTransaction, @@ -1142,10 +1104,7 @@ export type TransactionLike = { }) .mapOut((tx) => Transaction.from({ ...tx.raw, witnesses: tx.witnesses })), ) -export class Transaction extends mol.Entity.Base< - TransactionLike, - Transaction ->() { +export class Transaction extends Entity.Base() { /** * Creates an instance of Transaction. * @@ -1890,7 +1849,7 @@ export class Transaction extends mol.Entity.Base< return reduceAsync( this.inputs, async (acc, input) => acc + (await input.getExtraCapacity(client)), - numFrom(0), + Zero, ); } @@ -1906,16 +1865,13 @@ export class Transaction extends mol.Entity.Base< return acc + capacity; }, - numFrom(0), + Zero, )) + (await this.getInputsCapacityExtra(client)) ); } getOutputsCapacity(): Num { - return this.outputs.reduce( - (acc, { capacity }) => acc + capacity, - numFrom(0), - ); + return this.outputs.reduce((acc, { capacity }) => acc + capacity, Zero); } async getInputsUdtBalance(client: Client, type: ScriptLike): Promise { @@ -1929,7 +1885,7 @@ export class Transaction extends mol.Entity.Base< return acc + udtBalanceFrom(outputData); }, - numFrom(0), + Zero, ); } @@ -1940,7 +1896,7 @@ export class Transaction extends mol.Entity.Base< } return acc + udtBalanceFrom(this.outputsData[i]); - }, numFrom(0)); + }, Zero); } async completeInputs( @@ -2062,7 +2018,7 @@ export class Transaction extends mol.Entity.Base< ): Promise { const expectedBalance = this.getOutputsUdtBalance(type) + numFrom(balanceTweak ?? 0); - if (expectedBalance === numFrom(0)) { + if (expectedBalance === Zero) { return 0; } @@ -2076,7 +2032,7 @@ export class Transaction extends mol.Entity.Base< return [balanceAcc + udtBalanceFrom(outputData), countAcc + 1]; }, - [numFrom(0), 0], + [Zero, 0], ); if ( @@ -2470,6 +2426,42 @@ export class Transaction extends mol.Entity.Base< } } +/** + * Checks whether a NervosDAO transaction exceeds the 64-output limit. + * Returns true if the transaction is DAO-related and has more than 64 outputs. + * Short-circuits to false when outputs <= 64. + * + * @param tx - The transaction to check + * @param client - CKB client for resolving the NervosDAO script and input cell info + * @returns true if the DAO output limit is exceeded + */ +export async function isDaoOutputLimitExceeded( + tx: Transaction, + client: Client, +): Promise { + if (tx.outputs.length <= 64) { + return false; + } + + const { codeHash, hashType } = await client.getKnownScript( + KnownScript.NervosDao, + ); + const dao = Script.from({ codeHash, hashType, args: "0x" }); + + if (tx.outputs.some((o) => o.type?.eq(dao))) { + return true; + } + + for (const input of tx.inputs) { + await input.completeExtraInfos(client); + if (input.cellOutput?.type?.eq(dao)) { + return true; + } + } + + return false; +} + /** * Calculate Nervos DAO profit between two blocks. * This function computes the profit earned from a Nervos DAO deposit @@ -2515,12 +2507,12 @@ export function calcDaoProfit( * * @param depositHeader - The block header when the DAO deposit was made. * @param withdrawHeader - The block header when the DAO withdrawal was initiated. - * @returns The epoch when the withdrawal can be claimed, represented as [number, index, length]. + * @returns The epoch when the withdrawal can be claimed, represented as an Epoch instance. * * @example * ```typescript - * const claimEpoch = calcDaoClaimEpoch(depositHeader, withdrawHeader); - * console.log(`Can claim at epoch: ${claimEpoch[0]}, index: ${claimEpoch[1]}, length: ${claimEpoch[2]}`); + * const epoch = calcDaoClaimEpoch(depositHeader, withdrawHeader); + * console.log(`Can claim at epoch: ${epoch.integer}, numerator: ${epoch.numerator}, denominator: ${epoch.denominator}`); * ``` * * @remarks @@ -2534,26 +2526,23 @@ export function calcDaoClaimEpoch( depositHeader: ClientBlockHeaderLike, withdrawHeader: ClientBlockHeaderLike, ): Epoch { - const depositEpoch = ClientBlockHeader.from(depositHeader).epoch; - const withdrawEpoch = ClientBlockHeader.from(withdrawHeader).epoch; - const intDiff = withdrawEpoch[0] - depositEpoch[0]; - // deposit[1] withdraw[1] - // ---------- <= ----------- - // deposit[2] withdraw[2] + const deposit = ClientBlockHeader.from(depositHeader).epoch.normalizeBase(); + const withdraw = ClientBlockHeader.from(withdrawHeader).epoch.normalizeBase(); + + const fullCycle = numFrom(180); + const partialCycle = (withdraw.integer - deposit.integer) % fullCycle; + let withdrawInteger = withdraw.integer; if ( - intDiff % numFrom(180) !== numFrom(0) || - depositEpoch[1] * withdrawEpoch[2] <= depositEpoch[2] * withdrawEpoch[1] + partialCycle !== Zero || + // deposit.numerator withdraw.numerator + // --------------------- <= ---------------------- + // deposit.denominator withdraw.denominator + deposit.numerator * withdraw.denominator <= + withdraw.numerator * deposit.denominator ) { - return [ - depositEpoch[0] + (intDiff / numFrom(180) + numFrom(1)) * numFrom(180), - depositEpoch[1], - depositEpoch[2], - ]; + // Need to wait for the next cycle + withdrawInteger += -partialCycle + fullCycle; } - return [ - depositEpoch[0] + (intDiff / numFrom(180)) * numFrom(180), - depositEpoch[1], - depositEpoch[2], - ]; + return new Epoch(withdrawInteger, deposit.numerator, deposit.denominator); } diff --git a/packages/core/src/client/client.ts b/packages/core/src/client/client.ts index 39b80a6f0..46055fece 100644 --- a/packages/core/src/client/client.ts +++ b/packages/core/src/client/client.ts @@ -589,7 +589,7 @@ export abstract class Client { async findSingletonCellByType( type: ScriptLike, - withData = false, + withData = true, ): Promise { for await (const cell of this.findCellsByType( type, diff --git a/packages/core/src/client/clientPublicMainnet.advanced.ts b/packages/core/src/client/clientPublicMainnet.advanced.ts index 2bf018061..19c9556c0 100644 --- a/packages/core/src/client/clientPublicMainnet.advanced.ts +++ b/packages/core/src/client/clientPublicMainnet.advanced.ts @@ -321,6 +321,29 @@ export const MAINNET_SCRIPTS: Record = }, ], }, + [KnownScript.DidCkb]: { + codeHash: + "0x4a06164dc34dccade5afe3e847a97b6db743e79f5477fa3295acf02849c5984a", + hashType: "type", + cellDeps: [ + { + cellDep: { + outPoint: { + txHash: + "0xe2f74c56cdc610d2b9fe898a96a80118845f5278605d7f9ad535dad69ae015bf", + index: 0, + }, + depType: "code", + }, + type: { + codeHash: + "0x00000000000000000000000000000000000000000000000000545950455f4944", + args: "0x55573ef6d78e3ca75170ff476176732309a8b31efe94320a954ded3d75c2cb18", + hashType: "type", + }, + }, + ], + }, [KnownScript.AlwaysSuccess]: { codeHash: "0x3b521cc4b552f109d092d8cc468a8048acb53c5952dbe769d2b2f9cf6e47f7f1", diff --git a/packages/core/src/client/clientPublicTestnet.advanced.ts b/packages/core/src/client/clientPublicTestnet.advanced.ts index be811c7eb..9453d2523 100644 --- a/packages/core/src/client/clientPublicTestnet.advanced.ts +++ b/packages/core/src/client/clientPublicTestnet.advanced.ts @@ -333,6 +333,29 @@ export const TESTNET_SCRIPTS: Record = }, ], }, + [KnownScript.DidCkb]: { + codeHash: + "0x510150477b10d6ab551a509b71265f3164e9fd4137fcb5a4322f49f03092c7c5", + hashType: "type", + cellDeps: [ + { + cellDep: { + outPoint: { + txHash: + "0x0e7a830e2d5ebd05cd45a55f93f94559edea0ef1237b7233f49f7facfb3d6a6c", + index: 0, + }, + depType: "code", + }, + type: { + codeHash: + "0x00000000000000000000000000000000000000000000000000545950455f4944", + args: "0x3c27695173b888ed44ddf36f901789014384ad6c05a9137f3db9a0779c141c35", + hashType: "type", + }, + }, + ], + }, [KnownScript.AlwaysSuccess]: { codeHash: "0x3b521cc4b552f109d092d8cc468a8048acb53c5952dbe769d2b2f9cf6e47f7f1", diff --git a/packages/core/src/client/clientTypes.ts b/packages/core/src/client/clientTypes.ts index f7331e8d2..ec57a1a12 100644 --- a/packages/core/src/client/clientTypes.ts +++ b/packages/core/src/client/clientTypes.ts @@ -12,7 +12,6 @@ import { ScriptLike, Transaction, TransactionLike, - epochFrom, hashTypeFrom, } from "../ckb/index.js"; import { Hex, HexLike, hexFrom } from "../hex/index.js"; @@ -398,7 +397,7 @@ export class ClientBlockHeader { s: numFrom(headerLike.dao.s), u: numFrom(headerLike.dao.u), }, - epochFrom(headerLike.epoch), + Epoch.from(headerLike.epoch), hexFrom(headerLike.extraHash), hexFrom(headerLike.hash), numFrom(headerLike.nonce), diff --git a/packages/core/src/client/jsonRpc/transformers.ts b/packages/core/src/client/jsonRpc/transformers.ts index ded06bd80..a571fa412 100644 --- a/packages/core/src/client/jsonRpc/transformers.ts +++ b/packages/core/src/client/jsonRpc/transformers.ts @@ -9,6 +9,7 @@ import { CellOutputLike, DepType, DepTypeLike, + Epoch, HashType, HashTypeLike, OutPoint, @@ -18,7 +19,6 @@ import { Transaction, TransactionLike, depTypeFrom, - epochFromHex, hashTypeFrom, } from "../../ckb/index.js"; import { Hex, HexLike, hexFrom } from "../../hex/index.js"; @@ -217,7 +217,7 @@ export class JsonRpcTransformers { s: numLeFromBytes(dao.slice(16, 24)), u: numLeFromBytes(dao.slice(24, 32)), }, - epoch: epochFromHex(header.epoch), + epoch: Epoch.fromNum(header.epoch), extraHash: header.extra_hash, hash: header.hash, nonce: numFrom(header.nonce), diff --git a/packages/core/src/client/knownScript.ts b/packages/core/src/client/knownScript.ts index 2171b90b4..90a1546fe 100644 --- a/packages/core/src/client/knownScript.ts +++ b/packages/core/src/client/knownScript.ts @@ -15,6 +15,7 @@ export enum KnownScript { OmniLock = "OmniLock", NostrLock = "NostrLock", UniqueType = "UniqueType", + DidCkb = "DidCkb", // ckb-proxy-locks https://github.com/ckb-devrel/ckb-proxy-locks AlwaysSuccess = "AlwaysSuccess", diff --git a/packages/core/src/codec/codec.ts b/packages/core/src/codec/codec.ts new file mode 100644 index 000000000..77a9c4e65 --- /dev/null +++ b/packages/core/src/codec/codec.ts @@ -0,0 +1,108 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { Bytes, bytesFrom, BytesLike } from "../bytes/index.js"; + +export type CodecLike = { + readonly encode: (encodable: Encodable) => Bytes; + readonly decode: ( + decodable: BytesLike, + config?: { isExtraFieldIgnored?: boolean }, + ) => Decoded; + readonly byteLength?: number; +}; +export class Codec { + constructor( + public readonly encode: (encodable: Encodable) => Bytes, + public readonly decode: ( + decodable: BytesLike, + config?: { isExtraFieldIgnored?: boolean }, // This is equivalent to "compatible" in the Rust implementation of Molecule. + ) => Decoded, + public readonly byteLength?: number, // if provided, treat codec as fixed length + ) {} + + encodeOr(encodable: Encodable, fallback: T): Bytes | T { + try { + return this.encode(encodable); + } catch (_) { + return fallback; + } + } + + decodeOr( + decodable: BytesLike, + fallback: T, + config?: { isExtraFieldIgnored?: boolean }, // This is equivalent to "compatible" in the Rust implementation of Molecule. + ) { + try { + return this.decode(decodable, config); + } catch (_) { + return fallback; + } + } + + static from({ + encode, + decode, + byteLength, + }: CodecLike): Codec { + return new Codec( + (encodable: Encodable) => { + const encoded = encode(encodable); + if (byteLength !== undefined && encoded.byteLength !== byteLength) { + throw new Error( + `Codec.encode: expected byte length ${byteLength}, got ${encoded.byteLength}`, + ); + } + return encoded; + }, + (decodable, config) => { + const decodableBytes = bytesFrom(decodable); + if ( + byteLength !== undefined && + decodableBytes.byteLength !== byteLength + ) { + throw new Error( + `Codec.decode: expected byte length ${byteLength}, got ${decodableBytes.byteLength}`, + ); + } + return decode(decodable, config); + }, + byteLength, + ); + } + + map({ + inMap, + outMap, + }: { + inMap?: (encodable: NewEncodable) => Encodable; + outMap?: (decoded: Decoded) => NewDecoded; + }): Codec { + return new Codec( + (encodable) => + this.encode((inMap ? inMap(encodable) : encodable) as Encodable), + (buffer, config) => + (outMap + ? outMap(this.decode(buffer, config)) + : this.decode(buffer, config)) as NewDecoded, + this.byteLength, + ); + } + + mapIn( + map: (encodable: NewEncodable) => Encodable, + ): Codec { + return this.map({ inMap: map }); + } + + mapOut( + map: (decoded: Decoded) => NewDecoded, + ): Codec { + return this.map({ outMap: map }); + } +} + +export type EncodableType> = + T extends CodecLike ? Encodable : never; +export type DecodedType> = + T extends CodecLike ? Decoded : never; diff --git a/packages/core/src/molecule/entity.ts b/packages/core/src/codec/entity.ts similarity index 87% rename from packages/core/src/molecule/entity.ts rename to packages/core/src/codec/entity.ts index 629281385..4186ae339 100644 --- a/packages/core/src/molecule/entity.ts +++ b/packages/core/src/codec/entity.ts @@ -1,6 +1,6 @@ import { Bytes, bytesEq, BytesLike } from "../bytes/index.js"; import { hashCkb } from "../hasher/index.js"; -import { Hex } from "../hex/index.js"; +import { Hex, hexFrom } from "../hex/index.js"; import { Constructor } from "../utils/index.js"; import { Codec } from "./codec.js"; @@ -32,7 +32,7 @@ export abstract class Entity { */ static encode(_: SubTypeLike): Bytes { throw new Error( - "encode not implemented, use @ccc.mol.codec to decorate your type", + "encode not implemented, use @ccc.codec to decorate your type", ); } /** @@ -45,7 +45,7 @@ export abstract class Entity { */ static decode(_: BytesLike): SubType { throw new Error( - "decode not implemented, use @ccc.mol.codec to decorate your type", + "decode not implemented, use @ccc.codec to decorate your type", ); } @@ -59,7 +59,7 @@ export abstract class Entity { */ static fromBytes(_bytes: BytesLike): SubType { throw new Error( - "fromBytes not implemented, use @ccc.mol.codec to decorate your type", + "fromBytes not implemented, use @ccc.codec to decorate your type", ); } @@ -92,9 +92,7 @@ export abstract class Entity { * @returns A clone of the entity */ clone(): SubType { - return (this.constructor as typeof Impl).fromBytes( - this.toBytes(), - ) as unknown as SubType; + return (this.constructor as typeof Impl).fromBytes(this.toBytes()); } /** @@ -126,6 +124,15 @@ export abstract class Entity { hash(): Hex { return hashCkb(this.toBytes()); } + + /** + * Convert the entity to a full-byte untrimmed Hex representation + * @public + * @returns The entity full-byte untrimmed hexadecimal representation + */ + toHex(): Hex { + return hexFrom(this.toBytes()); + } } /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */ @@ -139,6 +146,7 @@ export abstract class Entity { abstract toBytes(): Bytes; abstract hash(): Hex; + abstract toHex(): Hex; abstract clone(): Entity; } @@ -146,14 +154,14 @@ export abstract class Entity { * A class decorator to add methods implementation on the {@link Entity.Base} class * @example * ```typescript - * @mol.codec( + * @codec( * mol.table({ * codeHash: mol.Byte32, * hashType: HashTypeCodec, * args: mol.Bytes, * }), * ) - * export class Script extends mol.Entity.Base() { + * export class Script extends Entity.Base() { * from(scriptLike: ScriptLike): Script {} * } * ``` @@ -176,7 +184,7 @@ export function codec< Constructor.byteLength = codec.byteLength; if (Constructor.encode === undefined) { Constructor.encode = function (encodable: TypeLike) { - return codec.encode(encodable); + return codec.encode(Constructor.from(encodable)); }; } if (Constructor.decode === undefined) { diff --git a/packages/core/src/codec/index.ts b/packages/core/src/codec/index.ts new file mode 100644 index 000000000..7688d8753 --- /dev/null +++ b/packages/core/src/codec/index.ts @@ -0,0 +1,3 @@ +export * from "./codec.js"; +export * from "./entity.js"; +export * from "./predefined.js"; diff --git a/packages/core/src/codec/predefined.ts b/packages/core/src/codec/predefined.ts new file mode 100644 index 000000000..b14b90dac --- /dev/null +++ b/packages/core/src/codec/predefined.ts @@ -0,0 +1,145 @@ +import { Bytes, bytesFrom, BytesLike } from "../bytes/index.js"; +import { Hex, hexFrom, HexLike } from "../hex/index.js"; +import { + Num, + numBeFromBytes, + numBeToBytes, + numFromBytes, + NumLike, + numToBytes, +} from "../num/index.js"; +import { Codec } from "./codec.js"; + +/** + * Create a codec to deal with fixed LE or BE bytes. + * @param byteLength + * @param littleEndian + */ +export function codecUint( + byteLength: number, + littleEndian = false, +): Codec { + return Codec.from({ + byteLength, + encode: (numLike) => { + if (littleEndian) { + return numToBytes(numLike, byteLength); + } else { + return numBeToBytes(numLike, byteLength); + } + }, + decode: (buffer) => { + if (littleEndian) { + return numFromBytes(buffer); + } else { + return numBeFromBytes(buffer); + } + }, + }); +} + +/** + * Create a codec to deal with fixed LE or BE bytes. + * @param byteLength + * @param littleEndian + */ +export function codecUintNumber( + byteLength: number, + littleEndian = false, +): Codec { + if (byteLength > 4) { + throw new Error("uintNumber: byteLength must be less than or equal to 4"); + } + return codecUint(byteLength, littleEndian).map({ + outMap: (num) => Number(num), + }); +} + +/** + * Create a codec for padding bytes. + * The padding bytes are zero-filled when encoding and ignored when decoding. + * @param byteLength The length of the padding in bytes. + */ +export function codecPadding( + byteLength: number, +): Codec { + return Codec.from({ + byteLength, + encode: () => { + return new Uint8Array(byteLength); + }, + decode: () => {}, + }); +} + +export const CodecRaw: Codec = Codec.from({ + encode: (value) => bytesFrom(value), + decode: (buffer) => bytesFrom(buffer), +}); + +export const CodecBytes: Codec = Codec.from({ + encode: (value) => bytesFrom(value), + decode: (buffer) => hexFrom(buffer), +}); + +export const CodecUint8 = codecUintNumber(1, true); + +export const CodecUint16LE = codecUintNumber(2, true); +export const CodecUint16BE = codecUintNumber(2); +export const CodecUint16 = CodecUint16LE; + +export const CodecUint32LE = codecUintNumber(4, true); +export const CodecUint32BE = codecUintNumber(4); +export const CodecUint32 = CodecUint32LE; + +export const CodecUint64LE = codecUint(8, true); +export const CodecUint64BE = codecUint(8); +export const CodecUint64 = CodecUint64LE; + +export const CodecUint128LE = codecUint(16, true); +export const CodecUint128BE = codecUint(16); +export const CodecUint128 = CodecUint128LE; + +export const CodecUint256LE = codecUint(32, true); +export const CodecUint256BE = codecUint(32); +export const CodecUint256 = CodecUint256LE; + +export const CodecUint512LE = codecUint(64, true); +export const CodecUint512BE = codecUint(64); +export const CodecUint512 = CodecUint512LE; + +export const CodecBool: Codec = Codec.from({ + byteLength: 1, + encode: (value) => bytesFrom(value ? [1] : [0]), + decode: (buffer) => bytesFrom(buffer)[0] !== 0, +}); + +export const CodecByte: Codec = Codec.from({ + byteLength: 1, + encode: (value) => bytesFrom(value), + decode: (buffer) => hexFrom(buffer), +}); + +export const CodecByte4: Codec = Codec.from({ + byteLength: 4, + encode: (value) => bytesFrom(value), + decode: (buffer) => hexFrom(buffer), +}); + +export const CodecByte8: Codec = Codec.from({ + byteLength: 8, + encode: (value) => bytesFrom(value), + decode: (buffer) => hexFrom(buffer), +}); + +export const CodecByte16: Codec = Codec.from({ + byteLength: 16, + encode: (value) => bytesFrom(value), + decode: (buffer) => hexFrom(buffer), +}); + +export const CodecByte32: Codec = Codec.from({ + byteLength: 32, + encode: (value) => bytesFrom(value), + decode: (buffer) => hexFrom(buffer), +}); diff --git a/packages/core/src/hasher/advanced.ts b/packages/core/src/hasher/advanced.ts index f3f4359bc..73382a950 100644 --- a/packages/core/src/hasher/advanced.ts +++ b/packages/core/src/hasher/advanced.ts @@ -1 +1,3 @@ -export const CKB_BLAKE2B_PERSONAL = "ckb-default-hash"; +import { bytesFrom } from "../bytes/index.js"; + +export const CKB_BLAKE2B_PERSONAL = bytesFrom("ckb-default-hash", "utf8"); diff --git a/packages/core/src/hasher/hasherCkb.ts b/packages/core/src/hasher/hasherCkb.ts index c32ec569c..fbcddd7f8 100644 --- a/packages/core/src/hasher/hasherCkb.ts +++ b/packages/core/src/hasher/hasherCkb.ts @@ -1,4 +1,4 @@ -import { blake2b } from "@noble/hashes/blake2b"; +import { blake2b } from "@noble/hashes/blake2.js"; import { BytesLike, bytesFrom } from "../bytes/index.js"; import { Hex, hexFrom } from "../hex/index.js"; import { CKB_BLAKE2B_PERSONAL } from "./advanced.js"; diff --git a/packages/core/src/hasher/hasherKeecak256.ts b/packages/core/src/hasher/hasherKeecak256.ts index 88beef6ec..4660fbb3c 100644 --- a/packages/core/src/hasher/hasherKeecak256.ts +++ b/packages/core/src/hasher/hasherKeecak256.ts @@ -1,4 +1,4 @@ -import { keccak_256 } from "@noble/hashes/sha3"; +import { keccak_256 } from "@noble/hashes/sha3.js"; import { BytesLike, bytesFrom } from "../bytes/index.js"; import { Hex, hexFrom } from "../hex/index.js"; import { Hasher } from "./hasher.js"; diff --git a/packages/core/src/keystore/index.ts b/packages/core/src/keystore/index.ts index bd963af30..3ce3e042a 100644 --- a/packages/core/src/keystore/index.ts +++ b/packages/core/src/keystore/index.ts @@ -1,7 +1,7 @@ -import { ctr } from "@noble/ciphers/aes"; -import { scryptAsync } from "@noble/hashes/scrypt"; -import { keccak_256 } from "@noble/hashes/sha3"; -import { randomBytes } from "@noble/hashes/utils"; +import { ctr } from "@noble/ciphers/aes.js"; +import { scryptAsync } from "@noble/hashes/scrypt.js"; +import { keccak_256 } from "@noble/hashes/sha3.js"; +import { randomBytes } from "@noble/hashes/utils.js"; import { Bytes, BytesLike, bytesConcat, bytesFrom } from "../bytes/index.js"; import { hexFrom } from "../hex/index.js"; diff --git a/packages/core/src/molecule/barrel.ts b/packages/core/src/molecule/barrel.ts index 7688d8753..98d88a3c3 100644 --- a/packages/core/src/molecule/barrel.ts +++ b/packages/core/src/molecule/barrel.ts @@ -1,3 +1,12 @@ +export { + /** + * @deprecated Use ccc.Entity instead + */ + Entity, + /** + * @deprecated Use ccc.codec instead + */ + codec, +} from "../codec/entity.js"; export * from "./codec.js"; -export * from "./entity.js"; export * from "./predefined.js"; diff --git a/packages/core/src/molecule/codec.ts b/packages/core/src/molecule/codec.ts index 4e80d7a1d..51566596f 100644 --- a/packages/core/src/molecule/codec.ts +++ b/packages/core/src/molecule/codec.ts @@ -1,105 +1,45 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { - Bytes, bytesConcat, bytesConcatTo, bytesFrom, BytesLike, } from "../bytes/index.js"; import { - Num, - numBeFromBytes, - numBeToBytes, - numFromBytes, - NumLike, - numToBytes, -} from "../num/index.js"; - -export type CodecLike = { - readonly encode: (encodable: Encodable) => Bytes; - readonly decode: ( - decodable: BytesLike, - config?: { isExtraFieldIgnored?: boolean }, - ) => Decoded; - readonly byteLength?: number; -}; -export class Codec { - constructor( - public readonly encode: (encodable: Encodable) => Bytes, - public readonly decode: ( - decodable: BytesLike, - config?: { isExtraFieldIgnored?: boolean }, // This is equivalent to "compatible" in the Rust implementation of Molecule. - ) => Decoded, - public readonly byteLength?: number, // if provided, treat codec as fixed length - ) {} - - static from({ - encode, - decode, - byteLength, - }: CodecLike): Codec { - return new Codec( - (encodable: Encodable) => { - const encoded = encode(encodable); - if (byteLength !== undefined && encoded.byteLength !== byteLength) { - throw new Error( - `Codec.encode: expected byte length ${byteLength}, got ${encoded.byteLength}`, - ); - } - return encoded; - }, - (decodable, config) => { - const decodableBytes = bytesFrom(decodable); - if ( - byteLength !== undefined && - decodableBytes.byteLength !== byteLength - ) { - throw new Error( - `Codec.decode: expected byte length ${byteLength}, got ${decodableBytes.byteLength}`, - ); - } - return decode(decodable, config); - }, - byteLength, - ); - } - - map({ - inMap, - outMap, - }: { - inMap?: (encodable: NewEncodable) => Encodable; - outMap?: (decoded: Decoded) => NewDecoded; - }): Codec { - return new Codec( - (encodable) => - this.encode((inMap ? inMap(encodable) : encodable) as Encodable), - (buffer, config) => - (outMap - ? outMap(this.decode(buffer, config)) - : this.decode(buffer, config)) as NewDecoded, - this.byteLength, - ); - } - - mapIn( - map: (encodable: NewEncodable) => Encodable, - ): Codec { - return this.map({ inMap: map }); - } - - mapOut( - map: (decoded: Decoded) => NewDecoded, - ): Codec { - return this.map({ outMap: map }); - } -} - -export type EncodableType> = - T extends CodecLike ? Encodable : never; -export type DecodedType> = - T extends CodecLike ? Decoded : never; + Codec, + CodecLike, + DecodedType, + EncodableType, +} from "../codec/index.js"; +import { numFromBytes, NumLike, numToBytes } from "../num/index.js"; + +export { + /** + * @deprecated Use ccc.Codec instead + */ + Codec, + /** + * @deprecated Use ccc.codecUint instead + */ + codecUint as uint, + /** + * @deprecated Use ccc.codecUintNumber instead + */ + codecUintNumber as uintNumber, + /** + * @deprecated Use ccc.CodecLike instead + */ + type CodecLike, + /** + * @deprecated Use ccc.DecodedType instead + */ + type DecodedType, + /** + * @deprecated Use ccc.EncodableType instead + */ + type EncodableType, +} from "../codec/index.js"; function uint32To(numLike: NumLike) { return numToBytes(numLike, 4); @@ -131,7 +71,7 @@ export function fixedItemVec( } return bytesFrom(concatted); } catch (e: unknown) { - throw new Error(`fixedItemVec(${e?.toString()})`); + throw new Error("fixedItemVec failed", { cause: e }); } }, decode(buffer, config) { @@ -161,7 +101,7 @@ export function fixedItemVec( } return decodedArray; } catch (e) { - throw new Error(`fixedItemVec(${e?.toString()})`); + throw new Error("fixedItemVec failed", { cause: e }); } }, }); @@ -191,7 +131,7 @@ export function dynItemVec( const packedTotalSize = uint32To(header.length + body.length + 4); return bytesConcat(packedTotalSize, header, body); } catch (e) { - throw new Error(`dynItemVec(${e?.toString()})`); + throw new Error("dynItemVec failed", { cause: e }); } }, decode(buffer, config) { @@ -228,7 +168,7 @@ export function dynItemVec( } return decodedArray; } catch (e) { - throw new Error(`dynItemVec(${e?.toString()})`); + throw new Error("dynItemVec failed", { cause: e }); } }, }); @@ -265,7 +205,7 @@ export function option( try { return innerCodec.encode(userDefinedOrNull); } catch (e) { - throw new Error(`option(${e?.toString()})`); + throw new Error("option failed", { cause: e }); } }, decode(buffer, config) { @@ -276,7 +216,7 @@ export function option( try { return innerCodec.decode(buffer, config); } catch (e) { - throw new Error(`option(${e?.toString()})`); + throw new Error("option failed", { cause: e }); } }, }); @@ -296,7 +236,7 @@ export function byteVec( const byteLength = uint32To(payload.byteLength); return bytesConcat(byteLength, payload); } catch (e) { - throw new Error(`byteVec(${e?.toString()})`); + throw new Error("byteVec failed", { cause: e }); } }, decode(buffer, config) { @@ -315,7 +255,7 @@ export function byteVec( try { return codec.decode(value.slice(4), config); } catch (e: unknown) { - throw new Error(`byteVec(${e?.toString()})`); + throw new Error("byteVec failed", { cause: e }); } }, }); @@ -373,7 +313,7 @@ export function table< bytesConcatTo(body, encoded); offset += encoded.byteLength; } catch (e: unknown) { - throw new Error(`table.${key}(${e?.toString()})`); + throw new Error(`table.${key} failed`, { cause: e }); } } @@ -431,7 +371,7 @@ export function table< // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment Object.assign(object, { [field]: codec.decode(payload, config) }); } catch (e: unknown) { - throw new Error(`table.${field}(${e?.toString()})`); + throw new Error(`table.${field} failed`, { cause: e }); } } return object as Decoded; @@ -532,7 +472,7 @@ export function union>>( const body = codec.encode(value); return bytesConcat(header, body); } catch (e: unknown) { - throw new Error(`union.(${typeStr})(${e?.toString()})`); + throw new Error(`union.${typeStr} failed`, { cause: e }); } }, decode(buffer, config) { @@ -598,7 +538,7 @@ export function struct< const encoded = codecLayout[key].encode((object as any)[key]); bytesConcatTo(bytes, encoded); } catch (e: unknown) { - throw new Error(`struct.${key}(${e?.toString()})`); + throw new Error(`struct.${key} failed`, { cause: e }); } } @@ -614,7 +554,7 @@ export function struct< // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment Object.assign(object, { [key]: codec.decode(payload, config) }); } catch (e: unknown) { - throw new Error(`struct.${key}(${(e as Error).toString()})`); + throw new Error(`struct.${key} failed`, { cause: e }); } offset = offset + codec.byteLength!; }); @@ -649,7 +589,7 @@ export function array( return bytesFrom(bytes); } catch (e: unknown) { - throw new Error(`array(${e?.toString()})`); + throw new Error("array failed", { cause: e }); } }, decode(buffer, config) { @@ -668,53 +608,8 @@ export function array( } return result; } catch (e: unknown) { - throw new Error(`array(${e?.toString()})`); - } - }, - }); -} - -/** - * Create a codec to deal with fixed LE or BE bytes. - * @param byteLength - * @param littleEndian - */ -export function uint( - byteLength: number, - littleEndian = false, -): Codec { - return Codec.from({ - byteLength, - encode: (numLike) => { - if (littleEndian) { - return numToBytes(numLike, byteLength); - } else { - return numBeToBytes(numLike, byteLength); + throw new Error("array failed", { cause: e }); } }, - decode: (buffer) => { - if (littleEndian) { - return numFromBytes(buffer); - } else { - return numBeFromBytes(buffer); - } - }, - }); -} - -/** - * Create a codec to deal with fixed LE or BE bytes. - * @param byteLength - * @param littleEndian - */ -export function uintNumber( - byteLength: number, - littleEndian = false, -): Codec { - if (byteLength > 4) { - throw new Error("uintNumber: byteLength must be less than or equal to 4"); - } - return uint(byteLength, littleEndian).map({ - outMap: (num) => Number(num), }); } diff --git a/packages/core/src/molecule/predefined.ts b/packages/core/src/molecule/predefined.ts index 176da41ca..7e13c3ff8 100644 --- a/packages/core/src/molecule/predefined.ts +++ b/packages/core/src/molecule/predefined.ts @@ -1,91 +1,104 @@ import { bytesFrom, bytesTo } from "../bytes/index.js"; -import { Hex, hexFrom, HexLike } from "../hex/index.js"; -import { byteVec, Codec, option, uint, uintNumber, vector } from "./codec.js"; +import { Codec, CodecBytes } from "../codec/index.js"; +import { Hex, HexLike } from "../hex/index.js"; +import { byteVec, option, vector } from "./codec.js"; + +import { + CodecBool as Bool, + CodecByte as Byte, + CodecByte16 as Byte16, + CodecByte32 as Byte32, + CodecByte4 as Byte4, + CodecByte8 as Byte8, + CodecUint128 as Uint128, + CodecUint128BE as Uint128BE, + CodecUint128LE as Uint128LE, + CodecUint16 as Uint16, + CodecUint16BE as Uint16BE, + CodecUint16LE as Uint16LE, + CodecUint256 as Uint256, + CodecUint256BE as Uint256BE, + CodecUint256LE as Uint256LE, + CodecUint32 as Uint32, + CodecUint32BE as Uint32BE, + CodecUint32LE as Uint32LE, + CodecUint512 as Uint512, + CodecUint512BE as Uint512BE, + CodecUint512LE as Uint512LE, + CodecUint64 as Uint64, + CodecUint64BE as Uint64BE, + CodecUint64LE as Uint64LE, + CodecUint8 as Uint8, +} from "../codec/index.js"; + +export { + Bool, + Byte, + Byte16, + Byte32, + Byte4, + Byte8, + Uint128, + Uint128BE, + Uint128LE, + Uint16, + Uint16BE, + Uint16LE, + Uint256, + Uint256BE, + Uint256LE, + Uint32, + Uint32BE, + Uint32LE, + Uint512, + Uint512BE, + Uint512LE, + Uint64, + Uint64BE, + Uint64LE, + Uint8, +}; -export const Uint8 = uintNumber(1, true); export const Uint8Opt = option(Uint8); export const Uint8Vec = vector(Uint8); -export const Uint16LE = uintNumber(2, true); -export const Uint16BE = uintNumber(2); -export const Uint16 = Uint16LE; export const Uint16Opt = option(Uint16); export const Uint16Vec = vector(Uint16); -export const Uint32LE = uintNumber(4, true); -export const Uint32BE = uintNumber(4); -export const Uint32 = Uint32LE; export const Uint32Opt = option(Uint32); export const Uint32Vec = vector(Uint32); -export const Uint64LE = uint(8, true); -export const Uint64BE = uint(8); -export const Uint64 = Uint64LE; export const Uint64Opt = option(Uint64); export const Uint64Vec = vector(Uint64); -export const Uint128LE = uint(16, true); -export const Uint128BE = uint(16); -export const Uint128 = Uint128LE; export const Uint128Opt = option(Uint128); export const Uint128Vec = vector(Uint128); -export const Uint256LE = uint(32, true); -export const Uint256BE = uint(32); -export const Uint256 = Uint256LE; export const Uint256Opt = option(Uint256); export const Uint256Vec = vector(Uint256); -export const Uint512LE = uint(64, true); -export const Uint512BE = uint(64); -export const Uint512 = Uint512LE; export const Uint512Opt = option(Uint512); export const Uint512Vec = vector(Uint512); -export const Bytes: Codec = byteVec({ - encode: (value) => bytesFrom(value), - decode: (buffer) => hexFrom(buffer), -}); +export const Bytes: Codec = byteVec(CodecBytes); export const BytesOpt = option(Bytes); export const BytesVec = vector(Bytes); -export const Bool: Codec = Codec.from({ - byteLength: 1, - encode: (value) => bytesFrom(value ? [1] : [0]), - decode: (buffer) => bytesFrom(buffer)[0] !== 0, -}); export const BoolOpt = option(Bool); export const BoolVec = vector(Bool); -export const Byte4: Codec = Codec.from({ - byteLength: 4, - encode: (value) => bytesFrom(value), - decode: (buffer) => hexFrom(buffer), -}); +export const ByteOpt = option(Byte); +export const ByteVec = vector(Byte); + export const Byte4Opt = option(Byte4); export const Byte4Vec = vector(Byte4); -export const Byte8: Codec = Codec.from({ - byteLength: 8, - encode: (value) => bytesFrom(value), - decode: (buffer) => hexFrom(buffer), -}); export const Byte8Opt = option(Byte8); export const Byte8Vec = vector(Byte8); -export const Byte16: Codec = Codec.from({ - byteLength: 16, - encode: (value) => bytesFrom(value), - decode: (buffer) => hexFrom(buffer), -}); export const Byte16Opt = option(Byte16); export const Byte16Vec = vector(Byte16); -export const Byte32: Codec = Codec.from({ - byteLength: 32, - encode: (value) => bytesFrom(value), - decode: (buffer) => hexFrom(buffer), -}); export const Byte32Opt = option(Byte32); export const Byte32Vec = vector(Byte32); diff --git a/packages/core/src/signer/btc/index.ts b/packages/core/src/signer/btc/index.ts index d0aa15884..694ff7250 100644 --- a/packages/core/src/signer/btc/index.ts +++ b/packages/core/src/signer/btc/index.ts @@ -1,3 +1,4 @@ +export * from "./psbt.js"; export * from "./signerBtc.js"; export * from "./signerBtcPublicKeyReadonly.js"; export * from "./verify.js"; diff --git a/packages/core/src/signer/btc/psbt.ts b/packages/core/src/signer/btc/psbt.ts new file mode 100644 index 000000000..abbc47cd0 --- /dev/null +++ b/packages/core/src/signer/btc/psbt.ts @@ -0,0 +1,98 @@ +import { Hex, HexLike, hexFrom } from "../../hex/index.js"; + +/** + * Options for signing a PSBT (Partially Signed Bitcoin Transaction) + */ +export type SignPsbtOptionsLike = { + /** + * Whether to finalize the PSBT after signing. + * Default is true. + */ + autoFinalized?: boolean; + /** + * Array of inputs to sign + */ + inputsToSign?: InputToSignLike[]; +}; + +export class SignPsbtOptions { + constructor( + public autoFinalized: boolean, + public inputsToSign: InputToSign[], + ) {} + + static from(options?: SignPsbtOptionsLike): SignPsbtOptions { + if (options instanceof SignPsbtOptions) { + return options; + } + return new SignPsbtOptions( + options?.autoFinalized ?? true, + options?.inputsToSign?.map((i) => InputToSign.from(i)) ?? [], + ); + } +} + +/** + * Specification for an input to sign in a PSBT. + * Must specify at least one of: address or pubkey. + */ +export type InputToSignLike = { + /** + * Which input to sign (index in the PSBT inputs array) + */ + index: number; + /** + * (Optional) Sighash types to use for signing. + */ + sighashTypes?: number[]; + /** + * (Optional) When signing and unlocking Taproot addresses, the tweakSigner is used by default + * for signature generation. Setting this to true allows for signing with the original private key. + * Default value is false. + */ + disableTweakSigner?: boolean; +} & ( + | { + /** + * The address whose corresponding private key to use for signing. + */ + address: string; + /** + * The public key whose corresponding private key to use for signing. + */ + publicKey?: HexLike; + } + | { + /** + * The address whose corresponding private key to use for signing. + */ + address?: string; + /** + * The public key whose corresponding private key to use for signing. + */ + publicKey: HexLike; + } +); + +export class InputToSign { + constructor( + public index: number, + public sighashTypes?: number[], + public disableTweakSigner?: boolean, + public address?: string, + public publicKey?: Hex, + ) {} + + static from(input: InputToSignLike): InputToSign { + if (input instanceof InputToSign) { + return input; + } + return new InputToSign( + input.index, + input.sighashTypes, + input.disableTweakSigner, + input.address, + input.publicKey ? hexFrom(input.publicKey) : undefined, + ); + } +} diff --git a/packages/core/src/signer/btc/signerBtc.ts b/packages/core/src/signer/btc/signerBtc.ts index 64112a74a..4c0d389ad 100644 --- a/packages/core/src/signer/btc/signerBtc.ts +++ b/packages/core/src/signer/btc/signerBtc.ts @@ -2,9 +2,10 @@ import { Address } from "../../address/index.js"; import { bytesConcat, bytesFrom } from "../../bytes/index.js"; import { Transaction, TransactionLike, WitnessArgs } from "../../ckb/index.js"; import { KnownScript } from "../../client/index.js"; -import { HexLike, hexFrom } from "../../hex/index.js"; +import { Hex, HexLike, hexFrom } from "../../hex/index.js"; import { numToBytes } from "../../num/index.js"; import { Signer, SignerSignType, SignerType } from "../signer/index.js"; +import { SignPsbtOptionsLike } from "./psbt.js"; import { btcEcdsaPublicKeyHash } from "./verify.js"; /** @@ -22,6 +23,21 @@ export abstract class SignerBtc extends Signer { return SignerSignType.BtcEcdsa; } + /** + * Sign and broadcast a PSBT. + * + * @param psbtHex - The hex string of PSBT to sign and broadcast. + * @param options - Options for signing the PSBT. + * @returns A promise that resolves to the transaction ID as a Hex string. + */ + async signAndBroadcastPsbt( + psbtHex: HexLike, + options?: SignPsbtOptionsLike, + ): Promise { + const signedPsbt = await this.signPsbt(psbtHex, options); + return this.broadcastPsbt(signedPsbt, options); + } + /** * Gets the Bitcoin account associated with the signer. * @@ -123,4 +139,28 @@ export abstract class SignerBtc extends Signer { tx.setWitnessArgsAt(info.position, witness); return tx; } + + /** + * Signs a Partially Signed Bitcoin Transaction (PSBT). + * + * @param psbtHex - The hex string of PSBT to sign. + * @param options - Options for signing the PSBT + * @returns A promise that resolves to the signed PSBT as a Hex string. + */ + abstract signPsbt( + psbtHex: HexLike, + options?: SignPsbtOptionsLike, + ): Promise; + + /** + * Broadcasts a PSBT to the Bitcoin network. + * + * @param psbtHex - The hex string of the PSBT to broadcast. + * @param options - Options for broadcasting the PSBT. + * @returns A promise that resolves to the transaction ID as a Hex string. + */ + abstract broadcastPsbt( + psbtHex: HexLike, + options?: SignPsbtOptionsLike, + ): Promise; } diff --git a/packages/core/src/signer/btc/signerBtcPublicKeyReadonly.ts b/packages/core/src/signer/btc/signerBtcPublicKeyReadonly.ts index 50096db7e..25af50b6f 100644 --- a/packages/core/src/signer/btc/signerBtcPublicKeyReadonly.ts +++ b/packages/core/src/signer/btc/signerBtcPublicKeyReadonly.ts @@ -1,5 +1,6 @@ import { Client } from "../../client/index.js"; import { Hex, HexLike, hexFrom } from "../../hex/index.js"; +import { SignPsbtOptionsLike } from "./psbt.js"; import { SignerBtc } from "./signerBtc.js"; /** @@ -70,4 +71,18 @@ export class SignerBtcPublicKeyReadonly extends SignerBtc { async getBtcPublicKey(): Promise { return this.publicKey; } + + async signPsbt( + _psbtHex: HexLike, + _options?: SignPsbtOptionsLike, + ): Promise { + throw new Error("Read-only signer does not support signPsbt"); + } + + async broadcastPsbt( + _psbtHex: HexLike, + _options?: SignPsbtOptionsLike, + ): Promise { + throw new Error("Read-only signer does not support broadcastPsbt"); + } } diff --git a/packages/core/src/signer/btc/verify.ts b/packages/core/src/signer/btc/verify.ts index 2d7f7fb10..2907560a7 100644 --- a/packages/core/src/signer/btc/verify.ts +++ b/packages/core/src/signer/btc/verify.ts @@ -1,4 +1,4 @@ -import { secp256k1 } from "@noble/curves/secp256k1"; +import { secp256k1 } from "@noble/curves/secp256k1.js"; import { ripemd160 } from "@noble/hashes/legacy.js"; import { sha256 } from "@noble/hashes/sha2.js"; import bs58check from "bs58check"; @@ -98,5 +98,6 @@ export function verifyMessageBtcEcdsa( bytesFrom(rawSign), messageHashBtcEcdsa(challenge), bytesFrom(publicKey), + { prehash: false }, ); } diff --git a/packages/core/src/signer/ckb/signerCkbPrivateKey.ts b/packages/core/src/signer/ckb/signerCkbPrivateKey.ts index 31354a93c..41a507d38 100644 --- a/packages/core/src/signer/ckb/signerCkbPrivateKey.ts +++ b/packages/core/src/signer/ckb/signerCkbPrivateKey.ts @@ -1,9 +1,8 @@ -import { secp256k1 } from "@noble/curves/secp256k1"; +import { secp256k1 } from "@noble/curves/secp256k1.js"; import { bytesConcat, bytesFrom, BytesLike } from "../../bytes/index.js"; import { Transaction, TransactionLike, WitnessArgs } from "../../ckb/index.js"; import { Client } from "../../client/index.js"; import { Hex, hexFrom, HexLike } from "../../hex/index.js"; -import { numBeToBytes } from "../../num/index.js"; import { SignerCkbPublicKey } from "./signerCkbPublicKey.js"; import { messageHashCkbSecp256k1 } from "./verifyCkbSecp256k1.js"; @@ -27,16 +26,12 @@ export class SignerCkbPrivateKey extends SignerCkbPublicKey { const signature = secp256k1.sign( bytesFrom(message), bytesFrom(this.privateKey), + { + format: "recovered", + prehash: false, + }, ); - const { r, s, recovery } = signature; - - return hexFrom( - bytesConcat( - numBeToBytes(r, 32), - numBeToBytes(s, 32), - numBeToBytes(recovery, 1), - ), - ); + return hexFrom(bytesConcat(signature.slice(1), signature.slice(0, 1))); } async signMessageRaw(message: string | BytesLike): Promise { diff --git a/packages/core/src/signer/ckb/verifyCkbSecp256k1.ts b/packages/core/src/signer/ckb/verifyCkbSecp256k1.ts index c5e268e5c..28244e1b6 100644 --- a/packages/core/src/signer/ckb/verifyCkbSecp256k1.ts +++ b/packages/core/src/signer/ckb/verifyCkbSecp256k1.ts @@ -1,8 +1,7 @@ -import { secp256k1 } from "@noble/curves/secp256k1"; -import { BytesLike, bytesFrom } from "../../bytes/index.js"; +import { secp256k1 } from "@noble/curves/secp256k1.js"; +import { bytesConcat, bytesFrom, BytesLike } from "../../bytes/index.js"; import { hashCkb } from "../../hasher/index.js"; import { Hex, hexFrom } from "../../hex/index.js"; -import { numFrom } from "../../num/index.js"; /** * @public @@ -21,15 +20,12 @@ export function verifyMessageCkbSecp256k1( signature: string, publicKey: string, ): boolean { - const signatureBytes = bytesFrom(signature); + const raw = bytesFrom(signature); + return secp256k1.verify( - new secp256k1.Signature( - numFrom(signatureBytes.slice(0, 32)), - numFrom(signatureBytes.slice(32, 64)), - ) - .addRecoveryBit(Number(numFrom(signatureBytes.slice(64, 65)))) - .toBytes(), + bytesConcat(raw.slice(64), raw.slice(0, 64)), bytesFrom(messageHashCkbSecp256k1(message)), bytesFrom(publicKey), + { format: "recovered", prehash: false }, ); } diff --git a/packages/core/src/signer/doge/signerDogePrivateKey.ts b/packages/core/src/signer/doge/signerDogePrivateKey.ts index ad5e36d00..b1c2988a8 100644 --- a/packages/core/src/signer/doge/signerDogePrivateKey.ts +++ b/packages/core/src/signer/doge/signerDogePrivateKey.ts @@ -1,4 +1,4 @@ -import { secp256k1 } from "@noble/curves/secp256k1"; +import { secp256k1 } from "@noble/curves/secp256k1.js"; import { Bytes, bytesConcat, @@ -87,10 +87,13 @@ export class SignerDogePrivateKey extends SignerDoge { const signature = secp256k1.sign( messageHashDogeEcdsa(challenge), this.privateKey, + { + format: "recovered", + prehash: false, + }, ); - return bytesTo( - bytesConcat([31 + signature.recovery], signature.toCompactRawBytes()), + bytesConcat([31 + Number(signature[0])], signature.slice(1)), "base64", ); } diff --git a/packages/core/src/signer/doge/verify.ts b/packages/core/src/signer/doge/verify.ts index b9d586bfd..561be254f 100644 --- a/packages/core/src/signer/doge/verify.ts +++ b/packages/core/src/signer/doge/verify.ts @@ -1,4 +1,4 @@ -import { secp256k1 } from "@noble/curves/secp256k1"; +import { secp256k1 } from "@noble/curves/secp256k1.js"; import { Bytes, bytesFrom, BytesLike } from "../../bytes/index.js"; import { hexFrom } from "../../hex/index.js"; import { @@ -38,18 +38,17 @@ export function verifyMessageDogeEcdsa( const challenge = typeof message === "string" ? message : hexFrom(message).slice(2); const signatureBytes = bytesFrom(signature, "base64"); - const recoveryBit = signatureBytes[0]; - const rawSign = signatureBytes.slice(1); - - const sig = secp256k1.Signature.fromCompact( - hexFrom(rawSign).slice(2), - ).addRecoveryBit(recoveryBit - 31); + signatureBytes[0] -= 31; return ( btcPublicKeyFromP2pkhAddress(address) === hexFrom( btcEcdsaPublicKeyHash( - sig.recoverPublicKey(messageHashDogeEcdsa(challenge)).toHex(), + secp256k1.recoverPublicKey( + signatureBytes, + messageHashDogeEcdsa(challenge), + { prehash: false }, + ), ), ) ); diff --git a/packages/core/src/signer/nostr/signerNostrPrivateKey.ts b/packages/core/src/signer/nostr/signerNostrPrivateKey.ts index b299596fe..97fe90603 100644 --- a/packages/core/src/signer/nostr/signerNostrPrivateKey.ts +++ b/packages/core/src/signer/nostr/signerNostrPrivateKey.ts @@ -1,7 +1,8 @@ -import { schnorr } from "@noble/curves/secp256k1"; +import { schnorr } from "@noble/curves/secp256k1.js"; import { bech32 } from "bech32"; +import { Bytes, bytesFrom, BytesLike } from "../../bytes/index.js"; import { Client } from "../../client/index.js"; -import { Hex, hexFrom, HexLike } from "../../hex/index.js"; +import { hexFrom } from "../../hex/index.js"; import { NostrEvent } from "./signerNostr.js"; import { SignerNostrPublicKeyReadonly } from "./signerNostrPublicKeyReadonly.js"; import { nostrEventHash } from "./verify.js"; @@ -11,22 +12,22 @@ import { nostrEventHash } from "./verify.js"; * Support nsec and hex format */ export class SignerNostrPrivateKey extends SignerNostrPublicKeyReadonly { - private readonly privateKey: Hex; + private readonly privateKey: Bytes; - constructor(client: Client, privateKeyLike: HexLike) { + constructor(client: Client, privateKeyLike: BytesLike) { const privateKey = (() => { if ( typeof privateKeyLike === "string" && privateKeyLike.startsWith("nsec") ) { const { words } = bech32.decode(privateKeyLike); - return hexFrom(bech32.fromWords(words)); + return bytesFrom(bech32.fromWords(words)); } - return hexFrom(privateKeyLike); + return bytesFrom(privateKeyLike); })(); - super(client, schnorr.getPublicKey(privateKey.slice(2))); + super(client, schnorr.getPublicKey(privateKey)); this.privateKey = privateKey; } @@ -34,7 +35,7 @@ export class SignerNostrPrivateKey extends SignerNostrPublicKeyReadonly { async signNostrEvent(event: NostrEvent): Promise> { const pubkey = (await this.getNostrPublicKey()).slice(2); const eventHash = nostrEventHash({ ...event, pubkey }); - const signature = schnorr.sign(eventHash, this.privateKey.slice(2)); + const signature = schnorr.sign(eventHash, this.privateKey); return { ...event, diff --git a/packages/core/src/signer/nostr/verify.ts b/packages/core/src/signer/nostr/verify.ts index 879de0a70..da2db9b7e 100644 --- a/packages/core/src/signer/nostr/verify.ts +++ b/packages/core/src/signer/nostr/verify.ts @@ -1,4 +1,4 @@ -import { schnorr } from "@noble/curves/secp256k1"; +import { schnorr } from "@noble/curves/secp256k1.js"; import { sha256 } from "@noble/hashes/sha2.js"; import { bech32 } from "bech32"; import { Bytes, BytesLike, bytesFrom } from "../../bytes/index.js"; @@ -65,7 +65,7 @@ export function verifyMessageNostrEvent( const eventHash = nostrEventHash({ ...event, pubkey }); try { - return schnorr.verify(hexFrom(signature).slice(2), eventHash, pubkey); + return schnorr.verify(bytesFrom(signature), eventHash, bytesFrom(pubkey)); } catch (_) { return false; } diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index e9e73364b..f75bdb8ab 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -1,4 +1,5 @@ -import { NumLike, numFrom, numToHex } from "../num/index.js"; +import { Zero } from "../fixedPoint/index.js"; +import { NumLike, numFrom, numToHex, type Num } from "../num/index.js"; /** * A type safe way to apply a transformer on a value if it's not empty. @@ -196,3 +197,21 @@ export function stringify(val: unknown) { return value; }); } + +/** + * Calculate the greatest common divisor (GCD) of two NumLike values using the Euclidean algorithm. + * + * @param a - First operand. + * @param b - Second operand. + * @returns GCD(a, b) as a Num. + */ +export function gcd(a: NumLike, b: NumLike): Num { + a = numFrom(a); + b = numFrom(b); + a = a < Zero ? -a : a; + b = b < Zero ? -b : b; + while (b !== Zero) { + [a, b] = [b, a % b]; + } + return a; +} diff --git a/packages/core/tsconfig.base.json b/packages/core/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/core/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/core/tsconfig.commonjs.json b/packages/core/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/core/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/core/tsdown.config.mts b/packages/core/tsdown.config.mts new file mode 100644 index 000000000..6d0a39add --- /dev/null +++ b/packages/core/tsdown.config.mts @@ -0,0 +1,53 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps = [ + "@noble/curves", + "@noble/hashes", + "@noble/ciphers", + "@noble/curves/*", + "@noble/hashes/*", + "@noble/ciphers/*", + "bs58check", + "bs58", // By bs58check + "base-x", // By bs58 - bs58check +] as string[]; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/demo/package.json b/packages/demo/package.json index 6266b2225..cd742ced5 100644 --- a/packages/demo/package.json +++ b/packages/demo/package.json @@ -53,5 +53,5 @@ "tailwindcss": "^4.1.12", "typescript": "^5.9.2" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/did-ckb/.npmignore b/packages/did-ckb/.npmignore new file mode 100644 index 000000000..7a88408aa --- /dev/null +++ b/packages/did-ckb/.npmignore @@ -0,0 +1,21 @@ +node_modules/ +misc/ + +*test.js +*test.ts +*test.d.ts +*test.d.ts.map +*spec.js +*spec.ts +*spec.d.ts +*spec.d.ts.map + +tsconfig.json +tsconfig.*.json +eslint.config.mjs +.prettierrc +.prettierignore + +tsconfig.tsbuildinfo +tsconfig.*.tsbuildinfo +.github/ diff --git a/packages/did-ckb/.prettierignore b/packages/did-ckb/.prettierignore new file mode 100644 index 000000000..aef5d239c --- /dev/null +++ b/packages/did-ckb/.prettierignore @@ -0,0 +1,15 @@ +node_modules/ + +dist/ +dist.commonjs/ + +.npmignore +.prettierrc +tsconfig.json +eslint.config.mjs +prettier.config.* + +tsconfig.tsbuildinfo +.github/ + +CHANGELOG.md diff --git a/packages/did-ckb/CHANGELOG.md b/packages/did-ckb/CHANGELOG.md new file mode 100644 index 000000000..0e898396e --- /dev/null +++ b/packages/did-ckb/CHANGELOG.md @@ -0,0 +1,44 @@ +# @ckb-ccc/did-ckb + +## 0.2.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/type-id@0.1.0 + - @ckb-ccc/core@1.14.0 + +## 0.1.0 +### Minor Changes + + + +- [#376](https://github.com/ckb-devrel/ccc/pull/376) [`ce2b005`](https://github.com/ckb-devrel/ccc/commit/ce2b005b2c20bdd8736f78e7f286b8acb40e80e5) Thanks [@truthixify](https://github.com/truthixify)! - feat(did-ckb): identifier helpers, resolver, history walk, and did:plc migration + + Layered on top of the basic create/transfer/destroy operations: + + - `argsToDid`, `didToArgs`, `isDidCkb`, plus RFC 4648 base32 helpers for converting between Type ID args and the human readable `did:ckb:` URI form (WIP-01 §2.2) + - `findDidCkbCell`, `resolveDidCkb`, `listDidCkbsByLock` for resolving a DID by id or by owning lock + - `getDidCkbHistory` walks the cell chain backwards to produce an ordered list of CREATE / UPDATE / MIGRATE entries with tx hash, block number, capacity, and decoded data + - `migrateDidCkb` + `buildMigrationWitness` for importing a `did:plc` into `did:ckb` (WIP-02 §3.1.1) + - `@ckb-ccc/did-ckb/plc` subpath with `fetchPlcLog`, `parseDidKey`, `signRotationHash`, `verifyPrivateKeyMatch` so the curve code only ships to consumers that need it + +### Patch Changes + + + +- [#337](https://github.com/ckb-devrel/ccc/pull/337) [`0366786`](https://github.com/ckb-devrel/ccc/commit/03667865d1bc6d091d9144d39f6b434abe4ce18b) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat(did-ckb): add did-ckb package for basic did operations + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`3bd5130`](https://github.com/ckb-devrel/ccc/commit/3bd51300d9602482dd781752f618f6cfd642675c), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + - @ckb-ccc/type-id@0.0.1 diff --git a/packages/did-ckb/README.md b/packages/did-ckb/README.md new file mode 100644 index 000000000..1423faaf1 --- /dev/null +++ b/packages/did-ckb/README.md @@ -0,0 +1,41 @@ +

+ + Logo + +

+ +

+ CCC's Support for DID CKB +

+ +

+ NPM Version + GitHub commit activity + GitHub last commit + GitHub branch check runs + Playground + App + Docs +

+ +

+ CCC - CKBers' Codebase is a one-stop solution for your CKB JS/TS ecosystem development. +
+ Empower yourself with CCC to discover the unlimited potential of CKB. +
+ Interoperate with wallets from different chain ecosystems. +
+ Fully enabling CKB's Turing completeness and cryptographic freedom power. +

+ +

+ Read more about CCC on our website or GitHub Repo. +

diff --git a/packages/did-ckb/eslint.config.mjs b/packages/did-ckb/eslint.config.mjs new file mode 100644 index 000000000..b6132c277 --- /dev/null +++ b/packages/did-ckb/eslint.config.mjs @@ -0,0 +1,62 @@ +// @ts-check + +import eslint from "@eslint/js"; +import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; +import tseslint from "typescript-eslint"; + +import { dirname } from "path"; +import { fileURLToPath } from "url"; + +export default [ + ...tseslint.config({ + files: ["**/*.ts"], + extends: [ + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + ], + rules: { + "@typescript-eslint/no-unused-vars": [ + "error", + { + args: "all", + argsIgnorePattern: "^_", + caughtErrors: "all", + caughtErrorsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_", + ignoreRestSiblings: true, + }, + ], + "@typescript-eslint/unbound-method": ["error", { ignoreStatic: true }], + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/require-await": "off", + "@typescript-eslint/only-throw-error": [ + "error", + { + allowThrowingAny: true, + allowThrowingUnknown: true, + allowRethrowing: true, + }, + ], + "@typescript-eslint/prefer-promise-reject-errors": [ + "error", + { + allowThrowingAny: true, + allowThrowingUnknown: true, + }, + ], + "no-empty": "off", + "prefer-const": [ + "error", + { ignoreReadBeforeAssign: true, destructuring: "all" }, + ], + }, + languageOptions: { + parserOptions: { + project: true, + tsconfigRootDir: dirname(fileURLToPath(import.meta.url)), + }, + }, + }), + eslintPluginPrettierRecommended, +]; diff --git a/packages/did-ckb/misc/basedirs/dist.commonjs/package.json b/packages/did-ckb/misc/basedirs/dist.commonjs/package.json new file mode 100644 index 000000000..5bbefffba --- /dev/null +++ b/packages/did-ckb/misc/basedirs/dist.commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/packages/did-ckb/misc/basedirs/dist/package.json b/packages/did-ckb/misc/basedirs/dist/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/packages/did-ckb/misc/basedirs/dist/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/did-ckb/package.json b/packages/did-ckb/package.json new file mode 100644 index 000000000..a876ad843 --- /dev/null +++ b/packages/did-ckb/package.json @@ -0,0 +1,66 @@ +{ + "name": "@ckb-ccc/did-ckb", + "version": "0.2.0", + "description": "CCC - CKBer's Codebase. CCC's support for DID on CKB", + "author": "Hanssen0 ", + "license": "MIT", + "private": false, + "homepage": "https://github.com/ckb-devrel/ccc", + "repository": { + "type": "git", + "url": "git://github.com/ckb-devrel/ccc.git" + }, + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./plc": { + "import": "./dist/plc.mjs", + "require": "./dist.commonjs/plc.js" + }, + "./package.json": "./package.json" + }, + "scripts": { + "test": "vitest", + "test:ci": "vitest run", + "build": "tsdown", + "lint": "eslint ./src", + "format": "prettier --write . && eslint --fix ./src" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^26.0.0", + "eslint": "^10.5.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "tsdown": "^0.22.3", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1", + "vitest": "^4.1.9" + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@ckb-ccc/core": "workspace:*", + "@ckb-ccc/type-id": "workspace:*", + "@ipld/dag-cbor": "^10.0.1", + "@noble/curves": "^2.2.0" + }, + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts", + "inlinedDependencies": { + "@ipld/dag-cbor": "10.0.1", + "cborg": "5.1.1", + "multiformats": "14.0.0" + } +} diff --git a/packages/did-ckb/prettier.config.cjs b/packages/did-ckb/prettier.config.cjs new file mode 100644 index 000000000..5e1810363 --- /dev/null +++ b/packages/did-ckb/prettier.config.cjs @@ -0,0 +1,11 @@ +/** + * @see https://prettier.io/docs/configuration + * @type {import("prettier").Config} + */ +const config = { + singleQuote: false, + trailingComma: "all", + plugins: [require.resolve("prettier-plugin-organize-imports")], +}; + +module.exports = config; diff --git a/packages/did-ckb/src/barrel.ts b/packages/did-ckb/src/barrel.ts new file mode 100644 index 000000000..f3d44ae35 --- /dev/null +++ b/packages/did-ckb/src/barrel.ts @@ -0,0 +1,7 @@ +export * from "./codec.js"; +export * from "./didCkb.js"; +export * from "./history.js"; +export * from "./identifier.js"; +export * from "./migrate.js"; +export * as plc from "./plc/index.js"; +export * from "./resolver.js"; diff --git a/packages/did-ckb/src/codec.ts b/packages/did-ckb/src/codec.ts new file mode 100644 index 000000000..c89ba8e57 --- /dev/null +++ b/packages/did-ckb/src/codec.ts @@ -0,0 +1,146 @@ +import { ccc } from "@ckb-ccc/core"; +import { decode as cborDecode, encode as cborEncode } from "@ipld/dag-cbor"; + +export type DidCkbDataV1Like = { + document: unknown; + localId?: string | null; +}; +@ccc.codec( + ccc.mol + .table({ + document: ccc.mol.Bytes, + localId: ccc.mol.StringOpt, + }) + .map({ + inMap: (data: DidCkbDataV1Like) => ({ + ...data, + document: ccc.hexFrom(cborEncode(data.document)), + }), + outMap: (data) => ({ + ...data, + document: cborDecode(ccc.bytesFrom(data.document)), + }), + }), +) +export class DidCkbDataV1 extends ccc.Entity.Base< + DidCkbDataV1Like, + DidCkbDataV1 +>() { + constructor( + public document: unknown, + public localId?: string, + ) { + super(); + } + + static from(data: DidCkbDataV1Like): DidCkbDataV1 { + if (data instanceof DidCkbDataV1) { + return data; + } + + return new DidCkbDataV1(data.document, data.localId ?? undefined); + } +} + +export type DidCkbDataLike = { + type?: "v1" | null; + value: DidCkbDataV1Like; +}; +@ccc.codec( + ccc.mol.union({ + v1: DidCkbDataV1, + }), +) +export class DidCkbData extends ccc.Entity.Base() { + constructor( + public type: "v1", + public value: DidCkbDataV1, + ) { + super(); + } + + static from(data: DidCkbDataLike): DidCkbData { + if (data instanceof DidCkbData) { + return data; + } + return new DidCkbData(data.type ?? "v1", DidCkbDataV1.from(data.value)); + } + + static fromV1( + data: DidCkbDataV1Like, + ): DidCkbData & { type: "v1"; value: DidCkbDataV1 } { + return new DidCkbData("v1", DidCkbDataV1.from(data)); + } +} + +export type PlcAuthorizationLike = { + history: object[]; + sig: ccc.HexLike; + rotationKeyIndices: ccc.NumLike[]; +}; +@ccc.codec( + ccc.mol + .table({ + history: ccc.mol.BytesVec, + sig: ccc.mol.Bytes, + rotationKeyIndices: ccc.mol.Uint8Vec, + }) + + .map({ + inMap: (data: PlcAuthorizationLike) => ({ + ...data, + history: data.history.map((h) => ccc.hexFrom(cborEncode(h))), + }), + outMap: (data) => ({ + ...data, + history: data.history.map((h) => cborDecode(ccc.bytesFrom(h))), + }), + }), +) +export class PlcAuthorization extends ccc.Entity.Base< + PlcAuthorizationLike, + PlcAuthorization +>() { + constructor( + public history: object[], + public sig: ccc.Hex, + public rotationKeyIndices: ccc.Num[], + ) { + super(); + } + + static from(data: PlcAuthorizationLike): PlcAuthorization { + if (data instanceof PlcAuthorization) { + return data; + } + return new PlcAuthorization( + data.history, + ccc.hexFrom(data.sig), + data.rotationKeyIndices.map(ccc.numFrom), + ); + } +} + +export type DidCkbWitnessLike = { + localIdAuthorization: PlcAuthorizationLike; +}; +@ccc.codec( + ccc.mol.table({ + localIdAuthorization: PlcAuthorization, + }), +) +export class DidCkbWitness extends ccc.Entity.Base< + DidCkbWitnessLike, + DidCkbWitness +>() { + constructor(public localIdAuthorization: PlcAuthorization) { + super(); + } + + static from(data: DidCkbWitnessLike): DidCkbWitness { + if (data instanceof DidCkbWitness) { + return data; + } + return new DidCkbWitness(PlcAuthorization.from(data.localIdAuthorization)); + } +} diff --git a/packages/did-ckb/src/didCkb.ts b/packages/did-ckb/src/didCkb.ts new file mode 100644 index 000000000..0b3ede189 --- /dev/null +++ b/packages/did-ckb/src/didCkb.ts @@ -0,0 +1,89 @@ +import { ccc } from "@ckb-ccc/core"; +import { typeIdA } from "@ckb-ccc/type-id/advanced"; +import { DidCkbData, DidCkbDataLike } from "./codec"; + +const OPERATIONS = typeIdA.buildTypeIdOperations({ + async getScriptInfo(client: ccc.Client): Promise { + return client.getKnownScript(ccc.KnownScript.DidCkb); + }, + codec: DidCkbData, + async calculateTypeId( + _: ccc.Client, + tx: ccc.Transaction, + ): Promise { + return ccc + .bytesFrom(ccc.hashTypeId(tx.inputs[0], tx.outputs.length)) + .slice(0, 20); + }, +}); + +/** + * Create a DID CKB cell. + * + * @param props The arguments for creating the cell. + * @param props.signer The signer to sign the transaction. + * @param props.receiver The receiver script (optional). + * @param props.data The output data. + * @param props.tx The transaction skeleton (optional). + */ +export function createDidCkb(props: { + signer: ccc.Signer; + data: DidCkbDataLike; + receiver?: ccc.ScriptLike | null; + tx?: ccc.TransactionLike | null; +}): Promise<{ + tx: ccc.Transaction; + id: ccc.Hex; + index: number; +}> { + return OPERATIONS.create(props); +} + +/** + * Transfer a DID CKB cell. + * + * @param props The arguments for transferring the cell. + * @param props.client The client to communicate with CKB. + * @param props.id The Type ID to transfer. + * @param props.receiver The new receiver script. + * @param props.tx The transaction skeleton (optional). + * @param props.data The new output data or a transformer to update the data (optional). + */ +export async function transferDidCkb(props: { + client: ccc.Client; + id: ccc.HexLike; + receiver: ccc.ScriptLike; + tx?: ccc.TransactionLike | null; + data?: + | DidCkbDataLike + | (( + cell: ccc.Cell, + data?: DidCkbData, + ) => DidCkbDataLike | Promise) + | null; +}): Promise<{ + tx: ccc.Transaction; + inIndex: number; + outIndex: number; +}> { + return OPERATIONS.transfer(props); +} + +/** + * Destroy a DID CKB cell. + * + * @param props The arguments for destroying the cell. + * @param props.client The client to communicate with CKB. + * @param props.id The Type ID to destroy. + * @param props.tx The transaction skeleton (optional). + */ +export async function destroyDidCkb(props: { + client: ccc.Client; + id: ccc.HexLike; + tx?: ccc.TransactionLike | null; +}): Promise<{ + tx: ccc.Transaction; + index: number; +}> { + return OPERATIONS.destroy(props); +} diff --git a/packages/did-ckb/src/history.test.ts b/packages/did-ckb/src/history.test.ts new file mode 100644 index 000000000..b3f8e0291 --- /dev/null +++ b/packages/did-ckb/src/history.test.ts @@ -0,0 +1,235 @@ +import { ccc } from "@ckb-ccc/core"; +import { beforeEach, describe, expect, it, Mock, vi } from "vitest"; +import { DidCkbData } from "./codec.js"; +import { getDidCkbHistory } from "./history.js"; +import { argsToDid } from "./identifier.js"; + +describe("getDidCkbHistory", () => { + let client: ccc.Client; + + const codeHash = + "0x510150477b10d6ab551a509b71265f3164e9fd4137fcb5a4322f49f03092c7c5"; + const id = ("0x" + "ab".repeat(20)) as ccc.Hex; + + const fundingLock = ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0xdeadbeef", + }); + const didTypeScript = ccc.Script.from({ + codeHash, + hashType: "type", + args: id, + }); + + // Build a cell + the tx that produced it. Each transferDidCkb consumes the + // prior DID cell as an input and emits a new one with the same Type ID. + function didCell( + txHash: ccc.Hex, + document: object, + localId?: string, + ): ccc.Cell { + const data = DidCkbData.fromV1({ document, localId }); + return ccc.Cell.from({ + outPoint: { txHash, index: 0 }, + cellOutput: { + capacity: ccc.fixedPointFrom(300), + lock: fundingLock, + type: didTypeScript, + }, + outputData: ccc.hexFrom(data.toBytes()), + }); + } + + const txGenesis = ("0x" + "11".repeat(32)) as ccc.Hex; + const txUpdate1 = ("0x" + "22".repeat(32)) as ccc.Hex; + const txUpdate2 = ("0x" + "33".repeat(32)) as ccc.Hex; + const txFunding = ("0x" + "ff".repeat(32)) as ccc.Hex; + + const genesisCell = didCell(txGenesis, { v: 1 }); + const update1Cell = didCell(txUpdate1, { v: 2 }); + const update2Cell = didCell(txUpdate2, { v: 3 }); + + beforeEach(() => { + client = { + getKnownScript: vi.fn(), + findSingletonCellByType: vi.fn(), + getTransaction: vi.fn(), + getCell: vi.fn(), + } as unknown as ccc.Client; + + (client.getKnownScript as Mock).mockResolvedValue({ + codeHash, + hashType: "type", + cellDeps: [], + }); + }); + + function txResponse( + tx: ccc.TransactionLike, + blockNumber?: ccc.NumLike, + ): { transaction: ccc.Transaction; blockNumber?: ccc.Num } { + return { + transaction: ccc.Transaction.from(tx), + blockNumber: + blockNumber !== undefined ? ccc.numFrom(blockNumber) : undefined, + }; + } + + // Set up a getCell mock that resolves outPoints to the cells we expect the + // walk to visit. `input.getCell(client)` calls `client.getCell` internally, + // which we replace wholesale to bypass the cache. + function cellAt(outPoint: ccc.OutPointLike): ccc.Cell | undefined { + const op = ccc.OutPoint.from(outPoint); + const hash = op.txHash.toLowerCase(); + const index = Number(op.index); + if (hash === txUpdate1.toLowerCase() && index === 0) return update1Cell; + if (hash === txGenesis.toLowerCase() && index === 0) return genesisCell; + if (hash === txFunding.toLowerCase()) { + // Non-DID input that funded the genesis; getCell still works, but the + // type script doesn't match, so the walk treats this tx as the genesis. + return ccc.Cell.from({ + outPoint: { txHash: txFunding, index: 0 }, + cellOutput: { + capacity: ccc.fixedPointFrom(1000), + lock: fundingLock, + }, + outputData: "0x", + }); + } + return undefined; + } + + it("returns CREATE, UPDATE entries newest-first for a normal mint + two transfers", async () => { + (client.getTransaction as Mock).mockImplementation( + async (hash: ccc.HexLike) => { + const h = ccc.hexFrom(hash); + if (h === txUpdate2) { + return txResponse( + { + inputs: [ + { previousOutput: { txHash: txUpdate1, index: 0 }, since: 0 }, + ], + outputs: [update2Cell.cellOutput], + outputsData: [update2Cell.outputData], + }, + 300, + ); + } + if (h === txUpdate1) { + return txResponse( + { + inputs: [ + { previousOutput: { txHash: txGenesis, index: 0 }, since: 0 }, + ], + outputs: [update1Cell.cellOutput], + outputsData: [update1Cell.outputData], + }, + 200, + ); + } + if (h === txGenesis) { + return txResponse( + { + inputs: [ + { previousOutput: { txHash: txFunding, index: 0 }, since: 0 }, + ], + outputs: [genesisCell.cellOutput], + outputsData: [genesisCell.outputData], + }, + 100, + ); + } + return undefined; + }, + ); + (client.getCell as Mock).mockImplementation(async (op: ccc.OutPointLike) => + cellAt(op), + ); + + const history = await getDidCkbHistory({ + client, + id, + liveCell: update2Cell, + }); + + expect(history.map((h) => h.action)).toEqual([ + "UPDATE", + "UPDATE", + "CREATE", + ]); + expect(history[0].txHash).toBe(txUpdate2); + expect(history[0].blockNumber).toBe(300n); + expect(history[2].txHash).toBe(txGenesis); + expect(history[2].data.value.document).toEqual({ v: 1 }); + }); + + it("flags the genesis as MIGRATE when localId is set", async () => { + const migrated = didCell(txGenesis, { v: 1 }, "did:plc:abc"); + + (client.getTransaction as Mock).mockImplementation( + async (hash: ccc.HexLike) => { + const h = ccc.hexFrom(hash); + if (h === txGenesis) { + return txResponse( + { + inputs: [ + { previousOutput: { txHash: txFunding, index: 0 }, since: 0 }, + ], + outputs: [migrated.cellOutput], + outputsData: [migrated.outputData], + }, + 50, + ); + } + return undefined; + }, + ); + (client.getCell as Mock).mockImplementation(async (op: ccc.OutPointLike) => + cellAt(op), + ); + + const history = await getDidCkbHistory({ client, id, liveCell: migrated }); + expect(history.length).toBe(1); + expect(history[0].action).toBe("MIGRATE"); + expect(history[0].data.value.localId).toBe("did:plc:abc"); + }); + + it("returns an empty array when no live cell exists", async () => { + (client.findSingletonCellByType as Mock).mockResolvedValue(undefined); + const history = await getDidCkbHistory({ client, id }); + expect(history).toEqual([]); + }); + + it("accepts a did:ckb URI in place of the Type ID args", async () => { + const migrated = didCell(txGenesis, { v: 1 }, "did:plc:abc"); + (client.getTransaction as Mock).mockImplementation( + async (hash: ccc.HexLike) => { + if (ccc.hexFrom(hash) === txGenesis) { + return txResponse( + { + inputs: [ + { previousOutput: { txHash: txFunding, index: 0 }, since: 0 }, + ], + outputs: [migrated.cellOutput], + outputsData: [migrated.outputData], + }, + 50, + ); + } + return undefined; + }, + ); + (client.getCell as Mock).mockImplementation(async (op: ccc.OutPointLike) => + cellAt(op), + ); + + const history = await getDidCkbHistory({ + client, + id: argsToDid(id), + liveCell: migrated, + }); + expect(history.length).toBe(1); + expect(history[0].action).toBe("MIGRATE"); + }); +}); diff --git a/packages/did-ckb/src/history.ts b/packages/did-ckb/src/history.ts new file mode 100644 index 000000000..32d08d4f0 --- /dev/null +++ b/packages/did-ckb/src/history.ts @@ -0,0 +1,152 @@ +import { ccc } from "@ckb-ccc/core"; +import { DidCkbData } from "./codec"; +import { didToArgs, isDidCkb } from "./identifier"; +import { findDidCkbCell } from "./resolver"; + +export type HistoryAction = "CREATE" | "UPDATE" | "MIGRATE"; + +export type HistoryEntry = { + /** + * `CREATE` for a fresh mint, `MIGRATE` for a did:plc import (genesis cell + * with a `localId` set), `UPDATE` for every subsequent transfer. + */ + action: HistoryAction; + txHash: ccc.Hex; + outputIndex: ccc.Num; + blockNumber?: ccc.Num; + capacity: ccc.Num; + data: DidCkbData; +}; + +const DEFAULT_MAX_STEPS = 50; + +/** + * Walk the DID cell chain backwards to produce the ordered list of operations + * applied to a DID. + * + * Each `transferDidCkb` consumes the previous DID cell as an input and creates + * a new one with the same Type ID args; the genesis (`createDidCkb` / + * `createDidCkb` with localId) has no DID input. We start from the live cell, + * read its tx, look for the prior DID cell among the inputs, and repeat. The + * first entry returned is the newest (most recent transfer); the last is the + * genesis. + * + * Cost: roughly one `getTransaction` call per step plus one `input.getCell` + * lookup per non-DID input on each step. `input.getCell` goes through the + * client's cell cache, so repeated walks over the same chain are cheap. + */ +export async function getDidCkbHistory(props: { + client: ccc.Client; + /** + * Either the 20-byte Type ID args hex returned by `createDidCkb`, or a + * `did:ckb:` URI. URIs are converted via `didToArgs`. + */ + id: ccc.HexLike | string; + /** Pre-resolved live cell; if omitted, we fetch it. */ + liveCell?: ccc.Cell; + /** Safety bound to prevent runaway walks. Default 50. */ + maxSteps?: number; +}): Promise { + const id = + typeof props.id === "string" && isDidCkb(props.id) + ? didToArgs(props.id) + : ccc.hexFrom(props.id); + const scriptInfo = await props.client.getKnownScript(ccc.KnownScript.DidCkb); + const codeHash = scriptInfo.codeHash.toLowerCase(); + const normalizedId = id.toLowerCase(); + + let cell: ccc.Cell | undefined = + props.liveCell ?? + (await findDidCkbCell({ client: props.client, id }))?.cell; + if (!cell) { + return []; + } + + const history: HistoryEntry[] = []; + const maxSteps = props.maxSteps ?? DEFAULT_MAX_STEPS; + let steps = 0; + + while (cell && steps < maxSteps) { + steps++; + const tx = await props.client.getTransaction(cell.outPoint.txHash); + if (!tx) { + break; + } + + const entry = decodeEntry(cell, tx.blockNumber); + if (!entry) { + break; + } + + const prior = await findPriorDidCell( + props.client, + tx.transaction, + codeHash, + normalizedId, + ); + + if (!prior) { + // No DID input means this tx is the genesis. If the genesis carries a + // `localId` it's a did:plc migration; otherwise a plain CREATE. + entry.action = entry.data.value.localId ? "MIGRATE" : "CREATE"; + history.push(entry); + break; + } + + entry.action = "UPDATE"; + history.push(entry); + cell = prior; + } + + return history; +} + +async function findPriorDidCell( + client: ccc.Client, + tx: ccc.TransactionLike, + codeHash: string, + id: string, +): Promise { + const { inputs } = ccc.Transaction.from(tx); + for (const input of inputs) { + let cell: ccc.Cell; + try { + cell = await input.getCell(client); + } catch { + // Skip inputs whose previous output we can't fetch; they can't be the + // prior DID cell anyway, so the walk should keep looking at siblings. + continue; + } + const type = cell.cellOutput.type; + if (!type) { + continue; + } + if (type.codeHash.toLowerCase() !== codeHash) { + continue; + } + if (ccc.hexFrom(type.args).toLowerCase() !== id) { + continue; + } + return cell; + } + return undefined; +} + +function decodeEntry( + cell: ccc.Cell, + blockNumber?: ccc.Num, +): HistoryEntry | undefined { + try { + const data = DidCkbData.decode(cell.outputData); + return { + action: "UPDATE", + txHash: cell.outPoint.txHash, + outputIndex: cell.outPoint.index, + blockNumber, + capacity: cell.cellOutput.capacity, + data, + }; + } catch { + return undefined; + } +} diff --git a/packages/did-ckb/src/identifier.test.ts b/packages/did-ckb/src/identifier.test.ts new file mode 100644 index 000000000..39ab24d71 --- /dev/null +++ b/packages/did-ckb/src/identifier.test.ts @@ -0,0 +1,78 @@ +import { ccc } from "@ckb-ccc/core"; +import { describe, expect, it } from "vitest"; +import { + argsToDid, + base32Decode, + base32Encode, + didToArgs, + isDidCkb, +} from "./identifier.js"; + +describe("base32", () => { + it("round-trips known vectors", () => { + const cases: [string, string][] = [ + ["", ""], + ["f", "my"], + ["fo", "mzxq"], + ["foo", "mzxw6"], + ["foob", "mzxw6yq"], + ["fooba", "mzxw6ytb"], + ["foobar", "mzxw6ytboi"], + ]; + for (const [input, expected] of cases) { + const bytes = new TextEncoder().encode(input); + expect(base32Encode(bytes)).toBe(expected); + expect(new TextDecoder().decode(base32Decode(expected))).toBe(input); + } + }); + + it("rejects invalid characters", () => { + expect(() => base32Decode("!!!")).toThrow(/Invalid base32 character/); + }); + + it("accepts hex input via ccc.bytesFrom", () => { + expect(base32Encode("0xdeadbeef")).toBe( + base32Encode(ccc.bytesFrom("0xdeadbeef")), + ); + }); +}); + +describe("did:ckb identifier", () => { + // 20 zero bytes -> 32 'a's + const zeros = "0x" + "00".repeat(20); + const zerosDid = "did:ckb:" + "a".repeat(32); + + it("converts args <-> did", () => { + expect(argsToDid(zeros)).toBe(zerosDid); + expect(didToArgs(zerosDid)).toBe(zeros); + }); + + it("rejects args with wrong length", () => { + expect(() => argsToDid("0x" + "00".repeat(19))).toThrow(); + expect(() => argsToDid("0x" + "00".repeat(21))).toThrow(); + }); + + it("rejects did without prefix", () => { + expect(() => didToArgs("ckb:" + "a".repeat(32))).toThrow(); + }); + + it("rejects did with wrong body length", () => { + expect(() => didToArgs("did:ckb:" + "a".repeat(31))).toThrow(); + expect(() => didToArgs("did:ckb:" + "a".repeat(33))).toThrow(); + }); + + it("isDidCkb is true only for well-formed values", () => { + expect(isDidCkb(zerosDid)).toBe(true); + expect(isDidCkb("did:plc:xyz")).toBe(false); + expect(isDidCkb("did:ckb:tooShort")).toBe(false); + expect(isDidCkb("did:ckb:" + "!".repeat(32))).toBe(false); + }); + + it("round-trips a random-looking args vector", () => { + const args = "0x0123456789abcdef0123456789abcdef01234567"; + const did = argsToDid(args); + expect(did.startsWith("did:ckb:")).toBe(true); + expect(did.length).toBe("did:ckb:".length + 32); + expect(didToArgs(did)).toBe(args); + }); +}); diff --git a/packages/did-ckb/src/identifier.ts b/packages/did-ckb/src/identifier.ts new file mode 100644 index 000000000..67b8bce48 --- /dev/null +++ b/packages/did-ckb/src/identifier.ts @@ -0,0 +1,105 @@ +import { ccc } from "@ckb-ccc/core"; + +const DID_PREFIX = "did:ckb:"; +const ARGS_LEN_BYTES = 20; +const DID_BODY_LEN = 32; + +// RFC 4648 base32, lowercase, no padding (WIP-01 §2.2.3). +const ALPHABET = "abcdefghijklmnopqrstuvwxyz234567"; +const REVERSE = (() => { + const map: Record = {}; + for (let i = 0; i < ALPHABET.length; i++) { + map[ALPHABET[i]] = i; + } + return map; +})(); + +export function base32Encode(bytes: ccc.BytesLike): string { + const buf = ccc.bytesFrom(bytes); + let bits = 0; + let value = 0; + let output = ""; + for (let i = 0; i < buf.length; i++) { + value = (value << 8) | buf[i]; + bits += 8; + while (bits >= 5) { + output += ALPHABET[(value >>> (bits - 5)) & 31]; + bits -= 5; + } + } + if (bits > 0) { + output += ALPHABET[(value << (5 - bits)) & 31]; + } + return output; +} + +export function base32Decode(input: string): ccc.Bytes { + const cleaned = input.toLowerCase().replace(/=+$/g, ""); + let bits = 0; + let value = 0; + const output: number[] = []; + for (const char of cleaned) { + const v = REVERSE[char]; + if (v === undefined) { + throw new Error(`Invalid base32 character "${char}" in input`); + } + value = (value << 5) | v; + bits += 5; + if (bits >= 8) { + output.push((value >>> (bits - 8)) & 0xff); + bits -= 8; + } + } + return Uint8Array.from(output); +} + +/** + * Convert 20-byte Type ID args (the `id` returned from `createDidCkb`) to a + * `did:ckb:` identifier string per WIP-01 §2.2. + */ +export function argsToDid(args: ccc.HexLike): string { + const bytes = ccc.bytesFrom(args); + if (bytes.length !== ARGS_LEN_BYTES) { + throw new Error( + `did:ckb args must be ${ARGS_LEN_BYTES} bytes, got ${bytes.length}`, + ); + } + return DID_PREFIX + base32Encode(bytes); +} + +/** + * Reverse of `argsToDid`. Validates the prefix, base32 length, and decoded + * byte count. + */ +export function didToArgs(did: string): ccc.Hex { + if (!did.startsWith(DID_PREFIX)) { + throw new Error(`Expected did:ckb:..., got "${did}"`); + } + const body = did.slice(DID_PREFIX.length); + // 20 bytes encode to exactly 32 base32 chars without padding. Any other + // length silently truncates leftover bits, so reject it up front. + if (body.length !== DID_BODY_LEN) { + throw new Error( + `did:ckb identifier must be ${DID_BODY_LEN} base32 chars, got ${body.length}`, + ); + } + const bytes = base32Decode(body); + if (bytes.length !== ARGS_LEN_BYTES) { + throw new Error( + `did:ckb identifier must decode to ${ARGS_LEN_BYTES} bytes, got ${bytes.length}`, + ); + } + return ccc.hexFrom(bytes); +} + +export function isDidCkb(value: string): boolean { + if (!value.startsWith(DID_PREFIX)) { + return false; + } + try { + didToArgs(value); + return true; + } catch { + return false; + } +} diff --git a/packages/did-ckb/src/index.ts b/packages/did-ckb/src/index.ts new file mode 100644 index 000000000..580265645 --- /dev/null +++ b/packages/did-ckb/src/index.ts @@ -0,0 +1,2 @@ +export * from "./barrel.js"; +export * as didCkb from "./barrel.js"; diff --git a/packages/did-ckb/src/migrate.ts b/packages/did-ckb/src/migrate.ts new file mode 100644 index 000000000..fb153b021 --- /dev/null +++ b/packages/did-ckb/src/migrate.ts @@ -0,0 +1,94 @@ +import { ccc } from "@ckb-ccc/core"; +import { DidCkbDataLike, DidCkbWitness } from "./codec"; +import { createDidCkb } from "./didCkb"; +import { + getRotationKeys, + signRotationHash, + type Curve, + type PlcOperation, +} from "./plc"; + +/** + * Build the migration witness payload that authorizes a did:plc -> did:ckb + * import. Pure: takes a tx hash + signing material, returns a typed + * `DidCkbWitness` that the caller wraps in a `WitnessArgs.outputType` field. + * + * Per WIP-02 §3.1.1 we send only the genesis operation in `history`. The + * contract recomputes the genesis CID over the CBOR-encoded op, verifies the + * self-signature inside it, then verifies `sig` against + * `history[0].rotationKeys[rotationKeyIndex]`. + * + * `selfSigIndex` defaults to 0 because PLC genesis ops are conventionally + * self-signed by the first rotation key; override if the genesis you're + * migrating used a different one. + */ +export function buildMigrationWitness(props: { + txHash: ccc.HexLike; + genesisOperation: PlcOperation; + rotationKeyIndex: number; + rotationPrivateKey: ccc.BytesLike; + curve?: Curve; + selfSigIndex?: number; +}): DidCkbWitness { + const rotationKeys = getRotationKeys(props.genesisOperation); + if (!rotationKeys[props.rotationKeyIndex]) { + throw new Error( + `rotationKeyIndex ${props.rotationKeyIndex} out of range (genesis has ${rotationKeys.length} keys)`, + ); + } + const curve = props.curve ?? rotationKeys[props.rotationKeyIndex].curve; + const sig = signRotationHash( + props.rotationPrivateKey, + ccc.bytesFrom(props.txHash), + curve, + ); + return DidCkbWitness.from({ + localIdAuthorization: { + history: [props.genesisOperation], + sig: ccc.hexFrom(sig), + rotationKeyIndices: [props.selfSigIndex ?? 0, props.rotationKeyIndex], + }, + }); +} + +/** + * Build a create tx whose output declares an imported did:plc identifier in + * its `localId` field. Equivalent to calling `createDidCkb` with + * `data.value.localId = sourceDid`; provided as a named helper for symmetry + * with the other DID operations and so `did:plc:` migrations have an + * obvious entry point. + * + * The caller is responsible for: completing inputs + fee, building the + * migration witness with `buildMigrationWitness`, and setting it at the + * witness slot of input 0. See `packages/examples/src/migrateDid.ts` for the + * full flow. + */ +export async function migrateDidCkb(props: { + signer: ccc.Signer; + sourceDid: string; + data?: DidCkbDataLike | null; + receiver?: ccc.ScriptLike | null; + tx?: ccc.TransactionLike | null; +}): Promise<{ + tx: ccc.Transaction; + id: ccc.Hex; + index: number; +}> { + if (!props.sourceDid.startsWith("did:plc:")) { + throw new Error(`sourceDid must be did:plc:..., got "${props.sourceDid}"`); + } + const document = props.data?.value?.document ?? {}; + const data: DidCkbDataLike = { + type: props.data?.type ?? "v1", + value: { + document, + localId: props.sourceDid, + }, + }; + return createDidCkb({ + signer: props.signer, + data, + receiver: props.receiver, + tx: props.tx, + }); +} diff --git a/packages/did-ckb/src/plc/index.ts b/packages/did-ckb/src/plc/index.ts new file mode 100644 index 000000000..076c67c56 --- /dev/null +++ b/packages/did-ckb/src/plc/index.ts @@ -0,0 +1,229 @@ +import { ccc } from "@ckb-ccc/core"; +import { p256 } from "@noble/curves/nist.js"; +import { secp256k1 } from "@noble/curves/secp256k1.js"; + +/** + * Minimal did:plc helpers, scoped to what a did:ckb migration needs: + * fetch the op log from the public PLC directory, parse rotation keys, and + * sign a 32-byte CKB transaction hash with a rotation private key. + * + * The on-chain contract is happy with a history of length 1 (WIP-02 §3.1.1 + * RECOMMENDs the genesis-only form), so we don't walk the full op chain + * client-side. + */ + +const PLC_DIRECTORY = "https://plc.directory"; + +export type Curve = "secp256k1" | "p256"; + +export type PlcRotationKey = { + didKey: string; + curve: Curve; + compressedPubkey: ccc.Bytes; +}; + +export type PlcOperation = { + type: string; + rotationKeys?: string[]; + verificationMethods?: Record; + alsoKnownAs?: string[]; + services?: Record; + prev: string | null; + sig: string; + // Legacy `create` op fields: + signingKey?: string; + recoveryKey?: string; + handle?: string; + service?: string; + [key: string]: unknown; +}; + +/** + * Fetch the operation log for a did:plc identifier from the public directory. + * Pass a custom directory URL when targeting a staging environment. + */ +export async function fetchPlcLog( + did: string, + directory: string = PLC_DIRECTORY, +): Promise { + if (!did.startsWith("did:plc:")) { + throw new Error(`Expected did:plc identifier, got "${did}"`); + } + const res = await fetch(`${directory}/${did}/log`); + if (!res.ok) { + throw new Error(`PLC log fetch failed (${res.status} ${res.statusText})`); + } + const data: unknown = await res.json(); + if (!Array.isArray(data) || data.length === 0) { + throw new Error("PLC log empty or malformed"); + } + return data as PlcOperation[]; +} + +export function getGenesisOperation(log: PlcOperation[]): PlcOperation { + if (log.length === 0) { + throw new Error("Empty PLC log"); + } + return log[0]; +} + +/** + * Surface the rotation keys declared in a genesis op as a uniform list. PLC + * genesis comes in two shapes: the modern `plc_operation` (with + * `rotationKeys`) and the deprecated `create` (with `signingKey` + + * `recoveryKey`). The on-chain contract treats the legacy form as + * `[signingKey, recoveryKey]`, so we expose the same order. + */ +export function getRotationKeys(op: PlcOperation): PlcRotationKey[] { + const keys: string[] = []; + if (op.rotationKeys?.length) { + keys.push(...op.rotationKeys); + } else if (op.signingKey || op.recoveryKey) { + if (op.signingKey) { + keys.push(op.signingKey); + } + if (op.recoveryKey) { + keys.push(op.recoveryKey); + } + } + return keys.map((didKey) => { + const parsed = parseDidKey(didKey); + return { + didKey, + curve: parsed.curve, + compressedPubkey: parsed.compressedPubkey, + }; + }); +} + +export function parseDidKey(didKey: string): { + curve: Curve; + compressedPubkey: ccc.Bytes; +} { + if (!didKey.startsWith("did:key:z")) { + throw new Error(`Expected did:key:z..., got "${didKey}"`); + } + const raw = base58btcDecode(didKey.slice("did:key:z".length)); + if (raw.length !== 35) { + throw new Error( + `did:key payload must be 35 bytes (2-byte multicodec tag + 33-byte compressed pubkey), got ${raw.length}`, + ); + } + const tag1 = raw[0]; + const tag2 = raw[1]; + let curve: Curve; + if (tag1 === 0xe7 && tag2 === 0x01) { + curve = "secp256k1"; + } else if (tag1 === 0x80 && tag2 === 0x24) { + curve = "p256"; + } else { + throw new Error( + `Unrecognised did:key multicodec tag: 0x${tag1.toString(16).padStart(2, "0")} 0x${tag2.toString(16).padStart(2, "0")}`, + ); + } + return { curve, compressedPubkey: raw.slice(2) }; +} + +/** + * Sign a 32-byte CKB tx hash with a PLC rotation private key. + * + * The on-chain validator runs k256/p256's `Verifier::verify` which internally + * SHA-256 hashes the message before checking the ECDSA signature. Noble's + * default is the opposite (treat input as already-hashed), so we pass + * `prehash: true` to make noble apply SHA-256 internally and match the + * contract. Output is canonical low-s 64-byte compact form, identical to + * what @atproto/crypto's Keypair.sign produces. + */ +export function signRotationHash( + privateKey: ccc.BytesLike, + txHash: ccc.BytesLike, + curve: Curve, +): ccc.Bytes { + const hash = ccc.bytesFrom(txHash); + if (hash.length !== 32) { + throw new Error(`Expected 32-byte tx hash, got ${hash.length}`); + } + const priv = ccc.bytesFrom(privateKey); + if (priv.length !== 32) { + throw new Error(`Expected 32-byte private key, got ${priv.length}`); + } + if (curve === "secp256k1") { + return secp256k1.sign(hash, priv, { + prehash: true, + lowS: true, + format: "compact", + }); + } + return p256.sign(hash, priv, { + prehash: true, + lowS: true, + format: "compact", + }); +} + +/** + * Quick sanity check: derive the public key from `privateKey` and compare + * against `expectedPubkey`. Lets a UI tell the user "wrong key for this + * rotation slot" without waiting for an on-chain rejection. + */ +export function verifyPrivateKeyMatch( + privateKey: ccc.BytesLike, + expectedPubkey: ccc.BytesLike, + curve: Curve, +): boolean { + const priv = ccc.bytesFrom(privateKey); + if (priv.length !== 32) { + return false; + } + const expected = ccc.bytesFrom(expectedPubkey); + const pub = + curve === "secp256k1" + ? secp256k1.getPublicKey(priv, true) + : p256.getPublicKey(priv, true); + if (pub.length !== expected.length) { + return false; + } + for (let i = 0; i < pub.length; i++) { + if (pub[i] !== expected[i]) { + return false; + } + } + return true; +} + +// Inline base58btc decode (Bitcoin alphabet) so we don't pull in multiformats +// as a direct dependency. Audited by the multicodec tag round-trip tests. +const BASE58_ALPHABET = + "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; +const BASE58_REVERSE: Record = (() => { + const m: Record = {}; + for (let i = 0; i < BASE58_ALPHABET.length; i++) { + m[BASE58_ALPHABET[i]] = i; + } + return m; +})(); + +function base58btcDecode(input: string): ccc.Bytes { + if (input.length === 0) { + return new Uint8Array(0); + } + let leadingOnes = 0; + while (leadingOnes < input.length && input[leadingOnes] === "1") { + leadingOnes++; + } + let value = 0n; + for (let i = leadingOnes; i < input.length; i++) { + const c = input[i]; + const v = BASE58_REVERSE[c]; + if (v === undefined) { + throw new Error(`Invalid base58 character "${c}"`); + } + value = value * 58n + BigInt(v); + } + const tail: number[] = []; + while (value > 0n) { + tail.unshift(Number(value & 0xffn)); + value >>= 8n; + } + return Uint8Array.from([...Array(leadingOnes).fill(0), ...tail]); +} diff --git a/packages/did-ckb/src/plc/plc.test.ts b/packages/did-ckb/src/plc/plc.test.ts new file mode 100644 index 000000000..64e28d49b --- /dev/null +++ b/packages/did-ckb/src/plc/plc.test.ts @@ -0,0 +1,100 @@ +import { secp256k1 } from "@noble/curves/secp256k1.js"; +import { describe, expect, it } from "vitest"; +import { + getGenesisOperation, + getRotationKeys, + parseDidKey, + signRotationHash, + verifyPrivateKeyMatch, + type PlcOperation, +} from "./index.js"; + +describe("parseDidKey", () => { + it("recognises secp256k1 multicodec tag (0xe7 0x01)", () => { + // Real did:key from the bluesky network — secp256k1 public key. + const didKey = "did:key:zQ3shqtXEdagupBhLzL2vFUACfdVjDEvciip79uY8iHBuu7FD"; + const { curve, compressedPubkey } = parseDidKey(didKey); + expect(curve).toBe("secp256k1"); + expect(compressedPubkey.length).toBe(33); + }); + + it("recognises p256 multicodec tag (0x80 0x24)", () => { + const didKey = "did:key:zDnaefn5fMKvoZ1n4vyxJ9npjWE5P3D8GkM9zNqaGbLqdDrtX"; + const { curve, compressedPubkey } = parseDidKey(didKey); + expect(curve).toBe("p256"); + expect(compressedPubkey.length).toBe(33); + }); + + it("rejects unknown prefixes", () => { + expect(() => parseDidKey("did:key:abc")).toThrow(); + expect(() => parseDidKey("did:plc:abc")).toThrow(); + }); +}); + +describe("getRotationKeys", () => { + it("returns rotationKeys from modern plc_operation", () => { + const op: PlcOperation = { + type: "plc_operation", + rotationKeys: [ + "did:key:zQ3shqtXEdagupBhLzL2vFUACfdVjDEvciip79uY8iHBuu7FD", + "did:key:zDnaefn5fMKvoZ1n4vyxJ9npjWE5P3D8GkM9zNqaGbLqdDrtX", + ], + prev: null, + sig: "x", + }; + const keys = getRotationKeys(op); + expect(keys.map((k) => k.curve)).toEqual(["secp256k1", "p256"]); + }); + + it("falls back to signingKey + recoveryKey from legacy create op", () => { + const op: PlcOperation = { + type: "create", + signingKey: "did:key:zQ3shqtXEdagupBhLzL2vFUACfdVjDEvciip79uY8iHBuu7FD", + recoveryKey: "did:key:zQ3shqtXEdagupBhLzL2vFUACfdVjDEvciip79uY8iHBuu7FD", + prev: null, + sig: "x", + }; + const keys = getRotationKeys(op); + expect(keys.length).toBe(2); + }); +}); + +describe("getGenesisOperation", () => { + it("returns the first op", () => { + const op: PlcOperation = { type: "x", prev: null, sig: "y" }; + expect(getGenesisOperation([op])).toBe(op); + }); + it("throws on empty log", () => { + expect(() => getGenesisOperation([])).toThrow(); + }); +}); + +describe("signRotationHash + verifyPrivateKeyMatch", () => { + it("round-trips: signature verifies, private key matches its public", () => { + const priv = secp256k1.utils.randomSecretKey(); + const pub = secp256k1.getPublicKey(priv, true); + expect(verifyPrivateKeyMatch(priv, pub, "secp256k1")).toBe(true); + + const txHash = new Uint8Array(32).fill(7); + const sig = signRotationHash(priv, txHash, "secp256k1"); + expect(sig.length).toBe(64); + expect( + secp256k1.verify(sig, txHash, pub, { prehash: true, lowS: true }), + ).toBe(true); + }); + + it("rejects a private key whose pubkey doesn't match", () => { + const a = secp256k1.utils.randomSecretKey(); + const b = secp256k1.utils.randomSecretKey(); + expect( + verifyPrivateKeyMatch(a, secp256k1.getPublicKey(b, true), "secp256k1"), + ).toBe(false); + }); + + it("throws on wrong tx hash length", () => { + const priv = secp256k1.utils.randomSecretKey(); + expect(() => + signRotationHash(priv, new Uint8Array(31), "secp256k1"), + ).toThrow(); + }); +}); diff --git a/packages/did-ckb/src/resolver.test.ts b/packages/did-ckb/src/resolver.test.ts new file mode 100644 index 000000000..0dff1bef5 --- /dev/null +++ b/packages/did-ckb/src/resolver.test.ts @@ -0,0 +1,138 @@ +import { ccc } from "@ckb-ccc/core"; +import { beforeEach, describe, expect, it, Mock, vi } from "vitest"; +import { DidCkbData } from "./codec.js"; +import { argsToDid } from "./identifier.js"; +import { + findDidCkbCell, + listDidCkbsByLock, + resolveDidCkb, +} from "./resolver.js"; + +describe("resolver", () => { + let client: ccc.Client; + + const codeHash = + "0x510150477b10d6ab551a509b71265f3164e9fd4137fcb5a4322f49f03092c7c5"; + const id = ("0x" + "ab".repeat(20)) as ccc.Hex; + const did = argsToDid(id); + + const sampleData = DidCkbData.fromV1({ + document: { hello: "world" }, + localId: undefined, + }); + + function fakeCell(args: ccc.Hex = id, data = sampleData): ccc.Cell { + return ccc.Cell.from({ + outPoint: { + txHash: + "0x1111111111111111111111111111111111111111111111111111111111111111", + index: 0, + }, + cellOutput: { + capacity: ccc.fixedPointFrom(300), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0xdeadbeef", + }), + type: ccc.Script.from({ + codeHash, + hashType: "type", + args, + }), + }, + outputData: ccc.hexFrom(data.toBytes()), + }); + } + + beforeEach(() => { + client = { + getKnownScript: vi.fn(), + findSingletonCellByType: vi.fn(), + findCells: vi.fn(), + } as unknown as ccc.Client; + + (client.getKnownScript as Mock).mockResolvedValue({ + codeHash, + hashType: "type", + cellDeps: [], + }); + }); + + it("findDidCkbCell returns a decoded record when a live cell exists", async () => { + (client.findSingletonCellByType as Mock).mockResolvedValue(fakeCell()); + + const record = await findDidCkbCell({ client, id }); + expect(record?.did).toBe(did); + expect(record?.id).toBe(id); + expect(record?.data.value.document).toEqual({ hello: "world" }); + }); + + it("findDidCkbCell returns undefined when no live cell exists", async () => { + (client.findSingletonCellByType as Mock).mockResolvedValue(undefined); + expect(await findDidCkbCell({ client, id })).toBeUndefined(); + }); + + it("resolveDidCkb rejects non-did:ckb strings", async () => { + await expect( + resolveDidCkb({ client, did: "did:plc:abc" }), + ).rejects.toThrow(); + }); + + it("resolveDidCkb resolves the same record as findDidCkbCell", async () => { + (client.findSingletonCellByType as Mock).mockResolvedValue(fakeCell()); + const record = await resolveDidCkb({ client, did }); + expect(record?.did).toBe(did); + }); + + it("listDidCkbsByLock decodes every cell yielded by findCells", async () => { + const other = ("0x" + "cd".repeat(20)) as ccc.Hex; + (client.findCells as Mock).mockImplementation(async function* () { + yield fakeCell(id); + yield fakeCell(other); + }); + + const lock = ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0xdeadbeef", + }); + + const records = await listDidCkbsByLock({ client, lock }); + expect(records.map((r) => r.id)).toEqual([id, other]); + expect(records.map((r) => r.did)).toEqual([did, argsToDid(other)]); + }); + + it("listDidCkbsByLock skips cells without a type script", async () => { + const cellWithoutType = ccc.Cell.from({ + outPoint: { + txHash: + "0x2222222222222222222222222222222222222222222222222222222222222222", + index: 0, + }, + cellOutput: { + capacity: ccc.fixedPointFrom(100), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + }, + outputData: "0x", + }); + (client.findCells as Mock).mockImplementation(async function* () { + yield cellWithoutType; + yield fakeCell(id); + }); + + const lock = ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0xdeadbeef", + }); + + const records = await listDidCkbsByLock({ client, lock }); + expect(records.length).toBe(1); + expect(records[0].id).toBe(id); + }); +}); diff --git a/packages/did-ckb/src/resolver.ts b/packages/did-ckb/src/resolver.ts new file mode 100644 index 000000000..6a69a15ee --- /dev/null +++ b/packages/did-ckb/src/resolver.ts @@ -0,0 +1,123 @@ +import { ccc } from "@ckb-ccc/core"; +import { DidCkbData } from "./codec"; +import { argsToDid, didToArgs, isDidCkb } from "./identifier"; + +export type DidCkbRecord = { + /** The `did:ckb:` string identifying this cell. */ + did: string; + /** 20-byte Type ID args (same value `createDidCkb` returned as `id`). */ + id: ccc.Hex; + /** Decoded DidCkbData; `.value.document` is the CBOR-decoded document. */ + data: DidCkbData; + /** The live DID Metadata Cell itself. */ + cell: ccc.Cell; +}; + +async function didCkbTypeScript( + client: ccc.Client, + id: ccc.HexLike, +): Promise { + const scriptInfo = await client.getKnownScript(ccc.KnownScript.DidCkb); + return ccc.Script.from({ + codeHash: scriptInfo.codeHash, + hashType: scriptInfo.hashType, + args: id, + }); +} + +function decodeRecord(cell: ccc.Cell, id: ccc.Hex): DidCkbRecord { + return { + did: argsToDid(id), + id, + data: DidCkbData.decode(cell.outputData), + cell, + }; +} + +/** + * Find the live DID Metadata Cell for a given Type ID and decode its data. + * + * Returns `undefined` when no live cell exists (the DID was never created or + * has been destroyed). + */ +export async function findDidCkbCell(props: { + client: ccc.Client; + id: ccc.HexLike; +}): Promise { + const id = ccc.hexFrom(props.id); + const type = await didCkbTypeScript(props.client, id); + const cell = await props.client.findSingletonCellByType(type, true); + if (!cell) { + return undefined; + } + return decodeRecord(cell, id); +} + +/** + * Resolve a `did:ckb:` string to its live cell + decoded document. + * + * Throws if `did` is not a syntactically valid did:ckb identifier. Returns + * `undefined` if the DID was created and then destroyed, or never existed. + */ +export async function resolveDidCkb(props: { + client: ccc.Client; + did: string; +}): Promise { + if (!isDidCkb(props.did)) { + throw new Error(`Not a did:ckb identifier: ${props.did}`); + } + return findDidCkbCell({ client: props.client, id: didToArgs(props.did) }); +} + +/** + * List every live DID Metadata Cell owned by the given lock. Useful for + * dashboards that want to enumerate the DIDs an address controls. + * + * Cells whose data fails to decode (e.g. a future on-chain schema version) are + * skipped, not thrown, so a single bad cell can't break the whole listing. + */ +export async function listDidCkbsByLock(props: { + client: ccc.Client; + lock: ccc.ScriptLike; + limit?: number; + order?: "asc" | "desc"; +}): Promise { + const scriptInfo = await props.client.getKnownScript(ccc.KnownScript.DidCkb); + const records: DidCkbRecord[] = []; + + // Filter by type.codeHash + hashType (args is prefix-matched against "0x", + // which matches any args). This is the standard indexer pattern for + // "any cell of this type, regardless of identifier". + for await (const cell of props.client.findCells( + { + script: ccc.Script.from(props.lock), + scriptType: "lock", + scriptSearchMode: "exact", + filter: { + script: ccc.Script.from({ + codeHash: scriptInfo.codeHash, + hashType: scriptInfo.hashType, + args: "0x", + }), + }, + withData: true, + }, + props.order, + props.limit, + )) { + const type = cell.cellOutput.type; + if (!type) { + continue; + } + const argsBytes = ccc.bytesFrom(type.args); + if (argsBytes.length !== 20) { + continue; + } + try { + records.push(decodeRecord(cell, ccc.hexFrom(type.args))); + } catch { + // Skip unparseable cells rather than fail the whole listing. + } + } + return records; +} diff --git a/config/tsconfig.base.json b/packages/did-ckb/tsconfig.json similarity index 79% rename from config/tsconfig.base.json rename to packages/did-ckb/tsconfig.json index 7e5ac952b..3399c6f67 100644 --- a/config/tsconfig.base.json +++ b/packages/did-ckb/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2020", + "target": "es2022", "incremental": true, "allowJs": true, "importHelpers": false, @@ -16,7 +16,10 @@ "alwaysStrict": true, "noFallthroughCasesInSwitch": true, "forceConsistentCasingInFileNames": true, - "skipLibCheck": true + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "rootDir": "./src" }, "include": ["src/**/*"] } diff --git a/packages/did-ckb/tsdown.config.mts b/packages/did-ckb/tsdown.config.mts new file mode 100644 index 000000000..6739731bf --- /dev/null +++ b/packages/did-ckb/tsdown.config.mts @@ -0,0 +1,46 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + plc: "src/plc/index.ts", +} as const; + +const bundleDeps = [ + "@ipld/dag-cbor", + "cborg", // By @ipld/dag-cbor + "multiformats", // By @ipld/dag-cbor +] as string[]; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/did-ckb/typedoc.json b/packages/did-ckb/typedoc.json new file mode 100644 index 000000000..5cdb8befe --- /dev/null +++ b/packages/did-ckb/typedoc.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "entryPoints": ["./src/index.ts"], + "extends": ["../../typedoc.base.json"], + "name": "@ckb-ccc did-ckb" +} diff --git a/packages/did-ckb/vitest.config.mts b/packages/did-ckb/vitest.config.mts new file mode 100644 index 000000000..dc6a58785 --- /dev/null +++ b/packages/did-ckb/vitest.config.mts @@ -0,0 +1,10 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: ["src/**/*.test.ts"], + coverage: { + include: ["src/**/*.ts"], + }, + }, +}); diff --git a/packages/eip6963/CHANGELOG.md b/packages/eip6963/CHANGELOG.md index d24327fe2..f385f97d1 100644 --- a/packages/eip6963/CHANGELOG.md +++ b/packages/eip6963/CHANGELOG.md @@ -1,5 +1,28 @@ # @ckb-ccc/eip6963 +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 1.0.33 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 1.0.32 ### Patch Changes diff --git a/packages/eip6963/package.json b/packages/eip6963/package.json index 8e93e447d..f8079583e 100644 --- a/packages/eip6963/package.json +++ b/packages/eip6963/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/eip6963", - "version": "1.0.32", + "version": "1.1.0", "description": "CCC - CKBer's Codebase. Common Chains Connector's support for EIP6963", "author": "Hanssen0 ", "license": "MIT", @@ -11,42 +11,45 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, "./advanced": { - "import": "./dist/advanced.js", - "require": "./dist.commonjs/advanced.js", - "default": "./dist.commonjs/advanced.js" - } + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { - "@ckb-ccc/core": "workspace:*" + "@ckb-ccc/core": "workspace:*", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/eip6963/tsconfig.commonjs.json b/packages/eip6963/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/eip6963/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/eip6963/tsconfig.json b/packages/eip6963/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/eip6963/tsconfig.json +++ b/packages/eip6963/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/eip6963/tsdown.config.mts b/packages/eip6963/tsdown.config.mts new file mode 100644 index 000000000..c7a5622fb --- /dev/null +++ b/packages/eip6963/tsdown.config.mts @@ -0,0 +1,42 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/examples/package.json b/packages/examples/package.json index 756bf2d1d..cd11fa840 100644 --- a/packages/examples/package.json +++ b/packages/examples/package.json @@ -11,27 +11,29 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "scripts": { - "build": "rimraf ./dist && tsc", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { "@ckb-ccc/ccc": "workspace:*", - "@ckb-ccc/playground": "file:src/playground" + "@ckb-ccc/playground": "file:src/playground", + "@noble/curves": "^2.2.0", + "@noble/hashes": "^2.2.0", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/examples/src/createDid.ts b/packages/examples/src/createDid.ts new file mode 100644 index 000000000..2d01a6866 --- /dev/null +++ b/packages/examples/src/createDid.ts @@ -0,0 +1,20 @@ +import { ccc } from "@ckb-ccc/ccc"; +import { render, signer } from "@ckb-ccc/playground"; + +// Construct create did tx +const { tx } = await ccc.didCkb.createDidCkb({ + signer, + data: { value: { document: {} } }, +}); + +// Complete missing parts: Fill inputs +await tx.completeInputsByCapacity(signer); +await render(tx); + +// Complete missing parts: Pay fee +await tx.completeFeeBy(signer); +await render(tx); + +// Sign and send the transaction +const txHash = await signer.sendTransaction(tx); +console.log(`Transaction ${txHash} sent`); diff --git a/packages/examples/src/createDidWithLocalId.ts b/packages/examples/src/createDidWithLocalId.ts new file mode 100644 index 000000000..bd1947119 --- /dev/null +++ b/packages/examples/src/createDidWithLocalId.ts @@ -0,0 +1,66 @@ +import { ccc } from "@ckb-ccc/ccc"; +import { render, signer } from "@ckb-ccc/playground"; +import { secp256k1 } from "@noble/curves/secp256k1.js"; +import { sha256 } from "@noble/hashes/sha2.js"; + +// From https://github.com/bluesky-social/atproto/blob/main/packages/crypto +function plcSign(key: ccc.BytesLike, msg: ccc.BytesLike): ccc.Bytes { + const msgHash = sha256(ccc.bytesFrom(msg)); + return secp256k1.sign(msgHash, ccc.bytesFrom(key), { + lowS: true, + format: "compact", + prehash: false, + }); +} + +// Construct create did tx +const { tx } = await ccc.didCkb.createDidCkb({ + signer, + data: { + value: { document: {}, localId: "did:plc:yunkr6vorfgzmvzeoofbkhq5" }, + }, +}); + +// Complete missing parts: Fill inputs +await tx.completeInputsByCapacity(signer); +await render(tx); + +// Complete missing parts: Pay fee +await tx.completeFeeBy(signer); +await render(tx); + +// Authorize the transaction with the rotation key +const rotationKey = + "0x806d1925698097c64bc70f629e25b91b48a15eee4e492bb239402cee85356a10"; +const witness = ccc.didCkb.DidCkbWitness.from({ + localIdAuthorization: { + history: [ + { + type: "plc_operation", + verificationMethods: { + atproto: "did:key:zQ3shn3qejTEyEiokszFc4MWEqbdAwyj2XR1oS2AuXKvEBTuN", + }, + rotationKeys: [ + "did:key:zQ3shqtXEdagupBhLzL2vFUACfdVjDEvciip79uY8iHBuu7FD", + "did:key:zDnaefn5fMKvoZ1n4vyxJ9npjWE5P3D8GkM9zNqaGbLqdDrtX", + ], + alsoKnownAs: ["at://alice.example.com"], + services: { + atproto_pds: { + type: "AtprotoPersonalDataServer", + endpoint: "https://example.com", + }, + }, + prev: null, + sig: "2ySrMKwAQ8j_7HlJlNdE9kXFXG6VAGzy0s4P5O12UuMQqUgDHlAe3PQza5zWxIi6TC9K3K8ghmypfhDyJm8LuQ", + }, + ], + rotationKeyIndices: [0n, 0n], + sig: plcSign(rotationKey, tx.hash()), + }, +}); +tx.setWitnessArgsAt(0, ccc.WitnessArgs.from({ outputType: witness.toBytes() })); + +// Sign and send the transaction +const txHash = await signer.sendTransaction(tx); +console.log(`Transaction ${txHash} sent`); diff --git a/packages/examples/src/destroyDid.ts b/packages/examples/src/destroyDid.ts new file mode 100644 index 000000000..55f38b189 --- /dev/null +++ b/packages/examples/src/destroyDid.ts @@ -0,0 +1,31 @@ +import { ccc } from "@ckb-ccc/ccc"; +import { render, signer } from "@ckb-ccc/playground"; + +// === Create a did first === +// Check https://live.ckbccc.com/?src=https://raw.githubusercontent.com/ckb-devrel/ccc/refs/heads/master/packages/examples/src/createDid.ts for the full example +const { tx: createTx, id } = await ccc.didCkb.createDidCkb({ + signer, + data: { + value: { document: {} }, + }, +}); +await createTx.completeFeeBy(signer); +await render(createTx); +const createTxHash = await signer.sendTransaction(createTx); +console.log(`Transaction ${createTxHash} sent`); +// === Create a did first === + +// Construct destroy did tx +const { tx } = await ccc.didCkb.destroyDidCkb({ client: signer.client, id }); + +// Complete missing parts: Fill inputs +await tx.completeInputsByCapacity(signer); +await render(tx); + +// Complete missing parts: Pay fee +await tx.completeFeeBy(signer); +await render(tx); + +// Sign and send the transaction +const txHash = await signer.sendTransaction(tx); +console.log(`Transaction ${txHash} sent`); diff --git a/packages/examples/src/didHistory.ts b/packages/examples/src/didHistory.ts new file mode 100644 index 000000000..03132a1c9 --- /dev/null +++ b/packages/examples/src/didHistory.ts @@ -0,0 +1,26 @@ +import { ccc } from "@ckb-ccc/ccc"; +import { signer } from "@ckb-ccc/playground"; + +// Walk the cell chain for an existing did:ckb back to its genesis. Newest +// entry is first; the last entry is CREATE (fresh mint) or MIGRATE (did:plc +// import). +const did = "did:ckb:qq2m72a2vas4e5ovcpxoedscguuu4nba"; + +const history = await ccc.didCkb.getDidCkbHistory({ + client: signer.client, + id: did, +}); + +if (history.length === 0) { + console.log(`No history for ${did}; DID does not exist on this network.`); +} else { + console.log(`History of ${did}:`); + for (const entry of history) { + console.log( + ` [${entry.action}] tx=${entry.txHash} out=${entry.outputIndex} block=${entry.blockNumber ?? "?"}`, + ); + if (entry.data.value.localId) { + console.log(` localId: ${entry.data.value.localId}`); + } + } +} diff --git a/packages/examples/src/migrateDid.ts b/packages/examples/src/migrateDid.ts new file mode 100644 index 000000000..9d1a6055c --- /dev/null +++ b/packages/examples/src/migrateDid.ts @@ -0,0 +1,55 @@ +import { ccc } from "@ckb-ccc/ccc"; +import { render, signer } from "@ckb-ccc/playground"; + +// Import an existing did:plc into did:ckb. The on-chain contract requires a +// single PLC genesis operation in the witness plus a signature over the CKB +// transaction hash made by one of the genesis rotation keys. +const sourceDid = "did:plc:yunkr6vorfgzmvzeoofbkhq5"; +const rotationKeyIndex = 0; +const rotationPrivateKey = + "0x806d1925698097c64bc70f629e25b91b48a15eee4e492bb239402cee85356a10"; + +// Pull the genesis op from the public PLC directory. If you've already cached +// it locally, skip the fetch and pass the JSON object directly. +const log = await ccc.didCkb.plc.fetchPlcLog(sourceDid); +const genesisOperation = ccc.didCkb.plc.getGenesisOperation(log); + +// Quick sanity check before we burn capacity: does the private key match the +// rotation slot we intend to use? +const rotationKeys = ccc.didCkb.plc.getRotationKeys(genesisOperation); +const slot = rotationKeys[rotationKeyIndex]; +if ( + !ccc.didCkb.plc.verifyPrivateKeyMatch( + rotationPrivateKey, + slot.compressedPubkey, + slot.curve, + ) +) { + throw new Error( + `Private key does not match rotation key #${rotationKeyIndex} (${slot.curve})`, + ); +} + +// Build a create tx with localId stamped to sourceDid. +const { tx } = await ccc.didCkb.migrateDidCkb({ + signer, + sourceDid, + data: { value: { document: {} } }, +}); + +await tx.completeInputsByCapacity(signer); +await render(tx); +await tx.completeFeeBy(signer); +await render(tx); + +// Sign over the final tx hash and attach the migration witness on input 0. +const witness = ccc.didCkb.buildMigrationWitness({ + txHash: tx.hash(), + genesisOperation, + rotationKeyIndex, + rotationPrivateKey, +}); +tx.setWitnessArgsAt(0, ccc.WitnessArgs.from({ outputType: witness.toBytes() })); + +const txHash = await signer.sendTransaction(tx); +console.log(`Migration tx ${txHash} sent`); diff --git a/packages/examples/src/playground/index.d.ts b/packages/examples/src/playground/index.d.ts index fefc0e139..7a7873c29 100644 --- a/packages/examples/src/playground/index.d.ts +++ b/packages/examples/src/playground/index.d.ts @@ -1,5 +1,7 @@ import { ccc } from "@ckb-ccc/ccc"; +import * as bitcoinLib from "bitcoinjs-lib"; export function render(tx: ccc.Transaction): Promise; export const signer: ccc.Signer; export const client: ccc.Client; +export const bitcoin: typeof bitcoinLib; diff --git a/packages/examples/src/resolveDid.ts b/packages/examples/src/resolveDid.ts new file mode 100644 index 000000000..83190014b --- /dev/null +++ b/packages/examples/src/resolveDid.ts @@ -0,0 +1,33 @@ +import { ccc } from "@ckb-ccc/ccc"; +import { signer } from "@ckb-ccc/playground"; + +// Resolve a did:ckb identifier to its live cell + decoded document. +// Replace the value below with an existing identifier on whichever network +// the signer is configured for. +const did = "did:ckb:qq2m72a2vas4e5ovcpxoedscguuu4nba"; + +const record = await ccc.didCkb.resolveDidCkb({ + client: signer.client, + did, +}); +if (!record) { + console.log(`No live cell for ${did}`); +} else { + console.log(`Resolved ${record.did}`); + console.log(` Type ID args: ${record.id}`); + console.log(` Document:`, record.data.value.document); + if (record.data.value.localId) { + console.log(` Imported from: ${record.data.value.localId}`); + } +} + +// You can also enumerate every DID owned by an address. +const owner = (await signer.getRecommendedAddressObj()).script; +const owned = await ccc.didCkb.listDidCkbsByLock({ + client: signer.client, + lock: owner, +}); +console.log(`Address controls ${owned.length} DID(s):`); +for (const entry of owned) { + console.log(` ${entry.did}`); +} diff --git a/packages/examples/src/transferBtc.ts b/packages/examples/src/transferBtc.ts new file mode 100644 index 000000000..d40af0e60 --- /dev/null +++ b/packages/examples/src/transferBtc.ts @@ -0,0 +1,103 @@ +import { ccc } from "@ckb-ccc/ccc"; +import { bitcoin, signer } from "@ckb-ccc/playground"; + +// Supported wallets: Unisat, JoyID, Xverse +// Check if the current signer is also a Bitcoin signer +if (!(signer instanceof ccc.SignerBtc)) { + throw new Error("Signer is not a Bitcoin signer"); +} + +// Only support testnet for safety +if (signer.client.addressPrefix !== "ckt") { + throw new Error("Only supported on testnet"); +} + +// Xverse has deprecated Testnet3 support, so we default to Signet. Make sure to switch to Signet in Xverse's network settings. +const isXverse = signer instanceof ccc.Xverse.Signer; +const btcTestnetName = isXverse ? "signet" : "testnet"; + +const btcAddress = await signer.getBtcAccount(); +// Fetch UTXOs from mempool.space API +const utxos = (await fetch( + `https://mempool.space/${btcTestnetName}/api/address/${btcAddress}/utxo`, +).then((res) => { + if (!res.ok) { + throw new Error(`Failed to fetch UTXOs: ${res.status} ${res.statusText}`); + } + return res.json(); +})) as { value: number; txid: string; vout: number }[]; + +const DUST_LIMIT = 546; +const FEE_SATS = 200; + +// Select a UTXO above the 546 sat dust threshold +const selectedUtxo = utxos.find((utxo) => utxo.value > DUST_LIMIT + FEE_SATS); +if (!selectedUtxo) { + throw new Error("No UTXO available"); +} + +// Fetch the full transaction to get the scriptpubkey +const btcTx = (await fetch( + `https://mempool.space/${btcTestnetName}/api/tx/${selectedUtxo.txid}`, +).then((res) => { + if (!res.ok) { + throw new Error( + `Failed to fetch transaction: ${res.status} ${res.statusText}`, + ); + } + return res.json(); +})) as { + vout: { + value: number; + scriptpubkey: string; + scriptpubkey_type: string; + }[]; +}; +const vout = btcTx.vout[selectedUtxo.vout]; + +if (!vout || !vout.scriptpubkey) { + throw new Error("Invalid vout data"); +} + +// Build PSBT with the selected UTXO as input +const psbt = new bitcoin.Psbt({ + network: isXverse ? bitcoin.networks.testnet : bitcoin.networks.testnet, +}); +const input: { + hash: string; + index: number; + witnessUtxo: { + script: Uint8Array; + value: bigint; + }; + tapInternalKey?: Uint8Array; +} = { + hash: selectedUtxo.txid, + index: selectedUtxo.vout, + witnessUtxo: { + script: ccc.bytesFrom(vout.scriptpubkey), + value: BigInt(vout.value), + }, +}; + +// Handle Taproot (P2TR) specific input fields +if ( + vout.scriptpubkey_type === "v1_p2tr" || + vout.scriptpubkey_type === "witness_v1_taproot" +) { + input.tapInternalKey = ccc.bytesFrom(await signer.getBtcPublicKey()).slice(1); +} + +psbt.addInput(input); + +// Add a single output back to the same address minus a hardcoded 200 sat fee +psbt.addOutput({ + address: btcAddress, + value: BigInt(vout.value) - BigInt(FEE_SATS), +}); + +// Sign and broadcast the transaction +const txId = await signer.signAndBroadcastPsbt(psbt.toHex()); +console.log( + `View transaction: https://mempool.space/${btcTestnetName}/tx/${txId.slice(2)}`, +); diff --git a/packages/examples/src/transferDid.ts b/packages/examples/src/transferDid.ts new file mode 100644 index 000000000..90af8e3c6 --- /dev/null +++ b/packages/examples/src/transferDid.ts @@ -0,0 +1,47 @@ +import { ccc } from "@ckb-ccc/ccc"; +import { render, signer } from "@ckb-ccc/playground"; + +// === Create a did first === +// Check https://live.ckbccc.com/?src=https://raw.githubusercontent.com/ckb-devrel/ccc/refs/heads/master/packages/examples/src/createDid.ts for the full example +const { tx: createTx, id } = await ccc.didCkb.createDidCkb({ + signer, + data: { + value: { document: {} }, + }, +}); +await createTx.completeFeeBy(signer); +await render(createTx); +const createTxHash = await signer.sendTransaction(createTx); +console.log(`Transaction ${createTxHash} sent`); +// === Create a did first === + +// The receiver is the signer itself on mainnet +const receiver = (await signer.getRecommendedAddressObj()).script; +console.log(receiver); + +// Construct transfer did tx +const { tx } = await ccc.didCkb.transferDidCkb({ + client: signer.client, + id, + receiver, + data: (_, data) => { + if (!data) { + throw Error("Unknown error"); + } + + (data.value.document as Record)["foo"] = "bar"; + return data; + }, +}); + +// Complete missing parts: Fill inputs +await tx.completeInputsByCapacity(signer); +await render(tx); + +// Complete missing parts: Pay fee +await tx.completeFeeBy(signer); +await render(tx); + +// Sign and send the transaction +const txHash = await signer.sendTransaction(tx); +console.log(`Transaction ${txHash} sent`); diff --git a/packages/examples/tsconfig.base.json b/packages/examples/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/examples/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/examples/tsconfig.commonjs.json b/packages/examples/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/examples/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/examples/tsconfig.json b/packages/examples/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/examples/tsconfig.json +++ b/packages/examples/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/examples/tsdown.config.mts b/packages/examples/tsdown.config.mts new file mode 100644 index 000000000..f654b7890 --- /dev/null +++ b/packages/examples/tsdown.config.mts @@ -0,0 +1,21 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: false, + platform: "neutral" as const, + sourcemap: false, + exports: false, +}; + +const entry = "src/*.ts" as const; + +export default defineConfig({ + ...common, + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", +}); diff --git a/packages/faucet/package.json b/packages/faucet/package.json index d35e420d2..5c012a93e 100644 --- a/packages/faucet/package.json +++ b/packages/faucet/package.json @@ -88,5 +88,5 @@ "^@app/commons(|/.*)$": "/libs/commons/src/$1" } }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/joy-id/CHANGELOG.md b/packages/joy-id/CHANGELOG.md index 08e97fb14..35b8ac46f 100644 --- a/packages/joy-id/CHANGELOG.md +++ b/packages/joy-id/CHANGELOG.md @@ -1,5 +1,34 @@ # @ckb-ccc/joy-id +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 1.0.33 +### Patch Changes + + + +- [#346](https://github.com/ckb-devrel/ccc/pull/346) [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72) Thanks [@fghdotio](https://github.com/fghdotio)! - feat(core): add BTC PSBT signing support + + - Add `SignerBtc.signPsbt()`, `signAndBroadcastPsbt()`, and `broadcastPsbt()` for signing and broadcasting PSBTs + - Add `SignPsbtOptions` and `InputToSign` for configuring PSBT signing + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 1.0.32 ### Patch Changes diff --git a/packages/joy-id/package.json b/packages/joy-id/package.json index 2d60d5b2f..259117b40 100644 --- a/packages/joy-id/package.json +++ b/packages/joy-id/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/joy-id", - "version": "1.0.32", + "version": "1.1.0", "description": "Connector's support for JoyID", "author": "Hanssen0 ", "license": "MIT", @@ -11,39 +11,51 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" - } + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" + }, + "./advanced": { + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" + }, + "./advancedBarrel": { + "import": "./dist/advancedBarrel.mjs", + "require": "./dist.commonjs/advancedBarrel.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { "@ckb-ccc/core": "workspace:*", - "@joyid/ckb": "^1.1.2", - "@joyid/common": "^0.2.1" + "@joyid/ckb": "^1.1.4", + "@joyid/common": "^0.2.2", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/joy-id/src/btc/index.ts b/packages/joy-id/src/btc/index.ts index 4a1e92fad..629ea7dc8 100644 --- a/packages/joy-id/src/btc/index.ts +++ b/packages/joy-id/src/btc/index.ts @@ -198,4 +198,80 @@ export class BitcoinSigner extends ccc.SignerBtc { ); return signature; } + + /** + * Signs a PSBT using JoyID wallet. + * + * @param psbtHex - The hex string of PSBT to sign. + * @returns A promise that resolves to the signed PSBT as a Hex string. + */ + async signPsbt( + psbtHex: ccc.HexLike, + options?: ccc.SignPsbtOptionsLike, + ): Promise { + const { address } = await this.assertConnection(); + const formattedOptions = ccc.SignPsbtOptions.from(options); + + const config = this.getConfig(); + const { tx: signedPsbtHex } = await createPopup( + buildJoyIDURL( + { + ...config, + tx: ccc.hexFrom(psbtHex).slice(2), + options: formattedOptions, + signerAddress: address, + autoFinalized: formattedOptions.autoFinalized, + }, + "popup", + "/sign-psbt", + ), + { ...config, type: DappRequestType.SignPsbt }, + ); + + return ccc.hexFrom(signedPsbtHex); + } + + /** + * Broadcasts a PSBT to the Bitcoin network. + * + * @remarks + * JoyID does not support broadcasting a signed PSBT directly. + * It only supports "Sign and Broadcast" as a single atomic operation via `signAndBroadcastPsbt`. + */ + async broadcastPsbt( + _psbtHex: ccc.HexLike, + _options?: ccc.SignPsbtOptionsLike, + ): Promise { + throw new Error( + "JoyID does not support broadcasting signed PSBTs directly. Use signAndBroadcastPsbt instead.", + ); + } + + async signAndBroadcastPsbt( + psbtHex: ccc.HexLike, + options?: ccc.SignPsbtOptionsLike, + ): Promise { + const { address } = await this.assertConnection(); + const formattedOptions = ccc.SignPsbtOptions.from(options); + + const config = this.getConfig(); + // ccc.hexFrom adds 0x prefix, but BTC expects non-0x + const { tx: txid } = await createPopup( + buildJoyIDURL( + { + ...config, + tx: ccc.hexFrom(psbtHex).slice(2), + options: formattedOptions, + signerAddress: address, + autoFinalized: true, // sendPsbt always finalizes + isSend: true, + }, + "popup", + "/sign-psbt", + ), + { ...config, type: DappRequestType.SignPsbt }, // Use SignPsbt type for both operations + ); + + return ccc.hexFrom(txid); + } } diff --git a/packages/joy-id/tsconfig.base.json b/packages/joy-id/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/joy-id/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/joy-id/tsconfig.commonjs.json b/packages/joy-id/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/joy-id/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/joy-id/tsconfig.json b/packages/joy-id/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/joy-id/tsconfig.json +++ b/packages/joy-id/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/joy-id/tsdown.config.mts b/packages/joy-id/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/packages/joy-id/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/lumos-patches/CHANGELOG.md b/packages/lumos-patches/CHANGELOG.md index be15c1dda..db89bfe3f 100644 --- a/packages/lumos-patches/CHANGELOG.md +++ b/packages/lumos-patches/CHANGELOG.md @@ -1,5 +1,28 @@ # @ckb-ccc/lumos-patches +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 1.0.33 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 1.0.32 ### Patch Changes diff --git a/packages/lumos-patches/package.json b/packages/lumos-patches/package.json index add2ad7d1..cc89cda72 100644 --- a/packages/lumos-patches/package.json +++ b/packages/lumos-patches/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/lumos-patches", - "version": "1.0.32", + "version": "1.1.0", "description": "Patches for using Lumos with CCC", "author": "Hanssen0 ", "license": "MIT", @@ -11,31 +11,29 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" - } + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" @@ -47,7 +45,9 @@ "@ckb-lumos/common-scripts": "0.24.0-next.2", "@ckb-lumos/config-manager": "0.24.0-next.2", "@ckb-lumos/helpers": "0.24.0-next.2", - "@joyid/ckb": "^1.1.2" + "@joyid/ckb": "^1.1.4", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/lumos-patches/tsconfig.base.json b/packages/lumos-patches/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/lumos-patches/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/lumos-patches/tsconfig.commonjs.json b/packages/lumos-patches/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/lumos-patches/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/lumos-patches/tsconfig.json b/packages/lumos-patches/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/lumos-patches/tsconfig.json +++ b/packages/lumos-patches/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/lumos-patches/tsdown.config.mts b/packages/lumos-patches/tsdown.config.mts new file mode 100644 index 000000000..bc46723c0 --- /dev/null +++ b/packages/lumos-patches/tsdown.config.mts @@ -0,0 +1,40 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/nip07/CHANGELOG.md b/packages/nip07/CHANGELOG.md index ed235f187..f99e8baf8 100644 --- a/packages/nip07/CHANGELOG.md +++ b/packages/nip07/CHANGELOG.md @@ -1,5 +1,28 @@ # @ckb-ccc/nip07 +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 1.0.33 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 1.0.32 ### Patch Changes diff --git a/packages/nip07/package.json b/packages/nip07/package.json index 43ae15980..769581e0f 100644 --- a/packages/nip07/package.json +++ b/packages/nip07/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/nip07", - "version": "1.0.32", + "version": "1.1.0", "description": "CCC - CKBer's Codebase. Common Chains Connector's support for NIP07", "author": "Hanssen0 ", "license": "MIT", @@ -11,42 +11,45 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, "./advanced": { - "import": "./dist/advanced.js", - "require": "./dist.commonjs/advanced.js", - "default": "./dist.commonjs/advanced.js" - } + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { - "@ckb-ccc/core": "workspace:*" + "@ckb-ccc/core": "workspace:*", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/nip07/tsconfig.base.json b/packages/nip07/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/nip07/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/nip07/tsconfig.commonjs.json b/packages/nip07/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/nip07/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/nip07/tsconfig.json b/packages/nip07/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/nip07/tsconfig.json +++ b/packages/nip07/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/nip07/tsdown.config.mts b/packages/nip07/tsdown.config.mts new file mode 100644 index 000000000..c7a5622fb --- /dev/null +++ b/packages/nip07/tsdown.config.mts @@ -0,0 +1,42 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/okx/CHANGELOG.md b/packages/okx/CHANGELOG.md index 2bb5ea4b4..e7d54c2b7 100644 --- a/packages/okx/CHANGELOG.md +++ b/packages/okx/CHANGELOG.md @@ -1,5 +1,38 @@ # @ckb-ccc/okx +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/uni-sat@1.1.0 + - @ckb-ccc/nip07@1.1.0 + - @ckb-ccc/core@1.14.0 + +## 1.0.33 +### Patch Changes + + + +- [#346](https://github.com/ckb-devrel/ccc/pull/346) [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72) Thanks [@fghdotio](https://github.com/fghdotio)! - feat(core): add BTC PSBT signing support + + - Add `SignerBtc.signPsbt()`, `signAndBroadcastPsbt()`, and `broadcastPsbt()` for signing and broadcasting PSBTs + - Add `SignPsbtOptions` and `InputToSign` for configuring PSBT signing + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + - @ckb-ccc/uni-sat@1.0.33 + - @ckb-ccc/nip07@1.0.33 + ## 1.0.32 ### Patch Changes diff --git a/packages/okx/package.json b/packages/okx/package.json index 0860b8d09..647d2b64c 100644 --- a/packages/okx/package.json +++ b/packages/okx/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/okx", - "version": "1.0.32", + "version": "1.1.0", "description": "CCC - CKBer's Codebase. Common Chains Connector's support for OKX", "author": "Hanssen0 ", "license": "MIT", @@ -11,36 +11,41 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, "./advanced": { - "import": "./dist/advanced.js", - "require": "./dist.commonjs/advanced.js", - "default": "./dist.commonjs/advanced.js" - } + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" + }, + "./advancedBarrel": { + "import": "./dist/advancedBarrel.mjs", + "require": "./dist.commonjs/advancedBarrel.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" @@ -48,7 +53,9 @@ "dependencies": { "@ckb-ccc/core": "workspace:*", "@ckb-ccc/nip07": "workspace:*", - "@ckb-ccc/uni-sat": "workspace:*" + "@ckb-ccc/uni-sat": "workspace:*", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/okx/src/advancedBarrel.ts b/packages/okx/src/advancedBarrel.ts index 4704b662f..e572a1818 100644 --- a/packages/okx/src/advancedBarrel.ts +++ b/packages/okx/src/advancedBarrel.ts @@ -2,8 +2,22 @@ import { Nip07A } from "@ckb-ccc/nip07/advanced"; import { UniSatA } from "@ckb-ccc/uni-sat/advanced"; export interface BitcoinProvider - extends Pick, - Partial> { + extends + Pick< + UniSatA.Provider, + "on" | "removeListener" | "signMessage" | "signPsbt" | "pushPsbt" + >, + Partial< + Omit< + UniSatA.Provider, + | "on" + | "removeListener" + | "signMessage" + | "signPsbt" + | "pushPsbt" + | "pushTx" + > + > { connect?(): Promise<{ address: string; publicKey: string; diff --git a/packages/okx/src/btc/index.ts b/packages/okx/src/btc/index.ts index c35b9a480..3fe40bed9 100644 --- a/packages/okx/src/btc/index.ts +++ b/packages/okx/src/btc/index.ts @@ -176,4 +176,34 @@ export class BitcoinSigner extends ccc.SignerBtc { return this.provider.signMessage(challenge, "ecdsa"); } + + /** + * Signs a PSBT using OKX wallet. + * + * @param psbtHex - The hex string of PSBT to sign. + * @param options - Options for signing the PSBT + * @returns A promise that resolves to the signed PSBT as a Hex string + */ + async signPsbt( + psbtHex: ccc.HexLike, + options?: ccc.SignPsbtOptionsLike, + ): Promise { + return ccc.hexFrom( + await this.provider.signPsbt(ccc.hexFrom(psbtHex).slice(2), options), + ); + } + + /** + * Broadcasts a signed PSBT to the Bitcoin network. + * + * @param psbtHex - The hex string of signed PSBT to broadcast. + * @returns A promise that resolves to the transaction ID as a Hex string + */ + async broadcastPsbt( + psbtHex: ccc.HexLike, + _options?: ccc.SignPsbtOptionsLike, + ): Promise { + const txid = await this.provider.pushPsbt(ccc.hexFrom(psbtHex).slice(2)); + return ccc.hexFrom(txid); + } } diff --git a/packages/okx/tsconfig.base.json b/packages/okx/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/okx/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/okx/tsconfig.commonjs.json b/packages/okx/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/okx/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/okx/tsconfig.json b/packages/okx/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/okx/tsconfig.json +++ b/packages/okx/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/okx/tsdown.config.mts b/packages/okx/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/packages/okx/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/playground/next.config.mjs b/packages/playground/next.config.mjs index ea5cd9ba5..ded43ebc7 100644 --- a/packages/playground/next.config.mjs +++ b/packages/playground/next.config.mjs @@ -6,6 +6,10 @@ const nextConfig = { loaders: ["raw-loader"], as: "*.mjs", }, + "*.d.mts": { + loaders: ["raw-loader"], + as: "*.mjs", + }, }, }, }; diff --git a/packages/playground/package.json b/packages/playground/package.json index f3c5e4256..791aed56a 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -11,16 +11,18 @@ "format": "prettier --write ./src" }, "dependencies": { + "@bitcoinerlab/secp256k1": "^1.2.0", "@ckb-ccc/ccc": "workspace:*", "@ckb-ccc/connector-react": "workspace:*", "@monaco-editor/react": "^4.7.0", "@nervina-labs/dob-render": "^0.2.5", "@next/third-parties": "^15.5.2", - "@noble/curves": "^1.9.7", - "@noble/hashes": "^1.8.0", + "@noble/curves": "^2.2.0", + "@noble/hashes": "^2.2.0", "@shikijs/monaco": "^3.12.0", "axios": "^1.11.0", "bech32": "^2.0.0", + "bitcoinjs-lib": "^7.0.0", "isomorphic-ws": "^5.0.0", "lucide-react": "^0.542.0", "monaco-editor": "^0.52.2", @@ -48,5 +50,5 @@ "raw-loader": "^4.0.2", "tailwindcss": "^4.1.12" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/playground/src/app/components/Editor.tsx b/packages/playground/src/app/components/Editor.tsx index 4bd227fb7..5da1dbd9e 100644 --- a/packages/playground/src/app/components/Editor.tsx +++ b/packages/playground/src/app/components/Editor.tsx @@ -5,12 +5,14 @@ import { editor } from "monaco-editor"; import { useEffect, useRef, useState } from "react"; import { createHighlighter } from "shiki"; +const COMMON_REGEX = /^\.\/(.*\.d\.ts|.*\.d\.mts|package.json)$/; + const EXTRA_SOURCES = [ { files: require.context( "../../../node_modules/@types/react", true, - /^\.\/(.*\.d\.ts|package.json)$/, + COMMON_REGEX, ), name: "@types/react", }, @@ -18,7 +20,7 @@ const EXTRA_SOURCES = [ files: require.context( "../../../../", true, - /^\.\/[^\/]*\/(dist\.commonjs\/.*\.d\.ts|package.json)$/, + /^\.\/[^\/]*\/(dist\/(.*\.d\.ts|.*\.d\.mts)|package.json)$/, ), name: "@ckb-ccc", }, @@ -26,7 +28,7 @@ const EXTRA_SOURCES = [ files: require.context( "../../../node_modules/@nervina-labs/dob-render", true, - /^\.\/(.*\.d\.ts|package.json)$/, + COMMON_REGEX, ), name: "@nervina-labs/dob-render", }, @@ -34,7 +36,7 @@ const EXTRA_SOURCES = [ files: require.context( "../../../node_modules/@noble/hashes", true, - /^\.\/(.*\.d\.ts|package.json)$/, + COMMON_REGEX, ), name: "@noble/hashes", }, @@ -42,7 +44,7 @@ const EXTRA_SOURCES = [ files: require.context( "../../../node_modules/@noble/curves", true, - /^\.\/(.*\.d\.ts|package.json)$/, + COMMON_REGEX, ), name: "@noble/curves", }, @@ -129,7 +131,7 @@ export function Editor({ ...monaco.languages.typescript.typescriptDefaults.getCompilerOptions(), module: monaco.languages.typescript.ModuleKind.ESNext, // eslint-disable-next-line @typescript-eslint/no-explicit-any - moduleResolution: 99 as any, // NodeNext + moduleResolution: 100 as any, // Bundler noImplicitAny: true, strictNullChecks: true, jsx: monaco.languages.typescript.JsxEmit.ReactJSX, @@ -157,7 +159,7 @@ export function Editor({ }); monaco.languages.typescript.typescriptDefaults.addExtraLib( - "import { ccc } from '@ckb-ccc/core'; export function render(...msgs: unknown[]): Promise; export const signer: ccc.Signer; export const client: ccc.Client;", + "import { ccc } from '@ckb-ccc/core'; import * as bitcoin from 'bitcoinjs-lib'; export { bitcoin }; export function render(...msgs: unknown[]): Promise; export const signer: ccc.Signer; export const client: ccc.Client;", "file:///node_modules/@ckb-ccc/playground/index.d.ts", ); monaco.languages.typescript.typescriptDefaults.addExtraLib( diff --git a/packages/playground/src/app/execute/index.tsx b/packages/playground/src/app/execute/index.tsx index cd081999c..7118da37d 100644 --- a/packages/playground/src/app/execute/index.tsx +++ b/packages/playground/src/app/execute/index.tsx @@ -1,5 +1,12 @@ +import * as ecc from "@bitcoinerlab/secp256k1"; import { ccc } from "@ckb-ccc/connector-react"; +import * as bitcoin from "bitcoinjs-lib"; import * as React from "react"; + +// Initialize the ECC library for bitcoinjs-lib to support Schnorr signatures (Taproot). +// This must be done once globally before any PSBT operations. +bitcoin.initEccLib(ecc); + import ts from "typescript"; import { formatTimestamp } from "../utils"; import { vlqDecode } from "./vlq"; @@ -8,8 +15,8 @@ const LIBS_MAP_ = new Map(); const LIBS = await Promise.all( ( [ - ["@noble/curves/secp256k1"], - ["@noble/hashes/sha2"], + ["@noble/curves/secp256k1.js"], + ["@noble/hashes/sha2.js"], ["@ckb-ccc/ccc", "@ckb-ccc/core"], ["@ckb-ccc/ccc/advanced", "@ckb-ccc/core/advanced"], ["@nervina-labs/dob-render"], @@ -107,6 +114,7 @@ export async function execute( }, signer, client: signer.client, + bitcoin, }; } diff --git a/packages/rei/CHANGELOG.md b/packages/rei/CHANGELOG.md index 06a0540c8..1fe1921d9 100644 --- a/packages/rei/CHANGELOG.md +++ b/packages/rei/CHANGELOG.md @@ -1,5 +1,28 @@ # @ckb-ccc/rei +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 1.0.33 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 1.0.32 ### Patch Changes diff --git a/packages/rei/package.json b/packages/rei/package.json index 064154f9f..4e814e25b 100644 --- a/packages/rei/package.json +++ b/packages/rei/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/rei", - "version": "1.0.32", + "version": "1.1.0", "description": "CCC - CKBer's Codebase. Common Chains Connector's support for Rei", "license": "MIT", "private": false, @@ -10,52 +10,49 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" - }, - "./barrel": { - "import": "./dist/barrel.js", - "require": "./dist.commonjs/barrel.js", - "default": "./dist.commonjs/barrel.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, "./advanced": { - "import": "./dist/advanced.js", - "require": "./dist.commonjs/advanced.js", - "default": "./dist.commonjs/advanced.js" + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" }, "./advancedBarrel": { - "import": "./dist/advancedBarrel.js", - "require": "./dist.commonjs/advancedBarrel.js", - "default": "./dist.commonjs/advancedBarrel.js" - } + "import": "./dist/advancedBarrel.mjs", + "require": "./dist.commonjs/advancedBarrel.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { - "@ckb-ccc/core": "workspace:*" + "@ckb-ccc/core": "workspace:*", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/rei/tsconfig.base.json b/packages/rei/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/rei/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/rei/tsconfig.commonjs.json b/packages/rei/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/rei/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/rei/tsconfig.json b/packages/rei/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/rei/tsconfig.json +++ b/packages/rei/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/rei/tsdown.config.mts b/packages/rei/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/packages/rei/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/shell/CHANGELOG.md b/packages/shell/CHANGELOG.md index d852be1cb..f1c5798cc 100644 --- a/packages/shell/CHANGELOG.md +++ b/packages/shell/CHANGELOG.md @@ -1,5 +1,49 @@ # @ckb-ccc/shell +## 1.3.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/did-ckb@0.2.0 + - @ckb-ccc/type-id@0.1.0 + - @ckb-ccc/spore@1.6.0 + - @ckb-ccc/core@1.14.0 + - @ckb-ccc/ssri@0.3.0 + - @ckb-ccc/udt@0.2.0 + +## 1.2.0 +### Minor Changes + + + +- [#337](https://github.com/ckb-devrel/ccc/pull/337) [`3bd5130`](https://github.com/ckb-devrel/ccc/commit/3bd51300d9602482dd781752f618f6cfd642675c) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat(type-id): add type-id package for Type ID operations + + + +- [#337](https://github.com/ckb-devrel/ccc/pull/337) [`0366786`](https://github.com/ckb-devrel/ccc/commit/03667865d1bc6d091d9144d39f6b434abe4ce18b) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat(did-ckb): add did-ckb package for basic did operations + + +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`ce2b005`](https://github.com/ckb-devrel/ccc/commit/ce2b005b2c20bdd8736f78e7f286b8acb40e80e5), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`3bd5130`](https://github.com/ckb-devrel/ccc/commit/3bd51300d9602482dd781752f618f6cfd642675c), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`0366786`](https://github.com/ckb-devrel/ccc/commit/03667865d1bc6d091d9144d39f6b434abe4ce18b), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + - @ckb-ccc/did-ckb@0.1.0 + - @ckb-ccc/type-id@0.0.1 + - @ckb-ccc/spore@1.5.18 + - @ckb-ccc/ssri@0.2.23 + - @ckb-ccc/udt@0.1.25 + ## 1.1.25 ### Patch Changes diff --git a/packages/shell/package.json b/packages/shell/package.json index 15cec191e..f76740c7d 100644 --- a/packages/shell/package.json +++ b/packages/shell/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/shell", - "version": "1.1.25", + "version": "1.3.0", "description": "Backend Shell of CCC - CKBer's Codebase. Common Chains Connector.", "author": "Hanssen0 ", "license": "MIT", @@ -36,30 +36,31 @@ } }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", + "@eslint/js": "^10.0.1", "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { "@ckb-ccc/core": "workspace:*", + "@ckb-ccc/did-ckb": "workspace:*", "@ckb-ccc/spore": "workspace:*", "@ckb-ccc/ssri": "workspace:*", + "@ckb-ccc/type-id": "workspace:*", "@ckb-ccc/udt": "workspace:*" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0" } diff --git a/packages/shell/src/advancedBarrel.ts b/packages/shell/src/advancedBarrel.ts index ec239348c..f2a60e5b7 100644 --- a/packages/shell/src/advancedBarrel.ts +++ b/packages/shell/src/advancedBarrel.ts @@ -1,2 +1,3 @@ export * from "@ckb-ccc/core/advancedBarrel"; export { sporeA } from "@ckb-ccc/spore/advanced"; +export { typeIdA } from "@ckb-ccc/type-id/advanced"; diff --git a/packages/shell/src/barrel.ts b/packages/shell/src/barrel.ts index 9cca15d65..e9d7adb7a 100644 --- a/packages/shell/src/barrel.ts +++ b/packages/shell/src/barrel.ts @@ -1,4 +1,6 @@ export * from "@ckb-ccc/core/barrel"; +export { didCkb } from "@ckb-ccc/did-ckb"; export { spore } from "@ckb-ccc/spore"; export { ssri } from "@ckb-ccc/ssri"; +export { typeId } from "@ckb-ccc/type-id"; export { udt } from "@ckb-ccc/udt"; diff --git a/packages/shell/tsconfig.base.json b/packages/shell/tsconfig.base.json index 7e5ac952b..246eb012d 100644 --- a/packages/shell/tsconfig.base.json +++ b/packages/shell/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2020", + "target": "es2022", "incremental": true, "allowJs": true, "importHelpers": false, @@ -16,7 +16,8 @@ "alwaysStrict": true, "noFallthroughCasesInSwitch": true, "forceConsistentCasingInFileNames": true, - "skipLibCheck": true + "skipLibCheck": true, + "rootDir": "./src" }, "include": ["src/**/*"] } diff --git a/packages/spore/CHANGELOG.md b/packages/spore/CHANGELOG.md index a08014292..10e47891a 100644 --- a/packages/spore/CHANGELOG.md +++ b/packages/spore/CHANGELOG.md @@ -1,5 +1,28 @@ # @ckb-ccc/spore +## 1.6.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 1.5.18 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 1.5.17 ### Patch Changes diff --git a/packages/spore/src/__examples__/createDobCluster.test.ts b/packages/spore/__examples__/createDobCluster.test.ts similarity index 100% rename from packages/spore/src/__examples__/createDobCluster.test.ts rename to packages/spore/__examples__/createDobCluster.test.ts diff --git a/packages/spore/src/__examples__/createDobSpore.test.ts b/packages/spore/__examples__/createDobSpore.test.ts similarity index 97% rename from packages/spore/src/__examples__/createDobSpore.test.ts rename to packages/spore/__examples__/createDobSpore.test.ts index 64f576c42..7855fe5cc 100644 --- a/packages/spore/src/__examples__/createDobSpore.test.ts +++ b/packages/spore/__examples__/createDobSpore.test.ts @@ -1,7 +1,7 @@ import { ccc } from "@ckb-ccc/core"; import { JsonRpcTransformers } from "@ckb-ccc/core/advanced"; import { describe, expect, it } from "vitest"; -import { createSpore } from "../index.js"; +import { createSpore } from "../src/index.js"; describe("createSpore [testnet]", () => { expect(process.env.PRIVATE_KEY).toBeDefined(); diff --git a/packages/spore/src/__examples__/createSporeWithoutCluster.test.ts b/packages/spore/__examples__/createSporeWithoutCluster.test.ts similarity index 100% rename from packages/spore/src/__examples__/createSporeWithoutCluster.test.ts rename to packages/spore/__examples__/createSporeWithoutCluster.test.ts diff --git a/packages/spore/src/__examples__/decodeDob.test.ts b/packages/spore/__examples__/decodeDob.test.ts similarity index 100% rename from packages/spore/src/__examples__/decodeDob.test.ts rename to packages/spore/__examples__/decodeDob.test.ts diff --git a/packages/spore/src/__examples__/meltSpore.test.ts b/packages/spore/__examples__/meltSpore.test.ts similarity index 100% rename from packages/spore/src/__examples__/meltSpore.test.ts rename to packages/spore/__examples__/meltSpore.test.ts diff --git a/packages/spore/src/__examples__/meltThenCreateSpore.test.ts b/packages/spore/__examples__/meltThenCreateSpore.test.ts similarity index 100% rename from packages/spore/src/__examples__/meltThenCreateSpore.test.ts rename to packages/spore/__examples__/meltThenCreateSpore.test.ts diff --git a/packages/spore/src/__examples__/searchClusters.test.ts b/packages/spore/__examples__/searchClusters.test.ts similarity index 100% rename from packages/spore/src/__examples__/searchClusters.test.ts rename to packages/spore/__examples__/searchClusters.test.ts diff --git a/packages/spore/src/__examples__/searchSpores.test.ts b/packages/spore/__examples__/searchSpores.test.ts similarity index 100% rename from packages/spore/src/__examples__/searchSpores.test.ts rename to packages/spore/__examples__/searchSpores.test.ts diff --git a/packages/spore/src/__examples__/transferCluster.test.ts b/packages/spore/__examples__/transferCluster.test.ts similarity index 100% rename from packages/spore/src/__examples__/transferCluster.test.ts rename to packages/spore/__examples__/transferCluster.test.ts diff --git a/packages/spore/src/__examples__/transferSpore.test.ts b/packages/spore/__examples__/transferSpore.test.ts similarity index 100% rename from packages/spore/src/__examples__/transferSpore.test.ts rename to packages/spore/__examples__/transferSpore.test.ts diff --git a/packages/spore/package.json b/packages/spore/package.json index d5609aec4..45d02efd2 100644 --- a/packages/spore/package.json +++ b/packages/spore/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/spore", - "version": "1.5.17", + "version": "1.6.0", "description": "CCC - CKBer's Codebase. Common Chains Connector's support for Spore protocol", "author": "ashuralyk ", "license": "MIT", @@ -11,56 +11,53 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" - }, - "./barrel": { - "import": "./dist/barrel.js", - "require": "./dist.commonjs/barrel.js", - "default": "./dist.commonjs/barrel.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, "./advanced": { - "import": "./dist/advanced.js", - "require": "./dist.commonjs/advanced.js", - "default": "./dist.commonjs/advanced.js" + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" }, "./advancedBarrel": { - "import": "./dist/advancedBarrel.js", - "require": "./dist.commonjs/advancedBarrel.js", - "default": "./dist.commonjs/advancedBarrel.js" - } + "import": "./dist/advancedBarrel.mjs", + "require": "./dist.commonjs/advancedBarrel.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "@types/node": "^24.3.0", - "copyfiles": "^2.4.1", - "dotenv": "^17.2.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "@types/node": "^26.0.0", + "dotenv": "^17.4.2", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0", - "vitest": "^3.2.4" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1", + "vitest": "^4.1.9" }, "publishConfig": { "access": "public" }, "dependencies": { "@ckb-ccc/core": "workspace:*", - "axios": "^1.11.0" + "axios": "^1.18.0", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/spore/src/cobuild/index.ts b/packages/spore/src/cobuild/index.ts index c1c5b52b8..4437f56d2 100644 --- a/packages/spore/src/cobuild/index.ts +++ b/packages/spore/src/cobuild/index.ts @@ -1,4 +1,4 @@ -import { ccc, mol } from "@ckb-ccc/core"; +import { ccc } from "@ckb-ccc/core"; import { Action, ActionVec, @@ -11,7 +11,7 @@ export function assembleCreateSporeAction( sporeOutput: ccc.CellOutputLike, sporeData: ccc.BytesLike, scriptInfoHash: ccc.HexLike = DEFAULT_COBUILD_INFO_HASH, -): mol.EncodableType { +): ccc.EncodableType { if (!sporeOutput.type) { throw new Error("Spore cell must have a type script"); } @@ -39,7 +39,7 @@ export function assembleTransferSporeAction( sporeInput: ccc.CellOutputLike, sporeOutput: ccc.CellOutputLike, scriptInfoHash: ccc.HexLike = DEFAULT_COBUILD_INFO_HASH, -): mol.EncodableType { +): ccc.EncodableType { if (!sporeInput.type || !sporeOutput.type) { throw new Error("Spore cell must have a type script"); } @@ -70,7 +70,7 @@ export function assembleTransferSporeAction( export function assembleMeltSporeAction( sporeInput: ccc.CellOutputLike, scriptInfoHash: ccc.HexLike = DEFAULT_COBUILD_INFO_HASH, -): mol.EncodableType { +): ccc.EncodableType { if (!sporeInput.type) { throw new Error("Spore cell must have a type script"); } @@ -97,7 +97,7 @@ export function assembleCreateClusterAction( clusterOutput: ccc.CellOutputLike, clusterData: ccc.BytesLike, scriptInfoHash: ccc.HexLike = DEFAULT_COBUILD_INFO_HASH, -): mol.EncodableType { +): ccc.EncodableType { if (!clusterOutput.type) { throw new Error("Cluster cell must have a type script"); } @@ -125,7 +125,7 @@ export function assembleTransferClusterAction( clusterInput: ccc.CellOutputLike, clusterOutput: ccc.CellOutputLike, scriptInfoHash: ccc.HexLike = DEFAULT_COBUILD_INFO_HASH, -): mol.EncodableType { +): ccc.EncodableType { if (!clusterInput.type || !clusterOutput.type) { throw new Error("Cluster cell must have a type script"); } @@ -155,7 +155,7 @@ export function assembleTransferClusterAction( export async function prepareSporeTransaction( signer: ccc.Signer, txLike: ccc.TransactionLike, - actions: mol.EncodableType, + actions: ccc.EncodableType, ): Promise { let tx = ccc.Transaction.from(txLike); @@ -171,7 +171,7 @@ export async function prepareSporeTransaction( export function unpackCommonCobuildProof( data: ccc.HexLike, -): mol.EncodableType | undefined { +): ccc.EncodableType | undefined { try { return WitnessLayout.decode(ccc.bytesFrom(data)); } catch { @@ -181,7 +181,7 @@ export function unpackCommonCobuildProof( export function extractCobuildActionsFromTx( tx: ccc.Transaction, -): mol.EncodableType { +): ccc.EncodableType { if (tx.witnesses.length === 0) { return []; } @@ -202,7 +202,7 @@ export function extractCobuildActionsFromTx( export function injectCobuild( tx: ccc.Transaction, - actions: mol.EncodableType, + actions: ccc.EncodableType, ): void { tx.setWitnessAt( Math.max(tx.witnesses.length, tx.inputs.length), diff --git a/packages/spore/src/codec/cluster.ts b/packages/spore/src/codec/cluster.ts index e8f7e6367..cc9dc7b44 100644 --- a/packages/spore/src/codec/cluster.ts +++ b/packages/spore/src/codec/cluster.ts @@ -5,7 +5,7 @@ export interface ClusterDataV1View { description: string; } -export const ClusterDataV1: mol.Codec = mol.table({ +export const ClusterDataV1: ccc.Codec = mol.table({ name: mol.String, description: mol.String, }); @@ -16,7 +16,7 @@ export interface ClusterDataV2View { mutantId?: ccc.HexLike; } -export const ClusterDataV2: mol.Codec = mol.table({ +export const ClusterDataV2: ccc.Codec = mol.table({ name: mol.String, description: mol.String, mutantId: mol.BytesOpt, diff --git a/packages/spore/src/codec/spore.ts b/packages/spore/src/codec/spore.ts index 4f41555cc..4f1ebef32 100644 --- a/packages/spore/src/codec/spore.ts +++ b/packages/spore/src/codec/spore.ts @@ -6,7 +6,7 @@ export interface SporeDataView { clusterId?: ccc.HexLike; } -export const SporeData: mol.Codec = mol.table({ +export const SporeData: ccc.Codec = mol.table({ contentType: mol.String, content: mol.Bytes, clusterId: mol.BytesOpt, diff --git a/packages/spore/src/spore/advanced.ts b/packages/spore/src/spore/advanced.ts index 23aa84aa1..e83c0dc84 100644 --- a/packages/spore/src/spore/advanced.ts +++ b/packages/spore/src/spore/advanced.ts @@ -1,4 +1,4 @@ -import { ccc, mol } from "@ckb-ccc/core"; +import { ccc } from "@ckb-ccc/core"; import { assembleTransferClusterAction } from "../advanced.js"; import { assertCluster } from "../cluster/index.js"; import { Action, SporeDataView } from "../codec/index.js"; @@ -9,7 +9,7 @@ export async function prepareCluster( data: SporeDataView, clusterMode?: "lockProxy" | "clusterCell" | "skip", scriptInfoHash?: ccc.HexLike, -): Promise | undefined> { +): Promise | undefined> { // skip if the spore is not belong to a cluster if (!data.clusterId || clusterMode === "skip") { return; diff --git a/packages/spore/tsconfig.base.json b/packages/spore/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/spore/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/spore/tsconfig.commonjs.json b/packages/spore/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/spore/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/spore/tsconfig.json b/packages/spore/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/spore/tsconfig.json +++ b/packages/spore/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/spore/tsdown.config.mts b/packages/spore/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/packages/spore/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/ssri/CHANGELOG.md b/packages/ssri/CHANGELOG.md index ea5124808..7a2f6080e 100644 --- a/packages/ssri/CHANGELOG.md +++ b/packages/ssri/CHANGELOG.md @@ -1,5 +1,28 @@ # @ckb-ccc/ssri +## 0.3.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 0.2.23 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 0.2.22 ### Patch Changes diff --git a/packages/ssri/package.json b/packages/ssri/package.json index fd004dba0..894378c1d 100644 --- a/packages/ssri/package.json +++ b/packages/ssri/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/ssri", - "version": "0.2.22", + "version": "0.3.0", "description": "SSRI", "author": "Alive24 ", "license": "MIT", @@ -11,41 +11,42 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "main": "./dist.commonjs/index.js", - "module": "./dist/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "default": "./dist.commonjs/index.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, "./barrel": { - "import": "./dist/barrel.js", - "default": "./dist.commonjs/barrel.js" - } + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { "test": "jest", - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "@types/node": "^24.3.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "@types/node": "^26.0.0", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { - "@ckb-ccc/core": "workspace:*" + "@ckb-ccc/core": "workspace:*", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/ssri/tsconfig.base.json b/packages/ssri/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/ssri/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/ssri/tsconfig.commonjs.json b/packages/ssri/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/ssri/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/ssri/tsconfig.json b/packages/ssri/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/ssri/tsconfig.json +++ b/packages/ssri/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/ssri/tsdown.config.mts b/packages/ssri/tsdown.config.mts new file mode 100644 index 000000000..9453d8b6d --- /dev/null +++ b/packages/ssri/tsdown.config.mts @@ -0,0 +1,41 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/tests/package.json b/packages/tests/package.json index 3bbd4cf80..7026ae11a 100644 --- a/packages/tests/package.json +++ b/packages/tests/package.json @@ -14,16 +14,20 @@ "test": "node ./tests/cjs.test.cjs && tsx ./tests/esm.test.mts" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "eslint": "^9.34.0", + "@ckb-ccc/ccc": "workspace:*", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "tsx": "^4.20.5", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0", - "@ckb-ccc/ccc": "workspace:*" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "tsx": "^4.22.4", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "dependencies": { + "@types/node": "^26.0.0", + "tsdown": "^0.22.3" + } } diff --git a/packages/tests/tests/esm.test.mts b/packages/tests/tests/esm.test.mts index 51f5b9bfd..8462a1295 100644 --- a/packages/tests/tests/esm.test.mts +++ b/packages/tests/tests/esm.test.mts @@ -1,11 +1,12 @@ import { ccc } from "@ckb-ccc/ccc"; import assert from "node:assert/strict"; import path from "path"; +import { fileURLToPath } from "url"; assert.ok(ccc, "CCC package should be imported successfully in ESM"); assert.strictEqual( import.meta.resolve("@ckb-ccc/ccc"), - `file://${path.join(import.meta.dirname, "../../ccc/dist/index.js")}`, + `file://${path.join(path.dirname(fileURLToPath(import.meta.url)), "../../ccc/dist/index.js")}`, "CCC package should be imported from dist in ESM", ); console.log("ESM require test passed"); diff --git a/packages/tests/tsconfig.base.json b/packages/tests/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/tests/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/tests/tsconfig.commonjs.json b/packages/tests/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/tests/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/tests/tsconfig.json b/packages/tests/tsconfig.json index df22faeca..6f288040c 100644 --- a/packages/tests/tsconfig.json +++ b/packages/tests/tsconfig.json @@ -1,8 +1,27 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "types": ["node"], + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./tests", + "outDir": "./dist" + }, + "include": ["tests/**/*"] } diff --git a/packages/tests/tsdown.config.mts b/packages/tests/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/packages/tests/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/type-id/.npmignore b/packages/type-id/.npmignore new file mode 100644 index 000000000..7a88408aa --- /dev/null +++ b/packages/type-id/.npmignore @@ -0,0 +1,21 @@ +node_modules/ +misc/ + +*test.js +*test.ts +*test.d.ts +*test.d.ts.map +*spec.js +*spec.ts +*spec.d.ts +*spec.d.ts.map + +tsconfig.json +tsconfig.*.json +eslint.config.mjs +.prettierrc +.prettierignore + +tsconfig.tsbuildinfo +tsconfig.*.tsbuildinfo +.github/ diff --git a/packages/type-id/.prettierignore b/packages/type-id/.prettierignore new file mode 100644 index 000000000..aef5d239c --- /dev/null +++ b/packages/type-id/.prettierignore @@ -0,0 +1,15 @@ +node_modules/ + +dist/ +dist.commonjs/ + +.npmignore +.prettierrc +tsconfig.json +eslint.config.mjs +prettier.config.* + +tsconfig.tsbuildinfo +.github/ + +CHANGELOG.md diff --git a/packages/type-id/CHANGELOG.md b/packages/type-id/CHANGELOG.md new file mode 100644 index 000000000..8758ad72e --- /dev/null +++ b/packages/type-id/CHANGELOG.md @@ -0,0 +1,28 @@ +# @ckb-ccc/type-id + +## 0.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 0.0.1 +### Patch Changes + + + +- [#337](https://github.com/ckb-devrel/ccc/pull/337) [`3bd5130`](https://github.com/ckb-devrel/ccc/commit/3bd51300d9602482dd781752f618f6cfd642675c) Thanks [@Hanssen0](https://github.com/Hanssen0)! - feat(type-id): add type-id package for Type ID operations + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 diff --git a/packages/type-id/README.md b/packages/type-id/README.md new file mode 100644 index 000000000..a569c8126 --- /dev/null +++ b/packages/type-id/README.md @@ -0,0 +1,41 @@ +

+ + Logo + +

+ +

+ CCC's Support for Type ID +

+ +

+ NPM Version + GitHub commit activity + GitHub last commit + GitHub branch check runs + Playground + App + Docs +

+ +

+ CCC - CKBers' Codebase is a one-stop solution for your CKB JS/TS ecosystem development. +
+ Empower yourself with CCC to discover the unlimited potential of CKB. +
+ Interoperate with wallets from different chain ecosystems. +
+ Fully enabling CKB's Turing completeness and cryptographic freedom power. +

+ +

+ Read more about CCC on our website or GitHub Repo. +

diff --git a/packages/type-id/eslint.config.mjs b/packages/type-id/eslint.config.mjs new file mode 100644 index 000000000..b6132c277 --- /dev/null +++ b/packages/type-id/eslint.config.mjs @@ -0,0 +1,62 @@ +// @ts-check + +import eslint from "@eslint/js"; +import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; +import tseslint from "typescript-eslint"; + +import { dirname } from "path"; +import { fileURLToPath } from "url"; + +export default [ + ...tseslint.config({ + files: ["**/*.ts"], + extends: [ + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + ], + rules: { + "@typescript-eslint/no-unused-vars": [ + "error", + { + args: "all", + argsIgnorePattern: "^_", + caughtErrors: "all", + caughtErrorsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_", + ignoreRestSiblings: true, + }, + ], + "@typescript-eslint/unbound-method": ["error", { ignoreStatic: true }], + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/require-await": "off", + "@typescript-eslint/only-throw-error": [ + "error", + { + allowThrowingAny: true, + allowThrowingUnknown: true, + allowRethrowing: true, + }, + ], + "@typescript-eslint/prefer-promise-reject-errors": [ + "error", + { + allowThrowingAny: true, + allowThrowingUnknown: true, + }, + ], + "no-empty": "off", + "prefer-const": [ + "error", + { ignoreReadBeforeAssign: true, destructuring: "all" }, + ], + }, + languageOptions: { + parserOptions: { + project: true, + tsconfigRootDir: dirname(fileURLToPath(import.meta.url)), + }, + }, + }), + eslintPluginPrettierRecommended, +]; diff --git a/packages/type-id/misc/basedirs/dist.commonjs/package.json b/packages/type-id/misc/basedirs/dist.commonjs/package.json new file mode 100644 index 000000000..5bbefffba --- /dev/null +++ b/packages/type-id/misc/basedirs/dist.commonjs/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/packages/type-id/misc/basedirs/dist/package.json b/packages/type-id/misc/basedirs/dist/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/packages/type-id/misc/basedirs/dist/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/type-id/package.json b/packages/type-id/package.json new file mode 100644 index 000000000..5480ac364 --- /dev/null +++ b/packages/type-id/package.json @@ -0,0 +1,62 @@ +{ + "name": "@ckb-ccc/type-id", + "version": "0.1.0", + "description": "CCC - CKBer's Codebase. CCC's support for Type ID", + "author": "Hanssen0 ", + "license": "MIT", + "private": false, + "homepage": "https://github.com/ckb-devrel/ccc", + "repository": { + "type": "git", + "url": "git://github.com/ckb-devrel/ccc.git" + }, + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" + }, + "./advanced": { + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" + }, + "./advancedBarrel": { + "import": "./dist/advancedBarrel.mjs", + "require": "./dist.commonjs/advancedBarrel.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" + }, + "scripts": { + "test": "vitest", + "test:ci": "vitest run", + "build": "tsdown", + "lint": "eslint ./src", + "format": "prettier --write . && eslint --fix ./src" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^26.0.0", + "eslint": "^10.5.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "tsdown": "^0.22.3", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1", + "vitest": "^4.1.9" + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@ckb-ccc/core": "workspace:*" + }, + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" +} diff --git a/packages/type-id/prettier.config.cjs b/packages/type-id/prettier.config.cjs new file mode 100644 index 000000000..5e1810363 --- /dev/null +++ b/packages/type-id/prettier.config.cjs @@ -0,0 +1,11 @@ +/** + * @see https://prettier.io/docs/configuration + * @type {import("prettier").Config} + */ +const config = { + singleQuote: false, + trailingComma: "all", + plugins: [require.resolve("prettier-plugin-organize-imports")], +}; + +module.exports = config; diff --git a/packages/type-id/src/advanced.ts b/packages/type-id/src/advanced.ts new file mode 100644 index 000000000..fa30ed271 --- /dev/null +++ b/packages/type-id/src/advanced.ts @@ -0,0 +1,2 @@ +export * from "./advancedBarrel.js"; +export * as typeIdA from "./advancedBarrel.js"; diff --git a/packages/type-id/src/advancedBarrel.test.ts b/packages/type-id/src/advancedBarrel.test.ts new file mode 100644 index 000000000..d7fad2376 --- /dev/null +++ b/packages/type-id/src/advancedBarrel.test.ts @@ -0,0 +1,493 @@ +import { ccc } from "@ckb-ccc/core"; +import { beforeEach, describe, expect, it, Mock, vi } from "vitest"; +import { buildTypeIdOperations } from "./advancedBarrel.js"; + +describe("type-id", () => { + let client: ccc.Client; + let signer: ccc.Signer; + + const typeIdScript = { + codeHash: + "0x00000000000000000000000000000000000000000000000000545950455f4944", + hashType: "type" as const, + args: "0x", + }; + const typeIdCellDep = { + outPoint: { + txHash: + "0x1111111111111111111111111111111111111111111111111111111111111111", + index: 0, + }, + depType: "code" as const, + }; + + beforeEach(() => { + client = { + getKnownScript: vi.fn(), + getCellDeps: vi.fn(), + findSingletonCellByType: vi.fn(), + } as unknown as ccc.Client; + + signer = { + client, + getRecommendedAddressObj: vi.fn(), + findCells: vi.fn(), + } as unknown as ccc.Signer; + + (client.getKnownScript as Mock).mockResolvedValue({ + ...typeIdScript, + cellDeps: [{ cellDep: typeIdCellDep }], + }); + + (client.getCellDeps as Mock).mockImplementation( + async (deps: ccc.CellDepInfoLike[]) => + deps.map((d) => ccc.CellDep.from(d.cellDep)), + ); + + (signer.getRecommendedAddressObj as Mock).mockResolvedValue({ + script: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x1234", + }), + }); + }); + + describe("buildTypeIdOperations with custom options", () => { + it("should use custom codec", async () => { + const customCodec = { + encode: (data: number) => ccc.numLeToBytes(data, 4), + decode: (bytes: ccc.BytesLike) => Number(ccc.numLeFromBytes(bytes)), + }; + + const { create } = buildTypeIdOperations({ + getScriptInfo: async () => ({ + ...typeIdScript, + cellDeps: [{ cellDep: typeIdCellDep }], + }), + codec: customCodec, + }); + + const inputCell = ccc.Cell.from({ + outPoint: { txHash: "0x" + "2".repeat(64), index: 0 }, + cellOutput: { + capacity: ccc.fixedPointFrom(1000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + }, + outputData: "0x", + }); + (signer.findCells as Mock).mockImplementation(async function* () { + yield inputCell; + }); + + const { tx } = await create({ + signer, + data: 123456, + }); + + expect(tx.outputsData[0]).toBe(ccc.hexFrom(ccc.numLeToBytes(123456, 4))); + }); + + it("should use custom calculateTypeId", async () => { + const customId = "0x" + "9".repeat(64); + const calculateTypeId = vi.fn().mockResolvedValue(customId); + + const { create } = buildTypeIdOperations({ + getScriptInfo: async () => ({ + ...typeIdScript, + cellDeps: [{ cellDep: typeIdCellDep }], + }), + calculateTypeId, + }); + + const inputCell = ccc.Cell.from({ + outPoint: { txHash: "0x" + "2".repeat(64), index: 0 }, + cellOutput: { + capacity: ccc.fixedPointFrom(1000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + }, + outputData: "0x", + }); + (signer.findCells as Mock).mockImplementation(async function* () { + yield inputCell; + }); + + const { id, tx } = await create({ + signer, + data: "0x", + }); + + expect(calculateTypeId).toHaveBeenCalled(); + expect(id).toBe(customId); + expect(tx.outputs[0].type?.args).toBe(customId); + }); + + it("should use custom addCellDeps", async () => { + const customDep = ccc.CellDep.from({ + outPoint: { txHash: "0x" + "a".repeat(64), index: 0 }, + depType: "code", + }); + const addCellDeps = vi + .fn() + .mockImplementation(async (_: ccc.Client, tx: ccc.Transaction) => { + tx.addCellDeps(customDep); + return tx; + }); + + const { create } = buildTypeIdOperations({ + getScriptInfo: async () => ({ + ...typeIdScript, + cellDeps: [{ cellDep: typeIdCellDep }], + }), + addCellDeps, + }); + + const inputCell = ccc.Cell.from({ + outPoint: { txHash: "0x" + "2".repeat(64), index: 0 }, + cellOutput: { + capacity: ccc.fixedPointFrom(1000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + }, + outputData: "0x", + }); + (signer.findCells as Mock).mockImplementation(async function* () { + yield inputCell; + }); + + const { tx } = await create({ + signer, + data: "0x", + }); + + expect(addCellDeps).toHaveBeenCalled(); + expect(tx.cellDeps).toContainEqual(customDep); + }); + }); + + describe("Type ID Operations", () => { + const { create, transfer, destroy } = buildTypeIdOperations({ + getScriptInfo: async () => ({ + ...typeIdScript, + cellDeps: [{ cellDep: typeIdCellDep }], + }), + }); + + describe("create", () => { + it("should create a transaction with correct type id", async () => { + const inputCell = ccc.Cell.from({ + outPoint: { + txHash: "0x" + "2".repeat(64), + index: 0, + }, + cellOutput: { + capacity: ccc.fixedPointFrom(1000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + }, + outputData: "0x", + }); + + (signer.findCells as Mock).mockImplementation(async function* () { + yield inputCell; + }); + + const data = "0x1234"; + const { tx, id, index } = await create({ + signer, + data, + }); + + expect(tx.inputs.length).toBe(1); + expect(tx.inputs[0].previousOutput).toEqual(inputCell.outPoint); + + expect(tx.outputs.length).toBe(1); + expect(index).toBe(0); + + const expectedId = ccc.hashTypeId(tx.inputs[0], 0); + expect(id).toBe(expectedId); + + const output = tx.outputs[0]; + expect(output.type).toBeDefined(); + expect(output.type?.codeHash).toBe(typeIdScript.codeHash); + expect(output.type?.hashType).toBe(typeIdScript.hashType); + expect(output.type?.args).toBe(id); + expect(tx.outputsData[0]).toBe(ccc.hexFrom(data)); + + expect(tx.cellDeps.length).toBeGreaterThan(0); + expect(tx.cellDeps[0].outPoint).toEqual( + ccc.OutPoint.from(typeIdCellDep.outPoint), + ); + }); + + it(" should append to existing tx", async () => { + const existingTx = ccc.Transaction.from({ + headerDeps: ["0x" + "e".repeat(64)], + }); + + const inputCell = ccc.Cell.from({ + outPoint: { txHash: "0x" + "2".repeat(64), index: 0 }, + cellOutput: { + capacity: ccc.fixedPointFrom(1000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + }, + outputData: "0x", + }); + (signer.findCells as Mock).mockImplementation(async function* () { + yield inputCell; + }); + + const { tx } = await create({ + signer, + data: "0x", + tx: existingTx, + }); + + expect(tx.headerDeps).toContain("0x" + "e".repeat(64)); + }); + }); + + it("should accept explicit receiver", async () => { + const receiver = ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0xffee", + }); + + const inputCell = ccc.Cell.from({ + outPoint: { txHash: "0x" + "2".repeat(64), index: 0 }, + cellOutput: { + capacity: ccc.fixedPointFrom(1000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + }, + outputData: "0x", + }); + (signer.findCells as Mock).mockImplementation(async function* () { + yield inputCell; + }); + + const { tx } = await create({ + signer, + data: "0x", + receiver, + }); + + expect(tx.outputs[0].lock).toEqual(receiver); + }); + + describe("transferTypeId", () => { + it("should transfer type id cell to new receiver", async () => { + const id = "0x" + "3".repeat(64); + const receiver = ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0xabcd", + }); + + const typeScript = ccc.Script.from({ + ...typeIdScript, + args: id, + }); + + const existingCell = ccc.Cell.from({ + outPoint: { + txHash: "0x" + "4".repeat(64), + index: 0, + }, + cellOutput: { + capacity: ccc.fixedPointFrom(2000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + type: typeScript, + }, + outputData: "0x5678", + }); + + (client.findSingletonCellByType as Mock).mockResolvedValue( + existingCell, + ); + + const newData = "0x9999"; + const { tx, inIndex, outIndex } = await transfer({ + client, + id, + receiver, + data: newData, + }); + + expect(tx.inputs[inIndex].previousOutput).toEqual( + existingCell.outPoint, + ); + + const output = tx.outputs[outIndex]; + expect(output.lock).toEqual(receiver); + expect(output.type).toEqual(typeScript); + expect(tx.outputsData[outIndex]).toBe(ccc.hexFrom(newData)); + }); + + it("transfer should preserve data if not provided", async () => { + const id = "0x" + "3".repeat(64); + const receiver = ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0xabcd", + }); + const typeScript = ccc.Script.from({ ...typeIdScript, args: id }); + const existingCell = ccc.Cell.from({ + outPoint: { txHash: "0x" + "4".repeat(64), index: 0 }, + cellOutput: { + capacity: ccc.fixedPointFrom(2000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + type: typeScript, + }, + outputData: "0x123456", + }); + + (client.findSingletonCellByType as Mock).mockResolvedValue( + existingCell, + ); + + const { tx, outIndex } = await transfer({ + client, + id, + receiver, + }); + + expect(tx.outputsData[outIndex]).toBe("0x123456"); + }); + + it("should transfer type id cell with data transformer", async () => { + const id = "0x" + "3".repeat(64); + const receiver = ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0xabcd", + }); + + const typeScript = ccc.Script.from({ + ...typeIdScript, + args: id, + }); + + const existingCell = ccc.Cell.from({ + outPoint: { + txHash: "0x" + "4".repeat(64), + index: 0, + }, + cellOutput: { + capacity: ccc.fixedPointFrom(2000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + type: typeScript, + }, + outputData: "0x1234", + }); + + (client.findSingletonCellByType as Mock).mockResolvedValue( + existingCell, + ); + + const { tx, outIndex } = await transfer({ + client, + id, + receiver, + data: (c, d) => ccc.bytesConcat(c.outputData, d ?? "0x", "0x5678"), + }); + + const output = tx.outputs[outIndex]; + expect(output.lock).toEqual(receiver); + expect(output.type).toEqual(typeScript); + expect(tx.outputsData[outIndex]).toBe(ccc.hexFrom("0x123412345678")); + }); + + it("should throw error if type id cell not found", async () => { + (client.findSingletonCellByType as Mock).mockResolvedValue(undefined); + + await expect( + transfer({ + client, + id: "0x" + "0".repeat(64), + receiver: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + }), + ).rejects.toThrow("Type ID"); + }); + }); + + describe("destroyTypeId", () => { + it("should consume type id cell without creating new one", async () => { + const id = "0x" + "5".repeat(64); + const typeScript = ccc.Script.from({ + ...typeIdScript, + args: id, + }); + + const existingCell = ccc.Cell.from({ + outPoint: { + txHash: "0x" + "6".repeat(64), + index: 0, + }, + cellOutput: { + capacity: ccc.fixedPointFrom(3000), + lock: ccc.Script.from({ + codeHash: "0x" + "0".repeat(64), + hashType: "type", + args: "0x", + }), + type: typeScript, + }, + outputData: "0x", + }); + + (client.findSingletonCellByType as Mock).mockResolvedValue( + existingCell, + ); + + const { tx, index } = await destroy({ + client, + id, + }); + + expect(tx.inputs[index].previousOutput).toEqual(existingCell.outPoint); + + const hasTypeOutput = tx.outputs.some((o) => o.type?.eq(typeScript)); + expect(hasTypeOutput).toBe(false); + }); + }); + }); +}); diff --git a/packages/type-id/src/advancedBarrel.ts b/packages/type-id/src/advancedBarrel.ts new file mode 100644 index 000000000..29a171d4c --- /dev/null +++ b/packages/type-id/src/advancedBarrel.ts @@ -0,0 +1,229 @@ +import { ccc } from "@ckb-ccc/core"; + +/** + * Build Type ID operations. + * + * @param props The properties to build the operations. + * @param props.getScriptInfo Function to get the script info. + * @param props.calculateTypeId Function to calculate the Type ID. + * @param props.addCellDeps Function to add cell dependencies. + */ + +export function buildTypeIdOperations< + Encodable = ccc.BytesLike, + Decoded = ccc.Bytes, +>(props: { + getScriptInfo: (client: ccc.Client) => Promise; + codec?: ccc.CodecLike | null; + calculateTypeId?: + | ((client: ccc.Client, tx: ccc.Transaction) => Promise) + | null; + addCellDeps?: + | (( + client: ccc.Client, + tx: ccc.Transaction, + scriptInfo: ccc.ScriptInfo, + ) => Promise) + | null; +}) { + async function getScriptInfo(client: ccc.Client): Promise { + return ccc.ScriptInfo.from(await props.getScriptInfo(client)); + } + + const codec = ( + props.codec ? ccc.Codec.from(props.codec) : ccc.CodecRaw + ) as ccc.Codec; + + function getTypeScript(scriptInfo: ccc.ScriptInfo, args: ccc.HexLike) { + return ccc.Script.from({ + ...scriptInfo, + args, + }); + } + + async function addCellDeps( + client: ccc.Client, + tx: ccc.Transaction, + scriptInfo: ccc.ScriptInfo, + ): Promise { + if (props.addCellDeps) { + return ccc.Transaction.from( + await props.addCellDeps(client, tx, scriptInfo), + ); + } + + tx.addCellDeps(...(await client.getCellDeps(scriptInfo.cellDeps))); + return tx; + } + + async function calculateTypeId( + client: ccc.Client, + tx: ccc.Transaction, + ): Promise { + if (props.calculateTypeId) { + return ccc.hexFrom(await props.calculateTypeId(client, tx)); + } + + return ccc.hashTypeId(tx.inputs[0], tx.outputs.length); + } + + return { + /** + * Create a Type ID cell. + * + * @param props The arguments for creating the cell. + * @param props.signer The signer to sign the transaction. + * @param props.receiver The receiver script (optional). + * @param props.data The output data. + * @param props.tx The transaction skeleton (optional). + */ + async create( + this: void, + props: { + signer: ccc.Signer; + data: Encodable; + receiver?: ccc.ScriptLike | null; + tx?: ccc.TransactionLike | null; + }, + ): Promise<{ + tx: ccc.Transaction; + id: ccc.Hex; + index: number; + }> { + const { signer, receiver, data, tx: txLike } = props; + const tx = ccc.Transaction.from(txLike ?? {}); + + await tx.completeInputsAtLeastOne(signer); + const id = await calculateTypeId(signer.client, tx); + + const scriptInfo = await getScriptInfo(signer.client); + const len = tx.addOutput({ + cellOutput: { + type: getTypeScript(scriptInfo, id), + lock: receiver + ? ccc.Script.from(receiver) + : (await signer.getRecommendedAddressObj()).script, + }, + outputData: codec.encode(data), + }); + + return { + tx: await addCellDeps(signer.client, tx, scriptInfo), + id, + index: len - 1, + }; + }, + + /** + * Transfer a Type ID cell. + * + * @param props The arguments for transferring the cell. + * @param props.client The client to communicate with CKB. + * @param props.id The Type ID to transfer. + * @param props.receiver The new receiver script. + * @param props.tx The transaction skeleton (optional). + * @param props.data The new output data or a transformer to update the data (optional). + */ + async transfer( + this: void, + props: { + client: ccc.Client; + id: ccc.HexLike; + receiver: ccc.ScriptLike; + tx?: ccc.TransactionLike | null; + data?: + | Encodable + | ((cell: ccc.Cell, data?: Decoded) => Encodable | Promise) + | null; + }, + ): Promise<{ + tx: ccc.Transaction; + inIndex: number; + outIndex: number; + }> { + const { client, id, receiver, tx: txLike, data } = props; + const tx = ccc.Transaction.from(txLike ?? {}); + + const scriptInfo = await getScriptInfo(client); + const type = getTypeScript(scriptInfo, id); + const inCell = await client.findSingletonCellByType(type); + if (!inCell) { + throw new Error(`Type ID ${ccc.stringify(type)} not found`); + } + + const outputData = await (async () => { + if (!data) { + return inCell.outputData; + } + + if (typeof data === "function") { + return codec.encode( + await ( + data as ( + cell: ccc.Cell, + data?: Decoded, + ) => Encodable | Promise + )(inCell, codec.decodeOr(inCell.outputData, undefined)), + ); + } + + return codec.encode(data); + })(); + + const outCell = ccc.CellAny.from({ + ...inCell, + cellOutput: { + ...inCell.cellOutput, + lock: ccc.Script.from(receiver), + }, + outputData, + }); + + const inLen = tx.addInput(inCell); + const outLen = tx.addOutput(outCell); + + return { + tx: await addCellDeps(client, tx, scriptInfo), + inIndex: inLen - 1, + outIndex: outLen - 1, + }; + }, + + /** + * Destroy a Type ID cell. + * + * @param props The arguments for destroying the cell. + * @param props.client The client to communicate with CKB. + * @param props.id The Type ID to destroy. + * @param props.tx The transaction skeleton (optional). + */ + async destroy( + this: void, + props: { + client: ccc.Client; + id: ccc.HexLike; + tx?: ccc.TransactionLike | null; + }, + ): Promise<{ + tx: ccc.Transaction; + index: number; + }> { + const { client, id, tx: txLike } = props; + const tx = ccc.Transaction.from(txLike ?? {}); + + const scriptInfo = await getScriptInfo(client); + const type = getTypeScript(scriptInfo, id); + const cell = await client.findSingletonCellByType(type); + if (!cell) { + throw new Error(`Type ID ${ccc.stringify(type)} not found`); + } + + const len = tx.addInput(cell); + + return { + tx: await addCellDeps(client, tx, scriptInfo), + index: len - 1, + }; + }, + }; +} diff --git a/packages/type-id/src/barrel.ts b/packages/type-id/src/barrel.ts new file mode 100644 index 000000000..f948bf58e --- /dev/null +++ b/packages/type-id/src/barrel.ts @@ -0,0 +1,12 @@ +import { ccc } from "@ckb-ccc/core"; +import { buildTypeIdOperations } from "./advancedBarrel"; + +export const { + create: createTypeId, + transfer: transferTypeId, + destroy: destroyTypeId, +} = buildTypeIdOperations({ + async getScriptInfo(client: ccc.Client) { + return client.getKnownScript(ccc.KnownScript.TypeId); + }, +}); diff --git a/packages/type-id/src/index.ts b/packages/type-id/src/index.ts new file mode 100644 index 000000000..6a528c1af --- /dev/null +++ b/packages/type-id/src/index.ts @@ -0,0 +1,2 @@ +export * from "./barrel.js"; +export * as typeId from "./barrel.js"; diff --git a/packages/eip6963/tsconfig.base.json b/packages/type-id/tsconfig.json similarity index 79% rename from packages/eip6963/tsconfig.base.json rename to packages/type-id/tsconfig.json index 7e5ac952b..3399c6f67 100644 --- a/packages/eip6963/tsconfig.base.json +++ b/packages/type-id/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2020", + "target": "es2022", "incremental": true, "allowJs": true, "importHelpers": false, @@ -16,7 +16,10 @@ "alwaysStrict": true, "noFallthroughCasesInSwitch": true, "forceConsistentCasingInFileNames": true, - "skipLibCheck": true + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "rootDir": "./src" }, "include": ["src/**/*"] } diff --git a/packages/type-id/tsdown.config.mts b/packages/type-id/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/packages/type-id/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/type-id/typedoc.json b/packages/type-id/typedoc.json new file mode 100644 index 000000000..2eb611e3e --- /dev/null +++ b/packages/type-id/typedoc.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "entryPoints": ["./src/index.ts", "./src/advanced.ts"], + "extends": ["../../typedoc.base.json"], + "name": "@ckb-ccc type-id" +} diff --git a/packages/type-id/vitest.config.mts b/packages/type-id/vitest.config.mts new file mode 100644 index 000000000..dc6a58785 --- /dev/null +++ b/packages/type-id/vitest.config.mts @@ -0,0 +1,10 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: ["src/**/*.test.ts"], + coverage: { + include: ["src/**/*.ts"], + }, + }, +}); diff --git a/packages/udt/CHANGELOG.md b/packages/udt/CHANGELOG.md index ce41eb66a..78698bfd5 100644 --- a/packages/udt/CHANGELOG.md +++ b/packages/udt/CHANGELOG.md @@ -1,5 +1,30 @@ # @ckb-ccc/udt +## 0.2.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + - @ckb-ccc/ssri@0.3.0 + +## 0.1.25 +### Patch Changes + + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + - @ckb-ccc/ssri@0.2.23 + ## 0.1.24 ### Patch Changes diff --git a/packages/udt/package.json b/packages/udt/package.json index b03cf6aa6..37226a708 100644 --- a/packages/udt/package.json +++ b/packages/udt/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/udt", - "version": "0.1.24", + "version": "0.2.0", "description": "UDT", "author": "Alive24 ", "license": "MIT", @@ -11,42 +11,43 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "main": "./dist.commonjs/index.js", - "module": "./dist/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "default": "./dist.commonjs/index.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, - "./advanced": { - "import": "./dist/advanced.js", - "default": "./dist.commonjs/advanced.js" - } + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { "test": "jest", - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "@types/node": "^24.3.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "@types/node": "^26.0.0", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { "@ckb-ccc/core": "workspace:*", - "@ckb-ccc/ssri": "workspace:*" + "@ckb-ccc/ssri": "workspace:*", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/udt/tsconfig.base.json b/packages/udt/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/udt/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/udt/tsconfig.commonjs.json b/packages/udt/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/udt/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/udt/tsconfig.json b/packages/udt/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/udt/tsconfig.json +++ b/packages/udt/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/udt/tsdown.config.mts b/packages/udt/tsdown.config.mts new file mode 100644 index 000000000..9453d8b6d --- /dev/null +++ b/packages/udt/tsdown.config.mts @@ -0,0 +1,41 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/uni-sat/CHANGELOG.md b/packages/uni-sat/CHANGELOG.md index 98fc5fea8..bf6065f21 100644 --- a/packages/uni-sat/CHANGELOG.md +++ b/packages/uni-sat/CHANGELOG.md @@ -1,5 +1,34 @@ # @ckb-ccc/uni-sat +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 1.0.33 +### Patch Changes + + + +- [#346](https://github.com/ckb-devrel/ccc/pull/346) [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72) Thanks [@fghdotio](https://github.com/fghdotio)! - feat(core): add BTC PSBT signing support + + - Add `SignerBtc.signPsbt()`, `signAndBroadcastPsbt()`, and `broadcastPsbt()` for signing and broadcasting PSBTs + - Add `SignPsbtOptions` and `InputToSign` for configuring PSBT signing + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 1.0.32 ### Patch Changes diff --git a/packages/uni-sat/package.json b/packages/uni-sat/package.json index f25f73e67..073041259 100644 --- a/packages/uni-sat/package.json +++ b/packages/uni-sat/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/uni-sat", - "version": "1.0.32", + "version": "1.1.0", "description": "CCC - CKBer's Codebase. Common Chains Connector's support for UniSat", "author": "Hanssen0 ", "license": "MIT", @@ -11,52 +11,49 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" - }, - "./barrel": { - "import": "./dist/barrel.js", - "require": "./dist.commonjs/barrel.js", - "default": "./dist.commonjs/barrel.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, "./advanced": { - "import": "./dist/advanced.js", - "require": "./dist.commonjs/advanced.js", - "default": "./dist.commonjs/advanced.js" + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" }, "./advancedBarrel": { - "import": "./dist/advancedBarrel.js", - "require": "./dist.commonjs/advancedBarrel.js", - "default": "./dist.commonjs/advancedBarrel.js" - } + "import": "./dist/advancedBarrel.mjs", + "require": "./dist.commonjs/advancedBarrel.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { - "@ckb-ccc/core": "workspace:*" + "@ckb-ccc/core": "workspace:*", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/uni-sat/src/advancedBarrel.ts b/packages/uni-sat/src/advancedBarrel.ts index e6ae56b58..d40e8d860 100644 --- a/packages/uni-sat/src/advancedBarrel.ts +++ b/packages/uni-sat/src/advancedBarrel.ts @@ -1,7 +1,26 @@ +import { ccc } from "@ckb-ccc/core"; + /** * Interface representing a provider for interacting with accounts and signing messages. */ export interface Provider { + /** + * Signs a PSBT using UniSat wallet. + * + * @param psbtHex - The hex string of PSBT to sign + * @param options - Options for signing the PSBT + * @returns A promise that resolves to the signed PSBT hex string + */ + signPsbt(psbtHex: string, options?: ccc.SignPsbtOptionsLike): Promise; + + /** + * Broadcasts a signed PSBT to the Bitcoin network. + * + * @param psbtHex - The hex string of the signed PSBT to broadcast. + * @returns A promise that resolves to the transaction ID. + */ + pushPsbt(psbtHex: string): Promise; + /** * Requests user accounts. * @returns A promise that resolves to an array of account addresses. diff --git a/packages/uni-sat/src/signer.ts b/packages/uni-sat/src/signer.ts index 653bba8ee..938c0b89f 100644 --- a/packages/uni-sat/src/signer.ts +++ b/packages/uni-sat/src/signer.ts @@ -150,4 +150,34 @@ export class Signer extends ccc.SignerBtc { return this.provider.signMessage(challenge, "ecdsa"); } + + /** + * Signs a PSBT using UniSat wallet. + * + * @param psbtHex - The hex string of PSBT to sign. + * @param options - Options for signing the PSBT + * @returns A promise that resolves to the signed PSBT as a Hex string + */ + async signPsbt( + psbtHex: ccc.HexLike, + options?: ccc.SignPsbtOptionsLike, + ): Promise { + return ccc.hexFrom( + await this.provider.signPsbt(ccc.hexFrom(psbtHex).slice(2), options), + ); + } + + /** + * Broadcasts a signed PSBT to the Bitcoin network. + * + * @param psbtHex - The hex string of signed PSBT to broadcast. + * @returns A promise that resolves to the transaction ID as a Hex string + */ + async broadcastPsbt( + psbtHex: ccc.HexLike, + _options?: ccc.SignPsbtOptionsLike, + ): Promise { + const txid = await this.provider.pushPsbt(ccc.hexFrom(psbtHex).slice(2)); + return ccc.hexFrom(txid); + } } diff --git a/packages/uni-sat/tsconfig.base.json b/packages/uni-sat/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/uni-sat/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/uni-sat/tsconfig.commonjs.json b/packages/uni-sat/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/uni-sat/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/uni-sat/tsconfig.json b/packages/uni-sat/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/uni-sat/tsconfig.json +++ b/packages/uni-sat/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/uni-sat/tsdown.config.mts b/packages/uni-sat/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/packages/uni-sat/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/utxo-global/CHANGELOG.md b/packages/utxo-global/CHANGELOG.md index fd93bc7c5..40f7a95d0 100644 --- a/packages/utxo-global/CHANGELOG.md +++ b/packages/utxo-global/CHANGELOG.md @@ -1,5 +1,34 @@ # @ckb-ccc/utxo-global +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 1.0.33 +### Patch Changes + + + +- [#346](https://github.com/ckb-devrel/ccc/pull/346) [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72) Thanks [@fghdotio](https://github.com/fghdotio)! - feat(core): add BTC PSBT signing support + + - Add `SignerBtc.signPsbt()`, `signAndBroadcastPsbt()`, and `broadcastPsbt()` for signing and broadcasting PSBTs + - Add `SignPsbtOptions` and `InputToSign` for configuring PSBT signing + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 1.0.32 ### Patch Changes diff --git a/packages/utxo-global/package.json b/packages/utxo-global/package.json index a8b5d0b02..bafeeb97c 100644 --- a/packages/utxo-global/package.json +++ b/packages/utxo-global/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/utxo-global", - "version": "1.0.32", + "version": "1.1.0", "description": "Common Chains Connector's support for UTXO Global", "author": "Trong Dinh ", "license": "MIT", @@ -11,52 +11,49 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, - "./barrel": { - "import": "./dist/barrel.js", - "require": "./dist.commonjs/barrel.js", - "default": "./dist.commonjs/barrel.js" + "./advanced": { + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" }, "./advancedBarrel": { - "import": "./dist/advancedBarrel.js", - "require": "./dist.commonjs/advancedBarrel.js", - "default": "./dist.commonjs/advancedBarrel.js" + "import": "./dist/advancedBarrel.mjs", + "require": "./dist.commonjs/advancedBarrel.js" }, - "./advanced": { - "import": "./dist/advanced.js", - "require": "./dist.commonjs/advanced.js", - "default": "./dist.commonjs/advanced.js" - } + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { - "@ckb-ccc/core": "workspace:*" + "@ckb-ccc/core": "workspace:*", + "tsdown": "^0.22.3" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/utxo-global/src/btc/index.ts b/packages/utxo-global/src/btc/index.ts index 57e73594d..67771340b 100644 --- a/packages/utxo-global/src/btc/index.ts +++ b/packages/utxo-global/src/btc/index.ts @@ -127,4 +127,32 @@ export class SignerBtc extends ccc.SignerBtc { this.accountCache ?? (await this.getBtcAccount()), ); } + + /** + * Signs a PSBT using UTXO Global wallet. + * + * @param psbtHex - The hex string of PSBT to sign. + * @param options - Options for signing the PSBT + * @returns A promise that resolves to the signed PSBT as a Hex string + */ + async signPsbt( + _psbtHex: ccc.HexLike, + _options?: ccc.SignPsbtOptionsLike, + ): Promise { + throw new Error("UTXO Global PSBT signing not implemented yet"); + } + + /** + * Broadcasts a signed PSBT to the Bitcoin network. + * + * @param psbtHex - The hex string of signed PSBT to broadcast. + * @returns A promise that resolves to the transaction ID as a Hex string + * @todo Implement PSBT broadcasting with UTXO Global + */ + async broadcastPsbt( + _psbtHex: ccc.HexLike, + _options?: ccc.SignPsbtOptionsLike, + ): Promise { + throw new Error("UTXO Global PSBT broadcasting not implemented yet"); + } } diff --git a/packages/utxo-global/tsconfig.base.json b/packages/utxo-global/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/utxo-global/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/utxo-global/tsconfig.commonjs.json b/packages/utxo-global/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/utxo-global/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/utxo-global/tsconfig.json b/packages/utxo-global/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/utxo-global/tsconfig.json +++ b/packages/utxo-global/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/utxo-global/tsdown.config.mts b/packages/utxo-global/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/packages/utxo-global/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/packages/xverse/CHANGELOG.md b/packages/xverse/CHANGELOG.md index acacf9317..eff798238 100644 --- a/packages/xverse/CHANGELOG.md +++ b/packages/xverse/CHANGELOG.md @@ -1,5 +1,34 @@ # @ckb-ccc/xverse +## 1.1.0 +### Minor Changes + + + +- [#381](https://github.com/ckb-devrel/ccc/pull/381) [`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump packages + + +### Patch Changes + +- Updated dependencies [[`46cc045`](https://github.com/ckb-devrel/ccc/commit/46cc045a3eefe9ba6625482dc7f740a0c59c99d4)]: + - @ckb-ccc/core@1.14.0 + +## 1.0.33 +### Patch Changes + + + +- [#346](https://github.com/ckb-devrel/ccc/pull/346) [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72) Thanks [@fghdotio](https://github.com/fghdotio)! - feat(core): add BTC PSBT signing support + + - Add `SignerBtc.signPsbt()`, `signAndBroadcastPsbt()`, and `broadcastPsbt()` for signing and broadcasting PSBTs + - Add `SignPsbtOptions` and `InputToSign` for configuring PSBT signing + + +- [#379](https://github.com/ckb-devrel/ccc/pull/379) [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346) Thanks [@Hanssen0](https://github.com/Hanssen0)! - chore: bump pnpm to v11.8.0 + +- Updated dependencies [[`1148a5c`](https://github.com/ckb-devrel/ccc/commit/1148a5c403cde985fb4ba713ccfa0c163d287174), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`a803d5f`](https://github.com/ckb-devrel/ccc/commit/a803d5fba8d0e082c6aba14db156856025402e72), [`bf0f8d8`](https://github.com/ckb-devrel/ccc/commit/bf0f8d8ca011e627821445a10bc38519510e5b9d), [`6727ffe`](https://github.com/ckb-devrel/ccc/commit/6727ffe05f60e6bfb2060a565c19acb0fd0f375e), [`f01a05b`](https://github.com/ckb-devrel/ccc/commit/f01a05bab332d9f4e0cf7f84aecfd688f8e9f346), [`a526890`](https://github.com/ckb-devrel/ccc/commit/a5268909ea9d61c4e2f5187a43e2318327b27cae), [`4bb3d9d`](https://github.com/ckb-devrel/ccc/commit/4bb3d9d2ef36b3ee8820036625abd9befb1980c4), [`9f7ecb6`](https://github.com/ckb-devrel/ccc/commit/9f7ecb6ab8db9c6866dad029f2888e1e5cfcbe7d)]: + - @ckb-ccc/core@1.13.0 + ## 1.0.32 ### Patch Changes diff --git a/packages/xverse/package.json b/packages/xverse/package.json index 77c3ddc96..7a166a736 100644 --- a/packages/xverse/package.json +++ b/packages/xverse/package.json @@ -1,6 +1,6 @@ { "name": "@ckb-ccc/xverse", - "version": "1.0.32", + "version": "1.1.0", "description": "CCC - CKBer's Codebase. Common Chains Connector's support for Xverse", "author": "Hanssen0 ", "license": "MIT", @@ -11,53 +11,51 @@ "url": "git://github.com/ckb-devrel/ccc.git" }, "sideEffects": false, - "main": "dist.commonjs/index.js", - "module": "dist/index.js", + "main": "./dist.commonjs/index.js", + "module": "./dist/index.mjs", "exports": { ".": { - "import": "./dist/index.js", - "require": "./dist.commonjs/index.js", - "default": "./dist.commonjs/index.js" - }, - "./barrel": { - "import": "./dist/barrel.js", - "require": "./dist.commonjs/barrel.js", - "default": "./dist.commonjs/barrel.js" + "import": "./dist/index.mjs", + "require": "./dist.commonjs/index.js" }, "./advanced": { - "import": "./dist/advanced.js", - "require": "./dist.commonjs/advanced.js", - "default": "./dist.commonjs/advanced.js" + "import": "./dist/advanced.mjs", + "require": "./dist.commonjs/advanced.js" }, "./advancedBarrel": { - "import": "./dist/advancedBarrel.js", - "require": "./dist.commonjs/advancedBarrel.js", - "default": "./dist.commonjs/advancedBarrel.js" - } + "import": "./dist/advancedBarrel.mjs", + "require": "./dist.commonjs/advancedBarrel.js" + }, + "./barrel": { + "import": "./dist/barrel.mjs", + "require": "./dist.commonjs/barrel.js" + }, + "./package.json": "./package.json" }, "scripts": { - "build": "rimraf ./dist && rimraf ./dist.commonjs && tsc && tsc --project tsconfig.commonjs.json && copyfiles -u 2 misc/basedirs/**/* .", + "build": "tsdown", "lint": "eslint ./src", "format": "prettier --write . && eslint --fix ./src" }, "devDependencies": { - "@eslint/js": "^9.34.0", - "copyfiles": "^2.4.1", - "eslint": "^9.34.0", + "@eslint/js": "^10.0.1", + "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.4", - "prettier": "^3.6.2", - "prettier-plugin-organize-imports": "^4.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.9.2", - "typescript-eslint": "^8.41.0" + "eslint-plugin-prettier": "^5.5.6", + "prettier": "^3.8.4", + "prettier-plugin-organize-imports": "^4.3.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.61.1" }, "publishConfig": { "access": "public" }, "dependencies": { "@ckb-ccc/core": "workspace:*", - "valibot": "^1.1.0" + "bitcoinjs-lib": "^7.0.1", + "tsdown": "^0.22.3", + "valibot": "^1.4.1" }, - "packageManager": "pnpm@10.8.1" + "packageManager": "pnpm@11.8.0", + "types": "./dist.commonjs/index.d.ts" } diff --git a/packages/xverse/src/sat-connect-core/types.advanced.ts b/packages/xverse/src/sat-connect-core/types.advanced.ts index 57d4f3bf1..9469f1f3d 100644 --- a/packages/xverse/src/sat-connect-core/types.advanced.ts +++ b/packages/xverse/src/sat-connect-core/types.advanced.ts @@ -135,13 +135,15 @@ export interface RpcError { data?: any; } -export interface RpcErrorResponse - extends RpcBase { +export interface RpcErrorResponse< + TError extends RpcError = RpcError, +> extends RpcBase { error: TError; } -export interface RpcSuccessResponse - extends RpcBase { +export interface RpcSuccessResponse< + Method extends keyof Requests, +> extends RpcBase { result: Return; } diff --git a/packages/xverse/src/signer.ts b/packages/xverse/src/signer.ts index af243a11a..7cbc5ab9d 100644 --- a/packages/xverse/src/signer.ts +++ b/packages/xverse/src/signer.ts @@ -1,4 +1,5 @@ import { ccc } from "@ckb-ccc/core"; +import { Psbt } from "bitcoinjs-lib"; import * as v from "valibot"; import { Address, @@ -23,7 +24,7 @@ async function checkResponse( } if (v.is(rpcSuccessResponseMessageSchema, res)) { - return res.result as Return; + return res.result; } // eslint-disable-next-line @typescript-eslint/only-throw-error @@ -169,4 +170,161 @@ export class Signer extends ccc.SignerBtc { ) ).signature; } + + /** + * Build default inputsToSign for all unsigned inputs + */ + private buildDefaultinputsToSign( + psbtHex: ccc.Hex, + address: string, + ): ccc.InputToSignLike[] { + const inputsToSign: ccc.InputToSignLike[] = []; + + try { + // Collect all unsigned inputs + const psbt = Psbt.fromHex(psbtHex.slice(2)); + psbt.data.inputs.forEach((input, index) => { + const isSigned = + input.finalScriptSig || + input.finalScriptWitness || + input.tapKeySig || + (input.partialSig && input.partialSig.length > 0) || + (input.tapScriptSig && input.tapScriptSig.length > 0); + + if (!isSigned) { + inputsToSign.push({ index, address }); + } + }); + + // If no unsigned inputs found, the PSBT is already fully signed + // Let the wallet handle this case (likely a no-op or error) + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : String(error); + throw new Error( + `Failed to parse PSBT hex. Please provide inputsToSign explicitly in options. Original error: ${errorMessage}`, + { cause: error }, + ); + } + + return inputsToSign; + } + + private async prepareSignPsbtParams( + psbtHex: ccc.Hex, + options?: ccc.SignPsbtOptionsLike, + ): Promise<{ + psbtBase64: string; + signInputs: Record; + }> { + let inputsToSign = options?.inputsToSign; + + if (!inputsToSign || !inputsToSign.length) { + const address = await this.getBtcAccount(); + inputsToSign = this.buildDefaultinputsToSign(psbtHex, address); + } + + const psbtBase64 = ccc.bytesTo(psbtHex, "base64"); + + const signInputs = inputsToSign.reduce( + (acc, input) => { + if (!input.address) { + throw new Error( + "Xverse only supports signing with address. Please provide 'address' in inputsToSign.", + ); + } + if (acc[input.address]) { + acc[input.address].push(input.index); + } else { + acc[input.address] = [input.index]; + } + return acc; + }, + {} as Record, + ); + + return { psbtBase64, signInputs }; + } + + /** + * Signs a PSBT using Xverse wallet. + * + * @param psbtHex - The hex string of PSBT to sign. + * @param options - Options for signing the PSBT + * @returns A promise that resolves to the signed PSBT as a Hex string + * + * @remarks + * Xverse accepts: + * - psbt: A string representing the PSBT to sign, encoded in base64 + * - signInputs: A Record where: + * - keys are the addresses to use for signing + * - values are the indexes of the inputs to sign with each address + * + * Xverse returns: + * - psbt: The base64 encoded signed PSBT + * + * @see https://docs.xverse.app/sats-connect/bitcoin-methods/signpsbt + */ + async signPsbt( + psbtHex: ccc.HexLike, + options?: ccc.SignPsbtOptionsLike, + ): Promise { + const { psbtBase64, signInputs } = await this.prepareSignPsbtParams( + ccc.hexFrom(psbtHex), + options, + ); + + const signedPsbtBase64 = ( + await checkResponse( + this.provider.request("signPsbt", { + psbt: psbtBase64, + signInputs, + broadcast: false, + }), + ) + ).psbt; + + return ccc.hexFrom(ccc.bytesFrom(signedPsbtBase64, "base64")); + } + + /** + * Broadcasts a PSBT to the Bitcoin network. + * + * @remarks + * Xverse does not support broadcasting a signed PSBT directly. + * It only supports "Sign and Broadcast" as a single atomic operation via `signAndBroadcastPsbt`. + */ + async broadcastPsbt( + _psbtHex: ccc.HexLike, + _options?: ccc.SignPsbtOptionsLike, + ): Promise { + throw new Error( + "Xverse does not support broadcasting signed PSBTs directly. Use signAndBroadcastPsbt instead.", + ); + } + + async signAndBroadcastPsbt( + psbtHex: ccc.HexLike, + options?: ccc.SignPsbtOptionsLike, + ): Promise { + // ccc.hexFrom adds 0x prefix, but BTC expects non-0x + const { psbtBase64, signInputs } = await this.prepareSignPsbtParams( + ccc.hexFrom(psbtHex), + options, + ); + + const result = await checkResponse( + this.provider.request("signPsbt", { + psbt: psbtBase64, + signInputs, + broadcast: true, + }), + ); + + if (!result.txid) { + throw new Error("Failed to broadcast PSBT"); + } + + return ccc.hexFrom(result.txid); + } } diff --git a/packages/xverse/tsconfig.base.json b/packages/xverse/tsconfig.base.json deleted file mode 100644 index 7e5ac952b..000000000 --- a/packages/xverse/tsconfig.base.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "incremental": true, - "allowJs": true, - "importHelpers": false, - "declaration": true, - "declarationMap": true, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictBindCallApply": true, - "strictNullChecks": true, - "alwaysStrict": true, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": ["src/**/*"] -} diff --git a/packages/xverse/tsconfig.commonjs.json b/packages/xverse/tsconfig.commonjs.json deleted file mode 100644 index 76a25e98b..000000000 --- a/packages/xverse/tsconfig.commonjs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", - "outDir": "./dist.commonjs" - } -} diff --git a/packages/xverse/tsconfig.json b/packages/xverse/tsconfig.json index df22faeca..3399c6f67 100644 --- a/packages/xverse/tsconfig.json +++ b/packages/xverse/tsconfig.json @@ -1,8 +1,25 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { + "target": "es2022", + "incremental": true, + "allowJs": true, + "importHelpers": false, + "declaration": true, + "declarationMap": true, + "experimentalDecorators": true, + "useDefineForClassFields": false, + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "strictNullChecks": true, + "alwaysStrict": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "module": "ESNext", "moduleResolution": "Bundler", - "outDir": "./dist", - } + "rootDir": "./src" + }, + "include": ["src/**/*"] } diff --git a/packages/xverse/tsdown.config.mts b/packages/xverse/tsdown.config.mts new file mode 100644 index 000000000..4951574d0 --- /dev/null +++ b/packages/xverse/tsdown.config.mts @@ -0,0 +1,43 @@ +import { defineConfig } from "tsdown"; + +const common = { + minify: true, + dts: true, + platform: "neutral" as const, + sourcemap: true, + exports: true, +}; + +const entry = { + index: "src/index.ts", + barrel: "src/barrel.ts", + advanced: "src/advanced.ts", + advancedBarrel: "src/advancedBarrel.ts", +} as const; + +const bundleDeps: string[] = []; + +export default defineConfig( + ( + [ + { + entry, + deps: { + onlyBundle: [] as string[], + }, + format: "esm", + copy: "./misc/basedirs/dist/*", + }, + { + entry, + deps: { + alwaysBundle: bundleDeps, + onlyBundle: bundleDeps, + }, + format: "cjs", + outDir: "dist.commonjs", + copy: "./misc/basedirs/dist.commonjs/*", + }, + ] as const + ).map((c) => ({ ...c, ...common })), +); diff --git a/patches/bs58check@4.0.0.patch b/patches/bs58check@4.0.0.patch deleted file mode 100644 index f57c69f50..000000000 --- a/patches/bs58check@4.0.0.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/package.json b/package.json -index 66d45a73078b2b149d19fa2280568bd6b8908d0b..32fe88fb7b22b340e513a9f9027e7a122b002389 100644 ---- a/package.json -+++ b/package.json -@@ -2,7 +2,6 @@ - "name": "bs58check", - "version": "4.0.0", - "description": "A straightforward implementation of base58-check encoding", -- "type": "module", - "keywords": [ - "base", - "base58", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5f049314..050f98894 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,51 +4,46 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -patchedDependencies: - bs58check@4.0.0: - hash: 0848a2e3956f24abf1dd8620cba2a3f468393e489185d9536ad109f7e5712d26 - path: patches/bs58check@4.0.0.patch - importers: .: devDependencies: '@changesets/changelog-github': - specifier: ^0.5.1 - version: 0.5.1 + specifier: ^0.7.0 + version: 0.7.0 '@changesets/cli': - specifier: ^2.29.6 - version: 2.29.6(@types/node@25.6.0) + specifier: ^2.31.0 + version: 2.31.0(@types/node@26.0.0) '@types/jest': specifier: ^30.0.0 version: 30.0.0 '@vitest/coverage-v8': - specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + specifier: 4.1.9 + version: 4.1.9(vitest@4.1.9) jest: - specifier: 30.1.1 - version: 30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)) + specifier: 30.4.2 + version: 30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)) ts-jest: - specifier: ^29.4.1 - version: 29.4.1(@babel/core@7.28.3)(@jest/transform@30.1.1)(@jest/types@30.0.5)(babel-jest@30.1.1(@babel/core@7.28.3))(jest-util@30.0.5)(jest@30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)))(typescript@5.9.2) + specifier: ^29.4.11 + version: 29.4.11(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)))(typescript@6.0.3) typedoc: - specifier: 0.28.7 - version: 0.28.7(typescript@5.9.2) + specifier: 0.28.19 + version: 0.28.19(typescript@6.0.3) typedoc-material-theme: - specifier: ^1.4.0 - version: 1.4.0(typedoc@0.28.7(typescript@5.9.2)) + specifier: ^1.4.1 + version: 1.4.1(typedoc@0.28.19(typescript@6.0.3)) typedoc-plugin-extras: specifier: ^4.0.1 - version: 4.0.1(typedoc@0.28.7(typescript@5.9.2)) + version: 4.0.1(typedoc@0.28.19(typescript@6.0.3)) typedoc-plugin-ga: - specifier: ^1.0.5 - version: 1.0.5(@types/eslint@9.6.1)(typedoc@0.28.7(typescript@5.9.2))(typescript@5.9.2) + specifier: ^1.1.1 + version: 1.1.1(@types/eslint@9.6.1)(typedoc@0.28.19(typescript@6.0.3))(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + specifier: ^4.1.9 + version: 4.1.9(@types/node@26.0.0)(@vitest/coverage-v8@4.1.9)(vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/ccc: dependencies: @@ -81,35 +76,32 @@ importers: version: link:../xverse devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) copyfiles: specifier: ^2.4.1 version: 2.4.1 eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/ckb-ccc: dependencies: @@ -118,35 +110,32 @@ importers: version: link:../ccc devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) copyfiles: specifier: ^2.4.1 version: 2.4.1 eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/connector: dependencies: @@ -154,36 +143,33 @@ importers: specifier: workspace:* version: link:../ccc lit: - specifier: ^3.3.1 - version: 3.3.1 + specifier: ^3.3.3 + version: 3.3.3 devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/connector-react: dependencies: @@ -192,135 +178,129 @@ importers: version: link:../connector '@lit/react': specifier: ^1.0.8 - version: 1.0.8(@types/react@19.2.14) + version: 1.0.8(@types/react@19.2.15) '@types/react': specifier: '>=16' - version: 19.2.14 + version: 19.2.15 react: specifier: '>=16' version: 19.2.3 devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/core: dependencies: '@joyid/ckb': - specifier: ^1.1.2 - version: 1.1.2(typescript@5.9.2)(zod@3.25.76) + specifier: ^1.1.4 + version: 1.1.4(typescript@6.0.3) '@noble/ciphers': - specifier: ^0.5.3 - version: 0.5.3 + specifier: ^2.2.0 + version: 2.2.0 '@noble/curves': - specifier: ^1.9.7 - version: 1.9.7 + specifier: ^2.2.0 + version: 2.2.0 '@noble/hashes': - specifier: ^1.8.0 - version: 1.8.0 + specifier: ^2.2.0 + version: 2.2.0 bech32: specifier: ^2.0.0 version: 2.0.0 bs58check: specifier: ^4.0.0 - version: 4.0.0(patch_hash=0848a2e3956f24abf1dd8620cba2a3f468393e489185d9536ad109f7e5712d26) + version: 4.0.0 buffer: specifier: ^6.0.3 version: 6.0.3 ethers: - specifier: ^6.15.0 - version: 6.15.0 + specifier: ^6.17.0 + version: 6.17.0 isomorphic-ws: specifier: ^5.0.0 - version: 5.0.0(ws@8.18.3) + version: 5.0.0(ws@8.21.0) ws: - specifier: ^8.18.3 - version: 8.18.3 + specifier: ^8.21.0 + version: 8.21.0 devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) '@types/ws': specifier: ^8.18.1 version: 8.18.1 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) + tsdown: + specifier: 0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + specifier: ^4.1.9 + version: 4.1.9(@types/node@26.0.0)(@vitest/coverage-v8@4.1.9)(vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/demo: dependencies: '@lit/react': specifier: ^1.0.8 - version: 1.0.8(@types/react@19.2.14) + version: 1.0.8(@types/react@19.2.15) '@next/third-parties': specifier: ^16.0.10 - version: 16.0.10(next@16.0.10(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5) + version: 16.0.10(next@16.0.10(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6) '@uiw/react-json-view': specifier: 2.0.0-alpha.37 - version: 2.0.0-alpha.37(@babel/runtime@7.28.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 2.0.0-alpha.37(@babel/runtime@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) lucide-react: specifier: ^0.542.0 - version: 0.542.0(react@19.2.5) + version: 0.542.0(react@19.2.6) next: specifier: 16.0.10 - version: 16.0.10(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 16.0.10(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react: specifier: ^19.2.5 - version: 19.2.5 + version: 19.2.6 react-dom: specifier: ^19.2.5 - version: 19.2.5(react@19.2.5) + version: 19.2.6(react@19.2.6) devDependencies: '@ckb-ccc/connector-react': specifier: workspace:* @@ -351,10 +331,10 @@ importers: version: 3.3.1 '@headlessui/react': specifier: ^2.2.7 - version: 2.2.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 2.2.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@heroicons/react': specifier: ^2.2.0 - version: 2.2.0(react@19.2.5) + version: 2.2.0(react@19.2.6) '@scure/bip32': specifier: ^2.0.0 version: 2.0.0 @@ -369,22 +349,22 @@ importers: version: 24.3.0 '@types/react': specifier: ^19.2.14 - version: 19.2.14 + version: 19.2.15 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.15) eslint: specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + version: 9.34.0(jiti@2.7.0) eslint-config-next: specifier: 16.0.10 - version: 16.0.10(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + version: 16.0.10(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@9.34.0(jiti@2.7.0)) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0))(prettier@3.6.2) postcss: specifier: ^8.5.6 version: 8.5.6 @@ -404,6 +384,55 @@ importers: specifier: ^5.9.2 version: 5.9.2 + packages/did-ckb: + dependencies: + '@ckb-ccc/core': + specifier: workspace:* + version: link:../core + '@ckb-ccc/type-id': + specifier: workspace:* + version: link:../type-id + '@ipld/dag-cbor': + specifier: ^10.0.1 + version: 10.0.1 + '@noble/curves': + specifier: ^2.2.0 + version: 2.2.0 + devDependencies: + '@eslint/js': + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) + '@types/node': + specifier: ^26.0.0 + version: 26.0.0 + eslint: + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) + prettier: + specifier: ^3.8.4 + version: 3.8.4 + prettier-plugin-organize-imports: + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + vitest: + specifier: ^4.1.9 + version: 4.1.9(@types/node@26.0.0)(@vitest/coverage-v8@4.1.9)(vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + packages/docs: dependencies: '@orama/tokenizers': @@ -411,59 +440,59 @@ importers: version: 3.1.18 fumadocs-core: specifier: 16.8.5 - version: 16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.0)(lucide-react@1.11.0(react@19.2.5))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) + version: 16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(algoliasearch@5.46.0)(lucide-react@1.17.0(react@19.2.6))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3) fumadocs-mdx: specifier: 14.3.2 - version: 14.3.2(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.0)(lucide-react@1.11.0(react@19.2.5))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(mdast-util-directive@3.1.0)(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(vite@7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 14.3.2(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.15)(fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(algoliasearch@5.46.0)(lucide-react@1.17.0(react@19.2.6))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(mdast-util-directive@3.1.0)(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(vite@7.3.5(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) fumadocs-ui: specifier: 16.8.5 - version: 16.8.5(@tailwindcss/oxide@4.2.4)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.0)(lucide-react@1.11.0(react@19.2.5))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.4) + version: 16.8.5(@tailwindcss/oxide@4.3.0)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(algoliasearch@5.46.0)(lucide-react@1.17.0(react@19.2.6))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(tailwindcss@4.3.0) lucide-react: specifier: ^1.11.0 - version: 1.11.0(react@19.2.5) + version: 1.17.0(react@19.2.6) mermaid: specifier: ^11.15.0 version: 11.15.0 next: specifier: 16.2.4 - version: 16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) next-themes: specifier: ^0.4.6 - version: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 0.4.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react: specifier: ^19.2.5 - version: 19.2.5 + version: 19.2.6 react-dom: specifier: ^19.2.5 - version: 19.2.5(react@19.2.5) + version: 19.2.6(react@19.2.6) tailwind-merge: specifier: ^3.5.0 - version: 3.5.0 + version: 3.6.0 zod: specifier: ^4.3.0 - version: 4.3.6 + version: 4.4.3 devDependencies: '@tailwindcss/postcss': specifier: ^4.2.4 - version: 4.2.4 + version: 4.3.0 '@types/mdx': specifier: ^2.0.13 version: 2.0.13 '@types/node': specifier: ^25.6.0 - version: 25.6.0 + version: 25.9.1 '@types/react': specifier: ^19.2.14 - version: 19.2.14 + version: 19.2.15 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.15) postcss: specifier: ^8.5.10 - version: 8.5.12 + version: 8.5.15 tailwindcss: specifier: ^4.2.4 - version: 4.2.4 + version: 4.3.0 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -473,37 +502,34 @@ importers: '@ckb-ccc/core': specifier: workspace:* version: link:../core + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/examples: dependencies: @@ -512,35 +538,41 @@ importers: version: link:../ccc '@ckb-ccc/playground': specifier: file:src/playground - version: playground@file:packages/examples/src/playground + version: file:packages/examples/src/playground + '@noble/curves': + specifier: ^2.2.0 + version: 2.2.0 + '@noble/hashes': + specifier: ^2.2.0 + version: 2.2.0 + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/faucet: dependencies: @@ -610,19 +642,19 @@ importers: version: 6.0.3 '@typescript-eslint/eslint-plugin': specifier: ^8.41.0 - version: 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + version: 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) '@typescript-eslint/parser': specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + version: 8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) eslint: specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + version: 9.34.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@9.34.0(jiti@2.7.0)) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0))(prettier@3.6.2) globals: specifier: ^16.3.0 version: 16.3.0 @@ -643,7 +675,7 @@ importers: version: 7.1.4 ts-jest: specifier: ^29.4.1 - version: 29.4.1(@babel/core@7.28.3)(@jest/transform@30.1.1)(@jest/types@30.0.5)(babel-jest@30.1.1(@babel/core@7.28.3))(jest-util@30.0.5)(jest@30.1.1(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)))(typescript@5.9.2) + version: 29.4.11(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.1.1(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)))(typescript@5.9.2) ts-loader: specifier: ^9.5.4 version: 9.5.4(typescript@5.9.2)(webpack@5.100.2) @@ -658,7 +690,7 @@ importers: version: 5.9.2 typescript-eslint: specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + version: 8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) packages/joy-id: dependencies: @@ -666,42 +698,39 @@ importers: specifier: workspace:* version: link:../core '@joyid/ckb': - specifier: ^1.1.2 - version: 1.1.2(typescript@5.9.2)(zod@3.25.76) + specifier: ^1.1.4 + version: 1.1.4(typescript@6.0.3) '@joyid/common': - specifier: ^0.2.1 - version: 0.2.1(typescript@5.9.2)(zod@3.25.76) + specifier: ^0.2.2 + version: 0.2.2(typescript@6.0.3) + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/lumos-patches: dependencies: @@ -724,76 +753,70 @@ importers: specifier: 0.24.0-next.2 version: 0.24.0-next.2 '@joyid/ckb': - specifier: ^1.1.2 - version: 1.1.2(typescript@5.9.2)(zod@3.25.76) + specifier: ^1.1.4 + version: 1.1.4(typescript@6.0.3) + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/nip07: dependencies: '@ckb-ccc/core': specifier: workspace:* version: link:../core + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/okx: dependencies: @@ -806,40 +829,40 @@ importers: '@ckb-ccc/uni-sat': specifier: workspace:* version: link:../uni-sat + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/playground: dependencies: + '@bitcoinerlab/secp256k1': + specifier: ^1.2.0 + version: 1.2.0 '@ckb-ccc/ccc': specifier: workspace:* version: link:../ccc @@ -854,13 +877,13 @@ importers: version: 0.2.5(satori@0.10.14) '@next/third-parties': specifier: ^15.5.2 - version: 15.5.2(next@16.0.10(@babel/core@7.28.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + version: 15.5.2(next@16.0.10(@babel/core@7.29.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) '@noble/curves': - specifier: ^1.9.7 - version: 1.9.7 + specifier: ^2.2.0 + version: 2.2.0 '@noble/hashes': - specifier: ^1.8.0 - version: 1.8.0 + specifier: ^2.2.0 + version: 2.2.0 '@shikijs/monaco': specifier: ^3.12.0 version: 3.12.0 @@ -870,9 +893,12 @@ importers: bech32: specifier: ^2.0.0 version: 2.0.0 + bitcoinjs-lib: + specifier: ^7.0.0 + version: 7.0.0(typescript@5.9.2) isomorphic-ws: specifier: ^5.0.0 - version: 5.0.0(ws@8.18.3) + version: 5.0.0(ws@8.21.0) lucide-react: specifier: ^0.542.0 version: 0.542.0(react@19.2.3) @@ -881,7 +907,7 @@ importers: version: 0.52.2 next: specifier: 16.0.10 - version: 16.0.10(@babel/core@7.28.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 16.0.10(@babel/core@7.29.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) prettier: specifier: ^3.6.2 version: 3.6.2 @@ -909,25 +935,25 @@ importers: version: 24.3.0 '@types/react': specifier: ^19.2.14 - version: 19.2.14 + version: 19.2.15 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.14) + version: 19.2.3(@types/react@19.2.15) '@types/webpack-env': specifier: ^1.18.8 version: 1.18.8 eslint: specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + version: 9.34.0(jiti@2.7.0) eslint-config-next: specifier: 16.0.10 - version: 16.0.10(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + version: 16.0.10(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3))(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@9.34.0(jiti@2.7.0)) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0))(prettier@3.6.2) postcss: specifier: ^8.5.6 version: 8.5.6 @@ -939,7 +965,7 @@ importers: version: 0.6.14(prettier-plugin-organize-imports@4.2.0(prettier@3.6.2)(typescript@5.9.2))(prettier@3.6.2) raw-loader: specifier: ^4.0.2 - version: 4.0.2(webpack@5.101.3) + version: 4.0.2(webpack@5.101.3(lightningcss@1.32.0)(postcss@8.5.6)) tailwindcss: specifier: ^4.1.12 version: 4.1.12 @@ -949,83 +975,83 @@ importers: '@ckb-ccc/core': specifier: workspace:* version: link:../core + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/shell: dependencies: '@ckb-ccc/core': specifier: workspace:* version: link:../core + '@ckb-ccc/did-ckb': + specifier: workspace:* + version: link:../did-ckb '@ckb-ccc/spore': specifier: workspace:* version: link:../spore '@ckb-ccc/ssri': specifier: workspace:* version: link:../ssri + '@ckb-ccc/type-id': + specifier: workspace:* + version: link:../type-id '@ckb-ccc/udt': specifier: workspace:* version: link:../udt devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) copyfiles: specifier: ^2.4.1 version: 2.4.1 eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/spore: dependencies: @@ -1033,121 +1059,162 @@ importers: specifier: workspace:* version: link:../core axios: - specifier: ^1.11.0 - version: 1.11.0 + specifier: ^1.18.0 + version: 1.18.0 + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) '@types/node': - specifier: ^24.3.0 - version: 24.3.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^26.0.0 + version: 26.0.0 dotenv: - specifier: ^17.2.1 - version: 17.2.1 + specifier: ^17.4.2 + version: 17.4.2 eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + specifier: ^4.1.9 + version: 4.1.9(@types/node@26.0.0)(@vitest/coverage-v8@4.1.9)(vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/ssri: dependencies: '@ckb-ccc/core': specifier: workspace:* version: link:../core + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) '@types/node': - specifier: ^24.3.0 - version: 24.3.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^26.0.0 + version: 26.0.0 eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/tests: + dependencies: + '@types/node': + specifier: ^26.0.0 + version: 26.0.0 + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@ckb-ccc/ccc': specifier: workspace:* version: link:../ccc '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) tsx: - specifier: ^4.20.5 - version: 4.20.5 + specifier: ^4.22.4 + version: 4.22.4 typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + + packages/type-id: + dependencies: + '@ckb-ccc/core': + specifier: workspace:* + version: link:../core + devDependencies: + '@eslint/js': + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) + '@types/node': + specifier: ^26.0.0 + version: 26.0.0 + eslint: + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) + prettier: + specifier: ^3.8.4 + version: 3.8.4 + prettier-plugin-organize-imports: + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + vitest: + specifier: ^4.1.9 + version: 4.1.9(@types/node@26.0.0)(@vitest/coverage-v8@4.1.9)(vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/udt: dependencies: @@ -1157,159 +1224,150 @@ importers: '@ckb-ccc/ssri': specifier: workspace:* version: link:../ssri + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) '@types/node': - specifier: ^24.3.0 - version: 24.3.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^26.0.0 + version: 26.0.0 eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/uni-sat: dependencies: '@ckb-ccc/core': specifier: workspace:* version: link:../core + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/utxo-global: dependencies: '@ckb-ccc/core': specifier: workspace:* version: link:../core + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages/xverse: dependencies: '@ckb-ccc/core': specifier: workspace:* version: link:../core + bitcoinjs-lib: + specifier: ^7.0.1 + version: 7.0.1(typescript@6.0.3) + tsdown: + specifier: ^0.22.3 + version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)) valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.9.2) + specifier: ^1.4.1 + version: 1.4.1(typescript@6.0.3) devDependencies: '@eslint/js': - specifier: ^9.34.0 - version: 9.34.0 - copyfiles: - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@2.7.0)) eslint: - specifier: ^9.34.0 - version: 9.34.0(jiti@2.6.1) + specifier: ^10.5.0 + version: 10.5.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-prettier: - specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2) + specifier: ^5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.8.4 + version: 3.8.4 prettier-plugin-organize-imports: - specifier: ^4.2.0 - version: 4.2.0(prettier@3.6.2)(typescript@5.9.2) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^4.3.0 + version: 4.3.0(prettier@3.8.4)(typescript@6.0.3) typescript: - specifier: ^5.9.2 - version: 5.9.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.41.0 - version: 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + specifier: ^8.61.1 + version: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) packages: - '@adraffy/ens-normalize@1.10.1': - resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + '@adraffy/ens-normalize@1.11.1': + resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} '@algolia/abtesting@1.12.0': resolution: {integrity: sha512-EfW0bfxjPs+C7ANkJDw2TATntfBKsFiy7APh+KO0pQ8A6HYa5I0NjFuCGCXWfzzzLXNZta3QUl3n5Kmm6aJo9Q==} @@ -1371,10 +1429,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@angular-devkit/core@19.2.15': resolution: {integrity: sha512-pU2RZYX6vhd7uLSdLwPnuBcr0mXJSjp3EgOXKsrlQFQZevc+Qs+2JdXgIElnOT/aDqtRtriDmLlSbtdE8n3ZbA==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -1403,65 +1457,90 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.3': - resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/generator@8.0.0': + resolution: {integrity: sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-string-parser@8.0.0': + resolution: {integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + '@babel/helper-validator-identifier@8.0.2': + resolution: {integrity: sha512-9Fr9QeyCAyi1BR1jKZ6uYQ24EIhQUx5ReHfQU7drOE+TPOb+w11/dsqLkMOT2U29OdCT71XajrOT8xDc1C7orA==} + engines: {node: ^22.18.0 || >=24.11.0} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.3': - resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} '@babel/highlight@7.25.9': resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.3': - resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@8.0.0': + resolution: {integrity: sha512-aLxAE+imI9bCcyaPrUDjBv3uSkWieifjLe0kuFOZF0zli0L6GCsTmsePnTr55adbIAgYz2zhN1vnFimCBUYcRQ==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -1483,8 +1562,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.27.1': - resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} + '@babel/plugin-syntax-import-attributes@7.29.7': + resolution: {integrity: sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1499,8 +1578,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + '@babel/plugin-syntax-jsx@7.29.7': + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1547,31 +1626,31 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.27.1': - resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} + '@babel/plugin-syntax-typescript@7.29.7': + resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.3': - resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.3': - resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} - engines: {node: '>=6.9.0'} + '@babel/types@8.0.0': + resolution: {integrity: sha512-K8ponJDxBwDHigkeFqaqT5wLGl4bTlwMafR8k7b5CPxr6Ww+UG9ls8Yx6Tcpboxu97eeGVEEyKcHmEyOwN1vSw==} + engines: {node: ^22.18.0 || >=24.11.0} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1580,42 +1659,45 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@bitcoinerlab/secp256k1@1.2.0': + resolution: {integrity: sha512-jeujZSzb3JOZfmJYI0ph1PVpCRV5oaexCgy+RvCXV8XlY+XFB/2n3WOcvBsKLsOw78KYgnQrQWb2HrKE4be88Q==} + '@borewit/text-codec@0.1.1': resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} '@braintree/sanitize-url@7.1.2': resolution: {integrity: sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==} - '@changesets/apply-release-plan@7.0.12': - resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==} + '@changesets/apply-release-plan@7.1.1': + resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} - '@changesets/assemble-release-plan@6.0.9': - resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} + '@changesets/assemble-release-plan@6.0.10': + resolution: {integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==} '@changesets/changelog-git@0.2.1': resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@changesets/changelog-github@0.5.1': - resolution: {integrity: sha512-BVuHtF+hrhUScSoHnJwTELB4/INQxVFc+P/Qdt20BLiBFIHFJDDUaGsZw+8fQeJTRP5hJZrzpt3oZWh0G19rAQ==} + '@changesets/changelog-github@0.7.0': + resolution: {integrity: sha512-rBsbRvc4TVn+FvFnOVM3LxlFJfTXXCp8gfVJ+0BubxWNSVnLuAzowi5j+IEraLLP52w8AAs9QfKbPS3MMiXQJA==} - '@changesets/cli@2.29.6': - resolution: {integrity: sha512-6qCcVsIG1KQLhpQ5zE8N0PckIx4+9QlHK3z6/lwKnw7Tir71Bjw8BeOZaxA/4Jt00pcgCnCSWZnyuZf5Il05QQ==} + '@changesets/cli@2.31.0': + resolution: {integrity: sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==} hasBin: true - '@changesets/config@3.1.1': - resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} + '@changesets/config@3.1.4': + resolution: {integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - '@changesets/get-dependents-graph@2.1.3': - resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} + '@changesets/get-dependents-graph@2.1.4': + resolution: {integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==} - '@changesets/get-github-info@0.6.0': - resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} + '@changesets/get-github-info@0.8.0': + resolution: {integrity: sha512-cRnC+xdF0JIik7coko3iUP9qbnfi1iJQ3sAa6dE+Tx3+ET8bjFEm63PA4WEohgjYcmsOikPHWzPsMWWiZmntOQ==} - '@changesets/get-release-plan@4.0.13': - resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==} + '@changesets/get-release-plan@4.0.16': + resolution: {integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} @@ -1626,14 +1708,14 @@ packages: '@changesets/logger@0.1.1': resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - '@changesets/parse@0.4.1': - resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} + '@changesets/parse@0.4.3': + resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==} '@changesets/pre@2.0.2': resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} - '@changesets/read@0.6.5': - resolution: {integrity: sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==} + '@changesets/read@0.6.7': + resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==} '@changesets/should-skip-package@0.1.2': resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} @@ -1650,6 +1732,9 @@ packages: '@chevrotain/types@11.1.2': resolution: {integrity: sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==} + '@ckb-ccc/playground@file:packages/examples/src/playground': + resolution: {directory: packages/examples/src/playground, type: directory} + '@ckb-lumos/base@0.24.0-next.2': resolution: {integrity: sha512-VCXYpykJ+OhjbcCp3imwt9rk3Ie2T8jyCjSXExkoyKY+QT+EI856p37KBbBdO4r7gguVtADnJS+WLIZoNm5Bvw==} engines: {node: '>=12.0.0'} @@ -1698,17 +1783,29 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/core@1.4.5': - resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} - '@emnapi/wasi-threads@1.0.4': - resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@esbuild/aix-ppc64@0.25.9': - resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1719,8 +1816,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.9': - resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1731,8 +1828,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.9': - resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1743,8 +1840,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.9': - resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1755,8 +1852,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.9': - resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -1767,8 +1864,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.9': - resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -1779,8 +1876,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.9': - resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -1791,8 +1888,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.9': - resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -1803,8 +1900,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.9': - resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -1815,8 +1912,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.9': - resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -1827,8 +1924,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.9': - resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -1839,8 +1936,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.9': - resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -1851,8 +1948,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.9': - resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -1863,8 +1960,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.9': - resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -1875,8 +1972,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.9': - resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -1887,8 +1984,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.9': - resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1899,8 +1996,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.9': - resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -1911,8 +2008,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.9': - resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -1923,8 +2020,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.9': - resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -1935,8 +2032,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.9': - resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1947,8 +2044,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.9': - resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -1959,8 +2056,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.9': - resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -1971,8 +2068,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.9': - resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -1983,8 +2080,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.9': - resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -1995,8 +2092,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.9': - resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2007,8 +2104,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.9': - resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2025,22 +2122,44 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/config-array@0.21.0': resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/config-helpers@0.3.1': resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/core@0.15.2': resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2049,6 +2168,15 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + '@eslint/js@8.57.1': resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2061,10 +2189,18 @@ packages: resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/plugin-kit@0.3.5': resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@euberdeveloper/eslint-plugin@2.7.0': resolution: {integrity: sha512-IyZfysHjYCSU6Ty86imkCZmZ5diTAOKn7DlEmEO1yHhFjvVk+xFr0ApjTD7TyIQolnBPixZNw477V7mq86llcw==} @@ -2100,8 +2236,8 @@ packages: tailwindcss: optional: true - '@gerrit0/mini-shiki@3.12.0': - resolution: {integrity: sha512-CF1vkfe2ViPtmoFEvtUWilEc4dOCiFzV8+J7/vEISSsslKQ97FjeTPNMCqUhZEiKySmKRgK3UO/CxtkyOp7DvA==} + '@gerrit0/mini-shiki@3.23.0': + resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} '@headlessui/react@2.2.7': resolution: {integrity: sha512-WKdTymY8Y49H8/gUc/lIyYK1M+/6dq0Iywh4zTZVAaiTDprRfioxSgD0wnXTQTBpjpGJuTL1NO/mqEvc//5SSg==} @@ -2180,89 +2316,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -2332,8 +2484,8 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@1.0.1': - resolution: {integrity: sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==} + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -2426,13 +2578,8 @@ packages: '@types/node': optional: true - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} + '@ipld/dag-cbor@10.0.1': + resolution: {integrity: sha512-nF07iiZPqduSXyMxc0jGANArRHFa9hjMQpQlgLOV2O/3xI1CNb5sXhvbmigbMiz5owSGi0Oq10VtauupMojuiw==} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -2446,14 +2593,18 @@ packages: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + '@istanbuljs/schema@0.1.6': + resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} engines: {node: '>=8'} '@jest/console@30.1.1': resolution: {integrity: sha512-f7TGqR1k4GtN5pyFrKmq+ZVndesiwLU33yDpJIGMS9aW+j6hKjue7ljeAdznBsH9kAnxUWe2Y+Y3fLV/FJt3gA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/console@30.4.1': + resolution: {integrity: sha512-v3bhyxUh9Hgmo5p6hAOXe14/R3ZxZDOsvHleh4B07z3m/x4/ngPUXEm9XwK4sF4u+f+P2ORb0Ge+MgpaqRMVDA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/core@30.1.1': resolution: {integrity: sha512-3ncU9peZ3D2VdgRkdZtUceTrDgX5yiDRwAFjtxNfU22IiZrpVWlv/FogzDLYSJQptQGfFo3PcHK86a2oG6WUGg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2463,26 +2614,55 @@ packages: node-notifier: optional: true + '@jest/core@30.4.2': + resolution: {integrity: sha512-TZJA6cPJUFxoWhxaLo8t0VX/MZX2wPWr0uIDvLSHIvN4gu9h02vSzqI2kBADG1ExqQlC+cY09xKMSreivvrChQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + '@jest/diff-sequences@30.0.1': resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/diff-sequences@30.4.0': + resolution: {integrity: sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/environment@30.1.1': resolution: {integrity: sha512-yWHbU+3j7ehQE+NRpnxRvHvpUhoohIjMePBbIr8lfe0cWVb0WeTf80DNux1GPJa18CDHiIU5DtksGUfxcDE+Rw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/environment@30.4.1': + resolution: {integrity: sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/expect-utils@30.1.1': resolution: {integrity: sha512-5YUHr27fpJ64dnvtu+tt11ewATynrHkGYD+uSFgRr8V2eFJis/vEXgToyLwccIwqBihVfz9jwio+Zr1ab1Zihw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/expect-utils@30.4.1': + resolution: {integrity: sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/expect@30.1.1': resolution: {integrity: sha512-3vHIHsF+qd3D8FU2c7U5l3rg1fhDwAYcGyHyZAi94YIlTwcJ+boNhRyJf373cl4wxbOX+0Q7dF40RTrTFTSuig==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/expect@30.4.1': + resolution: {integrity: sha512-ginrj6TMgh2GshLUGCjO94Ptx9HhdZA/I6A9iUfyeLKFtdAjnKzHDgzgP9HYQgbxM1lbXScQ2eUBz2lGeVDPWA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/fake-timers@30.1.1': resolution: {integrity: sha512-fK/25dNgBNYPw3eLi2CRs57g1H04qBAFNMsUY3IRzkfx/m4THe0E1zF+yGQBOMKKc2XQVdc9EYbJ4hEm7/2UtA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/fake-timers@30.4.1': + resolution: {integrity: sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/get-type@30.1.0': resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2491,10 +2671,18 @@ packages: resolution: {integrity: sha512-NNUUkHT2TU/xztZl6r1UXvJL+zvCwmZsQDmK69fVHHcB9fBtlu3FInnzOve/ZoyKnWY8JXWJNT+Lkmu1+ubXUA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/globals@30.4.1': + resolution: {integrity: sha512-ZbuY4cmXC8DkxYjfvT2DbcHWL2T6vmsMhXCDcmTB2T0y0gaezBI77ufq5ZAIdcRkYZ7NEQEDg1xFeKbxUJ5v5Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/pattern@30.0.1': resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/pattern@30.4.0': + resolution: {integrity: sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/reporters@30.1.1': resolution: {integrity: sha512-Hb2Bq80kahOC6Sv2waEaH1rEU6VdFcM6WHaRBWQF9tf30+nJHxhl/Upbgo9+25f0mOgbphxvbwSMjSgy9gW/FA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2504,14 +2692,31 @@ packages: node-notifier: optional: true + '@jest/reporters@30.4.1': + resolution: {integrity: sha512-/SnkPCzEQpUaBH81kjdEdDdo2WZl5hxw+BmLDGWjRkm8o7XlhjwsU36cqwe5PGBE5WYpBvDzRSdXx9rbGuJtNA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + '@jest/schemas@30.0.5': resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/schemas@30.4.1': + resolution: {integrity: sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/snapshot-utils@30.1.1': resolution: {integrity: sha512-TkVBc9wuN22TT8hESRFmjjg/xIMu7z0J3UDYtIRydzCqlLPTB7jK1DDBKdnTUZ4zL3z3rnPpzV6rL1Uzh87sXg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/snapshot-utils@30.4.1': + resolution: {integrity: sha512-ObY4ljvQ95mt6iwKtVLetR/4yXiAgl3H4nJxhztr0MTjrN97TwDYrnCp/kF60Ec9HdhkWTHSu+Hg05aXfngpOA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/source-map@30.0.1': resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2520,23 +2725,39 @@ packages: resolution: {integrity: sha512-bMdj7fNu8iZuBPSnbVir5ezvWmVo4jrw7xDE+A33Yb3ENCoiJK9XgOLgal+rJ9XSKjsL7aPUMIo87zhN7I5o2w==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/test-result@30.4.1': + resolution: {integrity: sha512-/ZG7pgEiOmmWkN9TplKbOu4id2N5lh7FHwRwlkgBVAzGdRH+OkkQ8wX/kIxg4zmd3ZQvAL1RwL2yWsvNYYECTw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/test-sequencer@30.1.1': resolution: {integrity: sha512-yruRdLXSA3HYD/MTNykgJ6VYEacNcXDFRMqKVAwlYegmxICUiT/B++CNuhJnYJzKYks61iYnjVsMwbUqmmAYJg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/test-sequencer@30.4.1': + resolution: {integrity: sha512-PeYE+4td5rKjoRPxztObrXU+H8hsjZfxKMXOcmrr34JerSyB/ROOxbbicz8B7A5j9R9VayDnVPvBmedqCsFCdw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/transform@30.1.1': resolution: {integrity: sha512-PHIA2AbAASBfk6evkNifvmx9lkOSkmvaQoO6VSpuL8+kQqDMHeDoJ7RU3YP1wWAMD7AyQn9UL5iheuFYCC4lqQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/transform@30.4.1': + resolution: {integrity: sha512-Wz0LyktlTvRefoymh+n64hQ84KNXsRGcwdoZ8CSa0Ea+fgYcHZlnk+hDP7v2MS7il2bQ5uTEIxf4/NNfhMN4KQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/types@30.0.5': resolution: {integrity: sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@joyid/ckb@1.1.2': - resolution: {integrity: sha512-+e+ISF566zaKNhKNSSS5kBw8or4Kb5Xqxe/2jVkUXKkqVHSS02Trrqe0g4IjSyeN9bszzolr1XgStv2hz62tqA==} + '@jest/types@30.4.1': + resolution: {integrity: sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@joyid/ckb@1.1.4': + resolution: {integrity: sha512-8WqcfFd/kfttuaIf2/XsRcmQkEwYLUnZc9UZRcGSVX6GkwzpOLVY5S6Hq+fDXY82lQo9upJGjjudrtcPKYPx3g==} - '@joyid/common@0.2.1': - resolution: {integrity: sha512-DjA+Cy0koTCmPzhkhHkPc0icRLE78ktZY46rXHXfkSqxwQIJ/ED/whPoeF5tkTrN+teIC/hfzVRVkEE4zh/ASQ==} + '@joyid/common@0.2.2': + resolution: {integrity: sha512-Sh9cBlbL+WgcKJ7jngELg5oY0qAO1trHm4iq1Ao0drWwi4biF8p3cb5mAEoO36UxXOy3CYSDbECWLGIP9lWNgg==} '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -2554,8 +2775,8 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.30': - resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -2600,8 +2821,11 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@napi-rs/wasm-runtime@1.1.5': + resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 '@nervina-labs/dob-render@0.2.5': resolution: {integrity: sha512-PZ5hcoTYfbdyI51xlHdK1j9VYTd6L1oYxEv9CzpYuu0AtkOqSNmrbn2FkI4noUJl+tqxqWSsJRju7JJiOApTpg==} @@ -2726,48 +2950,56 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-gnu@16.2.4': resolution: {integrity: sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-musl@16.0.10': resolution: {integrity: sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-arm64-musl@16.2.4': resolution: {integrity: sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-x64-gnu@16.0.10': resolution: {integrity: sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-gnu@16.2.4': resolution: {integrity: sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-musl@16.0.10': resolution: {integrity: sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-linux-x64-musl@16.2.4': resolution: {integrity: sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-win32-arm64-msvc@16.0.10': resolution: {integrity: sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==} @@ -2808,6 +3040,10 @@ packages: '@noble/ciphers@0.5.3': resolution: {integrity: sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==} + '@noble/ciphers@2.2.0': + resolution: {integrity: sha512-Z6pjIZ/8IJcCGzb2S/0Px5J81yij85xASuk1teLNeg75bfT07MV3a/O2Mtn1I2se43k3lkVEcFaR10N4cgQcZA==} + engines: {node: '>= 20.19.0'} + '@noble/curves@1.2.0': resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} @@ -2819,6 +3055,10 @@ packages: resolution: {integrity: sha512-RiwZZeJnsTnhT+/gg2KvITJZhK5oagQrpZo+yQyd3mv3D5NAG2qEeEHpw7IkXRlpkoD45wl2o4ydHAvY9wyEfw==} engines: {node: '>= 20.19.0'} + '@noble/curves@2.2.0': + resolution: {integrity: sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ==} + engines: {node: '>= 20.19.0'} + '@noble/hashes@1.3.2': resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} @@ -2831,6 +3071,10 @@ packages: resolution: {integrity: sha512-h8VUBlE8R42+XIDO229cgisD287im3kdY6nbNZJFjc6ZvKIXPYXe6Vc/t+kyjFdMFyt5JpapzTsEg8n63w5/lw==} engines: {node: '>= 20.19.0'} + '@noble/hashes@2.2.0': + resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} + engines: {node: '>= 20.19.0'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2860,6 +3104,12 @@ packages: resolution: {integrity: sha512-Ra4dFddWZ7hCGPAehnd/6QZjlzQvczYSt1y1Fq4HteJqRu2yvfR6fXvxiUnKi+HIgJYPxKhebJEjvJdF8LYQWg==} engines: {node: '>= 20.0.0'} + '@oxc-project/types@0.106.0': + resolution: {integrity: sha512-QdsH3rZq480VnOHSHgPYOhjL8O8LBdcnSjM408BpPCCUc0JYYZPG9Gafl9i3OcGk/7137o+gweb4cCv3WAUykg==} + + '@oxc-project/types@0.137.0': + resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} + '@paralleldrive/cuid2@2.2.2': resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} @@ -2871,6 +3121,13 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@pkgr/core@0.3.6': + resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} + engines: {node: ^14.18.0 || >=16.0.0} + + '@quansync/fs@1.0.0': + resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} + '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -3273,103 +3530,323 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@rollup/rollup-android-arm-eabi@4.49.0': - resolution: {integrity: sha512-rlKIeL854Ed0e09QGYFlmDNbka6I3EQFw7iZuugQjMb11KMpJCLPFL4ZPbMfaEhLADEL1yx0oujGkBQ7+qW3eA==} + '@rolldown/binding-android-arm64@1.0.0-beta.58': + resolution: {integrity: sha512-mWj5eE4Qc8TbPdGGaaLvBb9XfDPvE1EmZkJQgiGKwchkWH4oAJcRAKMTw7ZHnb1L+t7Ah41sBkAecaIsuUgsug==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-android-arm64@1.1.2': + resolution: {integrity: sha512-2cZ+7xRS+DBcuJBJKnfzsbleumJhBqSlJVpuzHC0nTqfd3QQ7Vx2/x5YR/D7cBamKSeWplwo82Fn9lqYUDEMfA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.58': + resolution: {integrity: sha512-wFxUymI/5R8bH8qZFYDfAxAN9CyISEIYke+95oZPiv6EWo88aa5rskjVcCpKA532R+klFmdqjbbaD56GNmTF4Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-arm64@1.1.2': + resolution: {integrity: sha512-RkPMJnygxsgOYdkfqgpwY0/Fzm8d0VQe6HGU2/B00Xa9eqdLbrII+DOKAodbJAn3ZL1AJxGHkZRPYazgGY6Ljw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.58': + resolution: {integrity: sha512-ybp3MkPj23VDV9PhtRwdU5qrGhlViWRV5BjKwO6epaSlUD5lW0WyY+roN3ZAzbma/9RrMTgZ/a/gtQq8YXOcqw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.1.2': + resolution: {integrity: sha512-Uiczh6vFhwyfd7WNe7Q7mCA4KxAiLdz7jPE/WGizfRpIieoyFuNVMmM8HqZ9HwudTkY6/AeMQwlNJ9NJijguWw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.58': + resolution: {integrity: sha512-Evxj3yh7FWvyklUYZa0qTVT9N2zX9TPDqGF056hl8hlCZ9/ndQ2xMv6uw9PD1VlLpukbsqL+/C6M0qwipL0QMg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-freebsd-x64@1.1.2': + resolution: {integrity: sha512-+TpdtTRgHiJFjCVFbw311SuLk3KfytPOQQn+VlAEv+gBxYPtL7E6JS9e/tk+8CwxhIZvemJKo4rTKgfWNsKkkA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58': + resolution: {integrity: sha512-tYeXprDOrEgVHUbPXH6MPso4cM/c6RTkmJNICMQlYdki4hGMh92aj3yU6CKs+4X5gfG0yj5kVUw/L4M685SYag==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm-gnueabihf@1.1.2': + resolution: {integrity: sha512-4lv1/tkmi7ueIVHnyreaOeUpiZP26BH9rRy6hoYfR9310A2B9nUEVRDvBx69vx64Nr3eTPPRkyciqJJs+j9Jmw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58': + resolution: {integrity: sha512-N78vmZzP6zG967Ohr+MasCjmKtis0geZ1SOVmxrA0/bklTQSzH5kHEjW5Qn+i1taFno6GEre1E40v0wuWsNOQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-gnu@1.1.2': + resolution: {integrity: sha512-gBSUVO0eaWgw1JMjK3gB8BMlX2Mk148s2lTiVT3e9vjVxbl7UDfMWWY8CfIaaqiXuM9fVTMxIpUz6CAo/B6Vlw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58': + resolution: {integrity: sha512-l+p4QVtG72C7wI2SIkNQw/KQtSjuYwS3rV6AKcWrRBF62ClsFUcif5vLaZIEbPrCXu5OFRXigXFJnxYsVVZqdQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-arm64-musl@1.1.2': + resolution: {integrity: sha512-LjQP/iZLBu8o8PjIfk4x3At0/mT6h282pvz8Z5LAyhGbu/kDezyO7ea62rF5uoqmgnIYqbN/MqJ3Si3Aymi7xQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.1.2': + resolution: {integrity: sha512-X/7bVLWelEsbyWDUSXt7zVsTniLLPIY2n1rH58qr78l9i7MNbbxBWD8gI2vRfBWf4NUXJCUuQnfZDsp32LqsfQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.1.2': + resolution: {integrity: sha512-gb6dYKW/1KDorGXyy48glEBJs/sxVSC5pcVrox/pFGV4mvwSFeg2sK5L2tRkVsVlh7kueqOgg4GEcuipJcGuKg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58': + resolution: {integrity: sha512-urzJX0HrXxIh0FfxwWRjfPCMeInU9qsImLQxHBgLp5ivji1EEUnOfux8KxPPnRQthJyneBrN2LeqUix9DYrNaQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.1.2': + resolution: {integrity: sha512-JY4w85pU3iAiJVMh5nuk4/Mh9GjMsupe8MrIN53rwxAZW64GKrWeJBuN6SxQg9QTU5uB1cxyhDzW8jqRn1EABw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.58': + resolution: {integrity: sha512-7ijfVK3GISnXIwq/1FZo+KyAUJjL3kWPJ7rViAL6MWeEBhEgRzJ0yEd9I8N9aut8Y8ab+EKFJyRNMWZuUBwQ0A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-x64-musl@1.1.2': + resolution: {integrity: sha512-xvpA7o5KCYLB0Rwscmuylb1/zHHSUx4g4xilm4prC5jP76pEUlzBmMbgpbh7bVDbId4NcfT96gN5i6mE6UDaiw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.58': + resolution: {integrity: sha512-/m7sKZCS+cUULbzyJTIlv8JbjNohxbpAOA6cM+lgWgqVzPee3U6jpwydrib328JFN/gF9A99IZEnuGYqEDJdww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-openharmony-arm64@1.1.2': + resolution: {integrity: sha512-p/ts6KBLjuk49Bp21XH77poQGt02iNz7ChgHep7tudPOaLinR/De/RHdxF8w8Yj4r/bF/bqXwH6PZrB2sA+Nvw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.58': + resolution: {integrity: sha512-6SZk7zMgv+y3wFFQ9qE5P9NnRHcRsptL1ypmudD26PDY+PvFCvfHRkJNfclWnvacVGxjowr7JOL3a9fd1wWhUw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-wasm32-wasi@1.1.2': + resolution: {integrity: sha512-VMu/wmrZ9hJzYlRhbw7jK5PODlugyKZ5mOdX78+lS8OvuFkWNQdz1pFLrI2p3P0pjXOmUZ7B48o5VnMH9QOGtg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58': + resolution: {integrity: sha512-sFqfYPnBZ6xBhMkadB7UD0yjEDRvs7ipR3nCggblN+N4ODCXY6qhg/bKL39+W+dgQybL7ErD4EGERVbW9DAWvg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-arm64-msvc@1.1.2': + resolution: {integrity: sha512-xtUJqs8qEkuSviS0n1tsohaPuz3a1SPhZywOji4Oo+sgrJs8daEDMZ0QtqL0OS7dx8PoVpg2J/ZZycPY5I2+Zg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58': + resolution: {integrity: sha512-AnFWJdAqB8+IDPcGrATYs67Kik/6tnndNJV2jGRmwlbeNiQQ8GhRJU8ETRlINfII0pqi9k4WWLnb00p1QCxw/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.1.2': + resolution: {integrity: sha512-85YiLQqjUKgSO/Zjnf9e0XIn5Ymrh1fLDWBeAkZqpuBR/3R8TpfoHXuyblqyQrftSSgWO9qpcHN8mkyKsLraoA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.58': + resolution: {integrity: sha512-qWhDs6yFGR5xDfdrwiSa3CWGIHxD597uGE/A9xGqytBjANvh4rLCTTkq7szhMV4+Ygh+PMS90KVJ8xWG/TkX4w==} + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + + '@rollup/rollup-android-arm-eabi@4.62.2': + resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.49.0': - resolution: {integrity: sha512-cqPpZdKUSQYRtLLr6R4X3sD4jCBO1zUmeo3qrWBCqYIeH8Q3KRL4F3V7XJ2Rm8/RJOQBZuqzQGWPjjvFUcYa/w==} + '@rollup/rollup-android-arm64@4.62.2': + resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.49.0': - resolution: {integrity: sha512-99kMMSMQT7got6iYX3yyIiJfFndpojBmkHfTc1rIje8VbjhmqBXE+nb7ZZP3A5skLyujvT0eIUCUsxAe6NjWbw==} + '@rollup/rollup-darwin-arm64@4.62.2': + resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.49.0': - resolution: {integrity: sha512-y8cXoD3wdWUDpjOLMKLx6l+NFz3NlkWKcBCBfttUn+VGSfgsQ5o/yDUGtzE9HvsodkP0+16N0P4Ty1VuhtRUGg==} + '@rollup/rollup-darwin-x64@4.62.2': + resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.49.0': - resolution: {integrity: sha512-3mY5Pr7qv4GS4ZvWoSP8zha8YoiqrU+e0ViPvB549jvliBbdNLrg2ywPGkgLC3cmvN8ya3za+Q2xVyT6z+vZqA==} + '@rollup/rollup-freebsd-arm64@4.62.2': + resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.49.0': - resolution: {integrity: sha512-C9KzzOAQU5gU4kG8DTk+tjdKjpWhVWd5uVkinCwwFub2m7cDYLOdtXoMrExfeBmeRy9kBQMkiyJ+HULyF1yj9w==} + '@rollup/rollup-freebsd-x64@4.62.2': + resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.49.0': - resolution: {integrity: sha512-OVSQgEZDVLnTbMq5NBs6xkmz3AADByCWI4RdKSFNlDsYXdFtlxS59J+w+LippJe8KcmeSSM3ba+GlsM9+WwC1w==} + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} cpu: [arm] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.49.0': - resolution: {integrity: sha512-ZnfSFA7fDUHNa4P3VwAcfaBLakCbYaxCk0jUnS3dTou9P95kwoOLAMlT3WmEJDBCSrOEFFV0Y1HXiwfLYJuLlA==} + '@rollup/rollup-linux-arm-musleabihf@4.62.2': + resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} cpu: [arm] os: [linux] + libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.49.0': - resolution: {integrity: sha512-Z81u+gfrobVK2iV7GqZCBfEB1y6+I61AH466lNK+xy1jfqFLiQ9Qv716WUM5fxFrYxwC7ziVdZRU9qvGHkYIJg==} + '@rollup/rollup-linux-arm64-gnu@4.62.2': + resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} cpu: [arm64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.49.0': - resolution: {integrity: sha512-zoAwS0KCXSnTp9NH/h9aamBAIve0DXeYpll85shf9NJ0URjSTzzS+Z9evmolN+ICfD3v8skKUPyk2PO0uGdFqg==} + '@rollup/rollup-linux-arm64-musl@4.62.2': + resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==} cpu: [arm64] os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.62.2': + resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==} + cpu: [loong64] + os: [linux] + libc: [glibc] - '@rollup/rollup-linux-loongarch64-gnu@4.49.0': - resolution: {integrity: sha512-2QyUyQQ1ZtwZGiq0nvODL+vLJBtciItC3/5cYN8ncDQcv5avrt2MbKt1XU/vFAJlLta5KujqyHdYtdag4YEjYQ==} + '@rollup/rollup-linux-loong64-musl@4.62.2': + resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==} cpu: [loong64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.49.0': - resolution: {integrity: sha512-k9aEmOWt+mrMuD3skjVJSSxHckJp+SiFzFG+v8JLXbc/xi9hv2icSkR3U7uQzqy+/QbbYY7iNB9eDTwrELo14g==} + '@rollup/rollup-linux-ppc64-gnu@4.62.2': + resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==} cpu: [ppc64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.49.0': - resolution: {integrity: sha512-rDKRFFIWJ/zJn6uk2IdYLc09Z7zkE5IFIOWqpuU0o6ZpHcdniAyWkwSUWE/Z25N/wNDmFHHMzin84qW7Wzkjsw==} + '@rollup/rollup-linux-ppc64-musl@4.62.2': + resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.62.2': + resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==} cpu: [riscv64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.49.0': - resolution: {integrity: sha512-FkkhIY/hYFVnOzz1WeV3S9Bd1h0hda/gRqvZCMpHWDHdiIHn6pqsY3b5eSbvGccWHMQ1uUzgZTKS4oGpykf8Tw==} + '@rollup/rollup-linux-riscv64-musl@4.62.2': + resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==} cpu: [riscv64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.49.0': - resolution: {integrity: sha512-gRf5c+A7QiOG3UwLyOOtyJMD31JJhMjBvpfhAitPAoqZFcOeK3Kc1Veg1z/trmt+2P6F/biT02fU19GGTS529A==} + '@rollup/rollup-linux-s390x-gnu@4.62.2': + resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==} cpu: [s390x] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.49.0': - resolution: {integrity: sha512-BR7+blScdLW1h/2hB/2oXM+dhTmpW3rQt1DeSiCP9mc2NMMkqVgjIN3DDsNpKmezffGC9R8XKVOLmBkRUcK/sA==} + '@rollup/rollup-linux-x64-gnu@4.62.2': + resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==} cpu: [x64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.49.0': - resolution: {integrity: sha512-hDMOAe+6nX3V5ei1I7Au3wcr9h3ktKzDvF2ne5ovX8RZiAHEtX1A5SNNk4zt1Qt77CmnbqT+upb/umzoPMWiPg==} + '@rollup/rollup-linux-x64-musl@4.62.2': + resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==} cpu: [x64] os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.62.2': + resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.62.2': + resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==} + cpu: [arm64] + os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.49.0': - resolution: {integrity: sha512-wkNRzfiIGaElC9kXUT+HLx17z7D0jl+9tGYRKwd8r7cUqTL7GYAvgUY++U2hK6Ar7z5Z6IRRoWC8kQxpmM7TDA==} + '@rollup/rollup-win32-arm64-msvc@4.62.2': + resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.49.0': - resolution: {integrity: sha512-gq5aW/SyNpjp71AAzroH37DtINDcX1Qw2iv9Chyz49ZgdOP3NV8QCyKZUrGsYX9Yyggj5soFiRCgsL3HwD8TdA==} + '@rollup/rollup-win32-ia32-msvc@4.62.2': + resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.49.0': - resolution: {integrity: sha512-gEtqFbzmZLFk2xKh7g0Rlo8xzho8KrEFEkzvHbfUGkrgXOpZ4XagQ6n+wIZFNh1nTb8UD16J4nFSFKXYgnbdBg==} + '@rollup/rollup-win32-x64-gnu@4.62.2': + resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.62.2': + resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==} cpu: [x64] os: [win32] @@ -3388,50 +3865,62 @@ packages: '@shikijs/core@3.12.0': resolution: {integrity: sha512-rPfCBd6gHIKBPpf2hKKWn2ISPSrmRKAFi+bYDjvZHpzs3zlksWvEwaF3Z4jnvW+xHxSRef7qDooIJkY0RpA9EA==} - '@shikijs/core@4.0.2': - resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==} + '@shikijs/core@4.1.0': + resolution: {integrity: sha512-jLJtSJeuFffqX6/inRE1zqU5aFv2hrszvYgq3OjbAgFRZiWv7abKMDdQzYxuSDfmUPQozZvI/kuy6VMTvnvqTQ==} engines: {node: '>=20'} '@shikijs/engine-javascript@3.12.0': resolution: {integrity: sha512-Ni3nm4lnKxyKaDoXQQJYEayX052BL7D0ikU5laHp+ynxPpIF1WIwyhzrMU6WDN7AoAfggVR4Xqx3WN+JTS+BvA==} - '@shikijs/engine-javascript@4.0.2': - resolution: {integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==} + '@shikijs/engine-javascript@4.1.0': + resolution: {integrity: sha512-YquhawCUgaBfhsS72e2Y/dI59gCBNPHu3fEO/tvLaXrTssxZrY5ddjtNLTwndrMgPo8b3IscE+xoICDzpTmlFQ==} engines: {node: '>=20'} '@shikijs/engine-oniguruma@3.12.0': resolution: {integrity: sha512-IfDl3oXPbJ/Jr2K8mLeQVpnF+FxjAc7ZPDkgr38uEw/Bg3u638neSrpwqOTnTHXt1aU0Fk1/J+/RBdst1kVqLg==} - '@shikijs/engine-oniguruma@4.0.2': - resolution: {integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==} + '@shikijs/engine-oniguruma@3.23.0': + resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + + '@shikijs/engine-oniguruma@4.1.0': + resolution: {integrity: sha512-axLpjVs45YBvvINa+dJF+NPW+KtFkNXsFr4SDw2BMj9GdeMnGxVB9PQb2xXlJYovslt/nz6giedAyOANkfc7hg==} engines: {node: '>=20'} '@shikijs/langs@3.12.0': resolution: {integrity: sha512-HIca0daEySJ8zuy9bdrtcBPhcYBo8wR1dyHk1vKrOuwDsITtZuQeGhEkcEfWc6IDyTcom7LRFCH6P7ljGSCEiQ==} - '@shikijs/langs@4.0.2': - resolution: {integrity: sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==} + '@shikijs/langs@3.23.0': + resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + + '@shikijs/langs@4.1.0': + resolution: {integrity: sha512-nwOMruEkbgdZfQ/b8CgpNBVOpvG1k0N5tbmgiFeqsan401+x3ILqlzZJowSla4Agmq4hG2Uf2wh5jLTEhR8VSg==} engines: {node: '>=20'} '@shikijs/monaco@3.12.0': resolution: {integrity: sha512-09crK+Q6p2h2U/YLKK9jMmxSwjA+Rj7sr1Q4/PxzgJzKuFpGAXW1hdq2CPdD0Bk+5wlIGYg4NjLFlZMuYzVaZA==} - '@shikijs/primitive@4.0.2': - resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==} + '@shikijs/primitive@4.1.0': + resolution: {integrity: sha512-zx2/2Uwj2q9X3KSyYREEhXO23xBw5WUhP4orK2lE4r+t9JGITmEe0JH+wPmJhqHpOT2bRRs6lAL945+LDvOAGw==} engines: {node: '>=20'} '@shikijs/themes@3.12.0': resolution: {integrity: sha512-/lxvQxSI5s4qZLV/AuFaA4Wt61t/0Oka/P9Lmpr1UV+HydNCczO3DMHOC/CsXCCpbv4Zq8sMD0cDa7mvaVoj0Q==} - '@shikijs/themes@4.0.2': - resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==} + '@shikijs/themes@3.23.0': + resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + + '@shikijs/themes@4.1.0': + resolution: {integrity: sha512-emCcTnUM7yO2wltYbaxm+yLvcCI4+h8XBKc4KmJ7EZUXoSGjcCHifkI//R4OFit9ewpg7H2/9tjOuXrT2v/Knw==} engines: {node: '>=20'} '@shikijs/types@3.12.0': resolution: {integrity: sha512-jsFzm8hCeTINC3OCmTZdhR9DOl/foJWplH2Px0bTi4m8z59fnsueLsweX82oGcjRQ7mfQAluQYKGoH2VzsWY4A==} - '@shikijs/types@4.0.2': - resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==} + '@shikijs/types@3.23.0': + resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + + '@shikijs/types@4.1.0': + resolution: {integrity: sha512-3EQWX54fMpniOrDblzAhiwiJwpiTMW6+B9DWyUd9ska483tbayFYuw47UxwuPknI31bKnySfVQ/QW+jFL4rFdA==} engines: {node: '>=20'} '@shikijs/vscode-textmate@10.0.2': @@ -3445,12 +3934,18 @@ packages: '@sinclair/typebox@0.34.40': resolution: {integrity: sha512-gwBNIP8ZAYev/ORDWW0QvxdwPXwxBtLsdsJgSc7eDIRt8ubP+rxUBzPsrwnu16fgEF8Bx4lh/+mvQvJzcTM6Kw==} + '@sinclair/typebox@0.34.49': + resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} '@sinonjs/fake-timers@13.0.5': resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + '@sinonjs/fake-timers@15.4.0': + resolution: {integrity: sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -3463,8 +3958,8 @@ packages: '@tailwindcss/node@4.1.12': resolution: {integrity: sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==} - '@tailwindcss/node@4.2.4': - resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==} + '@tailwindcss/node@4.3.0': + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} '@tailwindcss/oxide-android-arm64@4.1.12': resolution: {integrity: sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==} @@ -3472,8 +3967,8 @@ packages: cpu: [arm64] os: [android] - '@tailwindcss/oxide-android-arm64@4.2.4': - resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==} + '@tailwindcss/oxide-android-arm64@4.3.0': + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} engines: {node: '>= 20'} cpu: [arm64] os: [android] @@ -3484,8 +3979,8 @@ packages: cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-arm64@4.2.4': - resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==} + '@tailwindcss/oxide-darwin-arm64@4.3.0': + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] @@ -3496,8 +3991,8 @@ packages: cpu: [x64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.2.4': - resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==} + '@tailwindcss/oxide-darwin-x64@4.3.0': + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] @@ -3508,8 +4003,8 @@ packages: cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-freebsd-x64@4.2.4': - resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==} + '@tailwindcss/oxide-freebsd-x64@4.3.0': + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] @@ -3520,8 +4015,8 @@ packages: cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': - resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} engines: {node: '>= 20'} cpu: [arm] os: [linux] @@ -3531,48 +4026,56 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] - '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': - resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-arm64-musl@4.1.12': resolution: {integrity: sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] - '@tailwindcss/oxide-linux-arm64-musl@4.2.4': - resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==} + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] + libc: [musl] '@tailwindcss/oxide-linux-x64-gnu@4.1.12': resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] - '@tailwindcss/oxide-linux-x64-gnu@4.2.4': - resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==} + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} engines: {node: '>= 20'} cpu: [x64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-x64-musl@4.1.12': resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] - '@tailwindcss/oxide-linux-x64-musl@4.2.4': - resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==} + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} engines: {node: '>= 20'} cpu: [x64] os: [linux] + libc: [musl] '@tailwindcss/oxide-wasm32-wasi@4.1.12': resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==} @@ -3586,8 +4089,8 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-wasm32-wasi@4.2.4': - resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==} + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -3604,8 +4107,8 @@ packages: cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': - resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==} + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] @@ -3616,8 +4119,8 @@ packages: cpu: [x64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.2.4': - resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==} + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} engines: {node: '>= 20'} cpu: [x64] os: [win32] @@ -3626,15 +4129,15 @@ packages: resolution: {integrity: sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==} engines: {node: '>= 10'} - '@tailwindcss/oxide@4.2.4': - resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==} + '@tailwindcss/oxide@4.3.0': + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} engines: {node: '>= 20'} '@tailwindcss/postcss@4.1.12': resolution: {integrity: sha512-5PpLYhCAwf9SJEeIsSmCDLgyVfdBhdBpzX1OJ87anT9IVR0Z9pjM0FNixCAUAHGnMBGB8K99SwAheXrT0Kh6QQ==} - '@tailwindcss/postcss@4.2.4': - resolution: {integrity: sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg==} + '@tailwindcss/postcss@4.3.0': + resolution: {integrity: sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w==} '@tanstack/react-virtual@3.13.12': resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==} @@ -3652,8 +4155,8 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} @@ -3664,8 +4167,8 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tybys/wasm-util@0.10.0': - resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -3685,8 +4188,8 @@ packages: '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -3787,8 +4290,8 @@ packages: '@types/d3@7.4.3': resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -3802,12 +4305,18 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/express-serve-static-core@5.0.7': resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==} @@ -3838,6 +4347,9 @@ packages: '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/jsesc@2.5.1': + resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3856,6 +4368,9 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mdx@2.0.14': + resolution: {integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==} + '@types/methods@1.1.4': resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} @@ -3874,8 +4389,11 @@ packages: '@types/node@24.3.0': resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} - '@types/node@25.6.0': - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + + '@types/node@26.0.0': + resolution: {integrity: sha512-vf2YFi1iY9lHGwNJMs01biZFbKJkrZR1T6/MlzjhJLPdntOHLhTrDSnSVcdtvjihi4VQNlrFRIxLsDBlQpAipA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3891,11 +4409,11 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.14': - resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/react@19.2.15': + resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==} - '@types/semver@7.7.0': - resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} '@types/send@0.17.5': resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} @@ -3933,8 +4451,8 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} '@typescript-eslint/eslint-plugin@6.21.0': resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} @@ -3963,6 +4481,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/eslint-plugin@8.61.1': + resolution: {integrity: sha512-ZPlVl3PB3et/59Ne0fv/sci6ZXz4T4Hp4nTJ56i/Y0gR89ARb+KphojTq6j+56E5PIezmOIOOWyY+aWQFd+IkQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.61.1 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/parser@6.21.0': resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3987,6 +4513,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.61.1': + resolution: {integrity: sha512-PJ5vePq5/ognBbrIcoC5+SHO5dfpeLPzP9FpLkzWrguoYQEeeSjlJpVwOpo1JRSTEi7dRcwNy4h4dzV70PqHcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/project-service@8.41.0': resolution: {integrity: sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3999,6 +4532,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.61.1': + resolution: {integrity: sha512-PrC4JYGmR241lYnfhmKGTXkFqv8+ymbTFgSAY0fVXpY82/QkMw5TZPl+vGzuDDU2QYJk9fIDOBTntF+yDv9LEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/scope-manager@6.21.0': resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4011,6 +4550,10 @@ packages: resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.61.1': + resolution: {integrity: sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.41.0': resolution: {integrity: sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4023,6 +4566,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.61.1': + resolution: {integrity: sha512-UN/H4di+OO7EWx2ovME+8t31YO+KVnK0RRKEHR3kOt21/Ay8BOq3M1OMvWs5vNiqcFCYGYoxK3MXPZzmMUE+yg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/type-utils@6.21.0': resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4047,6 +4596,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.61.1': + resolution: {integrity: sha512-GYRicKmVK0C4fsKgaACaknOUAq9Oa2kwsjnpFhFcS/5p4Ht5IP9OVLbgIgcK4SRk92nVHFluurg1lumD9dBcLw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4059,6 +4615,10 @@ packages: resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.61.1': + resolution: {integrity: sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4080,6 +4640,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.61.1': + resolution: {integrity: sha512-u+oQD3BqYWPc8YV9Zab4vaJElJuwOLPRc10Jm1o/qS+6Qwen14HCWwx0Seo4LnSn2wxea2Ik8DxPt2/FHmuhrg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/utils@6.21.0': resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4100,6 +4666,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.61.1': + resolution: {integrity: sha512-1+P/3Dj6jvtybE1q0HQ6yBt/gq+oKJyLdEv4HdnqasaEXRSYCAsD59mXEVQnM/ULNdQxbX77tdG4jPRjIS6knA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + '@typescript-eslint/visitor-keys@6.21.0': resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4112,6 +4685,10 @@ packages: resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.61.1': + resolution: {integrity: sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@uiw/react-json-view@2.0.0-alpha.37': resolution: {integrity: sha512-y9G0Kz4O4gkTRWh0xoBj2G+QRsC4DQ18XZAF5Q5AdtSTZCM6HfifjiNgQBJIsg0nDndw3432wgpyW9ROV+1FVQ==} peerDependencies: @@ -4123,141 +4700,169 @@ packages: resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} deprecated: Potential CWE-502 - Update to 1.3.1 or higher - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + '@ungap/structured-clone@1.3.1': + resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==} cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + '@unrs/resolver-binding-android-arm64@1.12.2': + resolution: {integrity: sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==} cpu: [arm64] os: [android] - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + '@unrs/resolver-binding-darwin-arm64@1.12.2': + resolution: {integrity: sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + '@unrs/resolver-binding-darwin-x64@1.12.2': + resolution: {integrity: sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + '@unrs/resolver-binding-freebsd-x64@1.12.2': + resolution: {integrity: sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': + resolution: {integrity: sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': + resolution: {integrity: sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': + resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} cpu: [arm64] os: [linux] + libc: [glibc] - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': + resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} cpu: [arm64] os: [linux] + libc: [musl] + + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': + resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': + resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} + cpu: [loong64] + os: [linux] + libc: [musl] - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': + resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} cpu: [ppc64] os: [linux] + libc: [glibc] - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': + resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} cpu: [riscv64] os: [linux] + libc: [glibc] - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': + resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} cpu: [riscv64] os: [linux] + libc: [musl] - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': + resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} cpu: [s390x] os: [linux] + libc: [glibc] - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': + resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} cpu: [x64] os: [linux] + libc: [glibc] - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + '@unrs/resolver-binding-linux-x64-musl@1.12.2': + resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} cpu: [x64] os: [linux] + libc: [musl] + + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} + cpu: [arm64] + os: [openharmony] - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + '@unrs/resolver-binding-wasm32-wasi@1.12.2': + resolution: {integrity: sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': + resolution: {integrity: sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': + resolution: {integrity: sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': + resolution: {integrity: sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==} cpu: [x64] os: [win32] '@upsetjs/venn.js@2.0.0': resolution: {integrity: sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==} - '@vitest/coverage-v8@3.2.4': - resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + '@vitest/coverage-v8@4.1.9': + resolution: {integrity: sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g==} peerDependencies: - '@vitest/browser': 3.2.4 - vitest: 3.2.4 + '@vitest/browser': 4.1.9 + vitest: 4.1.9 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.1.9': + resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==} - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + '@vitest/mocker@4.1.9': + resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.1.9': + resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@4.1.9': + resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@4.1.9': + resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.1.9': + resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==} - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.1.9': + resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -4338,8 +4943,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} acorn@8.15.0: @@ -4347,9 +4952,18 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -4379,9 +4993,15 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + algoliasearch@5.46.0: resolution: {integrity: sha512-7ML6fa2K93FIfifG3GMWhDEwT5qQzPTmoHKCTvhzGEwdbQ4n0yYUWZlLYT75WllTGJCJtNUI0C1ybN4BCegqvg==} engines: {node: '>= 14.0.0'} @@ -4422,6 +5042,10 @@ packages: resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} engines: {node: '>=14'} + ansis@4.3.1: + resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} + engines: {node: '>=14'} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -4492,11 +5116,15 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-kit@3.0.0: + resolution: {integrity: sha512-8OG92q3R35qjC/4i6BLBMg8IB+fClWu/1PEwg2Z9Rn+BuNaiEgJzpzn+pxWOdHJWDCAwu2JP0wCDTozAM4QirQ==} + engines: {node: ^22.18.0 || >=24.11.0} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - ast-v8-to-istanbul@0.3.4: - resolution: {integrity: sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA==} + ast-v8-to-istanbul@1.0.4: + resolution: {integrity: sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA==} astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} @@ -4520,6 +5148,9 @@ packages: axios@1.11.0: resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} + axios@1.18.0: + resolution: {integrity: sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw==} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -4533,14 +5164,24 @@ packages: peerDependencies: '@babel/core': ^7.11.0 - babel-plugin-istanbul@7.0.0: - resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} + babel-jest@30.4.1: + resolution: {integrity: sha512-fATAbM8piYxkiXQp3RBXmZHxZVNJZAVXXfyeyCN2Tida3+qJ8ea9UxhiJ2y4fLO90ZImKt6k9FlcH2+rLkJGhw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@babel/core': ^7.11.0 || ^8.0.0-0 + + babel-plugin-istanbul@7.0.1: + resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==} engines: {node: '>=12'} babel-plugin-jest-hoist@30.0.1: resolution: {integrity: sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + babel-plugin-jest-hoist@30.4.0: + resolution: {integrity: sha512-9EdtWM/sSfXLOGLwSn+GS6pIXyBnL07/8gyJlwFXjWy4DxMOyItqyUT29d4lQiS380EZwYlX7/At4PgBS+m2aA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + babel-preset-current-node-syntax@1.2.0: resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} peerDependencies: @@ -4552,12 +5193,22 @@ packages: peerDependencies: '@babel/core': ^7.11.0 + babel-preset-jest@30.4.0: + resolution: {integrity: sha512-lBY4jxsNmCnSiu7kquw8ZC9F4+XLMOKypT3RnNHPvU2Kpd4W0xaPuLr5ZkRyOsvLYAY4yaW1ZwTW4xB7NIiZzg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@babel/core': ^7.11.0 || ^8.0.0-beta.1 + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base-x@4.0.1: resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} @@ -4571,8 +5222,13 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.23: - resolution: {integrity: sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==} + baseline-browser-mapping@2.10.32: + resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==} + engines: {node: '>=6.0.0'} + hasBin: true + + baseline-browser-mapping@2.10.38: + resolution: {integrity: sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==} engines: {node: '>=6.0.0'} hasBin: true @@ -4586,6 +5242,21 @@ packages: big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + bip174@3.0.0: + resolution: {integrity: sha512-N3vz3rqikLEu0d6yQL8GTrSkpYb35NQKWMR7Hlza0lOj6ZOlvQ3Xr7N9Y+JPebaCVoEUHdBeBSuLxcHr71r+Lw==} + engines: {node: '>=18.0.0'} + + birpc@4.0.0: + resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} + + bitcoinjs-lib@7.0.0: + resolution: {integrity: sha512-2W6dGXFd1KG3Bs90Bzb5+ViCeSKNIYkCUWZ4cvUzUgwnneiNNZ6Sk8twGNcjlesmxC0JyLc/958QycfpvXLg7A==} + engines: {node: '>=18.0.0'} + + bitcoinjs-lib@7.0.1: + resolution: {integrity: sha512-vwEmpL5Tpj0I0RBdNkcDMXePoaYSTeKY6mL6/l5esbnTs+jGdPDuLp4NY1hSh6Zk5wSgePygZ4Wx5JJao30Pww==} + engines: {node: '>=18.0.0'} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -4605,8 +5276,12 @@ packages: brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -4620,6 +5295,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -4657,9 +5337,9 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} + cac@7.0.0: + resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} + engines: {node: '>=20.19.0'} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} @@ -4691,11 +5371,18 @@ packages: caniuse-lite@1.0.30001737: resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==} + caniuse-lite@1.0.30001799: + resolution: {integrity: sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==} + + cborg@5.1.1: + resolution: {integrity: sha512-BDbSRIp6XrQXkTc7g+DN0RB9RrDPTUfals2ecWUlt3juPLjbAvy/V72mJcXY0Ehu0Dq/3WpNCOCT68HUTbW+lw==} + hasBin: true + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} chalk@2.4.2: @@ -4722,12 +5409,8 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} - - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} @@ -4753,8 +5436,12 @@ packages: resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} - cjs-module-lexer@2.1.0: - resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} class-transformer@0.5.1: resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} @@ -4810,8 +5497,8 @@ packages: collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + collect-v8-coverage@1.0.3: + resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -4956,8 +5643,8 @@ packages: peerDependencies: cytoscape: ^3.2.0 - cytoscape@3.33.3: - resolution: {integrity: sha512-Gej7U+OKR+LZ8kvX7rb2HhCYJ0IhvEFsnkud4SB1PR+BUY/TsSO0dmOW59WEVLu51b1Rm+gQRKoz4bLYxGSZ2g==} + cytoscape@3.33.4: + resolution: {integrity: sha512-HIN5Pmd9MrX9BkV7tDwnOcEJCSFvCpc8X97h3f508J6I5FsqAY65wKOCvgH2CuP42CaahWaz4tuh32SOOIH7ww==} engines: {node: '>=0.10'} d3-array@2.12.1: @@ -5120,8 +5807,8 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - dayjs@1.11.20: - resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} @@ -5140,21 +5827,29 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} - dedent@1.6.0: - resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + + dedent@1.7.2: + resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: babel-plugin-macros: optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-freeze-strict@1.1.1: resolution: {integrity: sha512-QemROZMM2IvhAcCFvahdX2Vbm4S/txeq5rFYU9fh4mQP79WTMW5c/HkQ2ICl1zuzcDZdPZ6zarDxQeQMsVYoNA==} @@ -5180,6 +5875,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + delaunator@5.1.0: resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} @@ -5220,8 +5918,8 @@ packages: dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + diff@4.0.4: + resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} dir-glob@3.0.1: @@ -5236,8 +5934,8 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dompurify@3.4.3: - resolution: {integrity: sha512-VVwJidIJcp1hpg2OMXML3ZVRPYSZiq4aX7qBh83BSIpOaRDqI+qxhXjjIWnpzkOXhmp0L81lnoME1mnCc9H48A==} + dompurify@3.4.7: + resolution: {integrity: sha512-2jBxDJY4RR06tQNy4w5FlFH7kfxsQZlufd0sbv+chfHCxeJwrFw2baUDsSwvBISD4K4RDbd0PTfy3uNXsR6siA==} dotenv-expand@12.0.1: resolution: {integrity: sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==} @@ -5247,14 +5945,23 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} - dotenv@17.2.1: - resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==} + dotenv@17.4.2: + resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} + dts-resolver@3.0.0: + resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} + engines: {node: ^22.18.0 || >=24.0.0} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -5268,6 +5975,9 @@ packages: electron-to-chromium@1.5.211: resolution: {integrity: sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==} + electron-to-chromium@1.5.376: + resolution: {integrity: sha512-cUVA7/RvbFTEuw/i3obUwDTRIXojaxkResf+ibByPFxjc6XK3VNtcQXV0NSbAlJ0FMjcJGgftVVB4Qo184EXvA==} + elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -5288,6 +5998,10 @@ packages: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} + empathic@2.0.1: + resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} + engines: {node: '>=14'} + encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} @@ -5296,8 +6010,12 @@ packages: resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} - enhanced-resolve@5.21.0: - resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==} + enhanced-resolve@5.22.1: + resolution: {integrity: sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==} + engines: {node: '>=10.13.0'} + + enhanced-resolve@5.24.0: + resolution: {integrity: sha512-SkE2t82KlkkxQRVMVLAGKxLfORGQfrkx5dkj+vlgXRVNEdPc4eZcR+J/Fvj8C+yKSFH5L0q3NFlyufOVQnCcYQ==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -5312,8 +6030,8 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} es-abstract@1.24.0: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} @@ -5334,6 +6052,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -5350,8 +6071,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es-toolkit@1.46.1: - resolution: {integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==} + es-toolkit@1.47.0: + resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -5359,8 +6080,8 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - esbuild@0.25.9: - resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} hasBin: true @@ -5413,8 +6134,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-formatter-codeframe@7.32.1: - resolution: {integrity: sha512-DK/3Q3+zVKq/7PdSYiCxPrsDF8H/TRMK5n8Hziwr4IMkMy+XiKSwbpj25AdajS63I/B61Snetq4uVvX9fOLyAg==} + eslint-formatter-codeframe@7.32.2: + resolution: {integrity: sha512-0X5vEQeNniQRbGm+ec9Ow6LWj4RqZEcjPSfZ+t8qLPWqwyaBa67GrNetTxd0aYKoHrpbZeoRRlvA2gz9HujiEg==} engines: {node: ^10.12.0 || >=12.0.0} eslint-import-resolver-node@0.3.9: @@ -5490,6 +6211,20 @@ packages: eslint-config-prettier: optional: true + eslint-plugin-prettier@5.5.6: + resolution: {integrity: sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + eslint-plugin-react-hooks@7.0.1: resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} engines: {node: '>=18'} @@ -5520,6 +6255,10 @@ packages: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint-utils@3.0.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} @@ -5538,6 +6277,20 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.5.0: + resolution: {integrity: sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5558,6 +6311,10 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5571,6 +6328,10 @@ packages: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -5615,8 +6376,8 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - ethers@6.15.0: - resolution: {integrity: sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==} + ethers@6.17.0: + resolution: {integrity: sha512-BpyrpIPJ3ydEVow8zGaz1DuPS7YU8DcWxuBnY9a0UA/lvAPwrMr+EPXsfrul628SRaekPNeIM4UFh/91GWZang==} engines: {node: '>=14.0.0'} event-target-shim@5.0.1: @@ -5638,14 +6399,18 @@ packages: resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} engines: {node: '>= 0.8.0'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} expect@30.1.1: resolution: {integrity: sha512-OKe7cdic4qbfWd/CcgwJvvCrNX2KWfuMZee9AfJHL1gTYmvqjBjZG1a2NwfhspBzxzlXwsN75WWpKTYfsJpBxg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + expect@30.4.1: + resolution: {integrity: sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + express@5.1.0: resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} engines: {node: '>= 18'} @@ -5682,8 +6447,11 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -5739,8 +6507,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} follow-redirects@1.15.11: resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} @@ -5751,6 +6519,15 @@ packages: debug: optional: true + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -5770,6 +6547,10 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + formidable@3.5.4: resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} engines: {node: '>=14.0.0'} @@ -5778,8 +6559,8 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - framer-motion@12.38.0: - resolution: {integrity: sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==} + framer-motion@12.40.0: + resolution: {integrity: sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -5968,8 +6749,12 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + + get-tsconfig@5.0.0-beta.5: + resolution: {integrity: sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==} + engines: {node: '>=20.20.0'} github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -5985,8 +6770,8 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true @@ -6037,8 +6822,8 @@ packages: hachure-fill@0.5.2: resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + handlebars@4.7.9: + resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} engines: {node: '>=0.4.7'} hasBin: true @@ -6080,6 +6865,10 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} @@ -6120,6 +6909,9 @@ packages: hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hookable@6.1.1: + resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} + hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -6133,8 +6925,12 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - human-id@4.1.1: - resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-id@4.2.0: + resolution: {integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==} hasBin: true human-signals@2.1.0: @@ -6145,6 +6941,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -6171,6 +6971,10 @@ packages: import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + import-without-cache@0.4.0: + resolution: {integrity: sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==} + engines: {node: ^22.18.0 || >=24.0.0} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -6189,6 +6993,9 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -6243,8 +7050,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-data-view@1.0.2: @@ -6424,10 +7231,18 @@ packages: resolution: {integrity: sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-changed-files@30.4.1: + resolution: {integrity: sha512-IuctmYrxi21iOSOaIXpJWalHyPAsVv0GeBHKDn8C1CA4W5htHn7INL+wdnL4Bo0+olEndvAFkmb++tIQJG+vvg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-circus@30.1.1: resolution: {integrity: sha512-M3Vd4x5wD7eSJspuTvRF55AkOOBndRxgW3gqQBDlFvbH3X+ASdi8jc+EqXEeAFd/UHulVYIlC4XKJABOhLw6UA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-circus@30.4.2: + resolution: {integrity: sha512-rvHH7VlY6LgbJXJTQ87GW62g1FntOtbhh0zT+v04kC+pgL6aBKyYINXxWukCpj3dcIBMw5/XUbtDS9dU9JTXeQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-cli@30.1.1: resolution: {integrity: sha512-xm9llxuh5OoI5KZaYzlMhklryHBwg9LZy/gEaaMlXlxb+cZekGNzukU0iblbDo3XOBuN6N0CgK4ykgNRYSEb6g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -6438,6 +7253,16 @@ packages: node-notifier: optional: true + jest-cli@30.4.2: + resolution: {integrity: sha512-jfA2ocvVHMXS2QijrJ0d31ektP+d/W0T5RpcTX2Pq+3sVqHlsXVCM2+FmwpL+bdY8OfHpIg9xMxLF17Zg0U49Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + jest-config@30.1.1: resolution: {integrity: sha512-xuPGUGDw+9fPPnGmddnLnHS/mhKUiJOW7K65vErYmglEPKq65NKwSRchkQ7iv6gqjs2l+YNEsAtbsplxozdOWg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -6453,42 +7278,93 @@ packages: ts-node: optional: true + jest-config@30.4.2: + resolution: {integrity: sha512-rNHAShJQqQwFNoL0hbf3BphSBOWnpOUAKvidLS/AjNVLPfoj5mSf4jQMfW3cYOs6hXeZC7nF7mDHaBnbxELOzg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@types/node': '*' + esbuild-register: '>=3.4.0' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + esbuild-register: + optional: true + ts-node: + optional: true + jest-diff@30.1.1: resolution: {integrity: sha512-LUU2Gx8EhYxpdzTR6BmjL1ifgOAQJQELTHOiPv9KITaKjZvJ9Jmgigx01tuZ49id37LorpGc9dPBPlXTboXScw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-diff@30.4.1: + resolution: {integrity: sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-docblock@30.0.1: resolution: {integrity: sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-docblock@30.4.0: + resolution: {integrity: sha512-ZPMabUZCx5MpbZ2eBYSvZ0J8fvo3dR9oM+eeUpb3aKNQFuS2tu3Duw1TNlMoP8k3WQgKGJuhcMFvwcVuq6T7oA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-each@30.1.0: resolution: {integrity: sha512-A+9FKzxPluqogNahpCv04UJvcZ9B3HamqpDNWNKDjtxVRYB8xbZLFuCr8JAJFpNp83CA0anGQFlpQna9Me+/tQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-each@30.4.1: + resolution: {integrity: sha512-/8MJbH6fuj48TstjrMf+u/pd06Qezz5xOXvZA6442heNOWr8bdeoGZX2d9fCn028CoMgYmroH9//zky5GfyYmA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-environment-node@30.1.1: resolution: {integrity: sha512-IaMoaA6saxnJimqCppUDqKck+LKM0Jg+OxyMUIvs1yGd2neiC22o8zXo90k04+tO+49OmgMR4jTgM5e4B0S62Q==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-environment-node@30.4.1: + resolution: {integrity: sha512-4FZYVOk85hz2AyT6BbarKy9u37g6DbrDyCdFhsnDdXqyrueYQvB+0zO4f/kqLCRD0BsPRXPMNJeQwihKZV8naw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-haste-map@30.1.0: resolution: {integrity: sha512-JLeM84kNjpRkggcGpQLsV7B8W4LNUWz7oDNVnY1Vjj22b5/fAb3kk3htiD+4Na8bmJmjJR7rBtS2Rmq/NEcADg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-haste-map@30.4.1: + resolution: {integrity: sha512-rFrcONd8jeFsyw+Z9CrScJgglRf2+NFmNam8dKu7n+SoHqNYT47mn0DdEcVUZJpvh7Iz6/si7f7yUH7GJHVgnw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-leak-detector@30.1.0: resolution: {integrity: sha512-AoFvJzwxK+4KohH60vRuHaqXfWmeBATFZpzpmzNmYTtmRMiyGPVhkXpBqxUQunw+dQB48bDf4NpUs6ivVbRv1g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-leak-detector@30.4.1: + resolution: {integrity: sha512-IpmyiioeHxiWDhesHnUFmOxcTzwCwKpgACgWajtAP+nYQXiY7DakTxB6Bx9JFiRMljr0AX1PvnQdaU1KFoz6NQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-matcher-utils@30.1.1: resolution: {integrity: sha512-SuH2QVemK48BNTqReti6FtjsMPFsSOD/ZzRxU1TttR7RiRsRSe78d03bb4Cx6D4bQC/80Q8U4VnaaAH9FlbZ9w==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-matcher-utils@30.4.1: + resolution: {integrity: sha512-zvYfX5CaeEkFrrLS9suWe9rvJrm9J1Iv3ua8kIBv9GEPzcnsfBf0bob37la7s67fs0nlBC3EuvkOLnXQKxtx4A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-message-util@30.1.0: resolution: {integrity: sha512-HizKDGG98cYkWmaLUHChq4iN+oCENohQLb7Z5guBPumYs+/etonmNFlg1Ps6yN9LTPyZn+M+b/9BbnHx3WTMDg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-message-util@30.4.1: + resolution: {integrity: sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-mock@30.0.5: resolution: {integrity: sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-mock@30.4.1: + resolution: {integrity: sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-pnp-resolver@1.2.3: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} @@ -6502,38 +7378,74 @@ packages: resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-regex-util@30.4.0: + resolution: {integrity: sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-resolve-dependencies@30.1.1: resolution: {integrity: sha512-tRtaaoH8Ws1Gn1o/9pedt19dvVgr81WwdmvJSP9Ow3amOUOP2nN9j94u5jC9XlIfa2Q1FQKIWWQwL4ajqsjCGQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-resolve-dependencies@30.4.2: + resolution: {integrity: sha512-gDiVh1I+GxYzz9oXlyw+1wv6VOYX1WYxMOfjsA3iGKePV2oxmbHhwxfkALxNxYy1ciw6APWwkW2zZONwP97aEQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-resolve@30.1.0: resolution: {integrity: sha512-hASe7D/wRtZw8Cm607NrlF7fi3HWC5wmA5jCVc2QjQAB2pTwP9eVZILGEi6OeSLNUtE1zb04sXRowsdh5CUjwA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-resolve@30.4.1: + resolution: {integrity: sha512-Zry8Yq/yJcNAZ7dJ5F2heic8AheXvbFZ7XI5V+h28nrYZ7Qoyy4dItq8OodjnYD270mvX+ZudmrNV9cysqhW5Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-runner@30.1.1: resolution: {integrity: sha512-ATe6372SOfJvCRExtCAr06I4rGujwFdKg44b6i7/aOgFnULwjxzugJ0Y4AnG+jeSeQi8dU7R6oqLGmsxRUbErQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-runner@30.4.2: + resolution: {integrity: sha512-2dw0PslVYXxffXGpLo+Ejad+KcI1Qkjn7f4X4619gf21oCUmL+SPfjqIa/losUem3yEOvfNZe/F1HWUcNpODcg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-runtime@30.1.1: resolution: {integrity: sha512-7sOyR0Oekw4OesQqqBHuYJRB52QtXiq0NNgLRzVogiMSxKCMiliUd6RrXHCnG5f12Age/ggidCBiQftzcA9XKw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-runtime@30.4.2: + resolution: {integrity: sha512-3/5e8iPz2k/VLqlr8DgTftYyLUv8Su3FkCAO2/Od81UsUTpSxOrS6O5x5KkoQwyUjmpYyDJKeyAvg2T2nvpNkQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-snapshot@30.1.1: resolution: {integrity: sha512-7/iBEzoJqEt2TjkQY+mPLHP8cbPhLReZVkkxjTMzIzoTC4cZufg7HzKo/n9cIkXKj2LG0x3mmBHsZto+7TOmFg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-snapshot@30.4.1: + resolution: {integrity: sha512-tEOkkfOMppUyeiHwjZswOQ3lcnoTnws/q5FnGIaeIh/jmoU0ZlgMYRR8sTlTj+nNGCoJ0RDq6SfxGxCsyMTPmw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-util@30.0.5: resolution: {integrity: sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-util@30.4.1: + resolution: {integrity: sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-validate@30.1.0: resolution: {integrity: sha512-7P3ZlCFW/vhfQ8pE7zW6Oi4EzvuB4sgR72Q1INfW9m0FGo0GADYlPwIkf4CyPq7wq85g+kPMtPOHNAdWHeBOaA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-validate@30.4.1: + resolution: {integrity: sha512-PDWi4SOwLnwqNDfHZjOcsEFyZ4fc/2W2gVL3DEoyqnB6jCQMLRtfBong8s6omIw3lI0HWOus12xfnFmQtjW3fw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-watcher@30.1.1: resolution: {integrity: sha512-CrAQ73LlaS6KGQQw6NBi71g7qvP7scy+4+2c0jKX6+CWaYg85lZiig5nQQVTsS5a5sffNPL3uxXnaE9d7v9eQg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-watcher@30.4.1: + resolution: {integrity: sha512-/l9UonmvCwjHH7d2h3iAwIloLc1H0S8mJZ/LNK3i86hqwPAz8otUJjP9MfYtz9Tt77Su5FD2xGjZn8d31IZHlw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -6542,6 +7454,10 @@ packages: resolution: {integrity: sha512-uvWcSjlwAAgIu133Tt77A05H7RIk3Ho8tZL50bQM2AkvLdluw9NG48lRCl3Dt+MOH719n/0nnb5YxUwcuJiKRA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-worker@30.4.1: + resolution: {integrity: sha512-SHynN/q/QD++iNyvMdy+WMmbCGk8jIsNcRxycXbWubSOhvo6T+j2afcfUSl+3hYsiBebOTo0cT7c2H7CXugu1g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest@30.1.1: resolution: {integrity: sha512-yC3JvpP/ZcAZX5rYCtXO/g9k6VTCQz0VFE2v1FpxytWzUqfDtu0XL/pwnNvptzYItvGwomh1ehomRNMOyhCJKw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -6552,26 +7468,36 @@ packages: node-notifier: optional: true + jest@30.4.2: + resolution: {integrity: sha512-Yi1jqNC/Oq0N4hBgNH/YvBpP1P57QqundgytzYqy3yqAa7NZPNjSoi4SGbRAXDMdBzNE6xBCi5U7RgfrvMEUVQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + jiti@2.5.1: resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-xxhash@1.0.4: resolution: {integrity: sha512-S/6Oo7ruxx5k8m4qlMnbpwQdJjRsvvfcIhIk1dA9c5y5GNhYHKYKu9krEK3QgBax6CxJuf4gRL2opgLkdzWIKg==} engines: {node: '>=8.0.0'} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true js-yaml@4.1.0: @@ -6582,6 +7508,10 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + jsbi@3.1.3: resolution: {integrity: sha512-nBJqA0C6Qns+ZxurbEoIR56wyjiUszpNy70FHvxO5ervMoCbZVE3z3kxr5nKGhlxr/9MhKTSUBs7cAwwuf3g9w==} @@ -6634,8 +7564,8 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} - katex@0.16.46: - resolution: {integrity: sha512-WHy4Coo+bGZyH7NwJKHkS04YFsFcarWbAEOAC3EMndzdN6VSZqklLLIgfxzyaW9jDoeGYJX9SWbJPKpecox0Uw==} + katex@0.16.47: + resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} hasBin: true keyv@4.5.4: @@ -6731,48 +7661,56 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-gnu@1.32.0: resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.30.1: resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.30.1: resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.30.1: resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.30.1: resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} @@ -6812,8 +7750,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + linkify-it@5.0.1: + resolution: {integrity: sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==} lit-element@4.2.1: resolution: {integrity: sha512-WGAWRGzirAgyphK2urmYOV72tlvnxw7YfyLDgQ+OZnM9vQQBQnumQ7jUJe6unEzwGU3ahFOjuz1iz1jjrpCPuw==} @@ -6821,8 +7759,8 @@ packages: lit-html@3.3.1: resolution: {integrity: sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==} - lit@3.3.1: - resolution: {integrity: sha512-Ksr/8L3PTapbdXJCk+EJVB78jDodUMaP54gD24W186zGRARvwrsPfS60wae/SSCTCNZVPd1chXqio1qHQmu4NA==} + lit@3.3.3: + resolution: {integrity: sha512-fycuvZg/hkpozL00lm1pEJH5nN/lr9ZXd6mJI2HSN4+Bzc+LDNdEApJ6HFbPkdFNHLvOplIIuJvxkS4XUxqirw==} load-esm@1.0.2: resolution: {integrity: sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==} @@ -6832,6 +7770,10 @@ packages: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} + loader-runner@4.3.2: + resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==} + engines: {node: '>=6.11.5'} + loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} @@ -6870,9 +7812,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -6888,8 +7827,8 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - lucide-react@1.11.0: - resolution: {integrity: sha512-UOhjdztXCgdBReRcIhsvz2siIBogfv/lhJEIViCpLt924dO+GDms9T7DNoucI23s6kEPpe988m5N0D2ajnzb2g==} + lucide-react@1.17.0: + resolution: {integrity: sha512-9FA9evdox/JQL5PT57fdA1x/yg8T7knJ98+zjTL3UfKza6pflQUUh3XtaQIHKvnsJw1lmsEyHVlt5jchYxOQ5w==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -6899,14 +7838,11 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - magic-string@0.30.18: - resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -6922,8 +7858,8 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + markdown-it@14.2.0: + resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} hasBin: true markdown-table@3.0.4: @@ -6947,6 +7883,9 @@ packages: mdast-util-from-markdown@2.0.2: resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + mdast-util-gfm-autolink-literal@2.0.1: resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} @@ -6983,6 +7922,9 @@ packages: mdast-util-to-hast@13.2.0: resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} @@ -7166,19 +8108,22 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} - engines: {node: 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -7188,6 +8133,10 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + minizlib@3.0.2: resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} engines: {node: '>= 18'} @@ -7209,14 +8158,14 @@ packages: monaco-editor@0.52.2: resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} - motion-dom@12.38.0: - resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==} + motion-dom@12.40.0: + resolution: {integrity: sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==} - motion-utils@12.36.0: - resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==} + motion-utils@12.39.0: + resolution: {integrity: sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==} - motion@12.38.0: - resolution: {integrity: sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==} + motion@12.40.0: + resolution: {integrity: sha512-yjrHUrBFW6kQvjJwRsoiPSAhC5tRwRqNGJWmiJ4CrGnbKp0V88AdzkhBmDoqIsIPfarOe0Uddd37Xq43/gIocA==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -7240,6 +8189,9 @@ packages: resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} engines: {node: '>= 10.16.0'} + multiformats@14.0.0: + resolution: {integrity: sha512-iWK1RrAS58p2NDfeZFuSUSv3ZPewTIhsGbh/5NgeGGJwJmRljLxGtjRR3nkn+loG3zl+IrfR/W1590QnrSK+Gg==} + mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -7252,8 +8204,13 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.3.3: - resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -7336,6 +8293,10 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.48: + resolution: {integrity: sha512-1uz8041X6LoI6ZSdZacM9lVY28vuzDlSKitnpbSNK0RfKoIJkX29NBPVEFXhnuSuEOA9Ww0xnPJ+ILWbGAv8DA==} + engines: {node: '>=18'} + noms@0.0.0: resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} @@ -7382,6 +8343,10 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + obug@2.1.3: + resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + engines: {node: '>=12.20.0'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -7518,25 +8483,17 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} picomatch@4.0.2: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -7553,9 +8510,6 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playground@file:packages/examples/src/playground: - resolution: {directory: packages/examples/src/playground, type: directory} - pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -7577,8 +8531,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.12: - resolution: {integrity: sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} postcss@8.5.6: @@ -7593,6 +8547,10 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} + prettier-linter-helpers@1.0.1: + resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} + engines: {node: '>=6.0.0'} + prettier-plugin-organize-imports@4.2.0: resolution: {integrity: sha512-Zdy27UhlmyvATZi67BTnLcKTo8fm6Oik59Sz6H64PgZJVs6NJpPD1mT240mmJn62c98/QaL+r3kx9Q3gRpDajg==} peerDependencies: @@ -7603,6 +8561,16 @@ packages: vue-tsc: optional: true + prettier-plugin-organize-imports@4.3.0: + resolution: {integrity: sha512-FxFz0qFhyBsGdIsb697f/EkvHzi5SZOhWAjxcx2dLt+Q532bAlhswcXGYB1yzjZ69kW8UoadFBw7TyNwlq96Iw==} + peerDependencies: + prettier: '>=2.0' + typescript: '>=2.9' + vue-tsc: ^2.1.0 || 3 + peerDependenciesMeta: + vue-tsc: + optional: true + prettier-plugin-tailwindcss@0.6.14: resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==} engines: {node: '>=14.21.3'} @@ -7674,10 +8642,19 @@ packages: engines: {node: '>=14'} hasBin: true + prettier@3.8.4: + resolution: {integrity: sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==} + engines: {node: '>=14'} + hasBin: true + pretty-format@30.0.5: resolution: {integrity: sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + pretty-format@30.4.1: + resolution: {integrity: sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -7690,6 +8667,9 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + property-information@7.2.0: + resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -7697,6 +8677,10 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -7715,6 +8699,9 @@ packages: quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + quansync@1.0.0: + resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -7743,10 +8730,10 @@ packages: peerDependencies: react: ^19.2.3 - react-dom@19.2.5: - resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} + react-dom@19.2.6: + resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} peerDependencies: - react: ^19.2.5 + react: ^19.2.6 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -7754,6 +8741,9 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-is@19.2.7: + resolution: {integrity: sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==} + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -7788,8 +8778,8 @@ packages: resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} engines: {node: '>=0.10.0'} - react@19.2.5: - resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + react@19.2.6: + resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} engines: {node: '>=0.10.0'} read-pkg-up@7.0.1: @@ -7876,8 +8866,8 @@ packages: remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} - remark-mdx@3.1.0: - resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==} + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} @@ -7922,8 +8912,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true @@ -7944,16 +8934,40 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} - hasBin: true - robust-predicates@3.0.3: resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} - rollup@4.49.0: - resolution: {integrity: sha512-3IVq0cGJ6H7fKXXEdVt+RcYvRCt8beYY9K1760wGQwSAHZcS9eot1zDG5axUbcp/kWRi5zKIIDX8MoKv/TzvZA==} + rolldown-plugin-dts@0.26.0: + resolution: {integrity: sha512-e+kEPtUiDES0htk5iqkSeF4EzAV7R+vugGB44iPDuw1Kw9E+WyL1VG7PaV0IIjGHLiacztMBcMTyrr8ON9CT1Q==} + engines: {node: ^22.18.0 || >=24.11.0} + peerDependencies: + '@ts-macro/tsc': ^0.3.6 + '@typescript/native-preview': '>=7.0.0-dev.20260325.1' + rolldown: ^1.0.0 + typescript: ^5.0.0 || ^6.0.0 + vue-tsc: ~3.2.0 || ~3.3.0 + peerDependenciesMeta: + '@ts-macro/tsc': + optional: true + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + + rolldown@1.0.0-beta.58: + resolution: {integrity: sha512-v1FCjMZCan7f+xGAHBi+mqiE4MlH7I+SXEHSQSJoMOGNNB2UYtvMiejsq9YuUOiZjNeUeV/a21nSFbrUR+4ZCQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rolldown@1.1.2: + resolution: {integrity: sha512-x0CrQQqCXWGeI8dTvFfN/Dnv3yMKT9hv5jFjlOreKAx9wqLq9wz7VvLLHyaAXC90/CpggTu9SisSbsJJTPSjNQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rollup@4.62.2: + resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -8012,6 +9026,10 @@ packages: resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} engines: {node: '>= 10.13.0'} + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} + scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} @@ -8028,8 +9046,8 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -8074,8 +9092,8 @@ packages: shiki@3.12.0: resolution: {integrity: sha512-E+ke51tciraTHpaXYXfqnPZFSViKHhSQ3fiugThlfs/om/EonlQ0hSldcqgzOWWqX6PcjkKKzFgrjIaiPAXoaA==} - shiki@4.0.2: - resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==} + shiki@4.1.0: + resolution: {integrity: sha512-l/ABZPUR5v70jI10EzqfMS/I96vjSGv2y0ihUV+WYFzv0EfvW4s54m0Lg8wCrrL+2IkwBzFTuxkZjPf8b2NX9Q==} engines: {node: '>=20'} side-channel-list@1.0.0: @@ -8145,8 +9163,8 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.22: - resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -8172,8 +9190,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} @@ -8261,9 +9279,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - strtok3@10.3.4: resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} engines: {node: '>=18'} @@ -8271,6 +9286,12 @@ packages: style-to-js@1.1.17: resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + style-to-object@1.0.9: resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} @@ -8325,17 +9346,21 @@ packages: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.11.13: + resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} + engines: {node: ^14.18.0 || >=16.0.0} + tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwind-merge@3.5.0: - resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} + tailwind-merge@3.6.0: + resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} tailwindcss@4.1.12: resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==} - tailwindcss@4.2.4: - resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==} + tailwindcss@4.3.0: + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} tapable@2.2.3: resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} @@ -8370,8 +9395,51 @@ packages: uglify-js: optional: true - terser@5.43.1: - resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + terser-webpack-plugin@5.6.1: + resolution: {integrity: sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@minify-html/node': '*' + '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' + esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@minify-html/node': + optional: true + '@swc/core': + optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true + esbuild: + optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true + uglify-js: + optional: true + + terser@5.48.0: + resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} engines: {node: '>=10'} hasBin: true @@ -8379,10 +9447,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -8398,35 +9462,20 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyexec@1.1.1: - resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} - engines: {node: '>=12.0.0'} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.16: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} tmpl@1.0.5: @@ -8469,12 +9518,18 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} - ts-jest@29.4.1: - resolution: {integrity: sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==} + ts-jest@29.4.11: + resolution: {integrity: sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -8485,7 +9540,7 @@ packages: esbuild: '*' jest: ^29.0.0 || ^30.0.0 jest-util: ^29.0.0 || ^30.0.0 - typescript: '>=4.3 <6' + typescript: '>=4.3 <7' peerDependenciesMeta: '@babel/core': optional: true @@ -8518,20 +9573,54 @@ packages: peerDependenciesMeta: '@swc/core': optional: true - '@swc/wasm': + '@swc/wasm': + optional: true + + tsconfig-paths-webpack-plugin@4.2.0: + resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==} + engines: {node: '>=10.13.0'} + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tsdown@0.22.3: + resolution: {integrity: sha512-louqbfA8Qf//B9jTTL0FPtXTNpjCWv1VPkbcmQMph2pTpzs+LnB1tbe4tDDRVpo2BjF5SgUXaTZe45SxB8pWHg==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + peerDependencies: + '@arethetypeswrong/core': ^0.18.1 + '@tsdown/css': 0.22.3 + '@tsdown/exe': 0.22.3 + '@vitejs/devtools': '*' + publint: ^0.3.8 + tsx: '*' + typescript: ^5.0.0 || ^6.0.0 + unplugin-unused: ^0.5.0 + unrun: '*' + peerDependenciesMeta: + '@arethetypeswrong/core': + optional: true + '@tsdown/css': + optional: true + '@tsdown/exe': + optional: true + '@vitejs/devtools': + optional: true + publint: + optional: true + tsx: + optional: true + typescript: + optional: true + unplugin-unused: + optional: true + unrun: optional: true - tsconfig-paths-webpack-plugin@4.2.0: - resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==} - engines: {node: '>=10.13.0'} - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - tslib@2.3.1: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} @@ -8541,8 +9630,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.20.5: - resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} + tsx@4.22.4: + resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} engines: {node: '>=18.0.0'} hasBin: true @@ -8605,8 +9694,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typedoc-material-theme@1.4.0: - resolution: {integrity: sha512-TBoBpX/4zWO6l74/wBLivXHC2rIiD70KXMliYrw1KhcqdybyxkVBLP5z8KiJuNV8aQIeS+rK2QG6GSucQHJQDQ==} + typedoc-material-theme@1.4.1: + resolution: {integrity: sha512-/inKZw8SqZPt+pmawpMhDmXCJQyIm+fHFuGChioyJQICZcX2FyzpwZnyPWcZHmJ09upttWFhti4ZI3hESJNkSA==} engines: {node: '>=18.0.0', npm: '>=8.6.0'} peerDependencies: typedoc: ^0.25.13 || ^0.26.x || ^0.27.x || ^0.28.x @@ -8616,17 +9705,17 @@ packages: peerDependencies: typedoc: 0.27.x || 0.28.x - typedoc-plugin-ga@1.0.5: - resolution: {integrity: sha512-qXtCqjTA9mJmlqCNmdKMWS1HENzyBN+exgFW+0qCYTJ5kEatDlmo3/EUa/LvKkEsaqJgpqA43Jnq425bdRuNZQ==} + typedoc-plugin-ga@1.1.1: + resolution: {integrity: sha512-7p0an/76lFmK54QCPXMzVc54UAYVlzc6H7f1vx0esN6BLSswODyEu+LJqWVLIjltgj6kfnox49tYqlsKH1ep2A==} peerDependencies: typedoc: ^0.27.6 - typedoc@0.28.7: - resolution: {integrity: sha512-lpz0Oxl6aidFkmS90VQDQjk/Qf2iw0IUvFqirdONBdj7jPSN9mGXhy66BcGNDxx5ZMyKKiBVAREvPEzT6Uxipw==} + typedoc@0.28.19: + resolution: {integrity: sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: - typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x typescript-eslint@8.41.0: resolution: {integrity: sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==} @@ -8642,6 +9731,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + typescript-eslint@8.61.1: + resolution: {integrity: sha512-V7PayAfJokV3pEHgN7/v03D1SpujhRfQtYLbLIiBfDDncdg4PAiRBfoS4cnCANK4jmAPncczi59QO3afiXUlNw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -8673,10 +9769,21 @@ packages: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} + uint8array-tools@0.0.8: + resolution: {integrity: sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g==} + engines: {node: '>=14.0.0'} + + uint8array-tools@0.0.9: + resolution: {integrity: sha512-9vqDWmoSXOoi+K14zNaf6LBV51Q8MayF0/IiQs3GlygIKUYtog603e6virExkjjFosfJUBI4LhbQK1iq8IG11A==} + engines: {node: '>=14.0.0'} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + unconfig-core@7.5.0: + resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -8686,8 +9793,11 @@ packages: undici-types@7.10.0: resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} - undici-types@7.19.2: - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} @@ -8698,6 +9808,9 @@ packages: unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} @@ -8713,8 +9826,8 @@ packages: unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} unist-util-visit@5.1.0: resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} @@ -8731,8 +9844,18 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + unrs-resolver@1.12.2: + resolution: {integrity: sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==} + + unrun@0.2.22: + resolution: {integrity: sha512-vlQce4gTLNyCZxGylEQXGG+fSrrEFWiM/L8aghtp+t6j8xXh+lmsBtQJknG7ZSvv7P+/MRgbQtHWHBWk981uTg==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + synckit: ^0.11.11 + peerDependenciesMeta: + synckit: + optional: true untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} @@ -8744,6 +9867,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -8786,8 +9915,16 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} - valibot@1.1.0: - resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==} + valibot@0.38.0: + resolution: {integrity: sha512-RCJa0fetnzp+h+KN9BdgYOgtsMAG9bfoJ9JSjIhFHobKWVWyzM3jjaeNTdpFK9tQtf3q1sguXeERJ/LcmdFE7w==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + + valibot@1.4.1: + resolution: {integrity: sha512-klCmFTz2jeDluy9RwX+F884TCiogtdBJ/YaxSx1EOBYXa3NXNWj8kR1jjN8rzluwojJVWWaHJ4r1U5LfICnM3g==} peerDependencies: typescript: '>=5' peerDependenciesMeta: @@ -8801,6 +9938,9 @@ packages: resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} engines: {node: '>= 0.10'} + varuint-bitcoin@2.0.0: + resolution: {integrity: sha512-6QZbU/rHO2ZQYpWFDALCDSRsXbAs1VOEmXAxtbtjLtKuMJ/FQ8YbhfxlaiKv5nklci0M6lZtlZyxo9Q+qNnyog==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -8814,13 +9954,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - - vite@7.1.3: - resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==} + vite@7.3.5: + resolution: {integrity: sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -8859,26 +9994,39 @@ packages: yaml: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.1.9: + resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.9 + '@vitest/browser-preview': 4.1.9 + '@vitest/browser-webdriverio': 4.1.9 + '@vitest/coverage-istanbul': 4.1.9 + '@vitest/coverage-v8': 4.1.9 + '@vitest/ui': 4.1.9 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': optional: true '@vitest/ui': optional: true @@ -8894,6 +10042,10 @@ packages: resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} engines: {node: '>=10.13.0'} + watchpack@2.5.2: + resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==} + engines: {node: '>=10.13.0'} + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -8911,6 +10063,10 @@ packages: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} + webpack-sources@3.5.0: + resolution: {integrity: sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==} + engines: {node: '>=10.13.0'} + webpack@5.100.2: resolution: {integrity: sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==} engines: {node: '>=10.13.0'} @@ -8986,20 +10142,8 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -9031,8 +10175,8 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -9048,8 +10192,8 @@ packages: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} engines: {node: '>=12'} yn@3.1.1: @@ -9073,18 +10217,15 @@ packages: peerDependencies: zod: ^3.25.0 || ^4.0.0 - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@adraffy/ens-normalize@1.10.1': {} + '@adraffy/ens-normalize@1.11.1': {} '@algolia/abtesting@1.12.0': dependencies: @@ -9186,11 +10327,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 - '@angular-devkit/core@19.2.15(chokidar@4.0.3)': dependencies: ajv: 8.17.1 @@ -9227,7 +10363,7 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.6.0 - tinyexec: 1.1.1 + tinyexec: 1.2.4 '@babel/code-frame@7.12.11': dependencies: @@ -9235,213 +10371,245 @@ snapshots: '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} + '@babel/compat-data@7.29.7': {} - '@babel/core@7.28.3': + '@babel/core@7.29.7': dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) - '@babel/helpers': 7.28.3 - '@babel/parser': 7.28.3 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.1 + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.28.3': + '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.27.2': + '@babel/generator@8.0.0': dependencies: - '@babel/compat-data': 7.28.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.3 + '@babel/parser': 8.0.0 + '@babel/types': 8.0.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@types/jsesc': 2.5.1 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-module-imports@7.27.1': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.3 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-plugin-utils@7.29.7': {} + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-string-parser@8.0.0': {} + + '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@8.0.2': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@7.29.7': {} - '@babel/helpers@7.28.3': + '@babel/helpers@7.29.7': dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 '@babel/highlight@7.25.9': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.29.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.28.3': + '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.3)': + '@babel/parser@8.0.0': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 8.0.0 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.3)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.3)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.3)': + '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.3)': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.3)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.3)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.3)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.3)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.3 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/runtime@7.28.3': {} + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/runtime@7.28.4': {} + '@babel/runtime@7.29.7': {} - '@babel/template@7.27.2': + '@babel/template@7.29.7': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 - '@babel/traverse@7.28.3': + '@babel/traverse@7.29.7': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.3 - '@babel/template': 7.27.2 - '@babel/types': 7.28.2 - debug: 4.4.1 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.2': + '@babel/types@7.29.7': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@babel/types@8.0.0': + dependencies: + '@babel/helper-string-parser': 8.0.0 + '@babel/helper-validator-identifier': 8.0.2 '@bcoe/v8-coverage@0.2.3': {} '@bcoe/v8-coverage@1.0.2': {} + '@bitcoinerlab/secp256k1@1.2.0': + dependencies: + '@noble/curves': 1.9.7 + '@borewit/text-codec@0.1.1': {} '@braintree/sanitize-url@7.1.2': {} - '@changesets/apply-release-plan@7.0.12': + '@changesets/apply-release-plan@7.1.1': dependencies: - '@changesets/config': 3.1.1 + '@changesets/config': 3.1.4 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.4 '@changesets/should-skip-package': 0.1.2 @@ -9453,67 +10621,66 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.8.5 - '@changesets/assemble-release-plan@6.0.9': + '@changesets/assemble-release-plan@6.0.10': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-dependents-graph': 2.1.4 '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.7.2 + semver: 7.8.5 '@changesets/changelog-git@0.2.1': dependencies: '@changesets/types': 6.1.0 - '@changesets/changelog-github@0.5.1': + '@changesets/changelog-github@0.7.0': dependencies: - '@changesets/get-github-info': 0.6.0 + '@changesets/get-github-info': 0.8.0 '@changesets/types': 6.1.0 dotenv: 8.6.0 transitivePeerDependencies: - encoding - '@changesets/cli@2.29.6(@types/node@25.6.0)': + '@changesets/cli@2.31.0(@types/node@26.0.0)': dependencies: - '@changesets/apply-release-plan': 7.0.12 - '@changesets/assemble-release-plan': 6.0.9 + '@changesets/apply-release-plan': 7.1.1 + '@changesets/assemble-release-plan': 6.0.10 '@changesets/changelog-git': 0.2.1 - '@changesets/config': 3.1.1 + '@changesets/config': 3.1.4 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.3 - '@changesets/get-release-plan': 4.0.13 + '@changesets/get-dependents-graph': 2.1.4 + '@changesets/get-release-plan': 4.0.16 '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.5 + '@changesets/read': 0.6.7 '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.1(@types/node@25.6.0) + '@inquirer/external-editor': 1.0.3(@types/node@26.0.0) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 - ci-info: 3.9.0 enquirer: 2.4.1 fs-extra: 7.0.1 mri: 1.2.0 - p-limit: 2.3.0 package-manager-detector: 0.2.11 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.8.5 spawndamnit: 3.0.1 term-size: 2.2.1 transitivePeerDependencies: - '@types/node' - '@changesets/config@3.1.1': + '@changesets/config@3.1.4': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-dependents-graph': 2.1.4 '@changesets/logger': 0.1.1 + '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 @@ -9523,26 +10690,26 @@ snapshots: dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@2.1.3': + '@changesets/get-dependents-graph@2.1.4': dependencies: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.7.2 + semver: 7.8.5 - '@changesets/get-github-info@0.6.0': + '@changesets/get-github-info@0.8.0': dependencies: dataloader: 1.4.0 node-fetch: 2.7.0 transitivePeerDependencies: - encoding - '@changesets/get-release-plan@4.0.13': + '@changesets/get-release-plan@4.0.16': dependencies: - '@changesets/assemble-release-plan': 6.0.9 - '@changesets/config': 3.1.1 + '@changesets/assemble-release-plan': 6.0.10 + '@changesets/config': 3.1.4 '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.5 + '@changesets/read': 0.6.7 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 @@ -9560,10 +10727,10 @@ snapshots: dependencies: picocolors: 1.1.1 - '@changesets/parse@0.4.1': + '@changesets/parse@0.4.3': dependencies: '@changesets/types': 6.1.0 - js-yaml: 3.14.1 + js-yaml: 4.2.0 '@changesets/pre@2.0.2': dependencies: @@ -9572,11 +10739,11 @@ snapshots: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.5': + '@changesets/read@0.6.7': dependencies: '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.1 + '@changesets/parse': 0.4.3 '@changesets/types': 6.1.0 fs-extra: 7.0.1 p-filter: 2.1.0 @@ -9595,11 +10762,13 @@ snapshots: dependencies: '@changesets/types': 6.1.0 fs-extra: 7.0.1 - human-id: 4.1.1 + human-id: 4.2.0 prettier: 2.8.8 '@chevrotain/types@11.1.2': {} + '@ckb-ccc/playground@file:packages/examples/src/playground': {} + '@ckb-lumos/base@0.24.0-next.2': dependencies: '@ckb-lumos/bi': 0.24.0-next.2 @@ -9694,9 +10863,25 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@emnapi/core@1.4.5': + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.1': dependencies: - '@emnapi/wasi-threads': 1.0.4 tslib: 2.8.1 optional: true @@ -9705,203 +10890,236 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.4': + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.9': + '@esbuild/aix-ppc64@0.27.7': optional: true '@esbuild/aix-ppc64@0.28.0': optional: true - '@esbuild/android-arm64@0.25.9': + '@esbuild/android-arm64@0.27.7': optional: true '@esbuild/android-arm64@0.28.0': optional: true - '@esbuild/android-arm@0.25.9': + '@esbuild/android-arm@0.27.7': optional: true '@esbuild/android-arm@0.28.0': optional: true - '@esbuild/android-x64@0.25.9': + '@esbuild/android-x64@0.27.7': optional: true '@esbuild/android-x64@0.28.0': optional: true - '@esbuild/darwin-arm64@0.25.9': + '@esbuild/darwin-arm64@0.27.7': optional: true '@esbuild/darwin-arm64@0.28.0': optional: true - '@esbuild/darwin-x64@0.25.9': + '@esbuild/darwin-x64@0.27.7': optional: true '@esbuild/darwin-x64@0.28.0': optional: true - '@esbuild/freebsd-arm64@0.25.9': + '@esbuild/freebsd-arm64@0.27.7': optional: true '@esbuild/freebsd-arm64@0.28.0': optional: true - '@esbuild/freebsd-x64@0.25.9': + '@esbuild/freebsd-x64@0.27.7': optional: true '@esbuild/freebsd-x64@0.28.0': optional: true - '@esbuild/linux-arm64@0.25.9': + '@esbuild/linux-arm64@0.27.7': optional: true '@esbuild/linux-arm64@0.28.0': optional: true - '@esbuild/linux-arm@0.25.9': + '@esbuild/linux-arm@0.27.7': optional: true '@esbuild/linux-arm@0.28.0': optional: true - '@esbuild/linux-ia32@0.25.9': + '@esbuild/linux-ia32@0.27.7': optional: true '@esbuild/linux-ia32@0.28.0': optional: true - '@esbuild/linux-loong64@0.25.9': + '@esbuild/linux-loong64@0.27.7': optional: true '@esbuild/linux-loong64@0.28.0': optional: true - '@esbuild/linux-mips64el@0.25.9': + '@esbuild/linux-mips64el@0.27.7': optional: true '@esbuild/linux-mips64el@0.28.0': optional: true - '@esbuild/linux-ppc64@0.25.9': + '@esbuild/linux-ppc64@0.27.7': optional: true '@esbuild/linux-ppc64@0.28.0': optional: true - '@esbuild/linux-riscv64@0.25.9': + '@esbuild/linux-riscv64@0.27.7': optional: true '@esbuild/linux-riscv64@0.28.0': optional: true - '@esbuild/linux-s390x@0.25.9': + '@esbuild/linux-s390x@0.27.7': optional: true '@esbuild/linux-s390x@0.28.0': optional: true - '@esbuild/linux-x64@0.25.9': + '@esbuild/linux-x64@0.27.7': optional: true '@esbuild/linux-x64@0.28.0': optional: true - '@esbuild/netbsd-arm64@0.25.9': + '@esbuild/netbsd-arm64@0.27.7': optional: true '@esbuild/netbsd-arm64@0.28.0': optional: true - '@esbuild/netbsd-x64@0.25.9': + '@esbuild/netbsd-x64@0.27.7': optional: true '@esbuild/netbsd-x64@0.28.0': optional: true - '@esbuild/openbsd-arm64@0.25.9': + '@esbuild/openbsd-arm64@0.27.7': optional: true '@esbuild/openbsd-arm64@0.28.0': optional: true - '@esbuild/openbsd-x64@0.25.9': + '@esbuild/openbsd-x64@0.27.7': optional: true '@esbuild/openbsd-x64@0.28.0': optional: true - '@esbuild/openharmony-arm64@0.25.9': + '@esbuild/openharmony-arm64@0.27.7': optional: true '@esbuild/openharmony-arm64@0.28.0': optional: true - '@esbuild/sunos-x64@0.25.9': + '@esbuild/sunos-x64@0.27.7': optional: true '@esbuild/sunos-x64@0.28.0': optional: true - '@esbuild/win32-arm64@0.25.9': + '@esbuild/win32-arm64@0.27.7': optional: true '@esbuild/win32-arm64@0.28.0': optional: true - '@esbuild/win32-ia32@0.25.9': + '@esbuild/win32-ia32@0.27.7': optional: true '@esbuild/win32-ia32@0.28.0': optional: true - '@esbuild/win32-x64@0.25.9': + '@esbuild/win32-x64@0.27.7': optional: true '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.34.0(jiti@2.7.0))': + dependencies: + eslint: 9.34.0(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.1(eslint@10.5.0(jiti@2.7.0))': + dependencies: + eslint: 10.5.0(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.34.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.34.0(jiti@2.7.0))': dependencies: - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1 - minimatch: 3.1.2 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-array@0.23.5': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.3 + minimatch: 10.2.5 transitivePeerDependencies: - supports-color '@eslint/config-helpers@0.3.1': {} + '@eslint/config-helpers@0.6.0': + dependencies: + '@eslint/core': 1.2.1 + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@2.1.4': dependencies: - ajv: 6.12.6 - debug: 4.4.1 + ajv: 6.15.0 + debug: 4.4.3 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 + js-yaml: 4.2.0 + minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color @@ -9920,28 +11138,39 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/js@10.0.1(eslint@10.5.0(jiti@2.7.0))': + optionalDependencies: + eslint: 10.5.0(jiti@2.7.0) + '@eslint/js@8.57.1': {} '@eslint/js@9.34.0': {} '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@3.0.5': {} + '@eslint/plugin-kit@0.3.5': dependencies: '@eslint/core': 0.15.2 levn: 0.4.1 - '@euberdeveloper/eslint-plugin@2.7.0(@types/eslint@9.6.1)(typescript@5.9.2)': + '@eslint/plugin-kit@0.7.2': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + + '@euberdeveloper/eslint-plugin@2.7.0(@types/eslint@9.6.1)(typescript@6.0.3)': dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3))(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@6.0.3) eslint: 8.57.1 eslint-config-prettier: 9.1.2(eslint@8.57.1) - eslint-formatter-codeframe: 7.32.1 + eslint-formatter-codeframe: 7.32.2 eslint-plugin-mocha: 10.5.0(eslint@8.57.1) - eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2) + eslint-plugin-prettier: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.8.4) eslint-plugin-unicorn: 49.0.0(eslint@8.57.1) - prettier: 3.6.2 + prettier: 3.8.4 transitivePeerDependencies: - '@types/eslint' - supports-color @@ -9956,48 +11185,48 @@ snapshots: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@floating-ui/react-dom@2.1.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@floating-ui/dom': 1.7.4 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - '@floating-ui/react@0.26.28(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@floating-ui/react@0.26.28(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@floating-ui/react-dom': 2.1.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@floating-ui/utils': 0.2.10 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) tabbable: 6.2.0 '@floating-ui/utils@0.2.10': {} - '@fumadocs/tailwind@0.0.5(@tailwindcss/oxide@4.2.4)(tailwindcss@4.2.4)': + '@fumadocs/tailwind@0.0.5(@tailwindcss/oxide@4.3.0)(tailwindcss@4.3.0)': optionalDependencies: - '@tailwindcss/oxide': 4.2.4 - tailwindcss: 4.2.4 + '@tailwindcss/oxide': 4.3.0 + tailwindcss: 4.3.0 - '@gerrit0/mini-shiki@3.12.0': + '@gerrit0/mini-shiki@3.23.0': dependencies: - '@shikijs/engine-oniguruma': 3.12.0 - '@shikijs/langs': 3.12.0 - '@shikijs/themes': 3.12.0 - '@shikijs/types': 3.12.0 + '@shikijs/engine-oniguruma': 3.23.0 + '@shikijs/langs': 3.23.0 + '@shikijs/themes': 3.23.0 + '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 - '@headlessui/react@2.2.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@headlessui/react@2.2.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@floating-ui/react': 0.26.28(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@react-aria/focus': 3.21.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@react-aria/interactions': 3.25.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@tanstack/react-virtual': 3.13.12(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - use-sync-external-store: 1.5.0(react@19.2.5) + '@floating-ui/react': 0.26.28(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@react-aria/focus': 3.21.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@react-aria/interactions': 3.25.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@tanstack/react-virtual': 3.13.12(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + use-sync-external-store: 1.5.0(react@19.2.6) - '@heroicons/react@2.2.0(react@19.2.5)': + '@heroicons/react@2.2.0(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 '@humanfs/core@0.19.1': {} @@ -10009,8 +11238,8 @@ snapshots: '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.1 - minimatch: 3.1.2 + debug: 4.4.3 + minimatch: 3.1.5 transitivePeerDependencies: - supports-color @@ -10160,7 +11389,7 @@ snapshots: '@inquirer/editor@4.2.18(@types/node@24.3.0)': dependencies: '@inquirer/core': 10.2.0(@types/node@24.3.0) - '@inquirer/external-editor': 1.0.1(@types/node@24.3.0) + '@inquirer/external-editor': 1.0.3(@types/node@24.3.0) '@inquirer/type': 3.0.8(@types/node@24.3.0) optionalDependencies: '@types/node': 24.3.0 @@ -10173,19 +11402,19 @@ snapshots: optionalDependencies: '@types/node': 24.3.0 - '@inquirer/external-editor@1.0.1(@types/node@24.3.0)': + '@inquirer/external-editor@1.0.3(@types/node@24.3.0)': dependencies: - chardet: 2.1.0 - iconv-lite: 0.6.3 + chardet: 2.2.0 + iconv-lite: 0.7.2 optionalDependencies: '@types/node': 24.3.0 - '@inquirer/external-editor@1.0.1(@types/node@25.6.0)': + '@inquirer/external-editor@1.0.3(@types/node@26.0.0)': dependencies: - chardet: 2.1.0 - iconv-lite: 0.6.3 + chardet: 2.2.0 + iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 26.0.0 '@inquirer/figures@1.0.13': {} @@ -10272,11 +11501,10 @@ snapshots: optionalDependencies: '@types/node': 24.3.0 - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': + '@ipld/dag-cbor@10.0.1': dependencies: - '@isaacs/balanced-match': 4.0.1 + cborg: 5.1.1 + multiformats: 14.0.0 '@isaacs/cliui@8.0.2': dependencies: @@ -10289,27 +11517,36 @@ snapshots: '@isaacs/fs-minipass@4.0.1': dependencies: - minipass: 7.1.2 + minipass: 7.1.3 '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 - js-yaml: 3.14.1 + js-yaml: 3.14.2 resolve-from: 5.0.0 - '@istanbuljs/schema@0.1.3': {} + '@istanbuljs/schema@0.1.6': {} '@jest/console@30.1.1': dependencies: '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 chalk: 4.1.2 jest-message-util: 30.1.0 jest-util: 30.0.5 slash: 3.0.0 + '@jest/console@30.4.1': + dependencies: + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + chalk: 4.1.2 + jest-message-util: 30.4.1 + jest-util: 30.4.1 + slash: 3.0.0 + '@jest/core@30.1.1(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2))': dependencies: '@jest/console': 30.1.1 @@ -10318,14 +11555,14 @@ snapshots: '@jest/test-result': 30.1.1 '@jest/transform': 30.1.1 '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 4.3.0 + ci-info: 4.4.0 exit-x: 0.2.2 graceful-fs: 4.2.11 jest-changed-files: 30.0.5 - jest-config: 30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)) + jest-config: 30.1.1(@types/node@26.0.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)) jest-haste-map: 30.1.0 jest-message-util: 30.1.0 jest-regex-util: 30.0.1 @@ -10346,35 +11583,35 @@ snapshots: - supports-color - ts-node - '@jest/core@30.1.1(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2))': + '@jest/core@30.4.2(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3))': dependencies: - '@jest/console': 30.1.1 - '@jest/pattern': 30.0.1 - '@jest/reporters': 30.1.1 - '@jest/test-result': 30.1.1 - '@jest/transform': 30.1.1 - '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@jest/console': 30.4.1 + '@jest/pattern': 30.4.0 + '@jest/reporters': 30.4.1 + '@jest/test-result': 30.4.1 + '@jest/transform': 30.4.1 + '@jest/types': 30.4.1 + '@types/node': 26.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 4.3.0 + ci-info: 4.4.0 exit-x: 0.2.2 + fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-changed-files: 30.0.5 - jest-config: 30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)) - jest-haste-map: 30.1.0 - jest-message-util: 30.1.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.1.0 - jest-resolve-dependencies: 30.1.1 - jest-runner: 30.1.1 - jest-runtime: 30.1.1 - jest-snapshot: 30.1.1 - jest-util: 30.0.5 - jest-validate: 30.1.0 - jest-watcher: 30.1.1 - micromatch: 4.0.8 - pretty-format: 30.0.5 + jest-changed-files: 30.4.1 + jest-config: 30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)) + jest-haste-map: 30.4.1 + jest-message-util: 30.4.1 + jest-regex-util: 30.4.0 + jest-resolve: 30.4.1 + jest-resolve-dependencies: 30.4.2 + jest-runner: 30.4.2 + jest-runtime: 30.4.2 + jest-snapshot: 30.4.1 + jest-util: 30.4.1 + jest-validate: 30.4.1 + jest-watcher: 30.4.1 + pretty-format: 30.4.1 slash: 3.0.0 transitivePeerDependencies: - babel-plugin-macros @@ -10384,17 +11621,30 @@ snapshots: '@jest/diff-sequences@30.0.1': {} + '@jest/diff-sequences@30.4.0': {} + '@jest/environment@30.1.1': dependencies: '@jest/fake-timers': 30.1.1 '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 jest-mock: 30.0.5 + '@jest/environment@30.4.1': + dependencies: + '@jest/fake-timers': 30.4.1 + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + jest-mock: 30.4.1 + '@jest/expect-utils@30.1.1': dependencies: '@jest/get-type': 30.1.0 + '@jest/expect-utils@30.4.1': + dependencies: + '@jest/get-type': 30.1.0 + '@jest/expect@30.1.1': dependencies: expect: 30.1.1 @@ -10402,15 +11652,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/expect@30.4.1': + dependencies: + expect: 30.4.1 + jest-snapshot: 30.4.1 + transitivePeerDependencies: + - supports-color + '@jest/fake-timers@30.1.1': dependencies: '@jest/types': 30.0.5 '@sinonjs/fake-timers': 13.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 jest-message-util: 30.1.0 jest-mock: 30.0.5 jest-util: 30.0.5 + '@jest/fake-timers@30.4.1': + dependencies: + '@jest/types': 30.4.1 + '@sinonjs/fake-timers': 15.4.0 + '@types/node': 26.0.0 + jest-message-util: 30.4.1 + jest-mock: 30.4.1 + jest-util: 30.4.1 + '@jest/get-type@30.1.0': {} '@jest/globals@30.1.1': @@ -10422,11 +11688,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/globals@30.4.1': + dependencies: + '@jest/environment': 30.4.1 + '@jest/expect': 30.4.1 + '@jest/types': 30.4.1 + jest-mock: 30.4.1 + transitivePeerDependencies: + - supports-color + '@jest/pattern@30.0.1': dependencies: - '@types/node': 25.6.0 + '@types/node': 26.0.0 jest-regex-util: 30.0.1 + '@jest/pattern@30.4.0': + dependencies: + '@types/node': 26.0.0 + jest-regex-util: 30.4.0 + '@jest/reporters@30.1.1': dependencies: '@bcoe/v8-coverage': 0.2.3 @@ -10434,12 +11714,12 @@ snapshots: '@jest/test-result': 30.1.1 '@jest/transform': 30.1.1 '@jest/types': 30.0.5 - '@jridgewell/trace-mapping': 0.3.30 - '@types/node': 25.6.0 + '@jridgewell/trace-mapping': 0.3.31 + '@types/node': 26.0.0 chalk: 4.1.2 - collect-v8-coverage: 1.0.2 + collect-v8-coverage: 1.0.3 exit-x: 0.2.2 - glob: 10.4.5 + glob: 10.5.0 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.3 @@ -10455,10 +11735,42 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/reporters@30.4.1': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 30.4.1 + '@jest/test-result': 30.4.1 + '@jest/transform': 30.4.1 + '@jest/types': 30.4.1 + '@jridgewell/trace-mapping': 0.3.31 + '@types/node': 26.0.0 + chalk: 4.1.2 + collect-v8-coverage: 1.0.3 + exit-x: 0.2.2 + glob: 10.5.0 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + jest-message-util: 30.4.1 + jest-util: 30.4.1 + jest-worker: 30.4.1 + slash: 3.0.0 + string-length: 4.0.2 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + '@jest/schemas@30.0.5': dependencies: '@sinclair/typebox': 0.34.40 + '@jest/schemas@30.4.1': + dependencies: + '@sinclair/typebox': 0.34.49 + '@jest/snapshot-utils@30.1.1': dependencies: '@jest/types': 30.0.5 @@ -10466,9 +11778,16 @@ snapshots: graceful-fs: 4.2.11 natural-compare: 1.4.0 + '@jest/snapshot-utils@30.4.1': + dependencies: + '@jest/types': 30.4.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + natural-compare: 1.4.0 + '@jest/source-map@30.0.1': dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 callsites: 3.1.0 graceful-fs: 4.2.11 @@ -10477,7 +11796,14 @@ snapshots: '@jest/console': 30.1.1 '@jest/types': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 + collect-v8-coverage: 1.0.3 + + '@jest/test-result@30.4.1': + dependencies: + '@jest/console': 30.4.1 + '@jest/types': 30.4.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.3 '@jest/test-sequencer@30.1.1': dependencies: @@ -10486,12 +11812,19 @@ snapshots: jest-haste-map: 30.1.0 slash: 3.0.0 + '@jest/test-sequencer@30.4.1': + dependencies: + '@jest/test-result': 30.4.1 + graceful-fs: 4.2.11 + jest-haste-map: 30.4.1 + slash: 3.0.0 + '@jest/transform@30.1.1': dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.29.7 '@jest/types': 30.0.5 - '@jridgewell/trace-mapping': 0.3.30 - babel-plugin-istanbul: 7.0.0 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 7.0.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 @@ -10506,19 +11839,48 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/transform@30.4.1': + dependencies: + '@babel/core': 7.29.7 + '@jest/types': 30.4.1 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 7.0.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 30.4.1 + jest-regex-util: 30.4.0 + jest-util: 30.4.1 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + '@jest/types@30.0.5': dependencies: '@jest/pattern': 30.0.1 '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 25.6.0 - '@types/yargs': 17.0.33 + '@types/node': 26.0.0 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + + '@jest/types@30.4.1': + dependencies: + '@jest/pattern': 30.4.0 + '@jest/schemas': 30.4.1 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 26.0.0 + '@types/yargs': 17.0.35 chalk: 4.1.2 - '@joyid/ckb@1.1.2(typescript@5.9.2)(zod@3.25.76)': + '@joyid/ckb@1.1.4(typescript@6.0.3)': dependencies: - '@joyid/common': 0.2.1(typescript@5.9.2)(zod@3.25.76) + '@joyid/common': 0.2.2(typescript@6.0.3) '@nervosnetwork/ckb-sdk-utils': 0.109.5 cross-fetch: 4.0.0 uncrypto: 0.1.3 @@ -10527,9 +11889,9 @@ snapshots: - typescript - zod - '@joyid/common@0.2.1(typescript@5.9.2)(zod@3.25.76)': + '@joyid/common@0.2.2(typescript@6.0.3)': dependencies: - abitype: 0.8.7(typescript@5.9.2)(zod@3.25.76) + abitype: 0.8.7(typescript@6.0.3) type-fest: 4.6.0 transitivePeerDependencies: - typescript @@ -10538,23 +11900,23 @@ snapshots: '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.11': dependencies: '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.30': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 @@ -10566,9 +11928,9 @@ snapshots: '@lit-labs/ssr-dom-shim@1.4.0': {} - '@lit/react@1.0.8(@types/react@19.2.14)': + '@lit/react@1.0.8(@types/react@19.2.15)': dependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 '@lit/reactive-element@2.1.1': dependencies: @@ -10578,14 +11940,14 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.29.7 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.28.3 + '@babel/runtime': 7.29.7 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -10596,11 +11958,11 @@ snapshots: '@mdx-js/mdx@3.1.1': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 - acorn: 8.15.0 + '@types/mdx': 2.0.14 + acorn: 8.17.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -10609,10 +11971,10 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.15.0) + recma-jsx: 1.0.1(acorn@8.17.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 - remark-mdx: 3.1.0 + remark-mdx: 3.1.1 remark-parse: 11.0.0 remark-rehype: 11.1.2 source-map: 0.7.6 @@ -10639,11 +12001,18 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - '@napi-rs/wasm-runtime@0.2.12': + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.7.1 - '@tybys/wasm-util': 0.10.0 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.2 optional: true '@nervina-labs/dob-render@0.2.5(satori@0.10.14)': @@ -10824,20 +12193,22 @@ snapshots: '@next/swc-win32-x64-msvc@16.2.4': optional: true - '@next/third-parties@15.5.2(next@16.0.10(@babel/core@7.28.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)': + '@next/third-parties@15.5.2(next@16.0.10(@babel/core@7.29.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)': dependencies: - next: 16.0.10(@babel/core@7.28.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + next: 16.0.10(@babel/core@7.29.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 third-party-capital: 1.0.20 - '@next/third-parties@16.0.10(next@16.0.10(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)': + '@next/third-parties@16.0.10(next@16.0.10(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)': dependencies: - next: 16.0.10(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react: 19.2.5 + next: 16.0.10(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 third-party-capital: 1.0.20 '@noble/ciphers@0.5.3': {} + '@noble/ciphers@2.2.0': {} + '@noble/curves@1.2.0': dependencies: '@noble/hashes': 1.3.2 @@ -10850,12 +12221,18 @@ snapshots: dependencies: '@noble/hashes': 2.0.0 + '@noble/curves@2.2.0': + dependencies: + '@noble/hashes': 2.2.0 + '@noble/hashes@1.3.2': {} '@noble/hashes@1.8.0': {} '@noble/hashes@2.0.0': {} + '@noble/hashes@2.2.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -10866,7 +12243,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 '@nolyfill/is-core-module@1.0.39': {} @@ -10880,6 +12257,11 @@ snapshots: dependencies: '@orama/orama': 3.1.18 + '@oxc-project/types@0.106.0': + optional: true + + '@oxc-project/types@0.137.0': {} + '@paralleldrive/cuid2@2.2.2': dependencies: '@noble/hashes': 1.8.0 @@ -10889,469 +12271,588 @@ snapshots: '@pkgr/core@0.2.9': {} + '@pkgr/core@0.3.6': {} + + '@quansync/fs@1.0.0': + dependencies: + quansync: 1.0.0 + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.15)(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.15)(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.15)(react@19.2.6) aria-hidden: 1.2.6 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.15)(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-direction@1.1.1(@types/react@19.2.15)(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.15)(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.15)(react@19.2.6)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.15)(react@19.2.6) aria-hidden: 1.2.6 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.15)(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.5) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.15)(react@19.2.6) '@radix-ui/rect': 1.1.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.15)(react@19.2.6)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-slot@1.2.4(@types/react@19.2.15)(react@19.2.6)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.15)(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.15)(react@19.2.6)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.15)(react@19.2.6)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.15)(react@19.2.6)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.15)(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.15)(react@19.2.6)': dependencies: - react: 19.2.5 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.15)(react@19.2.6)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.2.5 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.5)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.15)(react@19.2.6)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.15)(react@19.2.6) + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@types/react': 19.2.15 + '@types/react-dom': 19.2.3(@types/react@19.2.15) '@radix-ui/rect@1.1.1': {} - '@react-aria/focus@3.21.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@react-aria/focus@3.21.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@react-aria/interactions': 3.25.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@react-aria/utils': 3.30.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@react-types/shared': 3.32.0(react@19.2.5) + '@react-aria/interactions': 3.25.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@react-aria/utils': 3.30.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@react-types/shared': 3.32.0(react@19.2.6) '@swc/helpers': 0.5.17 clsx: 2.1.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - '@react-aria/interactions@3.25.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@react-aria/interactions@3.25.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.5) - '@react-aria/utils': 3.30.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@react-aria/ssr': 3.9.10(react@19.2.6) + '@react-aria/utils': 3.30.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@react-stately/flags': 3.1.2 - '@react-types/shared': 3.32.0(react@19.2.5) + '@react-types/shared': 3.32.0(react@19.2.6) '@swc/helpers': 0.5.17 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - '@react-aria/ssr@3.9.10(react@19.2.5)': + '@react-aria/ssr@3.9.10(react@19.2.6)': dependencies: '@swc/helpers': 0.5.17 - react: 19.2.5 + react: 19.2.6 - '@react-aria/utils@3.30.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@react-aria/utils@3.30.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.5) + '@react-aria/ssr': 3.9.10(react@19.2.6) '@react-stately/flags': 3.1.2 - '@react-stately/utils': 3.10.8(react@19.2.5) - '@react-types/shared': 3.32.0(react@19.2.5) + '@react-stately/utils': 3.10.8(react@19.2.6) + '@react-types/shared': 3.32.0(react@19.2.6) '@swc/helpers': 0.5.17 clsx: 2.1.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) '@react-stately/flags@3.1.2': dependencies: '@swc/helpers': 0.5.17 - '@react-stately/utils@3.10.8(react@19.2.5)': + '@react-stately/utils@3.10.8(react@19.2.6)': dependencies: '@swc/helpers': 0.5.17 - react: 19.2.5 + react: 19.2.6 + + '@react-types/shared@3.32.0(react@19.2.6)': + dependencies: + react: 19.2.6 + + '@rolldown/binding-android-arm64@1.0.0-beta.58': + optional: true + + '@rolldown/binding-android-arm64@1.1.2': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.58': + optional: true + + '@rolldown/binding-darwin-arm64@1.1.2': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.58': + optional: true + + '@rolldown/binding-darwin-x64@1.1.2': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.58': + optional: true + + '@rolldown/binding-freebsd-x64@1.1.2': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.58': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.1.2': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.58': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.1.2': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.58': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.1.2': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.1.2': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.1.2': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.58': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.1.2': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.58': + optional: true + + '@rolldown/binding-linux-x64-musl@1.1.2': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.58': + optional: true + + '@rolldown/binding-openharmony-arm64@1.1.2': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.58(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true - '@react-types/shared@3.32.0(react@19.2.5)': + '@rolldown/binding-wasm32-wasi@1.1.2': dependencies: - react: 19.2.5 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.58': + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.1.2': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.58': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.1.2': + optional: true - '@rollup/rollup-android-arm-eabi@4.49.0': + '@rolldown/pluginutils@1.0.0-beta.58': optional: true - '@rollup/rollup-android-arm64@4.49.0': + '@rolldown/pluginutils@1.0.1': {} + + '@rollup/rollup-android-arm-eabi@4.62.2': + optional: true + + '@rollup/rollup-android-arm64@4.62.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.62.2': + optional: true + + '@rollup/rollup-darwin-x64@4.62.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.62.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.62.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': optional: true - '@rollup/rollup-darwin-arm64@4.49.0': + '@rollup/rollup-linux-arm-musleabihf@4.62.2': optional: true - '@rollup/rollup-darwin-x64@4.49.0': + '@rollup/rollup-linux-arm64-gnu@4.62.2': optional: true - '@rollup/rollup-freebsd-arm64@4.49.0': + '@rollup/rollup-linux-arm64-musl@4.62.2': optional: true - '@rollup/rollup-freebsd-x64@4.49.0': + '@rollup/rollup-linux-loong64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.49.0': + '@rollup/rollup-linux-loong64-musl@4.62.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.49.0': + '@rollup/rollup-linux-ppc64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.49.0': + '@rollup/rollup-linux-ppc64-musl@4.62.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.49.0': + '@rollup/rollup-linux-riscv64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.49.0': + '@rollup/rollup-linux-riscv64-musl@4.62.2': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.49.0': + '@rollup/rollup-linux-s390x-gnu@4.62.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.49.0': + '@rollup/rollup-linux-x64-gnu@4.62.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.49.0': + '@rollup/rollup-linux-x64-musl@4.62.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.49.0': + '@rollup/rollup-openbsd-x64@4.62.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.49.0': + '@rollup/rollup-openharmony-arm64@4.62.2': optional: true - '@rollup/rollup-linux-x64-musl@4.49.0': + '@rollup/rollup-win32-arm64-msvc@4.62.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.49.0': + '@rollup/rollup-win32-ia32-msvc@4.62.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.49.0': + '@rollup/rollup-win32-x64-gnu@4.62.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.49.0': + '@rollup/rollup-win32-x64-msvc@4.62.2': optional: true '@rtsao/scc@1.1.0': {} @@ -11376,10 +12877,10 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/core@4.0.2': + '@shikijs/core@4.1.0': dependencies: - '@shikijs/primitive': 4.0.2 - '@shikijs/types': 4.0.2 + '@shikijs/primitive': 4.1.0 + '@shikijs/types': 4.1.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 @@ -11390,9 +12891,9 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-javascript@4.0.2': + '@shikijs/engine-javascript@4.1.0': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/types': 4.1.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.6 @@ -11401,18 +12902,27 @@ snapshots: '@shikijs/types': 3.12.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@4.0.2': + '@shikijs/engine-oniguruma@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/engine-oniguruma@4.1.0': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/types': 4.1.0 '@shikijs/vscode-textmate': 10.0.2 '@shikijs/langs@3.12.0': dependencies: '@shikijs/types': 3.12.0 - '@shikijs/langs@4.0.2': + '@shikijs/langs@3.23.0': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/types': 3.23.0 + + '@shikijs/langs@4.1.0': + dependencies: + '@shikijs/types': 4.1.0 '@shikijs/monaco@3.12.0': dependencies: @@ -11420,9 +12930,9 @@ snapshots: '@shikijs/types': 3.12.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/primitive@4.0.2': + '@shikijs/primitive@4.1.0': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/types': 4.1.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -11430,16 +12940,25 @@ snapshots: dependencies: '@shikijs/types': 3.12.0 - '@shikijs/themes@4.0.2': + '@shikijs/themes@3.23.0': + dependencies: + '@shikijs/types': 3.23.0 + + '@shikijs/themes@4.1.0': dependencies: - '@shikijs/types': 4.0.2 + '@shikijs/types': 4.1.0 '@shikijs/types@3.12.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/types@4.0.2': + '@shikijs/types@3.23.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/types@4.1.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -11453,6 +12972,8 @@ snapshots: '@sinclair/typebox@0.34.40': {} + '@sinclair/typebox@0.34.49': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -11461,6 +12982,10 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers@15.4.0': + dependencies: + '@sinonjs/commons': 3.0.1 + '@standard-schema/spec@1.1.0': {} '@swc/helpers@0.5.15': @@ -11477,90 +13002,90 @@ snapshots: enhanced-resolve: 5.18.3 jiti: 2.5.1 lightningcss: 1.30.1 - magic-string: 0.30.18 + magic-string: 0.30.21 source-map-js: 1.2.1 tailwindcss: 4.1.12 - '@tailwindcss/node@4.2.4': + '@tailwindcss/node@4.3.0': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.21.0 - jiti: 2.6.1 + enhanced-resolve: 5.22.1 + jiti: 2.7.0 lightningcss: 1.32.0 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.2.4 + tailwindcss: 4.3.0 '@tailwindcss/oxide-android-arm64@4.1.12': optional: true - '@tailwindcss/oxide-android-arm64@4.2.4': + '@tailwindcss/oxide-android-arm64@4.3.0': optional: true '@tailwindcss/oxide-darwin-arm64@4.1.12': optional: true - '@tailwindcss/oxide-darwin-arm64@4.2.4': + '@tailwindcss/oxide-darwin-arm64@4.3.0': optional: true '@tailwindcss/oxide-darwin-x64@4.1.12': optional: true - '@tailwindcss/oxide-darwin-x64@4.2.4': + '@tailwindcss/oxide-darwin-x64@4.3.0': optional: true '@tailwindcss/oxide-freebsd-x64@4.1.12': optional: true - '@tailwindcss/oxide-freebsd-x64@4.2.4': + '@tailwindcss/oxide-freebsd-x64@4.3.0': optional: true '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': optional: true '@tailwindcss/oxide-linux-arm64-gnu@4.1.12': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': optional: true '@tailwindcss/oxide-linux-arm64-musl@4.1.12': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.2.4': + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': optional: true '@tailwindcss/oxide-linux-x64-gnu@4.1.12': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.2.4': + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': optional: true '@tailwindcss/oxide-linux-x64-musl@4.1.12': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.2.4': + '@tailwindcss/oxide-linux-x64-musl@4.3.0': optional: true '@tailwindcss/oxide-wasm32-wasi@4.1.12': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.2.4': + '@tailwindcss/oxide-wasm32-wasi@4.3.0': optional: true '@tailwindcss/oxide-win32-arm64-msvc@4.1.12': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': optional: true '@tailwindcss/oxide-win32-x64-msvc@4.1.12': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.2.4': + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': optional: true '@tailwindcss/oxide@4.1.12': @@ -11581,48 +13106,48 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.12 '@tailwindcss/oxide-win32-x64-msvc': 4.1.12 - '@tailwindcss/oxide@4.2.4': + '@tailwindcss/oxide@4.3.0': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.4 - '@tailwindcss/oxide-darwin-arm64': 4.2.4 - '@tailwindcss/oxide-darwin-x64': 4.2.4 - '@tailwindcss/oxide-freebsd-x64': 4.2.4 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.4 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.4 - '@tailwindcss/oxide-linux-x64-musl': 4.2.4 - '@tailwindcss/oxide-wasm32-wasi': 4.2.4 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.4 + '@tailwindcss/oxide-android-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-x64': 4.3.0 + '@tailwindcss/oxide-freebsd-x64': 4.3.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 '@tailwindcss/postcss@4.1.12': dependencies: '@alloc/quick-lru': 5.2.0 '@tailwindcss/node': 4.1.12 '@tailwindcss/oxide': 4.1.12 - postcss: 8.5.12 + postcss: 8.5.6 tailwindcss: 4.1.12 - '@tailwindcss/postcss@4.2.4': + '@tailwindcss/postcss@4.3.0': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.2.4 - '@tailwindcss/oxide': 4.2.4 - postcss: 8.5.12 - tailwindcss: 4.2.4 + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + postcss: 8.5.15 + tailwindcss: 4.3.0 - '@tanstack/react-virtual@3.13.12(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@tanstack/react-virtual@3.13.12(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@tanstack/virtual-core': 3.13.12 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) '@tanstack/virtual-core@3.13.12': {} '@tokenizer/inflate@0.2.7': dependencies: - debug: 4.4.1 + debug: 4.4.3 fflate: 0.8.2 token-types: 6.1.1 transitivePeerDependencies: @@ -11630,7 +13155,7 @@ snapshots: '@tokenizer/token@0.3.0': {} - '@tsconfig/node10@1.0.11': {} + '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -11638,46 +13163,47 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@tybys/wasm-util@0.10.0': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.29.7 '@types/blake2b@2.1.3': {} '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.6.0 + '@types/node': 26.0.0 - '@types/chai@5.2.2': + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 '@types/connect@3.4.38': dependencies: - '@types/node': 25.6.0 + '@types/node': 26.0.0 '@types/cookiejar@2.1.5': {} @@ -11798,7 +13324,7 @@ snapshots: '@types/d3-transition': 3.0.9 '@types/d3-zoom': 3.0.8 - '@types/debug@4.1.12': + '@types/debug@4.1.13': dependencies: '@types/ms': 2.1.0 @@ -11809,22 +13335,26 @@ snapshots: '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 + '@types/esrecurse@4.3.1': {} + '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/express-serve-static-core@5.0.7': dependencies: - '@types/node': 25.6.0 + '@types/node': 26.0.0 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -11860,6 +13390,8 @@ snapshots: '@types/js-yaml@4.0.9': {} + '@types/jsesc@2.5.1': {} + '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} @@ -11876,6 +13408,8 @@ snapshots: '@types/mdx@2.0.13': {} + '@types/mdx@2.0.14': {} + '@types/methods@1.1.4': {} '@types/mime@1.3.5': {} @@ -11892,9 +13426,13 @@ snapshots: dependencies: undici-types: 7.10.0 - '@types/node@25.6.0': + '@types/node@25.9.1': + dependencies: + undici-types: 7.24.6 + + '@types/node@26.0.0': dependencies: - undici-types: 7.19.2 + undici-types: 8.3.0 '@types/normalize-package-data@2.4.4': {} @@ -11902,25 +13440,25 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react-dom@19.2.3(@types/react@19.2.14)': + '@types/react-dom@19.2.3(@types/react@19.2.15)': dependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - '@types/react@19.2.14': + '@types/react@19.2.15': dependencies: csstype: 3.2.3 - '@types/semver@7.7.0': {} + '@types/semver@7.7.1': {} '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 '@types/serve-static@1.15.8': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 '@types/send': 0.17.5 '@types/stack-utils@2.0.3': {} @@ -11929,7 +13467,7 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 25.6.0 + '@types/node': 26.0.0 form-data: 4.0.4 '@types/supertest@6.0.3': @@ -11949,43 +13487,43 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.3.0 + '@types/node': 26.0.0 '@types/yargs-parser@21.0.3': {} - '@types/yargs@17.0.33': + '@types/yargs@17.0.35': dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3))(eslint@8.57.1)(typescript@6.0.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@6.0.3) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@6.0.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1 + debug: 4.4.3 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.7.3 - ts-api-utils: 1.4.3(typescript@5.9.2) + semver: 7.8.5 + ts-api-utils: 1.4.3(typescript@6.0.3) optionalDependencies: - typescript: 5.9.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/type-utils': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) + '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.41.0 - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -11994,15 +13532,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.49.0 - '@typescript-eslint/type-utils': 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) + '@typescript-eslint/utils': 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.49.0 - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.9.2) @@ -12010,48 +13548,76 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.61.1 + '@typescript-eslint/type-utils': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.61.1 + eslint: 10.5.0(jiti@2.7.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@6.0.3) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1 + debug: 4.4.3 eslint: 8.57.1 optionalDependencies: - typescript: 5.9.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.41.0 '@typescript-eslint/types': 8.41.0 '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.41.0 debug: 4.4.1 - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.49.0 '@typescript-eslint/types': 8.49.0 '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.49.0 - debug: 4.4.1 - eslint: 9.34.0(jiti@2.6.1) + debug: 4.4.3 + eslint: 9.34.0(jiti@2.7.0) typescript: 5.9.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.61.1 + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.61.1 + debug: 4.4.3 + eslint: 10.5.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.41.0(typescript@5.9.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) '@typescript-eslint/types': 8.41.0 - debug: 4.4.1 + debug: 4.4.3 typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -12060,11 +13626,20 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.2) '@typescript-eslint/types': 8.49.0 - debug: 4.4.1 + debug: 4.4.3 typescript: 5.9.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.61.1(typescript@6.0.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@6.0.3) + '@typescript-eslint/types': 8.61.1 + debug: 4.4.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 @@ -12080,6 +13655,11 @@ snapshots: '@typescript-eslint/types': 8.49.0 '@typescript-eslint/visitor-keys': 8.49.0 + '@typescript-eslint/scope-manager@8.61.1': + dependencies: + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/visitor-keys': 8.61.1 + '@typescript-eslint/tsconfig-utils@8.41.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 @@ -12088,60 +13668,78 @@ snapshots: dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.61.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2) - debug: 4.4.1 + typescript: 6.0.3 + + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@6.0.3)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@6.0.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@6.0.3) + debug: 4.4.3 eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.9.2) + ts-api-utils: 1.4.3(typescript@6.0.3) optionalDependencies: - typescript: 5.9.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.41.0 '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - debug: 4.4.1 - eslint: 9.34.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) + debug: 4.4.3 + eslint: 9.34.0(jiti@2.7.0) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.49.0 '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - debug: 4.4.1 - eslint: 9.34.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) + debug: 4.4.3 + eslint: 9.34.0(jiti@2.7.0) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + debug: 4.4.3 + eslint: 10.5.0(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@6.21.0': {} '@typescript-eslint/types@8.41.0': {} '@typescript-eslint/types@8.49.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.2)': + '@typescript-eslint/types@8.61.1': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1 + debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.7.3 - ts-api-utils: 1.4.3(typescript@5.9.2) + semver: 7.8.5 + ts-api-utils: 1.4.3(typescript@6.0.3) optionalDependencies: - typescript: 5.9.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -12151,11 +13749,11 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.41.0(typescript@5.9.2) '@typescript-eslint/types': 8.41.0 '@typescript-eslint/visitor-keys': 8.41.0 - debug: 4.4.1 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 + minimatch: 9.0.9 + semver: 7.8.5 ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: @@ -12167,51 +13765,77 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.2) '@typescript-eslint/types': 8.49.0 '@typescript-eslint/visitor-keys': 8.49.0 - debug: 4.4.1 - minimatch: 9.0.5 - semver: 7.7.3 - tinyglobby: 0.2.15 + debug: 4.4.3 + minimatch: 9.0.9 + semver: 7.8.5 + tinyglobby: 0.2.17 ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.61.1(typescript@6.0.3)': + dependencies: + '@typescript-eslint/project-service': 8.61.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.61.1(typescript@6.0.3) + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/visitor-keys': 8.61.1 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@6.0.3) eslint: 8.57.1 - semver: 7.7.3 + semver: 7.8.5 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.34.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.41.0 '@typescript-eslint/types': 8.41.0 '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.34.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.49.0 '@typescript-eslint/types': 8.49.0 '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) typescript: 5.9.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.61.1 + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) + eslint: 10.5.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 @@ -12227,71 +13851,89 @@ snapshots: '@typescript-eslint/types': 8.49.0 eslint-visitor-keys: 4.2.1 - '@uiw/react-json-view@2.0.0-alpha.37(@babel/runtime@7.28.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@typescript-eslint/visitor-keys@8.61.1': + dependencies: + '@typescript-eslint/types': 8.61.1 + eslint-visitor-keys: 5.0.1 + + '@uiw/react-json-view@2.0.0-alpha.37(@babel/runtime@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@babel/runtime': 7.28.4 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + '@babel/runtime': 7.29.7 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) '@ungap/structured-clone@1.3.0': {} - '@unrs/resolver-binding-android-arm-eabi@1.11.1': + '@ungap/structured-clone@1.3.1': {} + + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + optional: true + + '@unrs/resolver-binding-android-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.12.2': optional: true - '@unrs/resolver-binding-android-arm64@1.11.1': + '@unrs/resolver-binding-darwin-x64@1.12.2': optional: true - '@unrs/resolver-binding-darwin-arm64@1.11.1': + '@unrs/resolver-binding-freebsd-x64@1.12.2': optional: true - '@unrs/resolver-binding-darwin-x64@1.11.1': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': optional: true - '@unrs/resolver-binding-freebsd-x64@1.11.1': + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.11.1': + '@unrs/resolver-binding-linux-x64-musl@1.12.2': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.11.1': + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.12.2': dependencies: - '@napi-rs/wasm-runtime': 0.2.12 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': optional: true '@upsetjs/venn.js@2.0.0': @@ -12299,66 +13941,60 @@ snapshots: d3-selection: 3.0.0 d3-transition: 3.0.1(d3-selection@3.0.0) - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + '@vitest/coverage-v8@4.1.9(vitest@4.1.9)': dependencies: - '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.4 - debug: 4.4.1 + '@vitest/utils': 4.1.9 + ast-v8-to-istanbul: 1.0.4 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - magic-string: 0.30.18 - magicast: 0.3.5 - std-env: 3.9.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color + magicast: 0.5.3 + obug: 2.1.3 + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.9(@types/node@26.0.0)(@vitest/coverage-v8@4.1.9)(vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) - '@vitest/expect@3.2.4': + '@vitest/expect@4.1.9': dependencies: - '@types/chai': 5.2.2 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - tinyrainbow: 2.0.0 + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + chai: 6.2.2 + tinyrainbow: 3.1.0 - '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))': + '@vitest/mocker@4.1.9(vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 4.1.9 estree-walker: 3.0.3 - magic-string: 0.30.18 + magic-string: 0.30.21 optionalDependencies: - vite: 7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + vite: 7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) - '@vitest/pretty-format@3.2.4': + '@vitest/pretty-format@4.1.9': dependencies: - tinyrainbow: 2.0.0 + tinyrainbow: 3.1.0 - '@vitest/runner@3.2.4': + '@vitest/runner@4.1.9': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 4.1.9 pathe: 2.0.3 - strip-literal: 3.0.0 - '@vitest/snapshot@3.2.4': + '@vitest/snapshot@4.1.9': dependencies: - '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.18 + '@vitest/pretty-format': 4.1.9 + '@vitest/utils': 4.1.9 + magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.3 + '@vitest/spy@4.1.9': {} - '@vitest/utils@3.2.4': + '@vitest/utils@4.1.9': dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.2.1 - tinyrainbow: 2.0.0 + '@vitest/pretty-format': 4.1.9 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 '@webassemblyjs/ast@1.14.1': dependencies: @@ -12440,11 +14076,9 @@ snapshots: '@xtuc/long@4.2.2': {} - abitype@0.8.7(typescript@5.9.2)(zod@3.25.76): + abitype@0.8.7(typescript@6.0.3): dependencies: - typescript: 5.9.2 - optionalDependencies: - zod: 3.25.76 + typescript: 6.0.3 abort-controller@3.0.0: dependencies: @@ -12459,33 +14093,49 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-import-phases@1.0.4(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 - acorn-walk@8.3.4: + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: - acorn: 8.15.0 + acorn: 8.17.0 + + acorn-walk@8.3.5: + dependencies: + acorn: 8.17.0 acorn@8.15.0: {} + acorn@8.17.0: {} + aes-js@4.0.0-beta.5: {} - ajv-formats@2.1.1(ajv@8.17.1): + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.20.0 ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 - ajv-keywords@3.5.2(ajv@6.12.6): + ajv-keywords@3.5.2(ajv@6.15.0): dependencies: - ajv: 6.12.6 + ajv: 6.15.0 - ajv-keywords@5.1.0(ajv@8.17.1): + ajv-keywords@5.1.0(ajv@8.20.0): dependencies: - ajv: 8.17.1 + ajv: 8.20.0 fast-deep-equal: 3.1.3 ajv@6.12.6: @@ -12495,6 +14145,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -12502,6 +14159,13 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + algoliasearch@5.46.0: dependencies: '@algolia/abtesting': 1.12.0 @@ -12544,10 +14208,12 @@ snapshots: ansis@4.1.0: {} + ansis@4.3.1: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 + picomatch: 2.3.2 append-field@1.0.0: {} @@ -12640,13 +14306,19 @@ snapshots: assertion-error@2.0.1: {} + ast-kit@3.0.0: + dependencies: + '@babel/parser': 8.0.0 + estree-walker: 3.0.3 + pathe: 2.0.3 + ast-types-flow@0.0.8: {} - ast-v8-to-istanbul@0.3.4: + ast-v8-to-istanbul@1.0.4: dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 - js-tokens: 9.0.1 + js-tokens: 10.0.0 astring@1.9.0: {} @@ -12668,28 +14340,51 @@ snapshots: transitivePeerDependencies: - debug + axios@1.18.0: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.6 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + - supports-color + axobject-query@4.1.0: {} b4a@1.6.7: {} - babel-jest@30.1.1(@babel/core@7.28.3): + babel-jest@30.1.1(@babel/core@7.29.7): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.29.7 '@jest/transform': 30.1.1 '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 7.0.0 - babel-preset-jest: 30.0.1(@babel/core@7.28.3) + babel-plugin-istanbul: 7.0.1 + babel-preset-jest: 30.0.1(@babel/core@7.29.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-jest@30.4.1(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@jest/transform': 30.4.1 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 7.0.1 + babel-preset-jest: 30.4.0(@babel/core@7.29.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-plugin-istanbul@7.0.0: + babel-plugin-istanbul@7.0.1: dependencies: - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.29.7 '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 istanbul-lib-instrument: 6.0.3 test-exclude: 6.0.0 transitivePeerDependencies: @@ -12697,39 +14392,51 @@ snapshots: babel-plugin-jest-hoist@30.0.1: dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + '@types/babel__core': 7.20.5 + + babel-plugin-jest-hoist@30.4.0: + dependencies: '@types/babel__core': 7.20.5 - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.3): - dependencies: - '@babel/core': 7.28.3 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.3) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.3) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.3) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.3) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.3) - - babel-preset-jest@30.0.1(@babel/core@7.28.3): - dependencies: - '@babel/core': 7.28.3 + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.7) + + babel-preset-jest@30.0.1(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 babel-plugin-jest-hoist: 30.0.1 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.3) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) + + babel-preset-jest@30.4.0(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + babel-plugin-jest-hoist: 30.4.0 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) bail@2.0.2: {} balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base-x@4.0.1: {} base-x@5.0.1: {} @@ -12738,7 +14445,9 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.10.23: {} + baseline-browser-mapping@2.10.32: {} + + baseline-browser-mapping@2.10.38: {} bech32@2.0.0: {} @@ -12748,6 +14457,37 @@ snapshots: big.js@5.2.2: {} + bip174@3.0.0: + dependencies: + uint8array-tools: 0.0.9 + varuint-bitcoin: 2.0.0 + + birpc@4.0.0: {} + + bitcoinjs-lib@7.0.0(typescript@5.9.2): + dependencies: + '@noble/hashes': 1.8.0 + bech32: 2.0.0 + bip174: 3.0.0 + bs58check: 4.0.0 + uint8array-tools: 0.0.9 + valibot: 0.38.0(typescript@5.9.2) + varuint-bitcoin: 2.0.0 + transitivePeerDependencies: + - typescript + + bitcoinjs-lib@7.0.1(typescript@6.0.3): + dependencies: + '@noble/hashes': 1.8.0 + bech32: 2.0.0 + bip174: 3.0.0 + bs58check: 4.0.0 + uint8array-tools: 0.0.9 + valibot: 1.4.1(typescript@6.0.3) + varuint-bitcoin: 2.0.0 + transitivePeerDependencies: + - typescript + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -12770,7 +14510,7 @@ snapshots: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.1 + debug: 4.4.3 http-errors: 2.0.0 iconv-lite: 0.6.3 on-finished: 2.4.1 @@ -12785,10 +14525,14 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.2: + brace-expansion@2.1.1: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -12802,6 +14546,14 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.3) + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.38 + caniuse-lite: 1.0.30001799 + electron-to-chromium: 1.5.376 + node-releases: 2.0.48 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 @@ -12814,7 +14566,7 @@ snapshots: dependencies: base-x: 5.0.1 - bs58check@4.0.0(patch_hash=0848a2e3956f24abf1dd8620cba2a3f468393e489185d9536ad109f7e5712d26): + bs58check@4.0.0: dependencies: '@noble/hashes': 1.8.0 bs58: 6.0.0 @@ -12843,7 +14595,7 @@ snapshots: bytes@3.1.2: {} - cac@6.7.14: {} + cac@7.0.0: {} call-bind-apply-helpers@1.0.2: dependencies: @@ -12872,15 +14624,13 @@ snapshots: caniuse-lite@1.0.30001737: {} + caniuse-lite@1.0.30001799: {} + + cborg@5.1.1: {} + ccount@2.0.1: {} - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 + chai@6.2.2: {} chalk@2.4.2: dependencies: @@ -12903,9 +14653,7 @@ snapshots: character-reference-invalid@2.0.1: {} - chardet@2.1.0: {} - - check-error@2.1.1: {} + chardet@2.2.0: {} chokidar@4.0.3: dependencies: @@ -12923,7 +14671,9 @@ snapshots: ci-info@4.3.0: {} - cjs-module-lexer@2.1.0: {} + ci-info@4.4.0: {} + + cjs-module-lexer@2.2.0: {} class-transformer@0.5.1: {} @@ -12977,7 +14727,7 @@ snapshots: collapse-white-space@2.1.0: {} - collect-v8-coverage@1.0.2: {} + collect-v8-coverage@1.0.3: {} color-convert@1.9.3: dependencies: @@ -13070,7 +14820,7 @@ snapshots: cosmiconfig@8.3.6(typescript@5.8.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -13110,17 +14860,17 @@ snapshots: csstype@3.2.3: {} - cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.3): + cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.4): dependencies: cose-base: 1.0.3 - cytoscape: 3.33.3 + cytoscape: 3.33.4 - cytoscape-fcose@2.2.0(cytoscape@3.33.3): + cytoscape-fcose@2.2.0(cytoscape@3.33.4): dependencies: cose-base: 2.2.0 - cytoscape: 3.33.3 + cytoscape: 3.33.4 - cytoscape@3.33.3: {} + cytoscape@3.33.4: {} d3-array@2.12.1: dependencies: @@ -13316,7 +15066,7 @@ snapshots: dataloader@1.4.0: {} - dayjs@1.11.20: {} + dayjs@1.11.21: {} debug@3.2.7: dependencies: @@ -13326,13 +15076,19 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.3: + dependencies: + ms: 2.1.3 + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 - dedent@1.6.0: {} - - deep-eql@5.0.2: {} + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + dedent@1.7.2: {} deep-freeze-strict@1.1.1: {} @@ -13361,6 +15117,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.7: {} + delaunator@5.1.0: dependencies: robust-predicates: 3.0.3 @@ -13390,7 +15148,7 @@ snapshots: asap: 2.0.6 wrappy: 1.0.2 - diff@4.0.2: {} + diff@4.0.4: {} dir-glob@3.0.1: dependencies: @@ -13404,7 +15162,7 @@ snapshots: dependencies: esutils: 2.0.3 - dompurify@3.4.3: + dompurify@3.4.7: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -13414,10 +15172,12 @@ snapshots: dotenv@16.4.7: {} - dotenv@17.2.1: {} + dotenv@17.4.2: {} dotenv@8.6.0: {} + dts-resolver@3.0.0: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -13430,6 +15190,8 @@ snapshots: electron-to-chromium@1.5.211: {} + electron-to-chromium@1.5.376: {} + elliptic@6.6.1: dependencies: bn.js: 4.12.2 @@ -13450,6 +15212,8 @@ snapshots: emojis-list@3.0.0: {} + empathic@2.0.1: {} + encodeurl@2.0.0: {} enhanced-resolve@5.18.3: @@ -13457,7 +15221,12 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.3 - enhanced-resolve@5.21.0: + enhanced-resolve@5.22.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + enhanced-resolve@5.24.0: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -13471,7 +15240,7 @@ snapshots: entities@6.0.1: {} - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -13499,7 +15268,7 @@ snapshots: has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 internal-slot: 1.1.0 is-array-buffer: 3.0.5 is-callable: 1.2.7 @@ -13557,6 +15326,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.1.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -13570,7 +15341,7 @@ snapshots: es-shim-unscopables@1.1.0: dependencies: - hasown: 2.0.2 + hasown: 2.0.4 es-to-primitive@1.3.0: dependencies: @@ -13578,7 +15349,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.46.1: {} + es-toolkit@1.47.0: {} esast-util-from-estree@2.0.0: dependencies: @@ -13590,38 +15361,38 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.15.0 + acorn: 8.17.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 - esbuild@0.25.9: + esbuild@0.27.7: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.9 - '@esbuild/android-arm': 0.25.9 - '@esbuild/android-arm64': 0.25.9 - '@esbuild/android-x64': 0.25.9 - '@esbuild/darwin-arm64': 0.25.9 - '@esbuild/darwin-x64': 0.25.9 - '@esbuild/freebsd-arm64': 0.25.9 - '@esbuild/freebsd-x64': 0.25.9 - '@esbuild/linux-arm': 0.25.9 - '@esbuild/linux-arm64': 0.25.9 - '@esbuild/linux-ia32': 0.25.9 - '@esbuild/linux-loong64': 0.25.9 - '@esbuild/linux-mips64el': 0.25.9 - '@esbuild/linux-ppc64': 0.25.9 - '@esbuild/linux-riscv64': 0.25.9 - '@esbuild/linux-s390x': 0.25.9 - '@esbuild/linux-x64': 0.25.9 - '@esbuild/netbsd-arm64': 0.25.9 - '@esbuild/netbsd-x64': 0.25.9 - '@esbuild/openbsd-arm64': 0.25.9 - '@esbuild/openbsd-x64': 0.25.9 - '@esbuild/openharmony-arm64': 0.25.9 - '@esbuild/sunos-x64': 0.25.9 - '@esbuild/win32-arm64': 0.25.9 - '@esbuild/win32-ia32': 0.25.9 - '@esbuild/win32-x64': 0.25.9 + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 esbuild@0.28.0: optionalDependencies: @@ -13664,18 +15435,18 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-next@16.0.10(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): + eslint-config-next@16.0.10(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3))(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2): dependencies: '@next/eslint-plugin-next': 16.0.10 - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 7.0.1(eslint@9.34.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.7.0)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.7.0)) + eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.7.0)) + eslint-plugin-react-hooks: 7.0.1(eslint@9.34.0(jiti@2.7.0)) globals: 16.4.0 - typescript-eslint: 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + typescript-eslint: 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -13684,18 +15455,18 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-next@16.0.10(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): + eslint-config-next@16.0.10(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2): dependencies: '@next/eslint-plugin-next': 16.0.10 - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 7.0.1(eslint@9.34.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.7.0)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0(jiti@2.7.0)) + eslint-plugin-react: 7.37.5(eslint@9.34.0(jiti@2.7.0)) + eslint-plugin-react-hooks: 7.0.1(eslint@9.34.0(jiti@2.7.0)) globals: 16.4.0 - typescript-eslint: 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + typescript-eslint: 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -13704,15 +15475,19 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)): + dependencies: + eslint: 10.5.0(jiti@2.7.0) + + eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.7.0)): dependencies: - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) eslint-config-prettier@9.1.2(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-formatter-codeframe@7.32.1: + eslint-formatter-codeframe@7.32.2: dependencies: '@babel/code-frame': 7.12.11 chalk: 4.1.2 @@ -13720,64 +15495,64 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.10 + is-core-module: 2.16.2 + resolve: 1.22.12 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0)): dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.1 - eslint: 9.34.0(jiti@2.6.1) - get-tsconfig: 4.10.1 + debug: 4.4.3 + eslint: 9.34.0(jiti@2.7.0) + get-tsconfig: 4.14.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.14 - unrs-resolver: 1.11.1 + tinyglobby: 0.2.17 + unrs-resolver: 1.12.2 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.7.0)): dependencies: '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.1 - eslint: 9.34.0(jiti@2.6.1) - get-tsconfig: 4.10.1 + debug: 4.4.3 + eslint: 9.34.0(jiti@2.7.0) + get-tsconfig: 4.14.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.14 - unrs-resolver: 1.11.1 + tinyglobby: 0.2.17 + unrs-resolver: 1.12.2 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.7.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@6.0.3) + eslint: 9.34.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.34.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.7.0)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13786,13 +15561,13 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.6.1)) - hasown: 2.0.2 - is-core-module: 2.16.1 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.7.0)) + hasown: 2.0.4 + is-core-module: 2.16.2 is-glob: 4.0.3 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.1 @@ -13800,13 +15575,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.34.0(jiti@2.7.0)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13815,13 +15590,13 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1)) - hasown: 2.0.2 - is-core-module: 2.16.1 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0)) + hasown: 2.0.4 + is-core-module: 2.16.2 is-glob: 4.0.3 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.1 @@ -13829,13 +15604,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0(jiti@2.6.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0(jiti@2.7.0)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -13845,11 +15620,11 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.34.0(jiti@2.6.1) - hasown: 2.0.2 + eslint: 9.34.0(jiti@2.7.0) + hasown: 2.0.4 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 @@ -13861,38 +15636,48 @@ snapshots: globals: 13.24.0 rambda: 7.5.0 - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.6.1)))(eslint@9.34.0(jiti@2.6.1))(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.34.0(jiti@2.7.0)))(eslint@9.34.0(jiti@2.7.0))(prettier@3.6.2): dependencies: - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.34.0(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@9.34.0(jiti@2.7.0)) + + eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(prettier@3.8.4): + dependencies: + eslint: 10.5.0(jiti@2.7.0) + prettier: 3.8.4 + prettier-linter-helpers: 1.0.1 + synckit: 0.11.13 + optionalDependencies: + '@types/eslint': 9.6.1 + eslint-config-prettier: 10.1.8(eslint@10.5.0(jiti@2.7.0)) - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2): + eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.8.4): dependencies: eslint: 8.57.1 - prettier: 3.6.2 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.11 + prettier: 3.8.4 + prettier-linter-helpers: 1.0.1 + synckit: 0.11.13 optionalDependencies: '@types/eslint': 9.6.1 eslint-config-prettier: 9.1.2(eslint@8.57.1) - eslint-plugin-react-hooks@7.0.1(eslint@9.34.0(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.34.0(jiti@2.7.0)): dependencies: - '@babel/core': 7.28.3 - '@babel/parser': 7.28.3 - eslint: 9.34.0(jiti@2.6.1) + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + eslint: 9.34.0(jiti@2.7.0) hermes-parser: 0.25.1 - zod: 4.3.6 - zod-validation-error: 4.0.2(zod@4.3.6) + zod: 4.4.3 + zod-validation-error: 4.0.2(zod@4.4.3) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.34.0(jiti@2.7.0)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -13900,11 +15685,11 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.34.0(jiti@2.6.1) + eslint: 9.34.0(jiti@2.7.0) estraverse: 5.3.0 - hasown: 2.0.2 + hasown: 2.0.4 jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 + minimatch: 3.1.5 object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 @@ -13916,12 +15701,12 @@ snapshots: eslint-plugin-unicorn@49.0.0(eslint@8.57.1): dependencies: - '@babel/helper-validator-identifier': 7.27.1 - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@babel/helper-validator-identifier': 7.29.7 + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) ci-info: 3.9.0 clean-regexp: 1.0.0 eslint: 8.57.1 - esquery: 1.6.0 + esquery: 1.7.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.1.0 @@ -13929,7 +15714,7 @@ snapshots: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.7.3 + semver: 7.8.5 strip-indent: 3.0.0 eslint-scope@5.1.1: @@ -13947,6 +15732,13 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 + esrecurse: 4.3.0 + estraverse: 5.3.0 + eslint-utils@3.0.0(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -13958,26 +15750,65 @@ snapshots: eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.1: {} + + eslint@10.5.0(jiti@2.7.0): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.2 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 - ajv: 6.12.6 + '@ungap/structured-clone': 1.3.1 + ajv: 6.15.0 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -13989,11 +15820,11 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 + js-yaml: 4.2.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 strip-ansi: 6.0.1 @@ -14001,9 +15832,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.34.0(jiti@2.6.1): + eslint@9.34.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 @@ -14039,7 +15870,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -14049,10 +15880,16 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 + espree@11.2.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 5.0.1 + espree@9.6.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -14061,6 +15898,10 @@ snapshots: dependencies: estraverse: 5.3.0 + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -14071,7 +15912,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-util-build-jsx@3.0.1: dependencies: @@ -14084,7 +15925,7 @@ snapshots: estree-util-scope@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 estree-util-to-js@2.0.0: @@ -14095,7 +15936,7 @@ snapshots: estree-util-value-to-estree@3.5.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-util-visit@2.0.0: dependencies: @@ -14104,21 +15945,21 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} etag@1.8.1: {} - ethers@6.15.0: + ethers@6.17.0: dependencies: - '@adraffy/ens-normalize': 1.10.1 + '@adraffy/ens-normalize': 1.11.1 '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 '@types/node': 22.7.5 aes-js: 4.0.0-beta.5 tslib: 2.7.0 - ws: 8.17.1 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -14143,7 +15984,7 @@ snapshots: exit-x@0.2.2: {} - expect-type@1.2.2: {} + expect-type@1.3.0: {} expect@30.1.1: dependencies: @@ -14154,6 +15995,15 @@ snapshots: jest-mock: 30.0.5 jest-util: 30.0.5 + expect@30.4.1: + dependencies: + '@jest/expect-utils': 30.4.1 + '@jest/get-type': 30.1.0 + jest-matcher-utils: 30.4.1 + jest-message-util: 30.4.1 + jest-mock: 30.4.1 + jest-util: 30.4.1 + express@5.1.0: dependencies: accepts: 2.0.0 @@ -14162,7 +16012,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.1 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -14218,7 +16068,9 @@ snapshots: fast-uri@3.1.0: {} - fastq@1.19.1: + fast-uri@3.1.2: {} + + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -14226,10 +16078,6 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -14261,7 +16109,7 @@ snapshots: finalhandler@2.1.0: dependencies: - debug: 4.4.1 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -14282,19 +16130,21 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 rimraf: 3.0.2 flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - flatted@3.3.3: {} + flatted@3.4.2: {} follow-redirects@1.15.11: {} + follow-redirects@1.16.0: {} + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -14313,10 +16163,10 @@ snapshots: deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 - minimatch: 3.1.2 + minimatch: 3.1.5 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.7.2 + semver: 7.8.5 tapable: 2.2.3 typescript: 5.8.3 webpack: 5.100.2 @@ -14329,6 +16179,14 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + formidable@3.5.4: dependencies: '@paralleldrive/cuid2': 2.2.2 @@ -14337,14 +16195,14 @@ snapshots: forwarded@0.2.0: {} - framer-motion@12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + framer-motion@12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - motion-dom: 12.38.0 - motion-utils: 12.36.0 + motion-dom: 12.40.0 + motion-utils: 12.39.0 tslib: 2.8.1 optionalDependencies: - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) fresh@2.0.0: {} @@ -14373,7 +16231,7 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.0)(lucide-react@1.11.0(react@19.2.5))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6): + fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(algoliasearch@5.46.0)(lucide-react@1.17.0(react@19.2.6))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3): dependencies: '@orama/orama': 3.1.18 estree-util-value-to-estree: 3.5.0 @@ -14387,7 +16245,7 @@ snapshots: remark-gfm: 4.0.1 remark-rehype: 11.1.2 scroll-into-view-if-needed: 3.1.0 - shiki: 4.0.2 + shiki: 4.1.0 tinyglobby: 0.2.16 unified: 11.0.5 unist-util-visit: 5.1.0 @@ -14397,77 +16255,77 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@types/react': 19.2.14 + '@types/react': 19.2.15 algoliasearch: 5.46.0 - lucide-react: 1.11.0(react@19.2.5) - next: 16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - zod: 4.3.6 + lucide-react: 1.17.0(react@19.2.6) + next: 16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + zod: 4.4.3 transitivePeerDependencies: - supports-color - fumadocs-mdx@14.3.2(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.0)(lucide-react@1.11.0(react@19.2.5))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(mdast-util-directive@3.1.0)(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react@19.2.5)(vite@7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): + fumadocs-mdx@14.3.2(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.15)(fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(algoliasearch@5.46.0)(lucide-react@1.17.0(react@19.2.6))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(mdast-util-directive@3.1.0)(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(vite@7.3.5(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): dependencies: '@mdx-js/mdx': 3.1.1 '@standard-schema/spec': 1.1.0 chokidar: 5.0.0 esbuild: 0.28.0 estree-util-value-to-estree: 3.5.0 - fumadocs-core: 16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.0)(lucide-react@1.11.0(react@19.2.5))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) - js-yaml: 4.1.1 + fumadocs-core: 16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(algoliasearch@5.46.0)(lucide-react@1.17.0(react@19.2.6))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3) + js-yaml: 4.2.0 mdast-util-mdx: 3.0.0 mdast-util-to-markdown: 2.1.2 picocolors: 1.1.1 picomatch: 4.0.4 - tinyexec: 1.1.1 - tinyglobby: 0.2.16 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.1.0 vfile: 6.0.3 - zod: 4.3.6 + zod: 4.4.3 optionalDependencies: '@types/mdast': 4.0.4 '@types/mdx': 2.0.13 - '@types/react': 19.2.14 + '@types/react': 19.2.15 mdast-util-directive: 3.1.0 - next: 16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react: 19.2.5 - vite: 7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + next: 16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + vite: 7.3.5(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) transitivePeerDependencies: - supports-color - fumadocs-ui@16.8.5(@tailwindcss/oxide@4.2.4)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.0)(lucide-react@1.11.0(react@19.2.5))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(tailwindcss@4.2.4): - dependencies: - '@fumadocs/tailwind': 0.0.5(@tailwindcss/oxide@4.2.4)(tailwindcss@4.2.4) - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + fumadocs-ui@16.8.5(@tailwindcss/oxide@4.3.0)(@types/mdx@2.0.13)(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(fumadocs-core@16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(algoliasearch@5.46.0)(lucide-react@1.17.0(react@19.2.6))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(tailwindcss@4.3.0): + dependencies: + '@fumadocs/tailwind': 0.0.5(@tailwindcss/oxide@4.3.0)(tailwindcss@4.3.0) + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.15)(react@19.2.6) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.15))(@types/react@19.2.15)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) class-variance-authority: 0.7.1 - fumadocs-core: 16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.0)(lucide-react@1.11.0(react@19.2.5))(next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.3.6) - lucide-react: 1.11.0(react@19.2.5) - motion: 12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - next-themes: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5) + fumadocs-core: 16.8.5(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.15)(algoliasearch@5.46.0)(lucide-react@1.17.0(react@19.2.6))(next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(zod@4.4.3) + lucide-react: 1.17.0(react@19.2.6) + motion: 12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + next-themes: 0.4.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-remove-scroll: 2.7.2(@types/react@19.2.15)(react@19.2.6) rehype-raw: 7.0.0 scroll-into-view-if-needed: 3.1.0 - shiki: 4.0.2 - tailwind-merge: 3.5.0 + shiki: 4.1.0 + tailwind-merge: 3.6.0 unist-util-visit: 5.1.0 optionalDependencies: '@types/mdx': 2.0.13 - '@types/react': 19.2.14 - next: 16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@types/react': 19.2.15 + next: 16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) transitivePeerDependencies: - '@emotion/is-prop-valid' - '@tailwindcss/oxide' @@ -14482,7 +16340,7 @@ snapshots: call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 - hasown: 2.0.2 + hasown: 2.0.4 is-callable: 1.2.7 functions-have-names@1.2.3: {} @@ -14501,7 +16359,7 @@ snapshots: get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-nonce@1.0.1: {} @@ -14521,7 +16379,11 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.10.1: + get-tsconfig@4.14.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + get-tsconfig@5.0.0-beta.5: dependencies: resolve-pkg-maps: 1.0.0 @@ -14537,12 +16399,12 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 + minimatch: 9.0.9 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -14550,7 +16412,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.0.3 + minimatch: 10.2.5 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 2.0.0 @@ -14560,7 +16422,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -14596,7 +16458,7 @@ snapshots: hachure-fill@0.5.2: {} - handlebars@4.7.8: + handlebars@4.7.9: dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -14636,6 +16498,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + hast-util-from-parse5@8.0.3: dependencies: '@types/hast': 3.0.4 @@ -14669,7 +16535,7 @@ snapshots: hast-util-to-estree@3.1.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -14704,7 +16570,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -14714,9 +16580,9 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 + property-information: 7.2.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.17 + style-to-js: 1.1.21 unist-util-position: 5.0.0 vfile-message: 4.0.3 transitivePeerDependencies: @@ -14758,6 +16624,8 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + hookable@6.1.1: {} + hosted-git-info@2.8.9: {} html-escaper@2.0.2: {} @@ -14772,7 +16640,14 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - human-id@4.1.1: {} + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + human-id@4.2.0: {} human-signals@2.1.0: {} @@ -14780,6 +16655,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -14800,6 +16679,8 @@ snapshots: import-meta-resolve@4.2.0: {} + import-without-cache@0.4.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -14813,10 +16694,12 @@ snapshots: inline-style-parser@0.2.4: {} + inline-style-parser@0.2.7: {} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 - hasown: 2.0.2 + hasown: 2.0.4 side-channel: 1.1.0 internmap@1.0.1: {} @@ -14865,13 +16748,13 @@ snapshots: is-bun-module@2.0.0: dependencies: - semver: 7.7.3 + semver: 7.8.5 is-callable@1.2.7: {} - is-core-module@2.16.1: + is-core-module@2.16.2: dependencies: - hasown: 2.0.2 + hasown: 2.0.4 is-data-view@1.0.2: dependencies: @@ -14933,7 +16816,7 @@ snapshots: call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.4 is-set@2.0.3: {} @@ -14985,19 +16868,19 @@ snapshots: isexe@2.0.0: {} - isomorphic-ws@5.0.0(ws@8.18.3): + isomorphic-ws@5.0.0(ws@8.21.0): dependencies: - ws: 8.18.3 + ws: 8.21.0 istanbul-lib-coverage@3.2.2: {} istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.28.3 - '@babel/parser': 7.28.3 - '@istanbuljs/schema': 0.1.3 + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + '@istanbuljs/schema': 0.1.6 istanbul-lib-coverage: 3.2.2 - semver: 7.7.3 + semver: 7.8.5 transitivePeerDependencies: - supports-color @@ -15009,8 +16892,8 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.30 - debug: 4.4.1 + '@jridgewell/trace-mapping': 0.3.31 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -15047,16 +16930,22 @@ snapshots: jest-util: 30.0.5 p-limit: 3.1.0 + jest-changed-files@30.4.1: + dependencies: + execa: 5.1.1 + jest-util: 30.4.1 + p-limit: 3.1.0 + jest-circus@30.1.1: dependencies: '@jest/environment': 30.1.1 '@jest/expect': 30.1.1 '@jest/test-result': 30.1.1 '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 chalk: 4.1.2 co: 4.6.0 - dedent: 1.6.0 + dedent: 1.7.2 is-generator-fn: 2.1.0 jest-each: 30.1.0 jest-matcher-utils: 30.1.1 @@ -15073,6 +16962,32 @@ snapshots: - babel-plugin-macros - supports-color + jest-circus@30.4.2: + dependencies: + '@jest/environment': 30.4.1 + '@jest/expect': 30.4.1 + '@jest/test-result': 30.4.1 + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.7.2 + is-generator-fn: 2.1.0 + jest-each: 30.4.1 + jest-matcher-utils: 30.4.1 + jest-message-util: 30.4.1 + jest-runtime: 30.4.2 + jest-snapshot: 30.4.1 + jest-util: 30.4.1 + p-limit: 3.1.0 + pretty-format: 30.4.1 + pure-rand: 7.0.1 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + jest-cli@30.1.1(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)): dependencies: '@jest/core': 30.1.1(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)) @@ -15084,7 +16999,7 @@ snapshots: jest-config: 30.1.1(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)) jest-util: 30.0.5 jest-validate: 30.1.0 - yargs: 17.7.2 + yargs: 17.7.3 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -15092,18 +17007,18 @@ snapshots: - supports-color - ts-node - jest-cli@30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)): + jest-cli@30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)): dependencies: - '@jest/core': 30.1.1(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)) - '@jest/test-result': 30.1.1 - '@jest/types': 30.0.5 + '@jest/core': 30.4.2(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)) + '@jest/test-result': 30.4.1 + '@jest/types': 30.4.1 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)) - jest-util: 30.0.5 - jest-validate: 30.1.0 - yargs: 17.7.2 + jest-config: 30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)) + jest-util: 30.4.1 + jest-validate: 30.4.1 + yargs: 17.7.3 transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -15113,16 +17028,16 @@ snapshots: jest-config@30.1.1(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.29.7 '@jest/get-type': 30.1.0 '@jest/pattern': 30.0.1 '@jest/test-sequencer': 30.1.1 '@jest/types': 30.0.5 - babel-jest: 30.1.1(@babel/core@7.28.3) + babel-jest: 30.1.1(@babel/core@7.29.7) chalk: 4.1.2 - ci-info: 4.3.0 + ci-info: 4.4.0 deepmerge: 4.3.1 - glob: 10.4.5 + glob: 10.5.0 graceful-fs: 4.2.11 jest-circus: 30.1.1 jest-docblock: 30.0.1 @@ -15144,18 +17059,18 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)): + jest-config@30.1.1(@types/node@26.0.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.29.7 '@jest/get-type': 30.1.0 '@jest/pattern': 30.0.1 '@jest/test-sequencer': 30.1.1 '@jest/types': 30.0.5 - babel-jest: 30.1.1(@babel/core@7.28.3) + babel-jest: 30.1.1(@babel/core@7.29.7) chalk: 4.1.2 - ci-info: 4.3.0 + ci-info: 4.4.0 deepmerge: 4.3.1 - glob: 10.4.5 + glob: 10.5.0 graceful-fs: 4.2.11 jest-circus: 30.1.1 jest-docblock: 30.0.1 @@ -15171,41 +17086,40 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 26.0.0 ts-node: 10.9.2(@types/node@24.3.0)(typescript@5.9.2) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)): + jest-config@30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)): dependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.29.7 '@jest/get-type': 30.1.0 - '@jest/pattern': 30.0.1 - '@jest/test-sequencer': 30.1.1 - '@jest/types': 30.0.5 - babel-jest: 30.1.1(@babel/core@7.28.3) + '@jest/pattern': 30.4.0 + '@jest/test-sequencer': 30.4.1 + '@jest/types': 30.4.1 + babel-jest: 30.4.1(@babel/core@7.29.7) chalk: 4.1.2 - ci-info: 4.3.0 + ci-info: 4.4.0 deepmerge: 4.3.1 - glob: 10.4.5 + glob: 10.5.0 graceful-fs: 4.2.11 - jest-circus: 30.1.1 - jest-docblock: 30.0.1 - jest-environment-node: 30.1.1 - jest-regex-util: 30.0.1 - jest-resolve: 30.1.0 - jest-runner: 30.1.1 - jest-util: 30.0.5 - jest-validate: 30.1.0 - micromatch: 4.0.8 + jest-circus: 30.4.2 + jest-docblock: 30.4.0 + jest-environment-node: 30.4.1 + jest-regex-util: 30.4.0 + jest-resolve: 30.4.1 + jest-runner: 30.4.2 + jest-util: 30.4.1 + jest-validate: 30.4.1 parse-json: 5.2.0 - pretty-format: 30.0.5 + pretty-format: 30.4.1 slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 25.6.0 - ts-node: 10.9.2(@types/node@25.6.0)(typescript@5.9.2) + '@types/node': 26.0.0 + ts-node: 10.9.2(@types/node@26.0.0)(typescript@6.0.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -15217,10 +17131,21 @@ snapshots: chalk: 4.1.2 pretty-format: 30.0.5 + jest-diff@30.4.1: + dependencies: + '@jest/diff-sequences': 30.4.0 + '@jest/get-type': 30.1.0 + chalk: 4.1.2 + pretty-format: 30.4.1 + jest-docblock@30.0.1: dependencies: detect-newline: 3.1.0 + jest-docblock@30.4.0: + dependencies: + detect-newline: 3.1.0 + jest-each@30.1.0: dependencies: '@jest/get-type': 30.1.0 @@ -15229,20 +17154,38 @@ snapshots: jest-util: 30.0.5 pretty-format: 30.0.5 + jest-each@30.4.1: + dependencies: + '@jest/get-type': 30.1.0 + '@jest/types': 30.4.1 + chalk: 4.1.2 + jest-util: 30.4.1 + pretty-format: 30.4.1 + jest-environment-node@30.1.1: dependencies: '@jest/environment': 30.1.1 '@jest/fake-timers': 30.1.1 '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 jest-mock: 30.0.5 jest-util: 30.0.5 jest-validate: 30.1.0 + jest-environment-node@30.4.1: + dependencies: + '@jest/environment': 30.4.1 + '@jest/fake-timers': 30.4.1 + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + jest-mock: 30.4.1 + jest-util: 30.4.1 + jest-validate: 30.4.1 + jest-haste-map@30.1.0: dependencies: '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -15254,11 +17197,31 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + jest-haste-map@30.4.1: + dependencies: + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 30.4.0 + jest-util: 30.4.1 + jest-worker: 30.4.1 + picomatch: 4.0.4 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + jest-leak-detector@30.1.0: dependencies: '@jest/get-type': 30.1.0 pretty-format: 30.0.5 + jest-leak-detector@30.4.1: + dependencies: + '@jest/get-type': 30.1.0 + pretty-format: 30.4.1 + jest-matcher-utils@30.1.1: dependencies: '@jest/get-type': 30.1.0 @@ -15266,6 +17229,13 @@ snapshots: jest-diff: 30.1.1 pretty-format: 30.0.5 + jest-matcher-utils@30.4.1: + dependencies: + '@jest/get-type': 30.1.0 + chalk: 4.1.2 + jest-diff: 30.4.1 + pretty-format: 30.4.1 + jest-message-util@30.1.0: dependencies: '@babel/code-frame': 7.27.1 @@ -15278,18 +17248,43 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 + jest-message-util@30.4.1: + dependencies: + '@babel/code-frame': 7.29.7 + '@jest/types': 30.4.1 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-util: 30.4.1 + picomatch: 4.0.4 + pretty-format: 30.4.1 + slash: 3.0.0 + stack-utils: 2.0.6 + jest-mock@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 jest-util: 30.0.5 + jest-mock@30.4.1: + dependencies: + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + jest-util: 30.4.1 + jest-pnp-resolver@1.2.3(jest-resolve@30.1.0): optionalDependencies: jest-resolve: 30.1.0 + jest-pnp-resolver@1.2.3(jest-resolve@30.4.1): + optionalDependencies: + jest-resolve: 30.4.1 + jest-regex-util@30.0.1: {} + jest-regex-util@30.4.0: {} + jest-resolve-dependencies@30.1.1: dependencies: jest-regex-util: 30.0.1 @@ -15297,6 +17292,13 @@ snapshots: transitivePeerDependencies: - supports-color + jest-resolve-dependencies@30.4.2: + dependencies: + jest-regex-util: 30.4.0 + jest-snapshot: 30.4.1 + transitivePeerDependencies: + - supports-color + jest-resolve@30.1.0: dependencies: chalk: 4.1.2 @@ -15306,7 +17308,18 @@ snapshots: jest-util: 30.0.5 jest-validate: 30.1.0 slash: 3.0.0 - unrs-resolver: 1.11.1 + unrs-resolver: 1.12.2 + + jest-resolve@30.4.1: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 30.4.1 + jest-pnp-resolver: 1.2.3(jest-resolve@30.4.1) + jest-util: 30.4.1 + jest-validate: 30.4.1 + slash: 3.0.0 + unrs-resolver: 1.12.2 jest-runner@30.1.1: dependencies: @@ -15315,7 +17328,7 @@ snapshots: '@jest/test-result': 30.1.1 '@jest/transform': 30.1.1 '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -15335,6 +17348,33 @@ snapshots: transitivePeerDependencies: - supports-color + jest-runner@30.4.2: + dependencies: + '@jest/console': 30.4.1 + '@jest/environment': 30.4.1 + '@jest/test-result': 30.4.1 + '@jest/transform': 30.4.1 + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + chalk: 4.1.2 + emittery: 0.13.1 + exit-x: 0.2.2 + graceful-fs: 4.2.11 + jest-docblock: 30.4.0 + jest-environment-node: 30.4.1 + jest-haste-map: 30.4.1 + jest-leak-detector: 30.4.1 + jest-message-util: 30.4.1 + jest-resolve: 30.4.1 + jest-runtime: 30.4.2 + jest-util: 30.4.1 + jest-watcher: 30.4.1 + jest-worker: 30.4.1 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + jest-runtime@30.1.1: dependencies: '@jest/environment': 30.1.1 @@ -15344,11 +17384,11 @@ snapshots: '@jest/test-result': 30.1.1 '@jest/transform': 30.1.1 '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 chalk: 4.1.2 - cjs-module-lexer: 2.1.0 - collect-v8-coverage: 1.0.2 - glob: 10.4.5 + cjs-module-lexer: 2.2.0 + collect-v8-coverage: 1.0.3 + glob: 10.5.0 graceful-fs: 4.2.11 jest-haste-map: 30.1.0 jest-message-util: 30.1.0 @@ -15362,19 +17402,46 @@ snapshots: transitivePeerDependencies: - supports-color + jest-runtime@30.4.2: + dependencies: + '@jest/environment': 30.4.1 + '@jest/fake-timers': 30.4.1 + '@jest/globals': 30.4.1 + '@jest/source-map': 30.0.1 + '@jest/test-result': 30.4.1 + '@jest/transform': 30.4.1 + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + chalk: 4.1.2 + cjs-module-lexer: 2.2.0 + collect-v8-coverage: 1.0.3 + glob: 10.5.0 + graceful-fs: 4.2.11 + jest-haste-map: 30.4.1 + jest-message-util: 30.4.1 + jest-mock: 30.4.1 + jest-regex-util: 30.4.0 + jest-resolve: 30.4.1 + jest-snapshot: 30.4.1 + jest-util: 30.4.1 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + jest-snapshot@30.1.1: dependencies: - '@babel/core': 7.28.3 - '@babel/generator': 7.28.3 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) - '@babel/types': 7.28.2 + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/types': 7.29.7 '@jest/expect-utils': 30.1.1 '@jest/get-type': 30.1.0 '@jest/snapshot-utils': 30.1.1 '@jest/transform': 30.1.1 '@jest/types': 30.0.5 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.3) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) chalk: 4.1.2 expect: 30.1.1 graceful-fs: 4.2.11 @@ -15383,19 +17450,54 @@ snapshots: jest-message-util: 30.1.0 jest-util: 30.0.5 pretty-format: 30.0.5 - semver: 7.7.3 - synckit: 0.11.11 + semver: 7.8.5 + synckit: 0.11.13 + transitivePeerDependencies: + - supports-color + + jest-snapshot@30.4.1: + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/types': 7.29.7 + '@jest/expect-utils': 30.4.1 + '@jest/get-type': 30.1.0 + '@jest/snapshot-utils': 30.4.1 + '@jest/transform': 30.4.1 + '@jest/types': 30.4.1 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) + chalk: 4.1.2 + expect: 30.4.1 + graceful-fs: 4.2.11 + jest-diff: 30.4.1 + jest-matcher-utils: 30.4.1 + jest-message-util: 30.4.1 + jest-util: 30.4.1 + pretty-format: 30.4.1 + semver: 7.8.5 + synckit: 0.11.13 transitivePeerDependencies: - supports-color jest-util@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 chalk: 4.1.2 ci-info: 4.3.0 graceful-fs: 4.2.11 - picomatch: 4.0.3 + picomatch: 4.0.4 + + jest-util@30.4.1: + dependencies: + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + chalk: 4.1.2 + ci-info: 4.4.0 + graceful-fs: 4.2.11 + picomatch: 4.0.4 jest-validate@30.1.0: dependencies: @@ -15406,31 +17508,59 @@ snapshots: leven: 3.1.0 pretty-format: 30.0.5 + jest-validate@30.4.1: + dependencies: + '@jest/get-type': 30.1.0 + '@jest/types': 30.4.1 + camelcase: 6.3.0 + chalk: 4.1.2 + leven: 3.1.0 + pretty-format: 30.4.1 + jest-watcher@30.1.1: dependencies: '@jest/test-result': 30.1.1 '@jest/types': 30.0.5 - '@types/node': 25.6.0 + '@types/node': 26.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 jest-util: 30.0.5 string-length: 4.0.2 + jest-watcher@30.4.1: + dependencies: + '@jest/test-result': 30.4.1 + '@jest/types': 30.4.1 + '@types/node': 26.0.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 30.4.1 + string-length: 4.0.2 + jest-worker@27.5.1: dependencies: - '@types/node': 25.6.0 + '@types/node': 26.0.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@30.1.0: dependencies: - '@types/node': 25.6.0 - '@ungap/structured-clone': 1.3.0 + '@types/node': 26.0.0 + '@ungap/structured-clone': 1.3.1 jest-util: 30.0.5 merge-stream: 2.0.0 supports-color: 8.1.1 + jest-worker@30.4.1: + dependencies: + '@types/node': 26.0.0 + '@ungap/structured-clone': 1.3.1 + jest-util: 30.4.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 + jest@30.1.1(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)): dependencies: '@jest/core': 30.1.1(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)) @@ -15444,12 +17574,12 @@ snapshots: - supports-color - ts-node - jest@30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)): + jest@30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)): dependencies: - '@jest/core': 30.1.1(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)) - '@jest/types': 30.0.5 + '@jest/core': 30.4.2(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)) + '@jest/types': 30.4.1 import-local: 3.2.0 - jest-cli: 30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)) + jest-cli: 30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -15459,15 +17589,15 @@ snapshots: jiti@2.5.1: {} - jiti@2.6.1: {} + jiti@2.7.0: {} - js-tokens@4.0.0: {} + js-tokens@10.0.0: {} - js-tokens@9.0.1: {} + js-tokens@4.0.0: {} js-xxhash@1.0.4: {} - js-yaml@3.14.1: + js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -15480,6 +17610,10 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + jsbi@3.1.3: {} jsbi@4.3.2: {} @@ -15523,7 +17657,7 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 - katex@0.16.46: + katex@0.16.47: dependencies: commander: 8.3.0 @@ -15621,7 +17755,7 @@ snapshots: lightningcss@1.30.1: dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.2 optionalDependencies: lightningcss-darwin-arm64: 1.30.1 lightningcss-darwin-x64: 1.30.1 @@ -15657,7 +17791,7 @@ snapshots: lines-and-columns@1.2.4: {} - linkify-it@5.0.0: + linkify-it@5.0.1: dependencies: uc.micro: 2.1.0 @@ -15671,7 +17805,7 @@ snapshots: dependencies: '@types/trusted-types': 2.0.7 - lit@3.3.1: + lit@3.3.3: dependencies: '@lit/reactive-element': 2.1.1 lit-element: 4.2.1 @@ -15681,6 +17815,8 @@ snapshots: loader-runner@4.3.0: {} + loader-runner@4.3.2: {} + loader-utils@2.0.4: dependencies: big.js: 5.2.2 @@ -15716,8 +17852,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.2.1: {} - lru-cache@10.4.3: {} lru-cache@11.1.0: {} @@ -15730,13 +17864,13 @@ snapshots: dependencies: react: 19.2.3 - lucide-react@0.542.0(react@19.2.5): + lucide-react@0.542.0(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 - lucide-react@1.11.0(react@19.2.5): + lucide-react@1.17.0(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 lunr@2.3.9: {} @@ -15744,23 +17878,19 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.18: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.3.5: + magicast@0.5.3: dependencies: - '@babel/parser': 7.28.3 - '@babel/types': 7.28.2 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 source-map-js: 1.2.1 make-dir@4.0.0: dependencies: - semver: 7.7.3 + semver: 7.8.5 make-error@1.3.6: {} @@ -15770,11 +17900,11 @@ snapshots: markdown-extensions@2.0.0: {} - markdown-it@14.1.0: + markdown-it@14.2.0: dependencies: argparse: 2.0.1 entities: 4.5.0 - linkify-it: 5.0.0 + linkify-it: 5.0.1 mdurl: 2.0.0 punycode.js: 2.3.1 uc.micro: 2.1.0 @@ -15791,11 +17921,11 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 transitivePeerDependencies: - supports-color optional: true @@ -15824,6 +17954,23 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-from-markdown@2.0.3: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + mdast-util-gfm-autolink-literal@2.0.1: dependencies: '@types/mdast': 4.0.4 @@ -15887,7 +18034,7 @@ snapshots: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -15900,7 +18047,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -15925,7 +18072,7 @@ snapshots: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -15939,12 +18086,24 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.3.1 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.1 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 vfile: 6.0.3 mdast-util-to-markdown@2.1.2: @@ -15986,16 +18145,16 @@ snapshots: '@mermaid-js/parser': 1.1.1 '@types/d3': 7.4.3 '@upsetjs/venn.js': 2.0.0 - cytoscape: 3.33.3 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.3) - cytoscape-fcose: 2.2.0(cytoscape@3.33.3) + cytoscape: 3.33.4 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.4) + cytoscape-fcose: 2.2.0(cytoscape@3.33.4) d3: 7.9.0 d3-sankey: 0.12.3 dagre-d3-es: 7.0.14 - dayjs: 1.11.20 - dompurify: 3.4.3 - es-toolkit: 1.46.1 - katex: 0.16.46 + dayjs: 1.11.21 + dompurify: 3.4.7 + es-toolkit: 1.47.0 + katex: 0.16.47 khroma: 2.1.0 marked: 16.4.2 roughjs: 4.6.6 @@ -16007,7 +18166,7 @@ snapshots: micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -16084,7 +18243,7 @@ snapshots: micromark-extension-mdx-expression@3.0.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-factory-mdx-expression: 2.0.3 micromark-factory-space: 2.0.1 @@ -16095,7 +18254,7 @@ snapshots: micromark-extension-mdx-jsx@3.0.2: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.3 @@ -16112,7 +18271,7 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-util-character: 2.1.1 @@ -16124,8 +18283,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) micromark-extension-mdx-expression: 3.0.1 micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 @@ -16148,7 +18307,7 @@ snapshots: micromark-factory-mdx-expression@2.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 @@ -16212,7 +18371,7 @@ snapshots: micromark-util-events-to-acorn@2.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 @@ -16249,9 +18408,9 @@ snapshots: micromark@4.0.2: dependencies: - '@types/debug': 4.1.12 - debug: 4.4.1 - decode-named-character-reference: 1.2.0 + '@types/debug': 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 @@ -16272,7 +18431,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -16296,29 +18455,35 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} - minimatch@10.0.3: + minimatch@10.2.5: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.6 minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.12 + minimatch@9.0.3: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.1 - minimatch@9.0.5: + minimatch@9.0.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.1 minimist@1.2.8: {} minipass@7.1.2: {} + minipass@7.1.3: {} + minizlib@3.0.2: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 mkdirp@0.5.6: dependencies: @@ -16330,19 +18495,19 @@ snapshots: monaco-editor@0.52.2: {} - motion-dom@12.38.0: + motion-dom@12.40.0: dependencies: - motion-utils: 12.36.0 + motion-utils: 12.39.0 - motion-utils@12.36.0: {} + motion-utils@12.39.0: {} - motion@12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + motion@12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - framer-motion: 12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + framer-motion: 12.40.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tslib: 2.8.1 optionalDependencies: - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) mri@1.2.0: {} @@ -16358,13 +18523,17 @@ snapshots: type-is: 1.6.18 xtend: 4.0.2 + multiformats@14.0.0: {} + mute-stream@2.0.0: {} nanoassert@2.0.0: {} nanoid@3.3.11: {} - napi-postinstall@0.3.3: {} + nanoid@3.3.12: {} + + napi-postinstall@0.3.4: {} natural-compare@1.4.0: {} @@ -16372,12 +18541,12 @@ snapshots: neo-async@2.6.2: {} - next-themes@0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + next-themes@0.4.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - next@16.0.10(@babel/core@7.28.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@16.0.10(@babel/core@7.29.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@next/env': 16.0.10 '@swc/helpers': 0.5.15 @@ -16385,7 +18554,7 @@ snapshots: postcss: 8.4.31 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - styled-jsx: 5.1.6(@babel/core@7.28.3)(react@19.2.3) + styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.2.3) optionalDependencies: '@next/swc-darwin-arm64': 16.0.10 '@next/swc-darwin-x64': 16.0.10 @@ -16400,15 +18569,15 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@16.0.10(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + next@16.0.10(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: '@next/env': 16.0.10 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001737 postcss: 8.4.31 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - styled-jsx: 5.1.6(@babel/core@7.28.3)(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.2.6) optionalDependencies: '@next/swc-darwin-arm64': 16.0.10 '@next/swc-darwin-x64': 16.0.10 @@ -16423,16 +18592,16 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@16.2.4(@babel/core@7.28.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + next@16.2.4(@babel/core@7.29.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: '@next/env': 16.2.4 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.10.23 + baseline-browser-mapping: 2.10.32 caniuse-lite: 1.0.30001737 postcss: 8.4.31 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - styled-jsx: 5.1.6(@babel/core@7.28.3)(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.2.6) optionalDependencies: '@next/swc-darwin-arm64': 16.2.4 '@next/swc-darwin-x64': 16.2.4 @@ -16461,6 +18630,8 @@ snapshots: node-releases@2.0.19: {} + node-releases@2.0.48: {} + noms@0.0.0: dependencies: inherits: 2.0.4 @@ -16469,7 +18640,7 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.10 + resolve: 1.22.12 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -16521,6 +18692,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + obug@2.1.3: {} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -16626,15 +18799,15 @@ snapshots: '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.2.0 + decode-named-character-reference: 1.3.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 + '@babel/code-frame': 7.29.7 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -16657,7 +18830,7 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 path-scurry@2.0.0: dependencies: @@ -16670,16 +18843,12 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.1: {} - picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} picomatch@4.0.2: {} - picomatch@4.0.3: {} - picomatch@4.0.4: {} pify@4.0.1: {} @@ -16690,8 +18859,6 @@ snapshots: dependencies: find-up: 4.1.0 - playground@file:packages/examples/src/playground: {} - pluralize@8.0.0: {} points-on-curve@0.2.0: {} @@ -16711,9 +18878,9 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.12: + postcss@8.5.15: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -16729,11 +18896,20 @@ snapshots: dependencies: fast-diff: 1.3.0 + prettier-linter-helpers@1.0.1: + dependencies: + fast-diff: 1.3.0 + prettier-plugin-organize-imports@4.2.0(prettier@3.6.2)(typescript@5.9.2): dependencies: prettier: 3.6.2 typescript: 5.9.2 + prettier-plugin-organize-imports@4.3.0(prettier@3.8.4)(typescript@6.0.3): + dependencies: + prettier: 3.8.4 + typescript: 6.0.3 + prettier-plugin-tailwindcss@0.6.14(prettier-plugin-organize-imports@4.2.0(prettier@3.6.2)(typescript@5.9.2))(prettier@3.6.2): dependencies: prettier: 3.6.2 @@ -16744,12 +18920,21 @@ snapshots: prettier@3.6.2: {} + prettier@3.8.4: {} + pretty-format@30.0.5: dependencies: '@jest/schemas': 30.0.5 ansi-styles: 5.2.0 react-is: 18.3.1 + pretty-format@30.4.1: + dependencies: + '@jest/schemas': 30.4.1 + ansi-styles: 5.2.0 + react-is-18: react-is@18.3.1 + react-is-19: react-is@19.2.7 + process-nextick-args@2.0.1: {} prop-types@15.8.1: @@ -16762,6 +18947,8 @@ snapshots: property-information@7.1.0: {} + property-information@7.2.0: {} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -16769,6 +18956,8 @@ snapshots: proxy-from-env@1.1.0: {} + proxy-from-env@2.1.0: {} + punycode.js@2.3.1: {} punycode@2.3.1: {} @@ -16781,6 +18970,8 @@ snapshots: quansync@0.2.11: {} + quansync@1.0.0: {} + queue-microtask@1.2.3: {} rambda@7.5.0: {} @@ -16798,56 +18989,58 @@ snapshots: iconv-lite: 0.6.3 unpipe: 1.0.0 - raw-loader@4.0.2(webpack@5.101.3): + raw-loader@4.0.2(webpack@5.101.3(lightningcss@1.32.0)(postcss@8.5.6)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.101.3 + webpack: 5.101.3(lightningcss@1.32.0)(postcss@8.5.6) react-dom@19.2.3(react@19.2.3): dependencies: react: 19.2.3 scheduler: 0.27.0 - react-dom@19.2.5(react@19.2.5): + react-dom@19.2.6(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 scheduler: 0.27.0 react-is@16.13.1: {} react-is@18.3.1: {} - react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.5): + react-is@19.2.7: {} + + react-remove-scroll-bar@2.3.8(@types/react@19.2.15)(react@19.2.6): dependencies: - react: 19.2.5 - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) + react: 19.2.6 + react-style-singleton: 2.2.3(@types/react@19.2.15)(react@19.2.6) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.5): + react-remove-scroll@2.7.2(@types/react@19.2.15)(react@19.2.6): dependencies: - react: 19.2.5 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.5) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.5) + react: 19.2.6 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.15)(react@19.2.6) + react-style-singleton: 2.2.3(@types/react@19.2.15)(react@19.2.6) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.5) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.5) + use-callback-ref: 1.3.3(@types/react@19.2.15)(react@19.2.6) + use-sidecar: 1.1.3(@types/react@19.2.15)(react@19.2.6) optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.5): + react-style-singleton@2.2.3(@types/react@19.2.15)(react@19.2.6): dependencies: get-nonce: 1.0.1 - react: 19.2.5 + react: 19.2.6 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 react@19.2.3: {} - react@19.2.5: {} + react@19.2.6: {} read-pkg-up@7.0.1: dependencies: @@ -16865,7 +19058,7 @@ snapshots: read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 - js-yaml: 3.14.1 + js-yaml: 3.14.2 pify: 4.0.1 strip-bom: 3.0.0 @@ -16898,14 +19091,14 @@ snapshots: recma-build-jsx@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.15.0): + recma-jsx@1.0.1(acorn@8.17.0): dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -16913,14 +19106,14 @@ snapshots: recma-parse@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esast-util-from-js: 2.0.1 unified: 11.0.5 vfile: 6.0.3 recma-stringify@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-util-to-js: 2.0.0 unified: 11.0.5 vfile: 6.0.3 @@ -16975,7 +19168,7 @@ snapshots: rehype-recma@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/hast': 3.0.4 hast-util-to-estree: 3.1.3 transitivePeerDependencies: @@ -16992,7 +19185,7 @@ snapshots: transitivePeerDependencies: - supports-color - remark-mdx@3.1.0: + remark-mdx@3.1.1: dependencies: mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 @@ -17002,7 +19195,7 @@ snapshots: remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -17012,7 +19205,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 unified: 11.0.5 vfile: 6.0.3 @@ -17049,15 +19242,16 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: + resolve@1.22.12: dependencies: - is-core-module: 2.16.1 + es-errors: 1.3.0 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.16.1 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -17072,37 +19266,97 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@6.0.1: - dependencies: - glob: 11.0.3 - package-json-from-dist: 1.0.1 - robust-predicates@3.0.3: {} - rollup@4.49.0: + rolldown-plugin-dts@0.26.0(rolldown@1.1.2)(typescript@6.0.3): + dependencies: + '@babel/generator': 8.0.0 + '@babel/helper-validator-identifier': 8.0.2 + '@babel/parser': 8.0.0 + ast-kit: 3.0.0 + birpc: 4.0.0 + dts-resolver: 3.0.0 + get-tsconfig: 5.0.0-beta.5 + obug: 2.1.3 + rolldown: 1.1.2 + optionalDependencies: + typescript: 6.0.3 + transitivePeerDependencies: + - oxc-resolver + + rolldown@1.0.0-beta.58(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1): dependencies: - '@types/estree': 1.0.8 + '@oxc-project/types': 0.106.0 + '@rolldown/pluginutils': 1.0.0-beta.58 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.58 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.58 + '@rolldown/binding-darwin-x64': 1.0.0-beta.58 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.58 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.58 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.58 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.58 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.58 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.58 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.58 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.58(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.58 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.58 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + + rolldown@1.1.2: + dependencies: + '@oxc-project/types': 0.137.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.2 + '@rolldown/binding-darwin-arm64': 1.1.2 + '@rolldown/binding-darwin-x64': 1.1.2 + '@rolldown/binding-freebsd-x64': 1.1.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.2 + '@rolldown/binding-linux-arm64-gnu': 1.1.2 + '@rolldown/binding-linux-arm64-musl': 1.1.2 + '@rolldown/binding-linux-ppc64-gnu': 1.1.2 + '@rolldown/binding-linux-s390x-gnu': 1.1.2 + '@rolldown/binding-linux-x64-gnu': 1.1.2 + '@rolldown/binding-linux-x64-musl': 1.1.2 + '@rolldown/binding-openharmony-arm64': 1.1.2 + '@rolldown/binding-wasm32-wasi': 1.1.2 + '@rolldown/binding-win32-arm64-msvc': 1.1.2 + '@rolldown/binding-win32-x64-msvc': 1.1.2 + + rollup@4.62.2: + dependencies: + '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.49.0 - '@rollup/rollup-android-arm64': 4.49.0 - '@rollup/rollup-darwin-arm64': 4.49.0 - '@rollup/rollup-darwin-x64': 4.49.0 - '@rollup/rollup-freebsd-arm64': 4.49.0 - '@rollup/rollup-freebsd-x64': 4.49.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.49.0 - '@rollup/rollup-linux-arm-musleabihf': 4.49.0 - '@rollup/rollup-linux-arm64-gnu': 4.49.0 - '@rollup/rollup-linux-arm64-musl': 4.49.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.49.0 - '@rollup/rollup-linux-ppc64-gnu': 4.49.0 - '@rollup/rollup-linux-riscv64-gnu': 4.49.0 - '@rollup/rollup-linux-riscv64-musl': 4.49.0 - '@rollup/rollup-linux-s390x-gnu': 4.49.0 - '@rollup/rollup-linux-x64-gnu': 4.49.0 - '@rollup/rollup-linux-x64-musl': 4.49.0 - '@rollup/rollup-win32-arm64-msvc': 4.49.0 - '@rollup/rollup-win32-ia32-msvc': 4.49.0 - '@rollup/rollup-win32-x64-msvc': 4.49.0 + '@rollup/rollup-android-arm-eabi': 4.62.2 + '@rollup/rollup-android-arm64': 4.62.2 + '@rollup/rollup-darwin-arm64': 4.62.2 + '@rollup/rollup-darwin-x64': 4.62.2 + '@rollup/rollup-freebsd-arm64': 4.62.2 + '@rollup/rollup-freebsd-x64': 4.62.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.2 + '@rollup/rollup-linux-arm-musleabihf': 4.62.2 + '@rollup/rollup-linux-arm64-gnu': 4.62.2 + '@rollup/rollup-linux-arm64-musl': 4.62.2 + '@rollup/rollup-linux-loong64-gnu': 4.62.2 + '@rollup/rollup-linux-loong64-musl': 4.62.2 + '@rollup/rollup-linux-ppc64-gnu': 4.62.2 + '@rollup/rollup-linux-ppc64-musl': 4.62.2 + '@rollup/rollup-linux-riscv64-gnu': 4.62.2 + '@rollup/rollup-linux-riscv64-musl': 4.62.2 + '@rollup/rollup-linux-s390x-gnu': 4.62.2 + '@rollup/rollup-linux-x64-gnu': 4.62.2 + '@rollup/rollup-linux-x64-musl': 4.62.2 + '@rollup/rollup-openbsd-x64': 4.62.2 + '@rollup/rollup-openharmony-arm64': 4.62.2 + '@rollup/rollup-win32-arm64-msvc': 4.62.2 + '@rollup/rollup-win32-ia32-msvc': 4.62.2 + '@rollup/rollup-win32-x64-gnu': 4.62.2 + '@rollup/rollup-win32-x64-msvc': 4.62.2 fsevents: 2.3.3 roughjs@4.6.6: @@ -17114,7 +19368,7 @@ snapshots: router@2.2.0: dependencies: - debug: 4.4.1 + debug: 4.4.3 depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -17179,15 +19433,22 @@ snapshots: schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 6.15.0 + ajv-keywords: 3.5.2(ajv@6.15.0) schema-utils@4.3.2: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - ajv-keywords: 5.1.0(ajv@8.17.1) + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) + ajv-keywords: 5.1.0(ajv@8.20.0) + + schema-utils@4.3.3: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) + ajv-keywords: 5.1.0(ajv@8.20.0) scroll-into-view-if-needed@3.1.0: dependencies: @@ -17199,11 +19460,11 @@ snapshots: semver@7.7.2: {} - semver@7.7.3: {} + semver@7.8.5: {} send@1.2.0: dependencies: - debug: 4.4.1 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -17258,7 +19519,7 @@ snapshots: dependencies: '@img/colour': 1.0.0 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.8.5 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -17303,14 +19564,14 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - shiki@4.0.2: + shiki@4.1.0: dependencies: - '@shikijs/core': 4.0.2 - '@shikijs/engine-javascript': 4.0.2 - '@shikijs/engine-oniguruma': 4.0.2 - '@shikijs/langs': 4.0.2 - '@shikijs/themes': 4.0.2 - '@shikijs/types': 4.0.2 + '@shikijs/core': 4.1.0 + '@shikijs/engine-javascript': 4.1.0 + '@shikijs/engine-oniguruma': 4.1.0 + '@shikijs/langs': 4.1.0 + '@shikijs/themes': 4.1.0 + '@shikijs/types': 4.1.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -17378,16 +19639,16 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 - spdx-license-ids@3.0.22: {} + spdx-license-ids@3.0.23: {} sprintf-js@1.0.3: {} @@ -17405,7 +19666,7 @@ snapshots: statuses@2.0.2: {} - std-env@3.9.0: {} + std-env@4.1.0: {} stop-iteration-iterator@1.1.0: dependencies: @@ -17518,10 +19779,6 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@3.0.0: - dependencies: - js-tokens: 9.0.1 - strtok3@10.3.4: dependencies: '@tokenizer/token': 0.3.0 @@ -17530,23 +19787,31 @@ snapshots: dependencies: style-to-object: 1.0.9 + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + style-to-object@1.0.9: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.6(@babel/core@7.28.3)(react@19.2.3): + styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.3): dependencies: client-only: 0.0.1 react: 19.2.3 optionalDependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.29.7 - styled-jsx@5.1.6(@babel/core@7.28.3)(react@19.2.5): + styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.6): dependencies: client-only: 0.0.1 - react: 19.2.5 + react: 19.2.6 optionalDependencies: - '@babel/core': 7.28.3 + '@babel/core': 7.29.7 stylis@4.4.0: {} @@ -17554,7 +19819,7 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.1 + debug: 4.4.3 fast-safe-stringify: 2.1.1 form-data: 4.0.4 formidable: 3.5.4 @@ -17596,13 +19861,17 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 + synckit@0.11.13: + dependencies: + '@pkgr/core': 0.3.6 + tabbable@6.2.0: {} - tailwind-merge@3.5.0: {} + tailwind-merge@3.6.0: {} tailwindcss@4.1.12: {} - tailwindcss@4.2.4: {} + tailwindcss@4.3.0: {} tapable@2.2.3: {} @@ -17621,40 +19890,36 @@ snapshots: terser-webpack-plugin@5.3.14(webpack@5.100.2): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 + terser: 5.48.0 webpack: 5.100.2 - terser-webpack-plugin@5.3.14(webpack@5.101.3): + terser-webpack-plugin@5.6.1(lightningcss@1.32.0)(postcss@8.5.6)(webpack@5.101.3(lightningcss@1.32.0)(postcss@8.5.6)): dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.2 - serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.3 + schema-utils: 4.3.3 + terser: 5.48.0 + webpack: 5.101.3(lightningcss@1.32.0)(postcss@8.5.6) + optionalDependencies: + lightningcss: 1.32.0 + postcss: 8.5.6 - terser@5.43.1: + terser@5.48.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.17.0 commander: 2.20.3 source-map-support: 0.5.21 test-exclude@6.0.0: dependencies: - '@istanbuljs/schema': 0.1.3 + '@istanbuljs/schema': 0.1.6 glob: 7.2.3 - minimatch: 3.1.2 - - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 + minimatch: 3.1.5 text-table@0.2.0: {} @@ -17669,30 +19934,19 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.2: {} - - tinyexec@1.1.1: {} - - tinyglobby@0.2.14: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + tinyexec@1.2.4: {} tinyglobby@0.2.16: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 - tinyspy@4.0.3: {} + tinyrainbow@3.1.0: {} tmpl@1.0.5: {} @@ -17716,55 +19970,59 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.4.3(typescript@5.9.2): + ts-api-utils@1.4.3(typescript@6.0.3): dependencies: - typescript: 5.9.2 + typescript: 6.0.3 ts-api-utils@2.1.0(typescript@5.9.2): dependencies: typescript: 5.9.2 + ts-api-utils@2.5.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + ts-dedent@2.2.0: {} - ts-jest@29.4.1(@babel/core@7.28.3)(@jest/transform@30.1.1)(@jest/types@30.0.5)(babel-jest@30.1.1(@babel/core@7.28.3))(jest-util@30.0.5)(jest@30.1.1(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)))(typescript@5.9.2): + ts-jest@29.4.11(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.1.1(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)))(typescript@5.9.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 + handlebars: 4.7.9 jest: 30.1.1(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.7.2 + semver: 7.8.5 type-fest: 4.41.0 typescript: 5.9.2 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.28.3 - '@jest/transform': 30.1.1 - '@jest/types': 30.0.5 - babel-jest: 30.1.1(@babel/core@7.28.3) - jest-util: 30.0.5 + '@babel/core': 7.29.7 + '@jest/transform': 30.4.1 + '@jest/types': 30.4.1 + babel-jest: 30.4.1(@babel/core@7.29.7) + jest-util: 30.4.1 - ts-jest@29.4.1(@babel/core@7.28.3)(@jest/transform@30.1.1)(@jest/types@30.0.5)(babel-jest@30.1.1(@babel/core@7.28.3))(jest-util@30.0.5)(jest@30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)))(typescript@5.9.2): + ts-jest@29.4.11(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)))(typescript@6.0.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 30.1.1(@types/node@25.6.0)(ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2)) + handlebars: 4.7.9 + jest: 30.4.2(@types/node@26.0.0)(ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.7.2 + semver: 7.8.5 type-fest: 4.41.0 - typescript: 5.9.2 + typescript: 6.0.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.28.3 - '@jest/transform': 30.1.1 - '@jest/types': 30.0.5 - babel-jest: 30.1.1(@babel/core@7.28.3) - jest-util: 30.0.5 + '@babel/core': 7.29.7 + '@jest/transform': 30.4.1 + '@jest/types': 30.4.1 + babel-jest: 30.4.1(@babel/core@7.29.7) + jest-util: 30.4.1 ts-loader@9.5.4(typescript@5.9.2)(webpack@5.100.2): dependencies: @@ -17779,36 +20037,36 @@ snapshots: ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 24.3.0 - acorn: 8.15.0 - acorn-walk: 8.3.4 + acorn: 8.17.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 - diff: 4.0.2 + diff: 4.0.4 make-error: 1.3.6 typescript: 5.9.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.2): + ts-node@10.9.2(@types/node@26.0.0)(typescript@6.0.3): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 + '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 25.6.0 - acorn: 8.15.0 - acorn-walk: 8.3.4 + '@types/node': 26.0.0 + acorn: 8.17.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 - diff: 4.0.2 + diff: 4.0.4 make-error: 1.3.6 - typescript: 5.9.2 + typescript: 6.0.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optional: true @@ -17833,16 +20091,42 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3)(unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13)): + dependencies: + ansis: 4.3.1 + cac: 7.0.0 + defu: 6.1.7 + empathic: 2.0.1 + hookable: 6.1.1 + import-without-cache: 0.4.0 + obug: 2.1.3 + picomatch: 4.0.4 + rolldown: 1.1.2 + rolldown-plugin-dts: 0.26.0(rolldown@1.1.2)(typescript@6.0.3) + semver: 7.8.5 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tree-kill: 1.2.2 + unconfig-core: 7.5.0 + optionalDependencies: + tsx: 4.22.4 + typescript: 6.0.3 + unrun: 0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13) + transitivePeerDependencies: + - '@ts-macro/tsc' + - '@typescript/native-preview' + - oxc-resolver + - vue-tsc + tslib@2.3.1: {} tslib@2.7.0: {} tslib@2.8.1: {} - tsx@4.20.5: + tsx@4.22.4: dependencies: - esbuild: 0.25.9 - get-tsconfig: 4.10.1 + esbuild: 0.28.0 optionalDependencies: fsevents: 2.3.3 @@ -17910,55 +20194,66 @@ snapshots: typedarray@0.0.6: {} - typedoc-material-theme@1.4.0(typedoc@0.28.7(typescript@5.9.2)): + typedoc-material-theme@1.4.1(typedoc@0.28.19(typescript@6.0.3)): dependencies: '@material/material-color-utilities': 0.3.0 - typedoc: 0.28.7(typescript@5.9.2) + typedoc: 0.28.19(typescript@6.0.3) - typedoc-plugin-extras@4.0.1(typedoc@0.28.7(typescript@5.9.2)): + typedoc-plugin-extras@4.0.1(typedoc@0.28.19(typescript@6.0.3)): dependencies: - typedoc: 0.28.7(typescript@5.9.2) + typedoc: 0.28.19(typescript@6.0.3) - typedoc-plugin-ga@1.0.5(@types/eslint@9.6.1)(typedoc@0.28.7(typescript@5.9.2))(typescript@5.9.2): + typedoc-plugin-ga@1.1.1(@types/eslint@9.6.1)(typedoc@0.28.19(typescript@6.0.3))(typescript@6.0.3): dependencies: - '@euberdeveloper/eslint-plugin': 2.7.0(@types/eslint@9.6.1)(typescript@5.9.2) - typedoc: 0.28.7(typescript@5.9.2) + '@euberdeveloper/eslint-plugin': 2.7.0(@types/eslint@9.6.1)(typescript@6.0.3) + typedoc: 0.28.19(typescript@6.0.3) transitivePeerDependencies: - '@types/eslint' - supports-color - typescript - typedoc@0.28.7(typescript@5.9.2): + typedoc@0.28.19(typescript@6.0.3): dependencies: - '@gerrit0/mini-shiki': 3.12.0 + '@gerrit0/mini-shiki': 3.23.0 lunr: 2.3.9 - markdown-it: 14.1.0 - minimatch: 9.0.5 - typescript: 5.9.2 - yaml: 2.8.1 + markdown-it: 14.2.0 + minimatch: 10.2.5 + typescript: 6.0.3 + yaml: 2.9.0 - typescript-eslint@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): + typescript-eslint@8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.41.0(@typescript-eslint/parser@8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) + '@typescript-eslint/parser': 8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.41.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.7.0) typescript: 5.9.2 transitivePeerDependencies: - supports-color - typescript-eslint@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2): + typescript-eslint@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2))(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2))(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) + '@typescript-eslint/parser': 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.49.0(eslint@9.34.0(jiti@2.6.1))(typescript@5.9.2) - eslint: 9.34.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.49.0(eslint@9.34.0(jiti@2.7.0))(typescript@5.9.2) + eslint: 9.34.0(jiti@2.7.0) typescript: 5.9.2 transitivePeerDependencies: - supports-color + typescript-eslint@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.61.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.5.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + typescript@5.8.3: {} typescript@5.9.2: {} @@ -17976,6 +20271,10 @@ snapshots: uint8array-extras@1.5.0: {} + uint8array-tools@0.0.8: {} + + uint8array-tools@0.0.9: {} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -17983,13 +20282,20 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + unconfig-core@7.5.0: + dependencies: + '@quansync/fs': 1.0.0 + quansync: 1.0.0 + uncrypto@0.1.3: {} undici-types@6.19.8: {} undici-types@7.10.0: {} - undici-types@7.19.2: {} + undici-types@7.24.6: {} + + undici-types@8.3.0: {} unicode-trie@2.0.0: dependencies: @@ -18010,6 +20316,10 @@ snapshots: dependencies: '@types/unist': 3.0.3 + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-position-from-estree@2.0.0: dependencies: '@types/unist': 3.0.3 @@ -18032,17 +20342,16 @@ snapshots: '@types/unist': 3.0.3 unist-util-is: 6.0.0 - unist-util-visit@5.0.0: + unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 unist-util-visit@5.1.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 universalify@0.1.2: {} @@ -18050,29 +20359,42 @@ snapshots: unpipe@1.0.0: {} - unrs-resolver@1.11.1: + unrs-resolver@1.12.2: dependencies: - napi-postinstall: 0.3.3 + napi-postinstall: 0.3.4 optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + '@unrs/resolver-binding-android-arm-eabi': 1.12.2 + '@unrs/resolver-binding-android-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-x64': 1.12.2 + '@unrs/resolver-binding-freebsd-x64': 1.12.2 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-arm64-musl': 1.12.2 + '@unrs/resolver-binding-linux-loong64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-loong64-musl': 1.12.2 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-musl': 1.12.2 + '@unrs/resolver-binding-linux-s390x-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-musl': 1.12.2 + '@unrs/resolver-binding-openharmony-arm64': 1.12.2 + '@unrs/resolver-binding-wasm32-wasi': 1.12.2 + '@unrs/resolver-binding-win32-arm64-msvc': 1.12.2 + '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 + '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 + + unrun@0.2.22(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(synckit@0.11.13): + dependencies: + rolldown: 1.0.0-beta.58(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optionalDependencies: + synckit: 0.11.13 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true untildify@4.0.0: {} @@ -18082,28 +20404,34 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.5): + use-callback-ref@1.3.3(@types/react@19.2.15)(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.5): + use-sidecar@1.1.3(@types/react@19.2.15)(react@19.2.6): dependencies: detect-node-es: 1.1.0 - react: 19.2.5 + react: 19.2.6 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.2.14 + '@types/react': 19.2.15 - use-sync-external-store@1.5.0(react@19.2.5): + use-sync-external-store@1.5.0(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 util-deprecate@1.0.2: {} @@ -18113,14 +20441,18 @@ snapshots: v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - valibot@1.1.0(typescript@5.9.2): + valibot@0.38.0(typescript@5.9.2): optionalDependencies: typescript: 5.9.2 + valibot@1.4.1(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -18128,6 +20460,10 @@ snapshots: validator@13.15.15: {} + varuint-bitcoin@2.0.0: + dependencies: + uint8array-tools: 0.0.8 + vary@1.1.2: {} vfile-location@5.0.3: @@ -18145,165 +20481,68 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): - dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite-node@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): + vite@7.3.5(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0): dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite@7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): - dependencies: - esbuild: 0.25.9 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.12 - rollup: 4.49.0 - tinyglobby: 0.2.14 + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.15 + rollup: 4.62.2 + tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.3.0 + '@types/node': 25.9.1 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 lightningcss: 1.32.0 - terser: 5.43.1 - tsx: 4.20.5 - yaml: 2.8.1 - - vite@7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): - dependencies: - esbuild: 0.25.9 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.12 - rollup: 4.49.0 - tinyglobby: 0.2.14 + terser: 5.48.0 + tsx: 4.22.4 + yaml: 2.9.0 + optional: true + + vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0): + dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.15 + rollup: 4.62.2 + tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 26.0.0 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 lightningcss: 1.32.0 - terser: 5.43.1 - tsx: 4.20.5 - yaml: 2.8.1 - - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): - dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - debug: 4.4.1 - expect-type: 1.2.2 - magic-string: 0.30.18 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.9.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 24.3.0 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1): - dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - debug: 4.4.1 - expect-type: 1.2.2 - magic-string: 0.30.18 + terser: 5.48.0 + tsx: 4.22.4 + yaml: 2.9.0 + + vitest@4.1.9(@types/node@26.0.0)(@vitest/coverage-v8@4.1.9)(vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.9 + '@vitest/mocker': 4.1.9(vite@7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.9 + '@vitest/runner': 4.1.9 + '@vitest/snapshot': 4.1.9 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.3 pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.9.0 + picomatch: 4.0.4 + std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.1.3(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 7.3.5(@types/node@26.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 25.6.0 + '@types/node': 26.0.0 + '@vitest/coverage-v8': 4.1.9(vitest@4.1.9) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml walker@1.0.8: dependencies: @@ -18314,6 +20553,10 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + watchpack@2.5.2: + dependencies: + graceful-fs: 4.2.11 + wcwidth@1.0.1: dependencies: defaults: 1.0.4 @@ -18326,10 +20569,12 @@ snapshots: webpack-sources@3.3.3: {} + webpack-sources@3.5.0: {} + webpack@5.100.2: dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 @@ -18358,36 +20603,45 @@ snapshots: - esbuild - uglify-js - webpack@5.101.3: + webpack@5.101.3(lightningcss@1.32.0)(postcss@8.5.6): dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.15.0 - acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.3 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.21.0 + enhanced-resolve: 5.24.0 es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.2 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 + schema-utils: 4.3.3 tapable: 2.3.3 - terser-webpack-plugin: 5.3.14(webpack@5.101.3) - watchpack: 2.4.4 - webpack-sources: 3.3.3 + terser-webpack-plugin: 5.6.1(lightningcss@1.32.0)(postcss@8.5.6)(webpack@5.101.3(lightningcss@1.32.0)(postcss@8.5.6)) + watchpack: 2.5.2 + webpack-sources: 3.5.0 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js whatwg-url@5.0.0: @@ -18474,9 +20728,7 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 - ws@8.17.1: {} - - ws@8.18.3: {} + ws@8.21.0: {} xml-lexer@0.2.2: dependencies: @@ -18495,7 +20747,7 @@ snapshots: yallist@5.0.0: {} - yaml@2.8.1: {} + yaml@2.9.0: {} yargs-parser@20.2.9: {} @@ -18511,7 +20763,7 @@ snapshots: y18n: 5.0.8 yargs-parser: 20.2.9 - yargs@17.7.2: + yargs@17.7.3: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -18529,13 +20781,10 @@ snapshots: yoga-wasm-web@0.3.3: {} - zod-validation-error@4.0.2(zod@4.3.6): + zod-validation-error@4.0.2(zod@4.4.3): dependencies: - zod: 4.3.6 - - zod@3.25.76: - optional: true + zod: 4.4.3 - zod@4.3.6: {} + zod@4.4.3: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index dee51e928..cadf8dc13 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,11 @@ packages: - "packages/*" +allowBuilds: + '@nestjs/core': true + '@tailwindcss/oxide': true + core-js: true + core-js-pure: true + esbuild: true + secp256k1: true + sharp: true + unrs-resolver: true diff --git a/tsconfig.base.json b/tsconfig.base.json index 6ba0aecd0..2dfd2d284 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es2020", + "target": "es2022", "incremental": true, "allowJs": true, "importHelpers": false, diff --git a/typedoc.config.mjs b/typedoc.config.mjs index 515df9321..35f05db43 100644 --- a/typedoc.config.mjs +++ b/typedoc.config.mjs @@ -4,9 +4,11 @@ const config = { name: "CCC Docs", entryPoints: [ "packages/core", + "packages/type-id", "packages/ssri", "packages/udt", "packages/spore", + "packages/did-ckb", "packages/shell", "packages/ccc", "packages/connector", diff --git a/vitest.config.mts b/vitest.config.mts index 7af3d4a84..9b64c1358 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -1,10 +1,12 @@ import { defineConfig, coverageConfigDefaults } from "vitest/config"; +const packages = ["packages/core", "packages/did-ckb", "packages/type-id"]; + export default defineConfig({ test: { - projects: ["packages/core"], + projects: packages, coverage: { - include: ["packages/core"], + include: packages, exclude: [ "**/dist/**", "**/dist.commonjs/**",