Make local graph execution optional across composed packages
This commit is contained in:
+13
-4
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user