From b0d9453a51e019e45f5fd2e1ea8428e11dae4043 Mon Sep 17 00:00:00 2001 From: "Timothy J. Aveni" Date: Mon, 28 Sep 2026 20:29:21 -0700 Subject: [PATCH] Make local graph execution optional across composed packages --- build-artifacts.mjs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/build-artifacts.mjs b/build-artifacts.mjs index 8bf757f..996ba36 100644 --- a/build-artifacts.mjs +++ b/build-artifacts.mjs @@ -55,6 +55,7 @@ const targets = portable ? [...new Set([...portable.targets, "server"])] : []; const builds = targets.map((target) => ({ target, mode: target, settings: portable })); if (config.remote) builds.push({ target: "server", mode: "remote", settings: config.remote }); for (const { target, mode, settings } of builds) { + const executionTarget = target === "browser" ? "target:org.quixos.execution.javascript@1" : "server"; if (!["browser", "server"].includes(target)) throw Error(`Unsupported JS build target ${target}`); const work = path.resolve(`work-${mode}`); await fs.cp(config.source, work, { recursive: true, dereference: false }); @@ -86,11 +87,19 @@ for (const { target, mode, settings } of builds) { const source = mode === "remote" ? compiler.generateRemoteTypeScriptBindings(plan.definition.bindingSchema, pkg.revision) - : compiler.generatePortableTypeScriptBindings(plan.definition.bindingSchema, pkg.revision, { target }); + : compiler.generatePortableTypeScriptBindings(plan.definition.bindingSchema, pkg.revision, { + target: executionTarget, + }); await fs.mkdir(path.dirname(path.join(work, bindingPath)), { recursive: true }); await fs.writeFile(path.join(work, bindingPath), source); generated.set(mode, { file: path.join(work, bindingPath), source }); - await fs.writeFile(path.join(output, "share/quixos/generated", `${mode}.ts`), source); + await fs.writeFile( + path.join( + output, + mode === "remote" ? "share/quixos/generated/remote.ts" : compiler.generatedBindingPath(executionTarget), + ), + source, + ); const entry = relative(settings.entries?.[target] ?? settings.entry); execFileSync( config.node, @@ -152,12 +161,12 @@ for (const { target, mode, settings } of builds) { .filter((e) => mode === "remote" ? e.execution.kind === "remote" - : e.execution.kind !== "remote" && e.execution.targets.includes(target), + : e.execution.kind !== "remote" && e.execution.targets.includes(executionTarget), ) .map((e) => e.id); const body = { id: `${mode}-module`, - target, + target: executionTarget, compatibility: "quixos-js-module-v1", path: bundlePath, ports: "quixos-transaction-ports-v1",