From ec19dc09c7b64c634fc6b03233aad5e0cd3a377f Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 18 Sep 2026 13:10:59 -0700 Subject: [PATCH] fix(sdk): support Node package imports (#49810) --- packages/client/script/build-package.ts | 18 +++++++++++++ packages/core/src/filesystem/watcher.ts | 2 +- packages/core/test/filesystem/ignore.test.ts | 2 +- packages/sdk/script/build.ts | 28 ++++++++++++-------- packages/sdk/script/verify-package.ts | 1 + packages/server/script/build.ts | 28 ++++++++++++-------- 6 files changed, 55 insertions(+), 24 deletions(-) diff --git a/packages/client/script/build-package.ts b/packages/client/script/build-package.ts index 323a63ddf96..b7ea4d851b2 100644 --- a/packages/client/script/build-package.ts +++ b/packages/client/script/build-package.ts @@ -1,9 +1,27 @@ #!/usr/bin/env bun import { $ } from "bun" +import path from "node:path" import { fileURLToPath } from "node:url" process.chdir(fileURLToPath(new URL("..", import.meta.url))) await $`rm -rf dist` await $`bun tsc -p tsconfig.build.json` +const root = path.resolve("src") +const result = await Bun.build({ + entrypoints: await Array.fromAsync(new Bun.Glob("**/*.ts").scan({ cwd: root, absolute: true })).then((files) => + files.filter((file) => !file.endsWith(".d.ts")), + ), + root, + outdir: "dist", + target: "node", + format: "esm", + packages: "external", + splitting: true, + naming: { + entry: "[dir]/[name].[ext]", + chunk: "chunks/[name]-[hash].[ext]", + }, +}) +if (!result.success) throw new AggregateError(result.logs, "Failed to build Client") diff --git a/packages/core/src/filesystem/watcher.ts b/packages/core/src/filesystem/watcher.ts index 9b653308878..b5c438661d0 100644 --- a/packages/core/src/filesystem/watcher.ts +++ b/packages/core/src/filesystem/watcher.ts @@ -1,7 +1,7 @@ export * as Watcher from "./watcher.js" // @ts-ignore -import { createWrapper } from "@parcel/watcher/wrapper" +import { createWrapper } from "@parcel/watcher/wrapper.js" import type ParcelWatcher from "@parcel/watcher" import { FileSystem } from "@opencode/schema/filesystem" import { makeGlobalNode } from "@opencode/util/effect/app-node" diff --git a/packages/core/test/filesystem/ignore.test.ts b/packages/core/test/filesystem/ignore.test.ts index bda0f757d78..c75711d6d7a 100644 --- a/packages/core/test/filesystem/ignore.test.ts +++ b/packages/core/test/filesystem/ignore.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "bun:test" import { Ignore } from "@opencode/core/filesystem/ignore" // @ts-ignore -import { createWrapper } from "@parcel/watcher/wrapper" +import { createWrapper } from "@parcel/watcher/wrapper.js" test("parcel patterns ignore built-in folders at any depth", async () => { let ignoreGlobs: string[] = [] diff --git a/packages/sdk/script/build.ts b/packages/sdk/script/build.ts index f2036c48d82..664d7e9a852 100644 --- a/packages/sdk/script/build.ts +++ b/packages/sdk/script/build.ts @@ -2,21 +2,27 @@ import { $ } from "bun" import { rm } from "node:fs/promises" +import path from "node:path" import { fileURLToPath } from "node:url" process.chdir(fileURLToPath(new URL("..", import.meta.url))) await rm("dist", { recursive: true, force: true }) await $`bun tsc -p tsconfig.build.json` -const files = await Array.fromAsync(new Bun.Glob("**/*.ts").scan({ cwd: "src" })).then((items) => - items.map((item) => `src/${item}`), -) -const transpiler = new Bun.Transpiler({ loader: "ts", target: "bun" }) -await Promise.all( - files.map(async (file) => - Bun.write( - file.replace(/^src\//, "dist/").replace(/\.ts$/, ".js"), - await transpiler.transform(await Bun.file(file).text()), - ), +const root = path.resolve("src") +const result = await Bun.build({ + entrypoints: await Array.fromAsync(new Bun.Glob("**/*.ts").scan({ cwd: root, absolute: true })).then((files) => + files.filter((file) => !file.endsWith(".d.ts")), ), -) + root, + outdir: "dist", + target: "node", + format: "esm", + packages: "external", + splitting: true, + naming: { + entry: "[dir]/[name].[ext]", + chunk: "chunks/[name]-[hash].[ext]", + }, +}) +if (!result.success) throw new AggregateError(result.logs, "Failed to build SDK") diff --git a/packages/sdk/script/verify-package.ts b/packages/sdk/script/verify-package.ts index 021473f4315..4d1b6011140 100644 --- a/packages/sdk/script/verify-package.ts +++ b/packages/sdk/script/verify-package.ts @@ -213,6 +213,7 @@ for (const module of modules) { throw new Error(`Packed SDK consumer resolved multiple Effect runtimes:\n${runtimes.join("\n")}`) } await $`bun imports.mjs`.cwd(consumer) + await $`node imports.mjs`.cwd(consumer) await $`bun --conditions=workerd imports.mjs`.cwd(consumer) await $`node_modules/.bin/wrangler deploy --dry-run --config wrangler.jsonc --outdir dist`.cwd(consumer) diff --git a/packages/server/script/build.ts b/packages/server/script/build.ts index f2036c48d82..c0d5f69a600 100644 --- a/packages/server/script/build.ts +++ b/packages/server/script/build.ts @@ -2,21 +2,27 @@ import { $ } from "bun" import { rm } from "node:fs/promises" +import path from "node:path" import { fileURLToPath } from "node:url" process.chdir(fileURLToPath(new URL("..", import.meta.url))) await rm("dist", { recursive: true, force: true }) await $`bun tsc -p tsconfig.build.json` -const files = await Array.fromAsync(new Bun.Glob("**/*.ts").scan({ cwd: "src" })).then((items) => - items.map((item) => `src/${item}`), -) -const transpiler = new Bun.Transpiler({ loader: "ts", target: "bun" }) -await Promise.all( - files.map(async (file) => - Bun.write( - file.replace(/^src\//, "dist/").replace(/\.ts$/, ".js"), - await transpiler.transform(await Bun.file(file).text()), - ), +const root = path.resolve("src") +const result = await Bun.build({ + entrypoints: await Array.fromAsync(new Bun.Glob("**/*.ts").scan({ cwd: root, absolute: true })).then((files) => + files.filter((file) => !file.endsWith(".d.ts")), ), -) + root, + outdir: "dist", + target: "node", + format: "esm", + packages: "external", + splitting: true, + naming: { + entry: "[dir]/[name].[ext]", + chunk: "chunks/[name]-[hash].[ext]", + }, +}) +if (!result.success) throw new AggregateError(result.logs, "Failed to build Server")