setup tsdown

This commit is contained in:
EFLKumo committed 2026-09-19 18:49:48 +08:00
1 parent 12b2f73596
commit 6a9318568c
6 files changed
+489 -17

No files matched your search

+2 -1
View File
@@ -1,2 +1,3 @@
node_modules node_modules/
dist/
repos/ repos/
+5 -3
View File
@@ -2,15 +2,17 @@
An MCP server that exposes one Language Server to agents as a headless editor. An MCP server that exposes one Language Server to agents as a headless editor.
Effect 4 (`effect/unstable/ai` for MCP, `effect/unstable/cli` for the CLI) plus Effect 4 (`effect/unstable/ai` for MCP, `effect/unstable/cli` for the CLI) plus
`vscode-languageserver-protocol` for LSP. TypeScript runs directly on Node 26 `vscode-languageserver-protocol` for LSP. TypeScript is bundled for Node 26 with
(type stripping); there is no build step. tsdown; source files can still run directly through Node's type stripping.
## Commands ## Commands
- `pnpm tsc` — type-check (tsgo with the Effect language-service plugin) - `pnpm tsc` — type-check (tsgo with the Effect language-service plugin)
- `pnpm build` — bundle the CLI to `dist/main.mjs` with tsdown
- `pnpm dev` — run the TypeScript source directly
- `pnpm test` — vitest; integration tests spawn `test/fixtures/server.ts`, a real LSP server - `pnpm test` — vitest; integration tests spawn `test/fixtures/server.ts`, a real LSP server
- `pnpm biome check --write --unsafe` — lint/format (run before committing; its rewrites are safe) - `pnpm biome check --write --unsafe` — lint/format (run before committing; its rewrites are safe)
- `node src/main.ts --help` — the CLI; smoke-test with `node src/main.ts --root <dir> -- <server> [args]` - `node dist/main.mjs --help` — the built CLI; smoke-test with `node dist/main.mjs --root <dir> -- <server> [args]`
- Commit with `jj commit -m "..."`, never `git` - Commit with `jj commit -m "..."`, never `git`
The shell may have an HTTP proxy configured; when curling the `--http` transport locally, pass `--noproxy '*'`. The shell may have an HTTP proxy configured; when curling the `--http` transport locally, pass `--noproxy '*'`.
+11 -10
View File
@@ -2,7 +2,7 @@
An [MCP](https://modelcontextprotocol.io/) server that exposes a single [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) server to agents as a headless editor. An [MCP](https://modelcontextprotocol.io/) server that exposes a single [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) server to agents as a headless editor.
`lsp-mcp` starts the language server you provide, keeps its document state in sync with the workspace, and exposes the language server's capabilities through MCP tools and resources. It is written in TypeScript and Effect, and runs directly on Node.js without a build step. `lsp-mcp` starts the language server you provide, keeps its document state in sync with the workspace, and exposes the language server's capabilities through MCP tools and resources. It is written in TypeScript and [Effect](https://effect.website).
## Features ## Features
@@ -28,16 +28,17 @@ Underlying techniques:
```sh ```sh
pnpm install pnpm install
pnpm build
``` ```
The repository runs TypeScript directly. From a checkout, invoke the server with `node src/main.ts`. From a checkout, invoke the built server with `node dist/main.mjs`. Use `pnpm dev` to run the TypeScript source directly during development.
## Usage ## Usage
The general form is: The general form is:
```sh ```sh
node src/main.ts [lsp-mcp options] -- <language-server> [language-server args...] node dist/main.mjs [lsp-mcp options] -- <language-server> [language-server args...]
``` ```
The `--` separates `lsp-mcp` options from the executable and arguments passed to the language server. The `--` separates `lsp-mcp` options from the executable and arguments passed to the language server.
@@ -47,7 +48,7 @@ The `--` separates `lsp-mcp` options from the executable and arguments passed to
stdio is the default transport and is suitable for MCP clients that launch a local server process: stdio is the default transport and is suitable for MCP clients that launch a local server process:
```sh ```sh
node src/main.ts --root /path/to/project -- typescript-language-server --stdio node dist/main.mjs --root /path/to/project -- typescript-language-server --stdio
``` ```
For example, an MCP client configuration can point at the checkout like this: For example, an MCP client configuration can point at the checkout like this:
@@ -58,7 +59,7 @@ For example, an MCP client configuration can point at the checkout like this:
"typescript": { "typescript": {
"command": "node", "command": "node",
"args": [ "args": [
"/path/to/lsp-mcp/src/main.ts", "/path/to/lsp-mcp/dist/main.mjs",
"--root", "--root",
"/path/to/project", "/path/to/project",
"--", "--",
@@ -75,7 +76,7 @@ For example, an MCP client configuration can point at the checkout like this:
Run the MCP endpoint on a local port with `--http`: Run the MCP endpoint on a local port with `--http`:
```sh ```sh
node src/main.ts --http 9010 --root ./crate -- rust-analyzer node dist/main.mjs --http 9010 --root ./crate -- rust-analyzer
``` ```
The endpoint is available at: The endpoint is available at:
@@ -88,20 +89,20 @@ http://localhost:9010/mcp
```sh ```sh
# Pass JSON initialization options to the language server. # Pass JSON initialization options to the language server.
node src/main.ts \ node dist/main.mjs \
--init-options '{"typescript":{"useInferredProjectPerProjectRoot":true}}' \ --init-options '{"typescript":{"useInferredProjectPerProjectRoot":true}}' \
-- typescript-language-server --stdio -- typescript-language-server --stdio
# Serve workspace/configuration and didChangeConfiguration with JSON settings. # Serve workspace/configuration and didChangeConfiguration with JSON settings.
node src/main.ts \ node dist/main.mjs \
--settings '{"gopls":{"staticcheck":true}}' \ --settings '{"gopls":{"staticcheck":true}}' \
-- gopls -- gopls
# Add a file-extension to language-id mapping. # Add a file-extension to language-id mapping.
node src/main.ts --language vue=vue --root ./web -- vue-language-server --stdio node dist/main.mjs --language vue=vue --root ./web -- vue-language-server --stdio
# Keep more documents open, and always restart a crashed language server. # Keep more documents open, and always restart a crashed language server.
node src/main.ts --open-documents 64 --restart always -- clangd node dist/main.mjs --open-documents 64 --restart always -- clangd
``` ```
## Development ## Development
+9 -3
View File
@@ -1,14 +1,19 @@
{ {
"name": "lsp-mcp", "name": "@opticlm/lsp-mcp",
"version": "0.1.0", "version": "0.1.0",
"description": "MCP server exposing a Language Server's capabilities to agents as a headless editor", "description": "MCP server exposing a Language Server's capabilities to agents as a headless editor",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"files": [
"dist"
],
"bin": { "bin": {
"lsp-mcp": "./src/main.ts" "lsp-mcp": "./dist/main.mjs"
}, },
"scripts": { "scripts": {
"start": "node src/main.ts", "build": "tsdown",
"start": "node dist/main.mjs",
"dev": "node src/main.ts",
"check": "tsc", "check": "tsc",
"test": "vitest run", "test": "vitest run",
"lint": "biome check --write --unsafe", "lint": "biome check --write --unsafe",
@@ -34,6 +39,7 @@
"@effect/tsgo": "0.45.0", "@effect/tsgo": "0.45.0",
"@effect/vitest": "4.0.0-rc.115", "@effect/vitest": "4.0.0-rc.115",
"@types/node": "^26.6.1", "@types/node": "^26.6.1",
"tsdown": "0.23.0",
"typescript": "^7.0.2", "typescript": "^7.0.2",
"vitest": "^5.0.1", "vitest": "^5.0.1",
"vscode-languageserver": "^10.1.1" "vscode-languageserver": "^10.1.1"
+451
View File
@@ -194,6 +194,9 @@ importers:
'@types/node': '@types/node':
specifier: ^26.6.1 specifier: ^26.6.1
version: 26.6.1 version: 26.6.1
tsdown:
specifier: 0.23.0
version: 0.23.0(typescript@7.0.2)
typescript: typescript:
specifier: ^7.0.2 specifier: ^7.0.2
version: 7.0.2 version: 7.0.2
@@ -334,6 +337,9 @@ packages:
'@oxc-project/types@0.150.0': '@oxc-project/types@0.150.0':
resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==} resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==}
'@quansync/fs@1.1.0':
resolution: {integrity: sha512-qAPG/t3HqML1TlN7sY/pTbEjzFVAKsMjNNMGheyDosro+kT4iw2KCUoHcVdmliwWjorm4elZbgNQyU2eD97eDg==}
'@redis/bloom@6.2.1': '@redis/bloom@6.2.1':
resolution: {integrity: sha512-huQgNLaCIZfQ9SeLn4q9124uOUd8HbZDYHwwUzNcRgHqCHiHKl2dDxMqJCeWh8cMqZAoWuHR8XnWbDMIf+o7ag==} resolution: {integrity: sha512-huQgNLaCIZfQ9SeLn4q9124uOUd8HbZDYHwwUzNcRgHqCHiHKl2dDxMqJCeWh8cMqZAoWuHR8XnWbDMIf+o7ag==}
engines: {node: '>= 20.0.0'} engines: {node: '>= 20.0.0'}
@@ -618,10 +624,149 @@ packages:
'@vitest/spy@5.0.1': '@vitest/spy@5.0.1':
resolution: {integrity: sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==} resolution: {integrity: sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==}
'@yuku-codegen/binding-android-arm64@0.10.2':
resolution: {integrity: sha512-Oc2KInVkPfUjEB4PeV6X0NvIoyYTzDe/WmqFrTwBqKs6YKnz4A7XwWQvJTb7M0rLz9a6WgpUUiiS5QKaCi4O/g==}
cpu: [arm64]
os: [android]
'@yuku-codegen/binding-darwin-arm64@0.10.2':
resolution: {integrity: sha512-3H7eNPIHJndUJXZ4QUGBPq1zC6RGcUZfm7bymJes+/N7wTVWUn1bxZ9JcozYHpkWQNm9f23G8YWbaHD9aYH72A==}
cpu: [arm64]
os: [darwin]
'@yuku-codegen/binding-darwin-x64@0.10.2':
resolution: {integrity: sha512-AJOUpR2s3LF9AWiiub/Uyc/UoXNTWcq8hK3cVI6fUSXtwh34dG21J6hRuNlO6JVJFTo4o3ScVvZOrh/YFfUEAA==}
cpu: [x64]
os: [darwin]
'@yuku-codegen/binding-freebsd-x64@0.10.2':
resolution: {integrity: sha512-ms7DcZu87u5CiK/wMwvpKAvAmtaqKjCQIXNweMLypG6qbuiaOMQf1jpbB5+j46xBcgCovo8TQMcv0bCQLKIL9w==}
cpu: [x64]
os: [freebsd]
'@yuku-codegen/binding-linux-arm-gnu@0.10.2':
resolution: {integrity: sha512-xJDpYAsKV5+eaiBhTYl05fvT6sst4PsCeuIFMRu9b0/WCSrNQPfCDtAQ5/MS6xNpsdujdZEPR+gmfWk3ZG5i3A==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@yuku-codegen/binding-linux-arm-musl@0.10.2':
resolution: {integrity: sha512-qfTkgd7AEx61l4K9VtXWCGTxc/fmXJ4ZheDz3i+/AAJUtg4sa0bPrc0VBxPggB/rayR8Z3+JfrBItuyanBJJ9Q==}
cpu: [arm]
os: [linux]
libc: [musl]
'@yuku-codegen/binding-linux-arm64-gnu@0.10.2':
resolution: {integrity: sha512-4e6Mifm/4UdjtU3D8mATIrvgP+xEiH8xtQOjd0zpd72XKWT7ug3sdyhq2utkkZFP6BvYp7SgZrI+aR4VeIOHdw==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@yuku-codegen/binding-linux-arm64-musl@0.10.2':
resolution: {integrity: sha512-RdsJrUfDYFVV3JOmWFUWwSu31fa1APn12xDeIKxgl/YWxrabwtxsDBNjF2561c7tmcbiewdCUvngqRs8AyGVLA==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@yuku-codegen/binding-linux-x64-gnu@0.10.2':
resolution: {integrity: sha512-mVzWimEPPreaPyXIUvxsHoJzvO7ckZ5j0LgQFHz04zQIRwt9A9T2hA7K5/jYjJKkMxWG/U2VjhGNwVhtyU+uqg==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@yuku-codegen/binding-linux-x64-musl@0.10.2':
resolution: {integrity: sha512-Y77fyISurmr2mvO1yeq3u+x/WJbACgPR4w+lzEVx30ViCxZzIGrZPRN1yEdZ9xUNPNsIO5thBHIdRNG+UGUG+Q==}
cpu: [x64]
os: [linux]
libc: [musl]
'@yuku-codegen/binding-win32-arm64@0.10.2':
resolution: {integrity: sha512-1+tGLyG0u5YYy0lev4ck7/0sd8xJ9SZde0dLut7qLDPZV5WVTV8x6OxNXUne/PGuHZyO1vK+txPQzzHOyXHGSw==}
cpu: [arm64]
os: [win32]
'@yuku-codegen/binding-win32-x64@0.10.2':
resolution: {integrity: sha512-8a2SExRohRbwC0MY4VpOF0/RSckrJ2ASZqAor5/RYSJJaeadR93n10gZzcKT6pY9ukiSOIZCRKVRD2tH73T0qA==}
cpu: [x64]
os: [win32]
'@yuku-parser/binding-android-arm64@0.10.2':
resolution: {integrity: sha512-2VPBU9fRGRAQ2xPAvghnec3oou5Nrxm2Bezhf+13UMspAxQSkF/32r+ySKXSwIPA5/RivumDJDxAxc301Sgicw==}
cpu: [arm64]
os: [android]
'@yuku-parser/binding-darwin-arm64@0.10.2':
resolution: {integrity: sha512-LD+PMZE51tCYTOss5HBkm3/AE39MvcMDBfWJx7A4yDcjfNbAQDnHZKtzSOuqrswx+TQHY0ws5xn6+fWOwtmfBA==}
cpu: [arm64]
os: [darwin]
'@yuku-parser/binding-darwin-x64@0.10.2':
resolution: {integrity: sha512-mmZ8cND+AoIIMRERyMinlg5ApHxP23B9jH2B5wT7T+dliPa9rubLxneB/SUjFwyUjGaFnB5G7t4YvpfbO5zbkQ==}
cpu: [x64]
os: [darwin]
'@yuku-parser/binding-freebsd-x64@0.10.2':
resolution: {integrity: sha512-gVIjaaIddbRfAhHlC8N809wQWml7mxfSVnzaLtzGXObTeFTPAg/YVnQXt1UOhPM1ah5eG/8Y0RUlNpB4GVe7eQ==}
cpu: [x64]
os: [freebsd]
'@yuku-parser/binding-linux-arm-gnu@0.10.2':
resolution: {integrity: sha512-q/XPPQQAPdlw05aPj30ygBhekmQryGOwxVraBgApjKK8yY1kNQgqq6XCYLF1WHSee+lhxclrTO7W0/bt7dR1GA==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@yuku-parser/binding-linux-arm-musl@0.10.2':
resolution: {integrity: sha512-A+Cb0I1hFF4wilTQpWs79k1aNnj4B2tkrHx3zsuUNF9BtVY2zPZ4yeQEM/zjXrS/qJlNMZVK9NrWJjwdpnTrfg==}
cpu: [arm]
os: [linux]
libc: [musl]
'@yuku-parser/binding-linux-arm64-gnu@0.10.2':
resolution: {integrity: sha512-aGNSzqIqqphFwAdIFwVvKIyXD1Iy3CxrEJVIZAT87Ecyi4vCmmDD2v2l9h+Gd3/wSy3JZlOI792LJbKAjyy9rQ==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@yuku-parser/binding-linux-arm64-musl@0.10.2':
resolution: {integrity: sha512-Ddl1sF0rtuCXyHGSOV6dcmdx+ETv1iD+IVFqQuOjzkJZWclxJxdBWX6ZJMRtTiGqGUTbqLEKiTXxpR/Bvqk+2A==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@yuku-parser/binding-linux-x64-gnu@0.10.2':
resolution: {integrity: sha512-/nlcpR6IF5U+0m5L9wvAIXeQa2DT+BXuvqKDsTcOTlcc0B4dHNyqE5hTXsS4hAyimpy2ZK8A1zMNF5hTrjg2cg==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@yuku-parser/binding-linux-x64-musl@0.10.2':
resolution: {integrity: sha512-GX80dxTQD/M/OryyuxJcFzFENzry3cDFPvCFTyWogNWQH3fSHfMrNfpwpl1YzMos1eV9NygK5GSDG7VArQlb4w==}
cpu: [x64]
os: [linux]
libc: [musl]
'@yuku-parser/binding-win32-arm64@0.10.2':
resolution: {integrity: sha512-agePQBV4VHewiGU0ACSjscZ/hJd283f9JfAF19Gf1rI5+wy5tTgx4GS36i0b3xim15AQ4RCpDRosEvhLZ4zAOw==}
cpu: [arm64]
os: [win32]
'@yuku-parser/binding-win32-x64@0.10.2':
resolution: {integrity: sha512-s8//CMpgL5+y1lvDCdyh1rwGI5+ytDJywFJRe1vnhI7n0j+caxshNucurikYLLVeQ2SYFex6aPrzgQxkabBQRA==}
cpu: [x64]
os: [win32]
'@yuku-toolchain/types@0.10.2':
resolution: {integrity: sha512-sSeo4SSSToiS+sSD+bwn/s94EEcaLJ7tG5LCp8gFYC1G5VzxzX7fqB6m9RU1yMD8KTpu6zdU/I1NlQf8hVBJ9Q==}
assertion-error@2.0.1: assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cac@7.0.0:
resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
engines: {node: '>=20.19.0'}
chai@6.2.2: chai@6.2.2:
resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -630,13 +775,29 @@ packages:
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
defu@6.1.7:
resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==}
detect-libc@2.1.2: detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
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
effect@4.0.0-rc.115: effect@4.0.0-rc.115:
resolution: {integrity: sha512-ogYulZ5ffeOzrJqQrG0XOkDO5lKn2s9KNHhoxJy/6wKUkF0i12dlVXWA9TgsgQ+zV/JzizyG0+XMPepZEQX6vw==} resolution: {integrity: sha512-ogYulZ5ffeOzrJqQrG0XOkDO5lKn2s9KNHhoxJy/6wKUkF0i12dlVXWA9TgsgQ+zV/JzizyG0+XMPepZEQX6vw==}
empathic@2.0.1:
resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==}
engines: {node: '>=14'}
es-module-lexer@2.3.2: es-module-lexer@2.3.2:
resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==}
@@ -661,6 +822,17 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin] os: [darwin]
get-tsconfig@5.0.0-beta.6:
resolution: {integrity: sha512-X6fBC0pmImC70gvX2zm56go9hx0MyoGVdG0tUCkg/D+Xnh5TJsOZ7iDbOdI3PvmtrDxnu1YdDufpK2QJX1Meqw==}
engines: {node: '>=20.20.0'}
hookable@6.1.2:
resolution: {integrity: sha512-+abwxtiEA52GCVIsQqut3S/uKTbUwYIp4Pe/vv+6py5XiXBCqMZHg6pA6Y5qhgLSEys0/cYuPbO0z1QFj5ZCmg==}
import-without-cache@0.4.1:
resolution: {integrity: sha512-vXoV9PjKHEednCUu01e98TkImxy67e3BJXbTIOmIq4Hyzw3IAwYRcuPkfeTzJzwyyts4kjuA73x+pWJLc4f86A==}
engines: {node: ^22.18.0 || >=24.0.0}
lightningcss-android-arm64@1.33.0: lightningcss-android-arm64@1.33.0:
resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
@@ -747,6 +919,10 @@ packages:
resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==}
engines: {node: '>=12.20.0'} engines: {node: '>=12.20.0'}
obug@3.0.0:
resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==}
engines: {node: '>=12.20.0'}
picocolors@1.1.1: picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -758,10 +934,38 @@ packages:
resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==}
engines: {node: ^10 || ^12 || >=14} engines: {node: ^10 || ^12 || >=14}
quansync@1.0.0:
resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
redis@6.2.1: redis@6.2.1:
resolution: {integrity: sha512-Z9VHtgYs48PiQC77X9O2Er8Hj4T+5BtFjT91/vi5Is1D04N72cA946ZslM1ImJw8ZctFBZWAVjM7S5wJNeHMpg==} resolution: {integrity: sha512-Z9VHtgYs48PiQC77X9O2Er8Hj4T+5BtFjT91/vi5Is1D04N72cA946ZslM1ImJw8ZctFBZWAVjM7S5wJNeHMpg==}
engines: {node: '>= 20.0.0'} engines: {node: '>= 20.0.0'}
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
rolldown-plugin-dts@0.28.6:
resolution: {integrity: sha512-qKrFtBfRfR2hP233m7Ic9zf3wv6MSYdZghWKMdEO6dRYZGlNfINJAa1P5ZVvyHh3mrcd7IJQvIY8L9vnm+v5rQ==}
engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
peerDependencies:
'@typescript/native-preview': '*'
'@volar/typescript': ~2.4.0
'@vue/language-core': ~3.2.0 || ~3.3.0
rolldown: ^1.2.0
typescript: ^5.0.0 || ^6.0.0 || ~7.0.0
vue-tsc: ~3.2.0 || ~3.3.0
peerDependenciesMeta:
'@typescript/native-preview':
optional: true
'@volar/typescript':
optional: true
'@vue/language-core':
optional: true
typescript:
optional: true
vue-tsc:
optional: true
rolldown@1.2.9: rolldown@1.2.9:
resolution: {integrity: sha512-hx/Pv0N1haXRb11qkfnK5MXB/iqr7i0yjWQqmO9uHqZpBgQSqzc8UsSnEpalsh+j1I8qQ2CkXAkJC8Br3dKSlg==} resolution: {integrity: sha512-hx/Pv0N1haXRb11qkfnK5MXB/iqr7i0yjWQqmO9uHqZpBgQSqzc8UsSnEpalsh+j1I8qQ2CkXAkJC8Br3dKSlg==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
@@ -788,15 +992,60 @@ packages:
resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
tinyexec@1.3.1:
resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==}
engines: {node: '>=18'}
tinyglobby@0.2.17: tinyglobby@0.2.17:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'} engines: {node: '>=12.0.0'}
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
tsdown@0.23.0:
resolution: {integrity: sha512-BaT+ep1xnj5hdyICLd5r5SYYE+TXnI1ATePLykv9vcKpHpFTWUWRH+x1AF/E2qcu3YB6+vI8IdyxIIIffEqw5Q==}
engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
hasBin: true
peerDependencies:
'@arethetypeswrong/core': ^0.18.1
'@tsdown/css': 0.23.0
'@tsdown/exe': 0.23.0
'@vitejs/devtools': '*'
publint: ^0.3.8
tsx: '*'
typescript: ^5.0.0 || ^6.0.0 || ^7.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
typescript@7.0.2: typescript@7.0.2:
resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==}
engines: {node: '>=16.20.0'} engines: {node: '>=16.20.0'}
hasBin: true hasBin: true
unconfig-core@7.5.0:
resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
undici-types@8.9.0: undici-types@8.9.0:
resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==}
@@ -804,6 +1053,10 @@ packages:
resolution: {integrity: sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==} resolution: {integrity: sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==}
engines: {node: '>=22.19.0'} engines: {node: '>=22.19.0'}
verkit@0.4.0:
resolution: {integrity: sha512-sXMwN6DMHeouPfCxkxWkKAmxphWKEenHYY5H1nIBzU3PmDsmJp6kBXJdshjVdpMZuWCmL9SH7KFRx29AylpP6g==}
engines: {node: '>=18.12.0'}
vite@8.3.0: vite@8.3.0:
resolution: {integrity: sha512-lhZBVvEHefgE+HQZC9O7EBJgCU/nVzFNl7vkS4RE0APtWLP02/8QVIkQtzBxPquh7lq5/78NHipTj7ODQ6XuyQ==} resolution: {integrity: sha512-lhZBVvEHefgE+HQZC9O7EBJgCU/nVzFNl7vkS4RE0APtWLP02/8QVIkQtzBxPquh7lq5/78NHipTj7ODQ6XuyQ==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
@@ -925,6 +1178,15 @@ packages:
utf-8-validate: utf-8-validate:
optional: true optional: true
yuku-ast@0.10.2:
resolution: {integrity: sha512-UnG9mA6giglCvSErft2/40TVFX750Sj1xgwddPLpG7J7rlr/P1wPADg9G2RK+d/1tNLtRVoLdMMOMVBB9561TQ==}
yuku-codegen@0.10.2:
resolution: {integrity: sha512-hentl2dtrF6cPjiAirtkfxfFZBA6Hdm61UqRJ7cA0qrlDNMk9PZGOjw5w1mx3E0hu/6pHcJF4dJW+D0SXHPZOA==}
yuku-parser@0.10.2:
resolution: {integrity: sha512-CgaU0/PPjCAIEZ3WQroosOxTY3eeKldAN3h+vk8pMNz4+jl1CZzBR4pW+K/rRPF112VooCL5FdjJoiMNjDrL2A==}
snapshots: snapshots:
'@biomejs/biome@2.5.14': '@biomejs/biome@2.5.14':
@@ -1028,6 +1290,10 @@ snapshots:
'@oxc-project/types@0.150.0': {} '@oxc-project/types@0.150.0': {}
'@quansync/fs@1.1.0':
dependencies:
quansync: 1.0.0
'@redis/bloom@6.2.1(@redis/client@6.2.1)': '@redis/bloom@6.2.1(@redis/client@6.2.1)':
dependencies: dependencies:
'@redis/client': 6.2.1 '@redis/client': 6.2.1
@@ -1183,16 +1449,98 @@ snapshots:
'@vitest/spy@5.0.1': {} '@vitest/spy@5.0.1': {}
'@yuku-codegen/binding-android-arm64@0.10.2':
optional: true
'@yuku-codegen/binding-darwin-arm64@0.10.2':
optional: true
'@yuku-codegen/binding-darwin-x64@0.10.2':
optional: true
'@yuku-codegen/binding-freebsd-x64@0.10.2':
optional: true
'@yuku-codegen/binding-linux-arm-gnu@0.10.2':
optional: true
'@yuku-codegen/binding-linux-arm-musl@0.10.2':
optional: true
'@yuku-codegen/binding-linux-arm64-gnu@0.10.2':
optional: true
'@yuku-codegen/binding-linux-arm64-musl@0.10.2':
optional: true
'@yuku-codegen/binding-linux-x64-gnu@0.10.2':
optional: true
'@yuku-codegen/binding-linux-x64-musl@0.10.2':
optional: true
'@yuku-codegen/binding-win32-arm64@0.10.2':
optional: true
'@yuku-codegen/binding-win32-x64@0.10.2':
optional: true
'@yuku-parser/binding-android-arm64@0.10.2':
optional: true
'@yuku-parser/binding-darwin-arm64@0.10.2':
optional: true
'@yuku-parser/binding-darwin-x64@0.10.2':
optional: true
'@yuku-parser/binding-freebsd-x64@0.10.2':
optional: true
'@yuku-parser/binding-linux-arm-gnu@0.10.2':
optional: true
'@yuku-parser/binding-linux-arm-musl@0.10.2':
optional: true
'@yuku-parser/binding-linux-arm64-gnu@0.10.2':
optional: true
'@yuku-parser/binding-linux-arm64-musl@0.10.2':
optional: true
'@yuku-parser/binding-linux-x64-gnu@0.10.2':
optional: true
'@yuku-parser/binding-linux-x64-musl@0.10.2':
optional: true
'@yuku-parser/binding-win32-arm64@0.10.2':
optional: true
'@yuku-parser/binding-win32-x64@0.10.2':
optional: true
'@yuku-toolchain/types@0.10.2': {}
assertion-error@2.0.1: {} assertion-error@2.0.1: {}
cac@7.0.0: {}
chai@6.2.2: {} chai@6.2.2: {}
cluster-key-slot@1.1.2: {} cluster-key-slot@1.1.2: {}
defu@6.1.7: {}
detect-libc@2.1.2: {} detect-libc@2.1.2: {}
dts-resolver@3.0.0: {}
effect@4.0.0-rc.115: {} effect@4.0.0-rc.115: {}
empathic@2.0.1: {}
es-module-lexer@2.3.2: {} es-module-lexer@2.3.2: {}
estree-walker@3.0.3: estree-walker@3.0.3:
@@ -1208,6 +1556,14 @@ snapshots:
fsevents@2.3.3: fsevents@2.3.3:
optional: true optional: true
get-tsconfig@5.0.0-beta.6:
dependencies:
resolve-pkg-maps: 1.0.0
hookable@6.1.2: {}
import-without-cache@0.4.1: {}
lightningcss-android-arm64@1.33.0: lightningcss-android-arm64@1.33.0:
optional: true optional: true
@@ -1265,6 +1621,8 @@ snapshots:
obug@2.2.1: {} obug@2.2.1: {}
obug@3.0.0: {}
picocolors@1.1.1: {} picocolors@1.1.1: {}
picomatch@4.0.7: {} picomatch@4.0.7: {}
@@ -1275,6 +1633,8 @@ snapshots:
picocolors: 1.1.1 picocolors: 1.1.1
source-map-js: 1.2.1 source-map-js: 1.2.1
quansync@1.0.0: {}
redis@6.2.1: redis@6.2.1:
dependencies: dependencies:
'@redis/bloom': 6.2.1(@redis/client@6.2.1) '@redis/bloom': 6.2.1(@redis/client@6.2.1)
@@ -1286,6 +1646,22 @@ snapshots:
- '@node-rs/xxhash' - '@node-rs/xxhash'
- '@opentelemetry/api' - '@opentelemetry/api'
resolve-pkg-maps@1.0.0: {}
rolldown-plugin-dts@0.28.6(rolldown@1.2.9)(typescript@7.0.2):
dependencies:
dts-resolver: 3.0.0
get-tsconfig: 5.0.0-beta.6
obug: 3.0.0
rolldown: 1.2.9
yuku-ast: 0.10.2
yuku-codegen: 0.10.2
yuku-parser: 0.10.2
optionalDependencies:
typescript: 7.0.2
transitivePeerDependencies:
- oxc-resolver
rolldown@1.2.9: rolldown@1.2.9:
dependencies: dependencies:
'@oxc-project/types': 0.150.0 '@oxc-project/types': 0.150.0
@@ -1319,11 +1695,40 @@ snapshots:
tinyexec@1.3.0: {} tinyexec@1.3.0: {}
tinyexec@1.3.1: {}
tinyglobby@0.2.17: tinyglobby@0.2.17:
dependencies: dependencies:
fdir: 6.5.0(picomatch@4.0.7) fdir: 6.5.0(picomatch@4.0.7)
picomatch: 4.0.7 picomatch: 4.0.7
tree-kill@1.2.2: {}
tsdown@0.23.0(typescript@7.0.2):
dependencies:
cac: 7.0.0
defu: 6.1.7
empathic: 2.0.1
hookable: 6.1.2
import-without-cache: 0.4.1
obug: 2.2.1
picomatch: 4.0.7
rolldown: 1.2.9
rolldown-plugin-dts: 0.28.6(rolldown@1.2.9)(typescript@7.0.2)
tinyexec: 1.3.1
tinyglobby: 0.2.17
tree-kill: 1.2.2
unconfig-core: 7.5.0
verkit: 0.4.0
optionalDependencies:
typescript: 7.0.2
transitivePeerDependencies:
- '@typescript/native-preview'
- '@volar/typescript'
- '@vue/language-core'
- oxc-resolver
- vue-tsc
typescript@7.0.2: typescript@7.0.2:
optionalDependencies: optionalDependencies:
'@typescript/typescript-aix-ppc64': 7.0.2 '@typescript/typescript-aix-ppc64': 7.0.2
@@ -1347,10 +1752,17 @@ snapshots:
'@typescript/typescript-win32-arm64': 7.0.2 '@typescript/typescript-win32-arm64': 7.0.2
'@typescript/typescript-win32-x64': 7.0.2 '@typescript/typescript-win32-x64': 7.0.2
unconfig-core@7.5.0:
dependencies:
'@quansync/fs': 1.1.0
quansync: 1.0.0
undici-types@8.9.0: {} undici-types@8.9.0: {}
undici@8.10.2: {} undici@8.10.2: {}
verkit@0.4.0: {}
vite@8.3.0(@types/node@26.6.1): vite@8.3.0(@types/node@26.6.1):
dependencies: dependencies:
lightningcss: 1.33.0 lightningcss: 1.33.0
@@ -1406,3 +1818,42 @@ snapshots:
stackback: 0.0.2 stackback: 0.0.2
ws@8.21.3: {} ws@8.21.3: {}
yuku-ast@0.10.2:
dependencies:
'@yuku-toolchain/types': 0.10.2
yuku-codegen@0.10.2:
dependencies:
'@yuku-toolchain/types': 0.10.2
optionalDependencies:
'@yuku-codegen/binding-android-arm64': 0.10.2
'@yuku-codegen/binding-darwin-arm64': 0.10.2
'@yuku-codegen/binding-darwin-x64': 0.10.2
'@yuku-codegen/binding-freebsd-x64': 0.10.2
'@yuku-codegen/binding-linux-arm-gnu': 0.10.2
'@yuku-codegen/binding-linux-arm-musl': 0.10.2
'@yuku-codegen/binding-linux-arm64-gnu': 0.10.2
'@yuku-codegen/binding-linux-arm64-musl': 0.10.2
'@yuku-codegen/binding-linux-x64-gnu': 0.10.2
'@yuku-codegen/binding-linux-x64-musl': 0.10.2
'@yuku-codegen/binding-win32-arm64': 0.10.2
'@yuku-codegen/binding-win32-x64': 0.10.2
yuku-parser@0.10.2:
dependencies:
'@yuku-toolchain/types': 0.10.2
yuku-ast: 0.10.2
optionalDependencies:
'@yuku-parser/binding-android-arm64': 0.10.2
'@yuku-parser/binding-darwin-arm64': 0.10.2
'@yuku-parser/binding-darwin-x64': 0.10.2
'@yuku-parser/binding-freebsd-x64': 0.10.2
'@yuku-parser/binding-linux-arm-gnu': 0.10.2
'@yuku-parser/binding-linux-arm-musl': 0.10.2
'@yuku-parser/binding-linux-arm64-gnu': 0.10.2
'@yuku-parser/binding-linux-arm64-musl': 0.10.2
'@yuku-parser/binding-linux-x64-gnu': 0.10.2
'@yuku-parser/binding-linux-x64-musl': 0.10.2
'@yuku-parser/binding-win32-arm64': 0.10.2
'@yuku-parser/binding-win32-x64': 0.10.2
+11
View File
@@ -0,0 +1,11 @@
import { defineConfig } from "tsdown";
export default defineConfig({
entry: "src/main.ts",
format: "esm",
outDir: "dist",
treeshake: true,
minify: true,
sourcemap: false,
});