@githolon/runtime 0.112.7 → 0.112.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/RUNTIME-SOURCES.sha256 +22 -19
- package/dist/nomos-native-runtime.js +330 -106
- package/dist/nomos-runner-web.js +145 -0
- package/dist/nomos-runner-worker.js +36411 -0
- package/dist/nomos-runner.js +547 -230
- package/package.json +4 -2
- package/runner/README.md +2 -1
- package/runner/build.ts +36 -3
- package/runner/node-entry.mjs +437 -187
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(() => {
|
|
3
|
+
// ../../platform-shells/browser/worker_page_entry.ts
|
|
4
|
+
var worker;
|
|
5
|
+
var booting;
|
|
6
|
+
var bootResolve;
|
|
7
|
+
var bootReject;
|
|
8
|
+
var nextId = 0;
|
|
9
|
+
var lastSnapshot;
|
|
10
|
+
var closing;
|
|
11
|
+
var closeResolve;
|
|
12
|
+
var closeReject;
|
|
13
|
+
var pending = /* @__PURE__ */ new Map();
|
|
14
|
+
var send = (message) => worker.postMessage(message);
|
|
15
|
+
var fail = (error) => {
|
|
16
|
+
bootReject?.(error);
|
|
17
|
+
bootResolve = void 0;
|
|
18
|
+
bootReject = void 0;
|
|
19
|
+
booting = void 0;
|
|
20
|
+
for (const waiting of pending.values()) waiting.reject(error);
|
|
21
|
+
pending.clear();
|
|
22
|
+
closeReject?.(error);
|
|
23
|
+
closeResolve = void 0;
|
|
24
|
+
closeReject = void 0;
|
|
25
|
+
closing = void 0;
|
|
26
|
+
worker?.terminate();
|
|
27
|
+
worker = void 0;
|
|
28
|
+
};
|
|
29
|
+
var receive = (message) => {
|
|
30
|
+
switch (message.kind) {
|
|
31
|
+
case "boot-progress":
|
|
32
|
+
console.debug("[nomos-peer-boot]", message.stage);
|
|
33
|
+
break;
|
|
34
|
+
case "custody-perf":
|
|
35
|
+
console.debug("[nomos-custody-perf]", JSON.stringify(message.timing));
|
|
36
|
+
break;
|
|
37
|
+
case "booted":
|
|
38
|
+
bootResolve?.();
|
|
39
|
+
bootResolve = void 0;
|
|
40
|
+
bootReject = void 0;
|
|
41
|
+
break;
|
|
42
|
+
case "boot-failed":
|
|
43
|
+
fail(new Error(message.error));
|
|
44
|
+
break;
|
|
45
|
+
case "disposed":
|
|
46
|
+
if (message.error) closeReject?.(new Error(message.error));
|
|
47
|
+
else closeResolve?.();
|
|
48
|
+
closeResolve = void 0;
|
|
49
|
+
closeReject = void 0;
|
|
50
|
+
closing = void 0;
|
|
51
|
+
worker?.terminate();
|
|
52
|
+
worker = void 0;
|
|
53
|
+
booting = void 0;
|
|
54
|
+
lastSnapshot = void 0;
|
|
55
|
+
break;
|
|
56
|
+
case "invoked": {
|
|
57
|
+
const waiting = pending.get(message.id);
|
|
58
|
+
if (!waiting) break;
|
|
59
|
+
pending.delete(message.id);
|
|
60
|
+
if (message.error) waiting.reject(new Error(message.error));
|
|
61
|
+
else if (message.frame !== void 0) waiting.resolve(message.frame);
|
|
62
|
+
else waiting.reject(new Error("Nomos peer returned no Runtime v2 frame"));
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case "effect":
|
|
66
|
+
void (async () => {
|
|
67
|
+
try {
|
|
68
|
+
if (!window.__nomosPerformEffect) throw new Error("The browser host cannot perform background effects. Update the application and reload.");
|
|
69
|
+
const receipt = await window.__nomosPerformEffect(message.pending);
|
|
70
|
+
send({ kind: "effect-receipt", id: message.id, receipt });
|
|
71
|
+
} catch (error) {
|
|
72
|
+
if (worker) send({ kind: "effect-receipt", id: message.id, error: error instanceof Error ? error.message : String(error) });
|
|
73
|
+
}
|
|
74
|
+
})();
|
|
75
|
+
break;
|
|
76
|
+
case "event":
|
|
77
|
+
window.__nomosOnMessage?.(`runtime-v2-event:${message.frame}`);
|
|
78
|
+
break;
|
|
79
|
+
case "kernel-work":
|
|
80
|
+
if (message.snapshot) lastSnapshot = message.snapshot;
|
|
81
|
+
try {
|
|
82
|
+
window.__nomosKernelWorkChanged?.(message.active);
|
|
83
|
+
} catch {
|
|
84
|
+
}
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
window.__nomosBootRuntime = (base) => {
|
|
89
|
+
if (closing) return closing.then(() => window.__nomosBootRuntime(base));
|
|
90
|
+
if (worker && !bootResolve) return booting ?? Promise.resolve();
|
|
91
|
+
if (booting) return booting;
|
|
92
|
+
const url = window.__nomosWorkerUrl;
|
|
93
|
+
if (!url) return Promise.reject(new Error("Nomos Web Worker URL is not configured"));
|
|
94
|
+
try {
|
|
95
|
+
console.debug("[nomos-peer-boot]", "starting worker", url);
|
|
96
|
+
worker = new Worker(url);
|
|
97
|
+
worker.onmessage = (event) => receive(event.data);
|
|
98
|
+
worker.onerror = (event) => {
|
|
99
|
+
console.error("[nomos-peer-boot]", "worker error", event.message);
|
|
100
|
+
fail(new Error(`Nomos Web Worker failed: ${event.message}`));
|
|
101
|
+
};
|
|
102
|
+
worker.onmessageerror = () => fail(new Error("Nomos Web Worker sent an unreadable message"));
|
|
103
|
+
booting = new Promise((resolve, reject) => {
|
|
104
|
+
bootResolve = resolve;
|
|
105
|
+
bootReject = reject;
|
|
106
|
+
});
|
|
107
|
+
send({ kind: "boot", base });
|
|
108
|
+
} catch (error) {
|
|
109
|
+
fail(error instanceof Error ? error : new Error(String(error)));
|
|
110
|
+
return Promise.reject(error);
|
|
111
|
+
}
|
|
112
|
+
return booting;
|
|
113
|
+
};
|
|
114
|
+
window.__nomosInvokeFrame = (frameBase64) => {
|
|
115
|
+
if (!worker || bootResolve) return Promise.reject(new Error("Nomos peer runtime is not booted"));
|
|
116
|
+
const id = ++nextId;
|
|
117
|
+
return new Promise((resolve, reject) => {
|
|
118
|
+
pending.set(id, { resolve, reject });
|
|
119
|
+
send({ kind: "invoke", id, frame: frameBase64 });
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
window.__nomosKernelWorkSnapshot = () => lastSnapshot;
|
|
123
|
+
window.__nomosWorkerHosted = true;
|
|
124
|
+
window.__nomosDisposeRuntime = () => {
|
|
125
|
+
if (!worker) return Promise.resolve();
|
|
126
|
+
if (closing) return closing;
|
|
127
|
+
bootReject?.(new Error("Nomos peer runtime disposed during boot"));
|
|
128
|
+
bootResolve = void 0;
|
|
129
|
+
bootReject = void 0;
|
|
130
|
+
for (const waiting of pending.values()) waiting.reject(new Error("Nomos peer runtime disposed"));
|
|
131
|
+
pending.clear();
|
|
132
|
+
closing = new Promise((resolve, reject) => {
|
|
133
|
+
closeResolve = resolve;
|
|
134
|
+
closeReject = reject;
|
|
135
|
+
});
|
|
136
|
+
send({ kind: "dispose" });
|
|
137
|
+
return closing;
|
|
138
|
+
};
|
|
139
|
+
window.NomosRunner = {
|
|
140
|
+
version: 2,
|
|
141
|
+
dispose: () => {
|
|
142
|
+
void window.__nomosDisposeRuntime?.();
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
})();
|