diff --git a/package.json b/package.json index fb955591778..fdf898e12c9 100644 --- a/package.json +++ b/package.json @@ -1516,10 +1516,10 @@ "audit:seams": "node scripts/audit-seams.mjs", "build": "node scripts/build-all.mjs", "build:ci-artifacts": "node scripts/build-all.mjs ciArtifacts", - "build:docker": "node scripts/tsdown-build.mjs && node scripts/check-cli-bootstrap-imports.mjs && node scripts/runtime-postbuild.mjs && node scripts/build-stamp.mjs && node scripts/runtime-postbuild-stamp.mjs && pnpm plugins:assets:build && pnpm plugins:assets:copy && node --experimental-strip-types scripts/copy-hook-metadata.ts && node --experimental-strip-types scripts/copy-export-html-templates.ts && node --experimental-strip-types scripts/write-build-info.ts && node --experimental-strip-types scripts/write-cli-startup-metadata.ts && node --experimental-strip-types scripts/write-cli-compat.ts", + "build:docker": "node scripts/tsdown-build.mjs && node scripts/check-cli-bootstrap-imports.mjs && node scripts/runtime-postbuild.mjs && node scripts/build-stamp.mjs && node scripts/runtime-postbuild-stamp.mjs && pnpm plugins:assets:build && pnpm plugins:assets:copy && node --import tsx scripts/copy-hook-metadata.ts && node --import tsx scripts/copy-export-html-templates.ts && node --import tsx scripts/write-build-info.ts && node --import tsx scripts/write-cli-startup-metadata.ts && node --import tsx scripts/write-cli-compat.ts", "build:plugin-sdk:dts": "node scripts/run-tsgo.mjs -p tsconfig.plugin-sdk.dts.json --declaration true", - "build:plugin-sdk:strict-smoke": "node scripts/tsdown-build.mjs && node scripts/runtime-postbuild.mjs && node scripts/run-with-env.mjs OPENCLAW_PLUGIN_SDK_CANONICAL_DTS=1 -- node --experimental-strip-types scripts/write-plugin-sdk-entry-dts.ts && node scripts/check-plugin-sdk-exports.mjs", - "build:strict-smoke": "pnpm plugins:assets:build && node scripts/tsdown-build.mjs && node scripts/check-cli-bootstrap-imports.mjs && node scripts/runtime-postbuild.mjs && node scripts/build-stamp.mjs && node scripts/runtime-postbuild-stamp.mjs && node scripts/run-with-env.mjs OPENCLAW_PLUGIN_SDK_CANONICAL_DTS=1 -- node --experimental-strip-types scripts/write-plugin-sdk-entry-dts.ts && node scripts/check-plugin-sdk-exports.mjs", + "build:plugin-sdk:strict-smoke": "node scripts/tsdown-build.mjs && node scripts/runtime-postbuild.mjs && node scripts/run-with-env.mjs OPENCLAW_PLUGIN_SDK_CANONICAL_DTS=1 -- node --import tsx scripts/write-plugin-sdk-entry-dts.ts && node scripts/check-plugin-sdk-exports.mjs", + "build:strict-smoke": "pnpm plugins:assets:build && node scripts/tsdown-build.mjs && node scripts/check-cli-bootstrap-imports.mjs && node scripts/runtime-postbuild.mjs && node scripts/build-stamp.mjs && node scripts/runtime-postbuild-stamp.mjs && node scripts/run-with-env.mjs OPENCLAW_PLUGIN_SDK_CANONICAL_DTS=1 -- node --import tsx scripts/write-plugin-sdk-entry-dts.ts && node scripts/check-plugin-sdk-exports.mjs", "canvas:a2ui:bundle": "node scripts/bundle-a2ui.mjs", "canvas:a2ui:native:check": "node scripts/sync-native-a2ui.mjs --check", "canvas:a2ui:native:sync": "node scripts/sync-native-a2ui.mjs --write", diff --git a/scripts/build-all.mjs b/scripts/build-all.mjs index 395641dfaf6..3847c65dbc2 100644 --- a/scripts/build-all.mjs +++ b/scripts/build-all.mjs @@ -53,7 +53,7 @@ export const BUILD_ALL_STEPS = [ { label: "write-plugin-sdk-entry-dts", kind: "node", - args: ["--experimental-strip-types", "scripts/write-plugin-sdk-entry-dts.ts"], + args: ["--import", "tsx", "scripts/write-plugin-sdk-entry-dts.ts"], env: { OPENCLAW_PLUGIN_SDK_CANONICAL_DTS: "1", }, @@ -77,12 +77,12 @@ export const BUILD_ALL_STEPS = [ { label: "copy-hook-metadata", kind: "node", - args: ["--experimental-strip-types", "scripts/copy-hook-metadata.ts"], + args: ["--import", "tsx", "scripts/copy-hook-metadata.ts"], }, { label: "copy-export-html-templates", kind: "node", - args: ["--experimental-strip-types", "scripts/copy-export-html-templates.ts"], + args: ["--import", "tsx", "scripts/copy-export-html-templates.ts"], cache: { inputs: [ "scripts/copy-export-html-templates.ts", @@ -105,17 +105,17 @@ export const BUILD_ALL_STEPS = [ { label: "write-build-info", kind: "node", - args: ["--experimental-strip-types", "scripts/write-build-info.ts"], + args: ["--import", "tsx", "scripts/write-build-info.ts"], }, { label: "write-cli-startup-metadata", kind: "node", - args: ["--experimental-strip-types", "scripts/write-cli-startup-metadata.ts"], + args: ["--import", "tsx", "scripts/write-cli-startup-metadata.ts"], }, { label: "write-cli-compat", kind: "node", - args: ["--experimental-strip-types", "scripts/write-cli-compat.ts"], + args: ["--import", "tsx", "scripts/write-cli-compat.ts"], }, ]; diff --git a/test/package-scripts.test.ts b/test/package-scripts.test.ts index 7373eff667e..2fe0d212a00 100644 --- a/test/package-scripts.test.ts +++ b/test/package-scripts.test.ts @@ -119,6 +119,17 @@ describe("package scripts", () => { expect(directNodeEnvScripts).toEqual([]); }); + it.each([ + { scriptName: "build:docker", expectedCount: 5 }, + { scriptName: "build:plugin-sdk:strict-smoke", expectedCount: 1 }, + { scriptName: "build:strict-smoke", expectedCount: 1 }, + ])("runs TypeScript steps in $scriptName through tsx", ({ scriptName, expectedCount }) => { + const script = readPackageJson().scripts[scriptName]; + + expect(script).not.toContain("--experimental-strip-types"); + expect(script.match(/node --import tsx scripts\/[^\s]+\.ts/gu)).toHaveLength(expectedCount); + }); + it("enables live cache validation in the package script", () => { expect(readPackageJson().scripts["test:live:cache"]).toBe( "node scripts/run-with-env.mjs OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 -- node --import tsx scripts/check-live-cache.ts", @@ -133,7 +144,7 @@ describe("package scripts", () => { it("runs runtime postbuild before plugin SDK strict export checks", () => { expect(readPackageJson().scripts["build:plugin-sdk:strict-smoke"]).toBe( - "node scripts/tsdown-build.mjs && node scripts/runtime-postbuild.mjs && node scripts/run-with-env.mjs OPENCLAW_PLUGIN_SDK_CANONICAL_DTS=1 -- node --experimental-strip-types scripts/write-plugin-sdk-entry-dts.ts && node scripts/check-plugin-sdk-exports.mjs", + "node scripts/tsdown-build.mjs && node scripts/runtime-postbuild.mjs && node scripts/run-with-env.mjs OPENCLAW_PLUGIN_SDK_CANONICAL_DTS=1 -- node --import tsx scripts/write-plugin-sdk-entry-dts.ts && node scripts/check-plugin-sdk-exports.mjs", ); }); diff --git a/test/scripts/build-all.test.ts b/test/scripts/build-all.test.ts index 685c746ee59..2c45e54be15 100644 --- a/test/scripts/build-all.test.ts +++ b/test/scripts/build-all.test.ts @@ -116,6 +116,55 @@ describe("resolveBuildAllStep", () => { }); }); + it.each([ + { + label: "write-plugin-sdk-entry-dts", + scriptPath: "scripts/write-plugin-sdk-entry-dts.ts", + expectedEnv: { FOO: "bar", OPENCLAW_PLUGIN_SDK_CANONICAL_DTS: "1" }, + }, + { + label: "copy-hook-metadata", + scriptPath: "scripts/copy-hook-metadata.ts", + expectedEnv: { FOO: "bar" }, + }, + { + label: "copy-export-html-templates", + scriptPath: "scripts/copy-export-html-templates.ts", + expectedEnv: { FOO: "bar" }, + }, + { + label: "write-build-info", + scriptPath: "scripts/write-build-info.ts", + expectedEnv: { FOO: "bar" }, + }, + { + label: "write-cli-startup-metadata", + scriptPath: "scripts/write-cli-startup-metadata.ts", + expectedEnv: { FOO: "bar" }, + }, + { + label: "write-cli-compat", + scriptPath: "scripts/write-cli-compat.ts", + expectedEnv: { FOO: "bar" }, + }, + ])("runs the $label TypeScript step through tsx", ({ label, scriptPath, expectedEnv }) => { + const step = getBuildAllStep(label); + + const result = resolveBuildAllStep(step, { + nodeExecPath: "/custom/node", + env: { FOO: "bar" }, + }); + + expect(result).toEqual({ + command: "/custom/node", + args: ["--import", "tsx", scriptPath], + options: { + stdio: "inherit", + env: expectedEnv, + }, + }); + }); + it("can route pnpm script steps through direct node entrypoints", () => { const step = getBuildAllStep("plugins:assets:build");