diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000..654c6d4 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets). + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md). diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..5c58ec9 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.4/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "restricted", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000..cfe3c87 --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,8 @@ +{ + "mode": "pre", + "tag": "alpha", + "initialVersions": { + "@arkts/mcp": "0.0.1" + }, + "changesets": [] +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6efdad1..3cf66c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,3 +46,6 @@ jobs: with: name: ${{ matrix.settings.artifact }} path: target + + - name: Publish + run: pnpm changeset publish diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c8dfd01..9be364a 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,12 +2,22 @@ on: pull_request: branches: - main - paths: + paths-ignore: - '!README.md' - '!LICENSE' +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: write + pull-requests: write + id-token: write + jobs: build: + name: Build strategy: fail-fast: true matrix: @@ -44,14 +54,39 @@ jobs: - name: Build run: pnpm build --build-exe + - name: Show built files + run: node scripts/tree.ts + - name: Upload Artifacts uses: actions/upload-artifact@v6 with: name: ${{ matrix.settings.artifact }} path: target + test: + name: Test + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 25.9.0 + registry-url: 'https://registry.npmjs.org' + + - name: Setup pnpm + uses: pnpm/action-setup@v2 + with: + version: 10.33.0 + run_install: true + + - name: Test + run: pnpm test:ci + publish: - name: Publish packages to pkg.pr.new + name: Continuous release runs-on: ubuntu-latest steps: - name: Checkout Repo @@ -71,5 +106,8 @@ jobs: version: 10.33.0 run_install: true + - name: Build + run: pnpm build + - name: Publish packages - run: pnpm dlx pkg-pr-new publish --compact --pnpm . + run: pnpm dlx pkg-pr-new publish --compact --pnpm --bin . diff --git a/.vscode/mcp.json b/.vscode/mcp.json new file mode 100644 index 0000000..5e3f488 --- /dev/null +++ b/.vscode/mcp.json @@ -0,0 +1,12 @@ +{ + "servers": { + "arkts-mcp-server": { + "type": "stdio", + "command": "node", + "args": [ + "dist/bin.mjs" + ] + } + }, + "inputs": [] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 4b356f5..59a27d0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -46,5 +46,16 @@ "scss", "pcss", "postcss" + ], + "cSpell.words": [ + "arkts", + "cfworker", + "cppjieba", + "harmonyos", + "minisearch", + "modelcontextprotocol", + "Naily", + "nodejieba", + "vstils" ] } diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..e3beb68 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,13 @@ +## Setup & build + +- Basic environment: See [package.json](package.json) `packageManager` field and [.node-version](.node-version) file. +- Install steps: `pnpm install` +- Build library: `pnpm build`, outDir is `dist` +- Build library and executable: `pnpm build --build-exe`, the executable outDir is `target`, binary name is `arkts-mcp` + - Executable outDir is `target` + - Executable binary name is `arkts-mcp`; if current platform is Windows, the binary name is `arkts-mcp.exe` + - Must copy the `.node` dynamic library to the executable directory `target/lib`, and the assets (like [logo.png](target/assets/logo.png)) to the executable directory `target/assets`. + +## About this mcp server + +- This mcp server is for the ArkTS language. ArkTS is a programming language for the HarmonyOS/OpenHarmony platform, It is a superset of TypeScript. diff --git a/eslint.config.js b/eslint.config.js index 3b614a0..9ab5331 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,3 +1,3 @@ -import antfu from '@antfu/eslint-config' +import naily from 'naily-eslint-config' -export default antfu() +export default naily() diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..e69de29 diff --git a/package.json b/package.json index 36ee7e2..84766c8 100755 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@arkts/mcp", "type": "module", - "version": "1.1.7", + "version": "0.0.1-alpha.0", "packageManager": "pnpm@10.33.0", "description": "MCP Server for ArkTS.", "author": "Naily Zero (https://naily.cc)", @@ -28,7 +28,9 @@ "main": "./dist/index.cjs", "module": "./dist/index.mjs", "types": "./dist/index.d.cts", - "bin": "./dist/bin.cjs", + "bin": { + "arkts-mcp": "./dist/bin.mjs" + }, "files": [ "dist" ], @@ -38,25 +40,30 @@ "scripts": { "build": "vp pack", "test": "vp test watch --globals --coverage --ui", + "test:ci": "vp test --globals --coverage", "prepublishOnly": "vp pack" }, "dependencies": { "@cfworker/json-schema": "^4.1.1", - "@modelcontextprotocol/server": "^2.0.0-alpha.2", "@vstils/core": "^0.0.8", + "ajv": "^8.18.0", "axios": "^1.15.0", "minisearch": "^7.2.0", "nodejieba": "^3.5.8", + "source-map-support": "^0.5.21", "zod": "^4.3.6" }, "devDependencies": { - "@antfu/eslint-config": "^8.2.0", + "@changesets/cli": "^2.31.0", + "@modelcontextprotocol/server": "^2.0.0-alpha.2", "@tsdown/exe": "^0.21.9", "@types/node": "^25.6.0", "@vitest/coverage-v8": "^4.1.4", "@vitest/ui": "^4.1.4", "eslint": "^10.2.1", + "naily-eslint-config": "^0.0.3", "pnpm": "^10.33.0", + "tinyglobby": "^0.2.17", "typescript": "^6.0.3", "vite-plus": "^0.1.18" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 248250c..c7a67c5 100755 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,12 +11,12 @@ importers: '@cfworker/json-schema': specifier: ^4.1.1 version: 4.1.1 - '@modelcontextprotocol/server': - specifier: ^2.0.0-alpha.2 - version: 2.0.0-alpha.2(@cfworker/json-schema@4.1.1) '@vstils/core': specifier: ^0.0.8 version: 0.0.8(@types/vscode@1.116.0) + ajv: + specifier: ^8.18.0 + version: 8.18.0 axios: specifier: ^1.15.0 version: 1.15.0 @@ -26,13 +26,19 @@ importers: nodejieba: specifier: ^3.5.8 version: 3.5.8 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 zod: specifier: ^4.3.6 version: 4.3.6 devDependencies: - '@antfu/eslint-config': - specifier: ^8.2.0 - version: 8.2.0(@typescript-eslint/rule-tester@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.58.2(typescript@6.0.3))(@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.32)(eslint@10.2.1(jiti@2.6.1))(oxlint@1.60.0(oxlint-tsgolint@0.20.0))(typescript@6.0.3)(vitest@4.1.4) + '@changesets/cli': + specifier: ^2.31.0 + version: 2.31.0(@types/node@25.6.0) + '@modelcontextprotocol/server': + specifier: ^2.0.0-alpha.2 + version: 2.0.0-alpha.2(@cfworker/json-schema@4.1.1) '@tsdown/exe': specifier: ^0.21.9 version: 0.21.9(tsdown@0.21.9) @@ -48,9 +54,15 @@ importers: eslint: specifier: ^10.2.1 version: 10.2.1(jiti@2.6.1) + naily-eslint-config: + specifier: ^0.0.3 + version: 0.0.3(@antfu/eslint-config@8.2.0(@typescript-eslint/rule-tester@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.58.2(typescript@6.0.3))(@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.32)(eslint@10.2.1(jiti@2.6.1))(oxlint@1.60.0(oxlint-tsgolint@0.20.0))(typescript@6.0.3)(vitest@4.1.4))(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) pnpm: specifier: ^10.33.0 version: 10.33.0 + tinyglobby: + specifier: ^0.2.17 + version: 0.2.17 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -154,6 +166,10 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} @@ -169,6 +185,61 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + '@changesets/apply-release-plan@7.1.1': + resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} + + '@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/cli@2.31.0': + resolution: {integrity: sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==} + hasBin: true + + '@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.4': + resolution: {integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==} + + '@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==} + + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} + + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} + + '@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.7': + resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==} + + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} + + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@clack/core@1.2.0': resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==} @@ -280,6 +351,15 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -293,6 +373,12 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@mapbox/node-pre-gyp@1.0.11': resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true @@ -889,6 +975,9 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + '@types/node@25.6.0': resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} @@ -1211,6 +1300,13 @@ packages: ajv@6.14.0: resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1231,6 +1327,16 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -1260,6 +1366,10 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} @@ -1282,6 +1392,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + builtin-modules@5.1.0: resolution: {integrity: sha512-c5JxaDrzwRjq3WyJkI1AGR5xy6Gr6udlt7sQPbl09+3ckB+Zo2qqQ2KhCTBr7Q8dHB43bENGYEk4xddrFH/b7A==} engines: {node: '>=18.20'} @@ -1310,6 +1423,9 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} @@ -1406,6 +1522,10 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -1417,6 +1537,10 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dts-resolver@2.1.3: resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} engines: {node: '>=20.19.0'} @@ -1447,6 +1571,10 @@ packages: resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + entities@7.0.1: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} @@ -1669,6 +1797,11 @@ packages: resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} @@ -1702,6 +1835,9 @@ packages: exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1721,6 +1857,9 @@ packages: fast-string-width@1.1.0: resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-wrap-ansi@0.1.6: resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==} @@ -1754,6 +1893,10 @@ packages: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -1782,6 +1925,14 @@ packages: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -1840,6 +1991,10 @@ packages: resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==} engines: {node: '>=18'} + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + globby@14.1.0: resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} engines: {node: '>=18'} @@ -1886,6 +2041,14 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + human-id@4.1.3: + resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} + hasBin: true + + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1951,6 +2114,14 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + is-wsl@3.1.1: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} @@ -1977,6 +2148,14 @@ packages: js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + hasBin: true + + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + jsdoc-type-pratt-parser@7.1.1: resolution: {integrity: sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==} engines: {node: '>=20.0.0'} @@ -1996,6 +2175,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2003,6 +2185,9 @@ packages: resolution: {integrity: sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + katex@0.16.45: resolution: {integrity: sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==} hasBin: true @@ -2092,6 +2277,10 @@ packages: resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -2099,6 +2288,9 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -2316,6 +2508,10 @@ packages: resolution: {integrity: sha512-YE06K9XLIvMlqSfoZTl32qvbZLPgL70Za41wS8pEhsSOhy71xz2fn8J07nuz/LEEtPSuUzLUFGAJSx499eKDSw==} engines: {node: '>=20'} + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -2323,6 +2519,12 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + naily-eslint-config@0.0.3: + resolution: {integrity: sha512-ItBSPTRNVDBgpKfwnWJPVv4mh1n7aGBWq4XrX7lrBxrXTWz5lqI4JLT6Dz2F7cskp+oAMTsvCaqw34PFr7CJoQ==} + peerDependencies: + '@antfu/eslint-config': ^8.2.0 + eslint: ^10.2.1 + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2395,6 +2597,9 @@ packages: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + oxfmt@0.45.0: resolution: {integrity: sha512-0o/COoN9fY50bjVeM7PQsNgbhndKurBIeTIcspW033OumksjJJmIVDKjAk5HMwU/GHTxSOdGDdhJ6BRzGPmsHg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2414,22 +2619,45 @@ packages: oxlint-tsgolint: optional: true + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + p-finally@2.0.1: resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} engines: {node: '>=8'} + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + p-map@7.0.4: resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} engines: {node: '>=18'} + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + package-manager-detector@1.6.0: resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} @@ -2455,6 +2683,10 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + path-type@6.0.0: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} @@ -2477,6 +2709,10 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + pinkie-promise@2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} @@ -2531,6 +2767,11 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + proxy-from-env@2.1.0: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} @@ -2551,6 +2792,10 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -2575,10 +2820,18 @@ packages: resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} hasBin: true + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + reserved-identifiers@1.2.0: resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==} engines: {node: '>=18'} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -2626,6 +2879,9 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + scslre@0.3.0: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} @@ -2656,6 +2912,10 @@ packages: signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} @@ -2663,6 +2923,10 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -2671,6 +2935,16 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + spdx-exceptions@2.5.0: resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} @@ -2680,6 +2954,9 @@ packages: 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==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -2697,6 +2974,10 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -2722,6 +3003,10 @@ packages: engines: {node: '>=10'} deprecated: Old versions of tar 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 + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -2729,8 +3014,8 @@ packages: resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} engines: {node: '>=18'} - tinyglobby@0.2.16: - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} tinypool@2.1.0: @@ -2847,6 +3132,10 @@ packages: unist-util-visit@5.1.0: resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + unrun@0.2.36: resolution: {integrity: sha512-ICAGv44LHSKjCdI4B4rk99lJLHXBweutO4MUwu3cavMlYtXID0Tn5e1Kwe/Uj6BSAuHHXfi1JheFVCYhcXHfAg==} engines: {node: '>=20.19.0'} @@ -3129,6 +3418,8 @@ snapshots: dependencies: '@babel/types': 8.0.0-rc.3 + '@babel/runtime@7.29.7': {} + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -3143,6 +3434,149 @@ snapshots: '@cfworker/json-schema@4.1.1': {} + '@changesets/apply-release-plan@7.1.1': + dependencies: + '@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 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.7.4 + + '@changesets/assemble-release-plan@6.0.10': + dependencies: + '@changesets/errors': 0.2.0 + '@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.4 + + '@changesets/changelog-git@0.2.1': + dependencies: + '@changesets/types': 6.1.0 + + '@changesets/cli@2.31.0(@types/node@25.6.0)': + dependencies: + '@changesets/apply-release-plan': 7.1.1 + '@changesets/assemble-release-plan': 6.0.10 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.4 + '@changesets/errors': 0.2.0 + '@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.7 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@inquirer/external-editor': 1.0.3(@types/node@25.6.0) + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + enquirer: 2.4.1 + fs-extra: 7.0.1 + mri: 1.2.0 + package-manager-detector: 0.2.11 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.7.4 + spawndamnit: 3.0.1 + term-size: 2.2.1 + transitivePeerDependencies: + - '@types/node' + + '@changesets/config@3.1.4': + dependencies: + '@changesets/errors': 0.2.0 + '@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 + micromatch: 4.0.8 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@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.4 + + '@changesets/get-release-plan@4.0.16': + dependencies: + '@changesets/assemble-release-plan': 6.0.10 + '@changesets/config': 3.1.4 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.7 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.4': + dependencies: + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + + '@changesets/logger@0.1.1': + dependencies: + picocolors: 1.1.1 + + '@changesets/parse@0.4.3': + dependencies: + '@changesets/types': 6.1.0 + js-yaml: 4.2.0 + + '@changesets/pre@2.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.7': + dependencies: + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.3 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.2': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.1.0': {} + + '@changesets/write@0.4.0': + dependencies: + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.1.3 + prettier: 2.8.8 + '@clack/core@1.2.0': dependencies: fast-wrap-ansi: 0.1.6 @@ -3275,6 +3709,13 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@inquirer/external-editor@1.0.3(@types/node@25.6.0)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 25.6.0 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -3289,6 +3730,22 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@manypkg/find-root@1.1.0': + dependencies: + '@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.29.7 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + '@mapbox/node-pre-gyp@1.0.11': dependencies: detect-libc: 2.1.2 @@ -3646,6 +4103,8 @@ snapshots: '@types/ms@2.1.0': {} + '@types/node@12.20.55': {} + '@types/node@25.6.0': dependencies: undici-types: 7.19.2 @@ -3737,7 +4196,7 @@ snapshots: debug: 4.4.3 minimatch: 10.2.5 semver: 7.7.4 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -3827,7 +4286,7 @@ snapshots: flatted: 3.4.2 pathe: 2.0.3 sirv: 3.0.2 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 tinyrainbow: 3.1.0 vitest: 4.1.4(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(vite@8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3)) @@ -3882,7 +4341,7 @@ snapshots: std-env: 4.1.0 tinybench: 2.9.0 tinyexec: 1.1.1 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 vite: 8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3) ws: 8.20.0 optionalDependencies: @@ -3933,7 +4392,7 @@ snapshots: '@types/vscode': 1.116.0 '@vstils/common': 0.0.2 chokidar: 5.0.0 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 trash: 10.1.1 '@vue/compiler-core@3.5.32': @@ -3989,6 +4448,15 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + ansi-regex@5.0.1: {} ansis@4.2.0: {} @@ -4002,6 +4470,14 @@ snapshots: delegates: 1.0.0 readable-stream: 3.6.2 + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-union@2.1.0: {} + assertion-error@2.0.1: {} ast-kit@3.0.0-beta.1: @@ -4032,6 +4508,10 @@ snapshots: baseline-browser-mapping@2.10.20: {} + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 + birpc@4.0.0: {} boolbase@1.0.0: {} @@ -4057,6 +4537,8 @@ snapshots: node-releases: 2.0.37 update-browserslist-db: 1.2.3(browserslist@4.28.2) + buffer-from@1.1.2: {} + builtin-modules@5.1.0: {} cac@7.0.0: {} @@ -4076,6 +4558,8 @@ snapshots: character-entities@2.0.2: {} + chardet@2.1.1: {} + chokidar@5.0.0: dependencies: readdirp: 5.0.0 @@ -4142,6 +4626,8 @@ snapshots: dequal@2.0.3: {} + detect-indent@6.1.0: {} + detect-libc@2.1.2: {} devlop@1.1.0: @@ -4150,6 +4636,10 @@ snapshots: diff-sequences@29.6.3: {} + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + dts-resolver@2.1.3: {} dunder-proto@1.0.1: @@ -4173,6 +4663,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.2 + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + entities@7.0.1: {} es-define-property@1.0.1: {} @@ -4325,7 +4820,7 @@ snapshots: jsonc-eslint-parser: 3.1.0 pathe: 2.0.3 pnpm-workspace-yaml: 1.6.0 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 yaml: 2.8.3 yaml-eslint-parser: 2.0.0 @@ -4472,6 +4967,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -4506,6 +5003,8 @@ snapshots: exsolve@1.0.8: {} + extendable-error@0.1.7: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -4526,6 +5025,8 @@ snapshots: dependencies: fast-string-truncated-width: 1.2.1 + fast-uri@3.1.0: {} + fast-wrap-ansi@0.1.6: dependencies: fast-string-width: 1.1.0 @@ -4554,6 +5055,11 @@ snapshots: find-up-simple@1.0.1: {} + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -4578,6 +5084,18 @@ snapshots: format@0.2.2: {} + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 @@ -4650,6 +5168,15 @@ snapshots: globals@17.5.0: {} + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + globby@14.1.0: dependencies: '@sindresorhus/merge-streams': 2.3.0 @@ -4692,6 +5219,12 @@ snapshots: transitivePeerDependencies: - supports-color + human-id@4.1.3: {} + + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} ignore@7.0.5: {} @@ -4733,6 +5266,12 @@ snapshots: is-stream@2.0.1: {} + is-subdir@1.2.0: + dependencies: + better-path-resolve: 1.0.0 + + is-windows@1.0.2: {} + is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -4757,6 +5296,15 @@ snapshots: js-tokens@10.0.0: {} + js-yaml@3.14.2: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + jsdoc-type-pratt-parser@7.1.1: {} jsdoc-type-pratt-parser@7.2.0: {} @@ -4767,6 +5315,8 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} jsonc-eslint-parser@3.1.0: @@ -4775,6 +5325,10 @@ snapshots: eslint-visitor-keys: 5.0.1 semver: 7.7.4 + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + katex@0.16.45: dependencies: commander: 8.3.0 @@ -4843,12 +5397,18 @@ snapshots: pkg-types: 2.3.0 quansync: 0.2.11 + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 lodash.merge@4.6.2: {} + lodash.startcase@4.4.0: {} + longest-streak@3.1.0: {} magic-string@0.30.21: @@ -5263,10 +5823,22 @@ snapshots: move-file@4.1.0: {} + mri@1.2.0: {} + mrmime@2.0.1: {} ms@2.1.3: {} + naily-eslint-config@0.0.3(@antfu/eslint-config@8.2.0(@typescript-eslint/rule-tester@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.58.2(typescript@6.0.3))(@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.32)(eslint@10.2.1(jiti@2.6.1))(oxlint@1.60.0(oxlint-tsgolint@0.20.0))(typescript@6.0.3)(vitest@4.1.4))(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3): + dependencies: + '@antfu/eslint-config': 8.2.0(@typescript-eslint/rule-tester@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.58.2(typescript@6.0.3))(@typescript-eslint/utils@8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.32)(eslint@10.2.1(jiti@2.6.1))(oxlint@1.60.0(oxlint-tsgolint@0.20.0))(typescript@6.0.3)(vitest@4.1.4) + '@typescript-eslint/utils': 8.58.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3) + eslint: 10.2.1(jiti@2.6.1) + eslint-flat-config-utils: 3.1.0 + transitivePeerDependencies: + - supports-color + - typescript + nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -5333,6 +5905,8 @@ snapshots: os-homedir@1.0.2: {} + outdent@0.5.0: {} + oxfmt@0.45.0: dependencies: tinypool: 2.1.0 @@ -5389,18 +5963,38 @@ snapshots: '@oxlint/binding-win32-x64-msvc': 1.60.0 oxlint-tsgolint: 0.20.0 + p-filter@2.1.0: + dependencies: + p-map: 2.1.0 + p-finally@2.0.1: {} + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 + p-map@2.1.0: {} + p-map@7.0.4: {} + p-try@2.2.0: {} + + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.11 + package-manager-detector@1.6.0: {} parse-gitignore@2.0.0: {} @@ -5417,6 +6011,8 @@ snapshots: path-key@3.1.1: {} + path-type@4.0.0: {} + path-type@6.0.0: {} pathe@2.0.3: {} @@ -5429,6 +6025,8 @@ snapshots: pify@2.3.0: {} + pify@4.0.1: {} + pinkie-promise@2.0.1: dependencies: pinkie: 2.0.4 @@ -5478,6 +6076,8 @@ snapshots: prelude-ls@1.2.1: {} + prettier@2.8.8: {} + proxy-from-env@2.1.0: {} pump@3.0.4: @@ -5493,6 +6093,13 @@ snapshots: queue-microtask@1.2.3: {} + read-yaml-file@1.1.0: + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.2 + pify: 4.0.1 + strip-bom: 3.0.0 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -5516,8 +6123,12 @@ snapshots: dependencies: jsesc: 3.1.0 + require-from-string@2.0.2: {} + reserved-identifiers@1.2.0: {} + resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} reusify@1.1.0: {} @@ -5592,6 +6203,8 @@ snapshots: safe-buffer@5.2.1: {} + safer-buffer@2.1.2: {} + scslre@0.3.0: dependencies: '@eslint-community/regexpp': 4.12.2 @@ -5614,6 +6227,8 @@ snapshots: signal-exit@3.0.7: {} + signal-exit@4.1.0: {} + sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.29 @@ -5622,10 +6237,24 @@ snapshots: sisteransi@1.0.5: {} + slash@3.0.0: {} + slash@5.1.0: {} source-map-js@1.2.1: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + spawndamnit@3.0.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + spdx-exceptions@2.5.0: {} spdx-expression-parse@4.0.0: @@ -5635,6 +6264,8 @@ snapshots: spdx-license-ids@3.0.23: {} + sprintf-js@1.0.3: {} + stackback@0.0.2: {} std-env@4.1.0: {} @@ -5653,6 +6284,8 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-bom@3.0.0: {} + strip-final-newline@2.0.0: {} strip-indent@4.1.1: {} @@ -5676,11 +6309,13 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + term-size@2.2.1: {} + tinybench@2.9.0: {} tinyexec@1.1.1: {} - tinyglobby@0.2.16: + tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 @@ -5743,7 +6378,7 @@ snapshots: rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@6.0.3) semver: 7.7.4 tinyexec: 1.1.1 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 tree-kill: 1.2.2 unconfig-core: 7.5.0 unrun: 0.2.36(synckit@0.11.12) @@ -5801,6 +6436,8 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 + universalify@0.1.2: {} + unrun@0.2.36(synckit@0.11.12): dependencies: rolldown: 1.0.0-rc.16 @@ -5876,7 +6513,7 @@ snapshots: picomatch: 4.0.4 postcss: 8.5.10 rolldown: 1.0.0-rc.15 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 optionalDependencies: '@types/node': 25.6.0 fsevents: 2.3.3 @@ -5901,7 +6538,7 @@ snapshots: std-env: 4.1.0 tinybench: 2.9.0 tinyexec: 1.1.1 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 tinyrainbow: 3.1.0 vite: 8.0.8(@types/node@25.6.0)(jiti@2.6.1)(yaml@2.8.3) why-is-node-running: 2.3.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index faf78f2..a8e3393 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,6 @@ +shellEmulator: true + +trustPolicy: no-downgrade + allowBuilds: nodejieba: true diff --git a/scripts/LIB_BUILD.md b/scripts/LIB_BUILD.md new file mode 100644 index 0000000..9e59949 --- /dev/null +++ b/scripts/LIB_BUILD.md @@ -0,0 +1,3 @@ +# Node.js Binary Lib Folder + +It contains the native node modules for the ArkTS MCP Server. diff --git a/scripts/markdown.ts b/scripts/markdown.ts new file mode 100644 index 0000000..cfbb62c --- /dev/null +++ b/scripts/markdown.ts @@ -0,0 +1,15 @@ +import type { Plugin } from 'vite-plus' +import fs from 'node:fs' +import path from 'node:path' + +export function markdown(): Plugin { + return { + name: 'local:markdown', + resolveId: (id, importer) => id.endsWith('.md') ? importer ? path.resolve(path.dirname(importer), id) : id : null, + load: (id) => { + if (!id.endsWith('.md')) return null + const content = fs.readFileSync(id, 'utf-8') + return `export default ${JSON.stringify(content)}` + }, + } +} diff --git a/scripts/nodejieba.ts b/scripts/nodejieba.ts new file mode 100644 index 0000000..faf8912 --- /dev/null +++ b/scripts/nodejieba.ts @@ -0,0 +1,42 @@ +import type { Plugin } from 'vite-plus' +import type { CopyEntry } from 'vite-plus/pack' +import fs from 'node:fs' +import { createRequire } from 'node:module' +import path from 'node:path' + +export interface NodeJiebaPluginApi { + buildCopyConfig(dirs: string[]): CopyEntry[] +} + +export function nodejieba(): Plugin { + const require = createRequire(import.meta.url) + const nodejiebaPath = path.dirname(require.resolve('nodejieba')) + const copyOptions = [ + { from: 'build/Release/**/*.node', to: 'lib/nodejieba/build/Release' }, + { from: 'submodules/cppjieba/dict', to: 'lib/nodejieba/submodules/cppjieba' }, + ] + + return { + name: 'local:nodejieba', + api: { + buildCopyConfig: (baseDirs: string[]) => { + const copyConfig: CopyEntry[] = [] + + for (const option of copyOptions) { + for (const baseDir of baseDirs) { + copyConfig.push({ from: path.resolve(nodejiebaPath, option.from), to: path.resolve(baseDir, option.to ?? 'dist') }) + } + } + + return copyConfig + }, + }, + transform: code => code.replace(/build\/Release\/nodejieba\.node/g, 'lib/nodejieba/build/Release/nodejieba.node') + .replace(/\/submodules\/cppjieba\/dict\//g, 'lib/nodejieba/submodules/cppjieba/dict/'), + writeBundle: (outputOptions) => { + if (!outputOptions.dir) return + if (!fs.existsSync(path.resolve(outputOptions.dir, 'lib'))) fs.mkdirSync(path.resolve(outputOptions.dir, 'lib')) + fs.writeFileSync(path.resolve(outputOptions.dir, 'lib', 'README.md'), fs.readFileSync('scripts/LIB_BUILD.md')) + }, + } +} diff --git a/scripts/tree.ts b/scripts/tree.ts new file mode 100644 index 0000000..6d6b8b0 --- /dev/null +++ b/scripts/tree.ts @@ -0,0 +1,40 @@ +import fs from 'node:fs' +import path from 'node:path' +import process from 'node:process' + +const root = 'target' +const maxDepth = Infinity + +function printTree(dir: string, prefix: string, depth: number) { + let entries + try { + entries = fs.readdirSync(dir, { withFileTypes: true }) + } + catch { + return + } + entries.sort((a, b) => a.name.localeCompare(b.name)) + entries.forEach((ent, i) => { + const isLast = i === entries.length - 1 + const branch = isLast ? '└── ' : '├── ' + console.log(prefix + branch + ent.name) + if (ent.isDirectory() && depth < maxDepth) { + const next = prefix + (isLast ? ' ' : '│ ') + printTree(path.join(dir, ent.name), next, depth + 1) + } + }) +} + +try { + if (!fs.existsSync(root) || !fs.statSync(root).isDirectory()) { + console.log('No target directory') + process.exit(0) + } +} +catch { + console.log('No target directory') + process.exit(0) +} + +console.log(root) +printTree(path.resolve(root), '', 0) diff --git a/shims.d.ts b/shims.d.ts new file mode 100644 index 0000000..0847cad --- /dev/null +++ b/shims.d.ts @@ -0,0 +1,14 @@ +declare module '*.md' { + type MarkdownString = string + const content: MarkdownString + export default content +} + +declare interface MarkdownModule { + readonly default?: string +} + +declare interface ImportMetaEnv { + /** The type of build, `BIN` for binary, `LIB` for library. */ + BUILD_TYPE: string +} diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..671ca36 Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/bin.ts b/src/bin.ts index e51ec7d..a8f976e 100644 --- a/src/bin.ts +++ b/src/bin.ts @@ -1,6 +1,8 @@ +#!/usr/bin/env node import process from 'node:process' import { StdioServerTransport } from '@modelcontextprotocol/server' import { createArktsMcpServer } from './index' +import 'source-map-support/register' async function main(): Promise { const server = await createArktsMcpServer() diff --git a/src/description.md b/src/description.md new file mode 100644 index 0000000..b502d72 --- /dev/null +++ b/src/description.md @@ -0,0 +1 @@ +# ArkTS MCP Server diff --git a/src/index.ts b/src/index.ts index 40a5690..9750890 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,27 +1,62 @@ -import type { InstallTool } from './tools/types' +import type { ToolModule } from './tools/types' +import path from 'node:path' import { McpServer } from '@modelcontextprotocol/server' import { version } from '../package.json' +import description from './description.md' -export async function createArktsMcpServer(): Promise { +export interface ArktsMcpServerOptions { + /** + * Path to a custom icon for the MCP server. Should be a PNG file. If not provided, the default logo will be used. + */ + iconPath?: string +} + +export async function createArktsMcpServer(options: ArktsMcpServerOptions = {}): Promise { const server = new McpServer({ name: '@arkts/mcp', version, + description, + icons: [{ src: options.iconPath || path.resolve(import.meta.dirname, 'assets/logo.png'), mimeType: 'image/png' }], }) + // Lazy or eager load the tools if (import.meta.env.BUILD_TYPE === 'BIN') { - await Promise.all( - Object.entries( - import.meta.glob<{ install: InstallTool }>('./tools/**/*.tool.ts', { eager: true }), - ).map(([_, mod]) => mod.install(server)), - ) + const mods = Object.entries(import.meta.glob('./tools/**/*.tool.{ts,md}', { eager: true })) + await Promise.all(mods.map(async ([path, mod]) => /* @__PURE__ */ await installTools(path, mod, mods))) } else { - await Promise.all( - Object.entries(import.meta.glob<{ install: InstallTool }>('./tools/**/*.tool.ts')).map( - ([_, mod]) => mod().then(tool => tool.install(server)), - ), - ) + const mods = Object.entries(import.meta.glob('./tools/**/*.tool.{ts,md}')) + await Promise.all(mods.map(async ([path, mod]) => /* @__PURE__ */ await installTools(path, await mod(), mods))) } return server + + async function installTools(path: string, module: ToolModule, mods: [string, (() => Promise) | ToolModule][]): Promise { + if (typeof module.default === 'object' && module.default !== null) { + const description = await findDescription(path, mods) + const title = await findTitle(description ?? '') + + server.registerTool(module.default.name, { + title, + description, + ...module.default, + }, module.default.execute) + } + await module.install?.(server) + } + + async function findDescription(path: string, mods: [string, (() => Promise) | ToolModule | MarkdownModule][]): Promise { + for (const [currentPath, mod] of mods) { + if (!currentPath.endsWith('.md')) continue + if (currentPath.split('.')?.[0] !== path.split('.')?.[0]) continue + const loadedMod = typeof mod === 'function' ? await mod() : mod + return loadedMod.default as string + } + } + + async function findTitle(description: string): Promise { + const maybeTitle = description.trim().split('\n')?.[0] + if (maybeTitle?.startsWith('# ')) return maybeTitle.slice(2) + return undefined + } } diff --git a/src/tools/docs/getCatalogTree.tool.md b/src/tools/docs/getCatalogTree.tool.md new file mode 100644 index 0000000..2f22fde --- /dev/null +++ b/src/tools/docs/getCatalogTree.tool.md @@ -0,0 +1,3 @@ +# Get Catalog Tree + +Search the catalog tree of the HarmonyOS Developer website ([https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts)). diff --git a/src/tools/docs/getCatalogTree.tool.test.ts b/src/tools/docs/getCatalogTree.tool.test.ts index ca657f8..2b51118 100644 --- a/src/tools/docs/getCatalogTree.tool.test.ts +++ b/src/tools/docs/getCatalogTree.tool.test.ts @@ -5,6 +5,9 @@ describe('getCatalogTreeTool', () => { const response = await requestCatalogTree('cn') const flattenTree = response.value.catalogTreeList.map(toFlattenCatalogTree).flat() const results = await searchCatalogTree('管理Web组件', flattenTree) - console.warn(results.map(res => flattenTree.find(item => item.nodeId === res.id))) + for (const result of results) { + const item = flattenTree.find(item => item.nodeId === result.id) + expect(item).toBeDefined() + } }) }) diff --git a/src/tools/docs/getCatalogTree.tool.ts b/src/tools/docs/getCatalogTree.tool.ts index a3d3e8f..d972e61 100644 --- a/src/tools/docs/getCatalogTree.tool.ts +++ b/src/tools/docs/getCatalogTree.tool.ts @@ -1,28 +1,42 @@ import type { SearchResult } from 'minisearch' -import type { InstallTool } from '../types' import axios from 'axios' import MiniSearch from 'minisearch' import nodeJieba from 'nodejieba' import z from 'zod' +import { defineMcpTool } from '../types' -export const install: InstallTool = (server) => { - server.registerTool( - 'searchHarmonyosGuidesCatalogs', - { - inputSchema: z.object({ - language: z.enum(['cn', 'en']), - text: z.string(), - }), - }, - async (ctx) => { - const response = await requestCatalogTree(ctx.language) - const flattenTree = response.value.catalogTreeList.map(toFlattenCatalogTree) - const results = await searchCatalogTree(ctx.text, flattenTree.flat()) - console.error(results) - return { content: [{ type: 'text', text: JSON.stringify(results) }] } - }, - ) -} +export default defineMcpTool({ + name: 'docs_get_catalog_tree', + inputSchema: z + .object({ + queryType: z.union([ + z.literal('search').describe('Search the catalog tree'), + z.literal('get').describe('Get the catalog tree'), + ]).describe('The type of query to perform, `search` to search the catalog tree, `get` to get all the catalog tree.'), + language: z.enum(['cn', 'en']).describe('The language of the catalog tree, `cn` for Chinese, `en` for English.'), + text: z.string().optional().describe('The text to search the catalog tree, if queryType is `search` this field is required, otherwise it will be ignored.'), + }) + .refine(data => data.queryType === 'search' ? data.text !== undefined : true) + .transform(data => data as Required), + outputSchema: z.object({ catalogs: z.array(z.record(z.string(), z.unknown())) }), + execute: async (input) => { + switch (input.queryType) { + case 'search': { + const response = await requestCatalogTree(input.language) + const flattenTree = response.value.catalogTreeList.map(toFlattenCatalogTree).flat() + const results = await searchCatalogTree(input.text, flattenTree) + const contents = results.map(result => flattenTree.find(item => item.nodeId === result.id)) + return { structuredContent: { catalogs: contents }, content: [] } + } + case 'get': { + const response = await requestCatalogTree(input.language) + const flattenTree = response.value.catalogTreeList.map(toFlattenCatalogTree).flat() + return { structuredContent: { catalogs: flattenTree }, content: [] } + } + default: throw new Error('Invalid query type') + } + }, +}) export async function requestCatalogTree(language: 'cn' | 'en'): Promise { const response = await axios.post( @@ -33,24 +47,18 @@ export async function requestCatalogTree(language: 'cn' | 'en'): Promise { +export async function searchCatalogTree(text: string, flattenTree: FlattenCatalogTreeItem[]): Promise { const miniSearch = new MiniSearch({ fields: ['nodeName'], idField: 'nodeId', tokenize: text => nodeJieba.cut(text), }) miniSearch.addAll(flattenTree) - return miniSearch.search(text, { - tokenize: text => nodeJieba.cut(text), - }) + return miniSearch.search(text) } interface CatalogTreeItem { @@ -58,6 +66,8 @@ interface CatalogTreeItem { nodeId?: string labelNameCn?: string labelNameEn?: string + relateDocument?: string + isLeaf?: boolean children?: CatalogTreeItem[] } @@ -76,7 +86,7 @@ export function toFlattenCatalogTree(tree: CatalogTreeItem): FlattenCatalogTreeI return out } -interface CatalogTreeResponse { +export interface CatalogTreeResponse { value: { catalogTreeList: CatalogTreeItem[] } diff --git a/src/tools/types.ts b/src/tools/types.ts index a35bf24..54d5276 100644 --- a/src/tools/types.ts +++ b/src/tools/types.ts @@ -1,3 +1,26 @@ -import type { McpServer } from '@modelcontextprotocol/server' +import type { McpServer, StandardSchemaWithJSON, ToolAnnotations, ToolCallback } from '@modelcontextprotocol/server' +import type { Awaitable } from '@vstils/core' -export type InstallTool = (server: McpServer) => void +export type InstallHook = (server: McpServer) => Awaitable + +export interface McpTool { + readonly name: string + readonly title?: string + readonly description?: string + readonly inputSchema?: InputArgs + readonly outputSchema?: OutputArgs + readonly annotations?: ToolAnnotations + readonly _meta?: Record + readonly execute: ToolCallback +} + +export interface ToolModule { + readonly install?: InstallHook + readonly default?: McpTool +} + +// eslint-disable-next-line antfu/top-level-function +export const defineMcpTool = < + OutputArgs extends StandardSchemaWithJSON = StandardSchemaWithJSON, + InputArgs extends StandardSchemaWithJSON | undefined = undefined, +>(mcpTool: McpTool): McpTool => mcpTool diff --git a/tsconfig.json b/tsconfig.json index 7f78ce7..826675e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,11 @@ { "compilerOptions": { - "target": "ES2022", - "module": "ES2022", + "target": "ESNext", + "module": "ESNext", "moduleResolution": "Bundler", "types": ["node", "vite-plus/client", "vite-plus/test/globals"], "strict": true, - "declaration": true, - "isolatedDeclarations": true, "skipLibCheck": true }, - "exclude": ["**/*.config.ts"] + "exclude": ["**/dist/**/*", "**/.cache/**/*", "**/node_modules/**/*", "**/target/**/*"] } diff --git a/vite.config.ts b/vite.config.ts index 7665f1b..5def64b 100755 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,13 +1,12 @@ -import type { CopyEntry, PackUserConfig } from 'vite-plus/pack' -import { createRequire } from 'node:module' -import path from 'node:path' +import type { PackUserConfig } from 'vite-plus/pack' import process from 'node:process' import { defineConfig } from 'vite-plus' import packageJson from './package.json' with { type: 'json' } +import { markdown } from './scripts/markdown' +import { nodejieba } from './scripts/nodejieba' -const require = createRequire(import.meta.url) -const nodejieba = path.dirname(require.resolve('nodejieba')) -const baseCopyDir = ['.cache', 'target'] +const markdownPlugin = markdown() +const nodejiebaPlugin = nodejieba() export default defineConfig({ staged: { @@ -17,12 +16,13 @@ export default defineConfig({ pack: [ { entry: 'src/bin.ts', - format: 'cjs', + format: 'esm', minify: true, dts: false, + sourcemap: 'inline', env: { BUILD_TYPE: 'BIN' }, + plugins: [markdownPlugin], deps: { - alwaysBundle: Object.keys(packageJson.dependencies).map(dep => new RegExp(`^${dep}`)), onlyBundle: false, }, } satisfies PackUserConfig, @@ -30,7 +30,13 @@ export default defineConfig({ entry: 'src/index.ts', format: ['esm', 'cjs'], dts: true, + sourcemap: 'inline', env: { BUILD_TYPE: 'LIB' }, + plugins: [markdownPlugin], + deps: { + onlyBundle: false, + }, + copy: 'src/assets', } satisfies PackUserConfig, process.argv.includes('--build-exe') ? ({ @@ -39,6 +45,7 @@ export default defineConfig({ outDir: '.cache', // Use BIN here so the Rolldown graph matches dist/bin.cjs. EXE previously produced a // lazy-init Zod layout that broke @modelcontextprotocol/server's module-scope z.url(). + sourcemap: 'inline', env: { BUILD_TYPE: 'BIN' }, deps: { alwaysBundle: Object.keys(packageJson.dependencies).map(dep => new RegExp(`^${dep}`)), @@ -49,29 +56,21 @@ export default defineConfig({ outDir: 'target', fileName: 'arkts-mcp', }, - copy: buildCopyConfig([ - { - from: path.resolve(nodejieba, 'build', 'Release', '**', '*.node'), - to: 'build/Release', - }, - { - from: path.resolve(nodejieba, 'submodules', 'cppjieba', 'dict'), - to: 'submodules/cppjieba', + minify: { + compress: { + keepNames: { + class: true, + function: true, + }, }, - ]), + mangle: false, + }, + plugins: [markdownPlugin, nodejiebaPlugin], + copy: [ + ...nodejiebaPlugin.api?.buildCopyConfig(['.cache', 'target']) ?? [], + { from: 'src/assets', to: 'target' }, + ], } satisfies PackUserConfig) : undefined, ].filter(Boolean) as PackUserConfig[], }) - -function buildCopyConfig(options: CopyEntry[]): CopyEntry[] { - const copyConfig: CopyEntry[] = [] - - for (const option of options) { - for (const baseDir of baseCopyDir) { - copyConfig.push({ from: option.from, to: path.resolve(baseDir, option.to ?? 'dist') }) - } - } - - return copyConfig -}