From 3370dcfd260282b8defb651f8c25763600fff67f Mon Sep 17 00:00:00 2001 From: l1shen <648952316@qq.com> Date: Mon, 26 Oct 2026 13:06:44 +0800 Subject: [PATCH] fix: transpile development TypeScript with Oxc --- CONTRIBUTING.md | 4 +++ apps/server/node/runtime/isolated-vm.ts | 3 +- apps/server/package.json | 5 ++-- apps/server/scripts/dev.ts | 2 +- bun.lock | 38 +++++++++++++++++++++++++ package.json | 3 +- 6 files changed, 50 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 76a27ec59..58f06d46b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,6 +21,10 @@ bun install --frozen-lockfile bun run dev ``` +Development TypeScript runs on Node.js with `@oxc-node/core` for transpilation, including the +isolated runtime executor. Production continues to run compiled JavaScript. Type checking runs +separately through `bun run check`. + The development Workbench listens on `http://127.0.0.1:5174` and proxies API requests to the Server on `http://127.0.0.1:3001`. The first run writes an operator token to `apps/server/.open-flow-dev/operator-token`; later runs reuse it. Set `OPEN_FLOW_TOKEN` to use an diff --git a/apps/server/node/runtime/isolated-vm.ts b/apps/server/node/runtime/isolated-vm.ts index f652df9a3..2330b5d2d 100644 --- a/apps/server/node/runtime/isolated-vm.ts +++ b/apps/server/node/runtime/isolated-vm.ts @@ -317,7 +317,8 @@ export class IsolatedVmHost { #start(): ChildProcess { const modulePath = fileURLToPath(import.meta.url) const executorPath = fileURLToPath(new URL(modulePath.endsWith('.ts') ? './isolated-vm-executor.ts' : './isolated-vm-executor.js', import.meta.url)) - const child = spawn(process.execPath, ['--no-node-snapshot', executorPath, '--executor'], { + const loaderArgs = modulePath.endsWith('.ts') ? ['--import', import.meta.resolve('@oxc-node/core/register')] : [] + const child = spawn(process.execPath, ['--no-node-snapshot', ...loaderArgs, executorPath, '--executor'], { env: { NODE_ENV: 'production' }, stdio: ['ignore', 'ignore', 'pipe', 'ipc'], }) as ChildProcessByStdio diff --git a/apps/server/package.json b/apps/server/package.json index dfad8c020..c90708a1d 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -36,6 +36,8 @@ }, "devDependencies": { "@modelcontextprotocol/client": "2.0.0", + "@oomol-lab/open-flow-command": "workspace:*", + "@oxc-node/core": "1.0.1", "@tailwindcss/vite": "^4", "@types/node": "^26.0.0", "@types/react": "^18.3.12", @@ -49,7 +51,6 @@ "tailwindcss": "^4", "typescript": "7.0.2", "vite": "8.2.1", - "vitest": "^5.0.0", - "@oomol-lab/open-flow-command": "workspace:*" + "vitest": "^5.0.0" } } diff --git a/apps/server/scripts/dev.ts b/apps/server/scripts/dev.ts index c4a72f145..b02779c4a 100644 --- a/apps/server/scripts/dev.ts +++ b/apps/server/scripts/dev.ts @@ -64,7 +64,7 @@ export function developmentBackendPlugin(): Plugin { } const developmentToken = configuredOperatorToken == null ? await loadDevelopmentToken() : { created: false, token: configuredOperatorToken } - backend = spawn('node', ['--watch', '--no-node-snapshot', 'node/main.ts', '--api-only'], { + backend = spawn('node', ['--watch', '--no-node-snapshot', '--import', '@oxc-node/core/register', 'node/main.ts', '--api-only'], { cwd: appRoot, env: { ...process.env, diff --git a/bun.lock b/bun.lock index 6c94fcbff..41d034190 100644 --- a/bun.lock +++ b/bun.lock @@ -5,6 +5,7 @@ "": { "name": "open-flow-workspace", "devDependencies": { + "@oxc-node/core": "1.0.1", "oxfmt": "^0.60.0", "wrangler": "4.132.0", }, @@ -33,6 +34,7 @@ "devDependencies": { "@modelcontextprotocol/client": "2.0.0", "@oomol-lab/open-flow-command": "workspace:*", + "@oxc-node/core": "1.0.1", "@tailwindcss/vite": "^4", "@types/node": "^26.0.0", "@types/react": "^18.3.12", @@ -460,6 +462,40 @@ "@oomol-lab/resource-cache": ["@oomol-lab/resource-cache@0.1.4", "", { "dependencies": { "idb-keyval": "^6.3.0" } }, "sha512-6aWUQSpYa1FNiDR/FSkSz+04RWG80KRxr81Rf4N2f8J6shS5KLEBfHuwT7AUO2HA+IxTTpAYF0VkdwqQMj+rYw=="], + "@oxc-node/core": ["@oxc-node/core@1.0.1", "", { "dependencies": { "pirates": "^4.0.7" }, "optionalDependencies": { "@oxc-node/core-android-arm-eabi": "1.0.1", "@oxc-node/core-android-arm64": "1.0.1", "@oxc-node/core-darwin-arm64": "1.0.1", "@oxc-node/core-darwin-x64": "1.0.1", "@oxc-node/core-freebsd-x64": "1.0.1", "@oxc-node/core-linux-arm-gnueabihf": "1.0.1", "@oxc-node/core-linux-arm64-gnu": "1.0.1", "@oxc-node/core-linux-arm64-musl": "1.0.1", "@oxc-node/core-linux-ppc64-gnu": "1.0.1", "@oxc-node/core-linux-s390x-gnu": "1.0.1", "@oxc-node/core-linux-x64-gnu": "1.0.1", "@oxc-node/core-linux-x64-musl": "1.0.1", "@oxc-node/core-openharmony-arm64": "1.0.1", "@oxc-node/core-win32-arm64-msvc": "1.0.1", "@oxc-node/core-win32-ia32-msvc": "1.0.1", "@oxc-node/core-win32-x64-msvc": "1.0.1" } }, "sha512-CcUa/itqt0StKfxHyZfLXipaw3bYnWR8t/ypBZOOFYgY1q/CsXJaOlera2pixgZNd/k2bK5MFjcD03rm5Y4Vug=="], + + "@oxc-node/core-android-arm-eabi": ["@oxc-node/core-android-arm-eabi@1.0.1", "", { "os": "android", "cpu": "arm" }, "sha512-+P14d3shlQmsXbqUcfLGRUHL8OFDuAbfLxoJWU79JPw/PXh8iHtIlWql/qA1KJIhuFvyOU1+Vzo2cRXtZYZzZA=="], + + "@oxc-node/core-android-arm64": ["@oxc-node/core-android-arm64@1.0.1", "", { "os": "android", "cpu": "arm64" }, "sha512-qYyhMai0p3JixEVNa08sBGxH8AyVr4Gkw0U4NNkViXBwrjHVfPhhPPBw19FXQEa/JriUNVmoON9tkm7Iqp6/dA=="], + + "@oxc-node/core-darwin-arm64": ["@oxc-node/core-darwin-arm64@1.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-miheAHWXtkfwLIp6DyN8g+oHmsV714Qj7YBGXzraIOh9NjC2snuTzlzH1ZZjLZKX1w+r/NpDrzm9tVEoATJ5FA=="], + + "@oxc-node/core-darwin-x64": ["@oxc-node/core-darwin-x64@1.0.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-l0lvtkvoek5O+cgk9iXMez6EGFqa8BcEnx87k054sVI5dqBHWTw41Z2orRcMgZvTCKYNIJ7s05J0XR5iiv4N2A=="], + + "@oxc-node/core-freebsd-x64": ["@oxc-node/core-freebsd-x64@1.0.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J6rbw+0HWAruZiq2NiwryWEKPLFOENBiYKqlMQSRZ7w/YDOMEQZHFHFpjtz1n0C4NT8DVyVeGcvy5cscJOhNJQ=="], + + "@oxc-node/core-linux-arm-gnueabihf": ["@oxc-node/core-linux-arm-gnueabihf@1.0.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ESs4CsUSVgDxJqYnuDC50p7Za+k2lmrxO6hA5pjCASAT+jfpwiRB69KtsF1eEe4LXRrur59O0KqIYtMLIUlx0A=="], + + "@oxc-node/core-linux-arm64-gnu": ["@oxc-node/core-linux-arm64-gnu@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-o0Cy0SvK+7jrK7zXBVxYAtklfGeMf5aNF+QmQ0+raZwFp+gbesccGQ3U6DSAtb3tbXImCsejJ2oknE3kFyY2bA=="], + + "@oxc-node/core-linux-arm64-musl": ["@oxc-node/core-linux-arm64-musl@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-kZjkChPpwb9X3COUE8w2X+UhTPCWLm+/5ddaGgOXn6lqYvV3eQRlSTN3bCF6Wnu3nwmPYKxjGqUf4zZNpWSufw=="], + + "@oxc-node/core-linux-ppc64-gnu": ["@oxc-node/core-linux-ppc64-gnu@1.0.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-B0XP8quN6BWK4LDnWLY3tu8NaYKNUkcMTAwpSg2SIBI8jzKLLwn6DXAVkt1SI3V0SLsKMUVXNOMOrn6zKsYs6A=="], + + "@oxc-node/core-linux-s390x-gnu": ["@oxc-node/core-linux-s390x-gnu@1.0.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-G06PMgfaDV8VHCErygwHIwF8WmFNRaPVwwsbW2yyaQUP6CgjZHoqpxhagNDofcz4hCglwV0ZrJ0gVp1Qp1r5dQ=="], + + "@oxc-node/core-linux-x64-gnu": ["@oxc-node/core-linux-x64-gnu@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-kg8Ug1VCvgelsPBdA5iWH+qjtUCWtLX1F+zy9fk9Hg9AxJMUJ7HJxssxuS+d8nLe28GnQ6+1jnWhoP8zh+0rgw=="], + + "@oxc-node/core-linux-x64-musl": ["@oxc-node/core-linux-x64-musl@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-x2QE5k1t8AjHa7OGnQgM1wLEblcxcraqpUlWvH8VAI+fK1X0km/4ti+CBBZmtYXnS11Dy4GUHdKgdyXWjPCyEg=="], + + "@oxc-node/core-openharmony-arm64": ["@oxc-node/core-openharmony-arm64@1.0.1", "", { "os": "none", "cpu": "arm64" }, "sha512-/Cqh4axl3LcULk2eF4lWH0JS9cYecRAfNasRA6KL5lOyeqoKfbU32P7T1GvOxYSddLxdAwEKDj+6HzERRL9ELQ=="], + + "@oxc-node/core-win32-arm64-msvc": ["@oxc-node/core-win32-arm64-msvc@1.0.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-D04L8Q8P50eb8St1+6Ok4HqNg4aWsY3C2+o5gq3UFHp7zl3HT6nxVQdT1mEM1ueWqqhf2Mv0rrVcMkgXRJGUSA=="], + + "@oxc-node/core-win32-ia32-msvc": ["@oxc-node/core-win32-ia32-msvc@1.0.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DQV7jzQw/WQ7M53Gqv3Jhel5gYHoatO2Ex8yXzbIYfZgcr/2H0itNq/QoseaMpTi0nKn7pG5xPZz6/DhJEfLow=="], + + "@oxc-node/core-win32-x64-msvc": ["@oxc-node/core-win32-x64-msvc@1.0.1", "", { "os": "win32", "cpu": "x64" }, "sha512-LYd6Qs1wfnSGj6Ma3xfYlVew0DhO+jIB/OCqhKymhcko5YPNmrn/sjWCikbrfx1qmF/gkx+Nfq70FF29WAfi/Q=="], + "@oxc-project/types": ["@oxc-project/types@0.146.0", "", {}, "sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA=="], "@oxfmt/binding-android-arm-eabi": ["@oxfmt/binding-android-arm-eabi@0.60.0", "", { "os": "android", "cpu": "arm" }, "sha512-1q4q4Jc8FlOMVojEisyFAVyl8h1yawNv6phjgmhGVEDeyeOdsSnSr9x0+D4mOnEKvpO5L4mxKZ/DP9X6U3A/Mw=="], @@ -1312,6 +1348,8 @@ "pino-std-serializers": ["pino-std-serializers@7.1.0", "", {}, "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="], + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], "postcss": ["postcss@8.5.26", "", { "dependencies": { "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ=="], diff --git a/package.json b/package.json index 31c46e7f7..aa369216a 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "apps/*" ], "devDependencies": { + "@oxc-node/core": "1.0.1", "oxfmt": "^0.60.0", "wrangler": "4.132.0" }, @@ -28,7 +29,7 @@ "test:docker": "bun run --filter @oomol-lab/open-flow-server test:docker", "test:npm-package": "bun run --filter @oomol-lab/open-flow test:package", "test:package": "bun run test:npm-package", - "lab": "node --no-node-snapshot apps/server/scripts/lab/main.ts", + "lab": "node --no-node-snapshot --import @oxc-node/core/register apps/server/scripts/lab/main.ts", "flow": "bun apps/server/scripts/flow.ts", "skill:generate": "bun run --filter @oomol-lab/open-flow skill:generate" }