Build checked component artifacts and shared React session SDK (WI-09)

This commit is contained in:
Timothy J. Aveni
2026-09-21 16:01:48 -07:00
parent 24073d7f2a
commit 2cf53280e4
9 changed files with 104 additions and 5 deletions
+13 -3
View File
@@ -45,6 +45,11 @@ assert.ok(data.ok && data.resource.kind === "interface", JSON.stringify(data.dia
assert.ok(constructors.ok && constructors.resource.kind === "interface", JSON.stringify(constructors.diagnostics));
const dataInterface = data.resource.revision,
factoriesInterface = constructors.resource.revision;
const ui = compileCapabilityResourceSource(
'import interface Data; package UI id "package:ui" revision "package:ui@1" { component Card id "component:card" subject Data runtime react; }',
{ source, environment: { interfaces: new Map([["Data", dataInterface]]), interfaceClosure: [dataInterface] } },
);
assert.ok(ui.ok && ui.resource.kind === "package", JSON.stringify(ui.diagnostics));
for (const variant of ["base", "added", "gateway", "gateway-next", "session"]) {
const session = variant === "session",
gateway = session || variant.startsWith("gateway"),
@@ -57,7 +62,8 @@ package Owner id "package:owner" revision "package:owner@1" {
${gateway ? 'function create id "create" : unit -> atom-ref<Entry> execution transaction targets [server] requires { creation entry id "entry:birth" : Entry input unit; };' : ""}
${
session
? `function createOne id "create-one" : string -> atom-ref<Entry> execution transaction targets [browser, server] requires { creation entry id "one:birth" : Entry input unit; };
? `component Editor id "component:owner-editor" subject Data runtime react;
function createOne id "create-one" : string -> atom-ref<Entry> execution transaction targets [browser, server] requires { creation entry id "one:birth" : Entry input unit; };
function createTwo id "create-two" : unit -> atom-ref<Independent> execution transaction targets [browser, server] requires { creation entry id "two:birth" : Independent input unit; };
operation revise id "revise" : record {body:change<string>; notes:change<string>; reject:bool;} -> unit mode call execution transaction targets [browser, server] receiver any requires {
state body id "revise:body" : string [edit]; state notes id "revise:notes" : string [edit];
@@ -98,6 +104,7 @@ package Owner id "package:owner" revision "package:owner@1" {
const result = compileCapabilitySource(
`workspace Managed id "workspace:managed-process" revision "workspace:managed-process@${variant}" commit "${commit}" {
import package Owner;
${session ? "import package UI;" : ""}
${
session
? `import interface Data; import interface Factories;
@@ -118,8 +125,11 @@ package Owner id "package:owner" revision "package:owner@1" {
}`,
"workspace.qx",
{
packages: new Map([["Owner", pkg.resource.revision]]),
packageClosure: [pkg.resource.revision],
packages: new Map([
["Owner", pkg.resource.revision],
...(session ? [["UI", ui.resource.revision] as const] : []),
]),
packageClosure: [pkg.resource.revision, ...(session ? [ui.resource.revision] : [])],
...(gateway
? {
interfaces: new Map([