diff --git a/scripts/build-desktop-artifact.test.ts b/scripts/build-desktop-artifact.test.ts index 0d0f76bfbe8a..cb0ed61dce21 100644 --- a/scripts/build-desktop-artifact.test.ts +++ b/scripts/build-desktop-artifact.test.ts @@ -16,6 +16,7 @@ import { resolveElectronFuses, resolveMockUpdateServerPort, resolveMockUpdateServerUrl, + resolveStandaloneRuntimeDependencies, resolveWindowsNsisConfig, } from "./build-desktop-artifact.ts"; import { BRAND_ASSET_PATHS } from "./lib/brand-assets.ts"; @@ -32,6 +33,25 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => { assert.equal(resolveDesktopProductName("0.0.17", "dev"), "T3 Code (Dev)"); }); + it("excludes bundled workspace packages from standalone runtime dependencies", () => { + assert.deepStrictEqual( + resolveStandaloneRuntimeDependencies( + { + "@t3tools/contracts": "workspace:*", + "@effect/platform-node": "catalog:", + electron: "40.6.0", + open: "^10.1.0", + }, + { "@effect/platform-node": "4.0.0-beta.78" }, + "apps/desktop", + ), + { + "@effect/platform-node": "4.0.0-beta.78", + open: "^10.1.0", + }, + ); + }); + it("keeps RunAsNode enabled and hardens fuses, gating asar integrity to mac/win", () => { assert.deepStrictEqual(resolveElectronFuses("mac"), { runAsNode: true, diff --git a/scripts/build-desktop-artifact.ts b/scripts/build-desktop-artifact.ts index 063f13842b23..c91d15dc5f2b 100644 --- a/scripts/build-desktop-artifact.ts +++ b/scripts/build-desktop-artifact.ts @@ -507,19 +507,23 @@ function validateBundledClientAssets(clientDir: string) { }); } -function resolveDesktopRuntimeDependencies( +export function resolveStandaloneRuntimeDependencies( dependencies: Record | undefined, catalog: Record, + label: string, ): Record { if (!dependencies || Object.keys(dependencies).length === 0) { return {}; } const runtimeDependencies = Object.fromEntries( - Object.entries(dependencies).filter(([dependencyName]) => dependencyName !== "electron"), + Object.entries(dependencies).filter( + ([dependencyName, dependencySpec]) => + dependencyName !== "electron" && !dependencySpec.startsWith("workspace:"), + ), ); - return resolveCatalogDependencies(runtimeDependencies, catalog, "apps/desktop"); + return resolveCatalogDependencies(runtimeDependencies, catalog, label); } function resolveGitHubPublishConfig(updateChannel: "latest" | "nightly"): @@ -859,7 +863,11 @@ const buildDesktopArtifact = Effect.fn("buildDesktopArtifact")(function* ( const resolvedServerDependencies = yield* Effect.try({ try: () => - resolveCatalogDependencies(serverDependencies, workspaceConfig.catalog, "apps/server"), + resolveStandaloneRuntimeDependencies( + serverDependencies, + workspaceConfig.catalog, + "apps/server", + ), catch: (cause) => new BuildScriptError({ message: "Could not resolve production dependencies from apps/server/package.json.", @@ -868,7 +876,11 @@ const buildDesktopArtifact = Effect.fn("buildDesktopArtifact")(function* ( }); const resolvedDesktopRuntimeDependencies = yield* Effect.try({ try: () => - resolveDesktopRuntimeDependencies(desktopPackageJson.dependencies, workspaceConfig.catalog), + resolveStandaloneRuntimeDependencies( + desktopPackageJson.dependencies, + workspaceConfig.catalog, + "apps/desktop", + ), catch: (cause) => new BuildScriptError({ message: "Could not resolve desktop runtime dependencies from apps/desktop/package.json.",