@almadar/shell-web 0.1.0 → 1.0.0
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/{ArbitraryClassCompiler-Mzabq-UB.d.ts → ArbitraryClassCompiler-CO_iASBn.d.ts} +99 -4
- package/dist/AvlGlyph-EPJKFEO3.js +6 -0
- package/dist/AvlStateMachine-RKZIKNGC.js +9 -0
- package/dist/AvlTransitionDetail-63SD6GZF.js +11 -0
- package/dist/AvlTransitionExplainer-ZBTLOM3T.js +12 -0
- package/dist/BehaviorView-YS5G4GNB.js +11 -0
- package/dist/{Canvas3DHost-_Y-5uLM_.d.ts → Canvas3DHost-BkZQB5l2.d.ts} +1 -1
- package/dist/{EventBusProvider-CVwjkV_2.d.ts → EventBusProvider-BFFHfN4O.d.ts} +12 -0
- package/dist/FlowCanvas-AUMTWMNG.js +26 -0
- package/dist/{GameAudioProvider-Cm9BnvmP.d.ts → GameAudioProvider-ceM_n0ey.d.ts} +4 -7
- package/dist/KernelEngineContext-CcxGYtlr.d.ts +33 -0
- package/dist/LayersPanel-M2LHWUFF.js +6 -0
- package/dist/ModuleCard-QHDGK5XK.js +7 -0
- package/dist/OrbInspector-QCPEPUPH.js +26 -0
- package/dist/{Select-mDZIwNqN.d.ts → Select-B-iDdnvE.d.ts} +16 -30
- package/dist/ServerBridge-Bqsj-lOU.d.ts +124 -0
- package/dist/UISlotRenderer-C7WWOK43.js +26 -0
- package/dist/auth/browser/index.js +1 -0
- package/dist/auth/react/index.d.ts +8 -1
- package/dist/auth/react/index.js +40 -2
- package/dist/avl/index.d.ts +89 -79
- package/dist/avl/index.js +38 -38
- package/dist/{avl-3d-context-BIRKWpaL.d.ts → avl-3d-context-BycmO6tG.d.ts} +9 -12
- package/dist/{chunk-GKIFONTE.js → chunk-3S54FWRC.js} +2 -2
- package/dist/{chunk-DYEKAA4L.js → chunk-3VZ36ZKO.js} +240 -252
- package/dist/{chunk-PC7K4SK7.js → chunk-4T3P43NS.js} +18 -269
- package/dist/{chunk-MBQAMMSE.js → chunk-4YXBKHHM.js} +269 -658
- package/dist/{chunk-YDNJLLG6.js → chunk-57DC34LY.js} +19 -10
- package/dist/{chunk-SJGJJKBY.js → chunk-AB3X7QTE.js} +6 -3
- package/dist/{chunk-AILY3XPS.js → chunk-AE7VCQB6.js} +5 -6
- package/dist/{chunk-FAJDTHWC.js → chunk-AGXD77SL.js} +2 -2
- package/dist/chunk-AU7O65OX.js +66 -0
- package/dist/{chunk-L677XGY3.js → chunk-CPLN6NBQ.js} +5 -5
- package/dist/{chunk-DZ42OJQC.js → chunk-DZBQA2OW.js} +1 -1
- package/dist/{chunk-2PY54Z44.js → chunk-E6KA4J6N.js} +5 -5
- package/dist/{chunk-DJ433ET5.js → chunk-GFXCPUMX.js} +11 -4
- package/dist/{chunk-FP3WIKTC.js → chunk-HH5KSMH5.js} +9 -1
- package/dist/{chunk-U6QRZASX.js → chunk-ILQXJ2AR.js} +1 -1
- package/dist/{chunk-B4BU77LT.js → chunk-ILZ7ORX7.js} +1 -1
- package/dist/{chunk-SGM3FASH.js → chunk-K4MOPSEL.js} +14 -12
- package/dist/{chunk-GYTPOFVC.js → chunk-LHP2TK7O.js} +7402 -6970
- package/dist/{chunk-VFF5OO47.js → chunk-PCR37T3U.js} +15 -38
- package/dist/{chunk-R5O5AUPI.js → chunk-PRXQGGCO.js} +93 -86
- package/dist/{chunk-42FY4RYA.js → chunk-REXYVBUO.js} +2 -2
- package/dist/{chunk-DLZF4PVE.js → chunk-ROICKAU7.js} +3 -3
- package/dist/{chunk-KVQS4GXU.js → chunk-SP5CDJ6K.js} +18 -8
- package/dist/{chunk-P4LNHAFI.js → chunk-TUPZWTRE.js} +2 -2
- package/dist/chunk-TXAUOLWZ.js +490 -0
- package/dist/{chunk-EQAMU2ZC.js → chunk-UTDC2NEA.js} +1 -1
- package/dist/{chunk-73SRAB4P.js → chunk-UU57VNS2.js} +2 -2
- package/dist/{chunk-DFNZUYX4.js → chunk-UXLE3IPR.js} +70 -27
- package/dist/{chunk-L2DEKY4J.js → chunk-VO2TTLS5.js} +3 -6
- package/dist/{chunk-TESBIVUA.js → chunk-X3DMMX27.js} +2 -2
- package/dist/components/index.d.ts +331 -125
- package/dist/components/index.js +28 -28
- package/dist/context/index.d.ts +2 -3
- package/dist/context/index.js +4 -3
- package/dist/core.d.ts +93 -17
- package/dist/core.js +2 -1
- package/dist/design-classes/index.cjs +3 -1
- package/dist/design-classes/index.js +3 -1
- package/dist/hooks/index.d.ts +40 -5
- package/dist/hooks/index.js +5 -4
- package/dist/index.d.ts +36 -114
- package/dist/index.js +174 -34
- package/dist/kernel-client-TZKGHJRY.js +516 -0
- package/dist/kernel-wire-wNdAPfhJ.d.ts +88 -0
- package/dist/lib/index.d.ts +3 -3
- package/dist/lib/index.js +5 -4
- package/dist/{paintDispatch-ChW5mVuK.d.ts → paintDispatch-CuJLsr9Y.d.ts} +5 -15
- package/dist/{prism-AIWGN2X5.js → prism-X5YWKXO5.js} +5 -3
- package/dist/providers/index.d.ts +42 -27
- package/dist/providers/index.js +22 -23
- package/dist/renderer/index.d.ts +0 -2
- package/dist/renderer/index.js +1 -0
- package/dist/runtime/index.d.ts +52 -253
- package/dist/runtime/index.js +21 -24
- package/dist/ssr/index.cjs +2643 -535
- package/dist/ssr/index.d.cts +0 -23
- package/dist/ssr/index.d.ts +0 -23
- package/dist/ssr/index.js +2639 -535
- package/dist/storage/browser/index.js +1 -0
- package/dist/test-support.d.ts +15 -8
- package/dist/test-support.js +91 -24
- package/dist/three/index.d.ts +6 -6
- package/dist/three/index.js +49 -37
- package/dist/{verificationRegistry-CabxhfTv.d.ts → verificationRegistry-CVrcxG1s.d.ts} +3 -3
- package/package.json +13 -9
- package/src/core/lib/band-shapes.json +7 -0
- package/src/core/locales/ar.json +18 -5
- package/src/core/locales/en.json +18 -5
- package/src/core/locales/sl.json +18 -5
- package/tailwind-preset.cjs +30 -1
- package/dist/AvlGlyph-JKJOAH23.js +0 -6
- package/dist/AvlStateMachine-PI4YGREK.js +0 -8
- package/dist/AvlTransitionDetail-ZH7V24UG.js +0 -12
- package/dist/AvlTransitionExplainer-ZSRT7L6Y.js +0 -13
- package/dist/BehaviorValueFrame-6RUJXT4A.js +0 -29
- package/dist/BehaviorValueFrame-SSEMEBTG.css +0 -1756
- package/dist/BehaviorView-RFEE5J6E.js +0 -10
- package/dist/FlowCanvas-STDC4OWK.js +0 -27
- package/dist/KernelEngineContext-BOCQoFwk.d.ts +0 -43
- package/dist/LayersPanel-BBQ54IVG.js +0 -7
- package/dist/ModuleCard-3TT2X7IW.js +0 -7
- package/dist/OrbInspector-K6T6O7GI.js +0 -27
- package/dist/ServerBridge-Cm1On51b.d.ts +0 -233
- package/dist/TraitValueFrame-2PJGLLVI.js +0 -28
- package/dist/TraitValueFrame-4G3KOUBR.css +0 -1756
- package/dist/UISlotRenderer-JKFSX24W.js +0 -27
- package/dist/UserContext-DqWeZkUZ.d.ts +0 -100
- package/dist/chunk-2QOH2HWM.js +0 -95
- package/dist/chunk-6P3MWXYE.js +0 -440
- package/dist/chunk-FIW6WN23.js +0 -508
- package/dist/chunk-GAR5TQ5B.js +0 -199
- package/dist/chunk-ZO6MXAS3.js +0 -69
- package/dist/kernel-client-ZH4PSMCN.js +0 -367
- package/dist/kernel-wire-B4S8pnP3.d.ts +0 -65
- package/dist/useKeyboardRouter-Dsq553Ur.d.ts +0 -42
|
@@ -3,24 +3,13 @@ import { NativeMemoryPersistenceAdapter } from '@almadar/shell-runtime/persisten
|
|
|
3
3
|
import * as local_store_transport_star from '@almadar/shell-runtime/runtime/evaluation/local-store-transport';
|
|
4
4
|
import { openLocalKernel as openLocalKernel$1 } from '@almadar/shell-runtime/runtime/evaluation/local-store-transport';
|
|
5
5
|
import { readPageFacts } from '@almadar/shell-browser/page-facts';
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { instancesForLocale, orbitalInlineEntities, storesRowsInBrowser, isRoutePage, tickEventKey, isJsonObject } from '@almadar/core';
|
|
7
|
+
import { createLogger, isLogLevelEnabled } from '@almadar/logger';
|
|
8
|
+
import { HostAskError, consentFromRedirect, performHostAnswer, hostAskReturn } from '@almadar/shell-runtime/kernel/host';
|
|
9
9
|
import { dispatchDeclaredInput } from '@almadar/shell-runtime/client/declared-input-dispatch';
|
|
10
10
|
import { IndexedDbPersistence } from '@almadar/shell-browser/storage';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import * as TickScheduler_star from '@almadar/shell-runtime/runtime/time/TickScheduler';
|
|
14
|
-
import { createLogger, isLogLevelEnabled } from '@almadar/logger';
|
|
15
|
-
import * as cron_star from '@almadar/shell-runtime/runtime/time/cron';
|
|
16
|
-
import * as duration_star from '@almadar/shell-runtime/runtime/time/duration';
|
|
17
|
-
import * as composition_star from '@almadar/shell-runtime/runtime/effects/composition/index';
|
|
18
|
-
import * as types_star from '@almadar/shell-runtime/runtime/types';
|
|
19
|
-
import * as routing_star from '@almadar/shell-runtime/runtime/events/identity/routing';
|
|
20
|
-
import * as listen_targets_star from '@almadar/shell-runtime/runtime/traits/listen-targets';
|
|
21
|
-
import * as OrbitalTraitParsing_star from '@almadar/shell-runtime/runtime/traits/OrbitalTraitParsing';
|
|
22
|
-
import * as mockStoreSeed_star from '@almadar/shell-runtime/runtime/entities/mockStoreSeed';
|
|
23
|
-
import * as residence_transport_star from '@almadar/shell-runtime/runtime/evaluation/residence-transport';
|
|
11
|
+
export { eventRouteKey } from '@almadar/shell-runtime/runtime/events/identity/routing';
|
|
12
|
+
export { createResidenceTransport } from '@almadar/shell-runtime/runtime/evaluation/residence-transport';
|
|
24
13
|
|
|
25
14
|
function hasMemoryStore(kernel) {
|
|
26
15
|
return "MemoryStore" in kernel;
|
|
@@ -36,217 +25,271 @@ __export(local_store_transport_exports, {
|
|
|
36
25
|
openLocalKernel: () => openLocalKernel
|
|
37
26
|
});
|
|
38
27
|
__reExport(local_store_transport_exports, local_store_transport_star);
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
var POLL_MS = 250;
|
|
29
|
+
function consentByPopup(env) {
|
|
30
|
+
return async (request) => {
|
|
31
|
+
const popup = env.open(request.authorizeUrl);
|
|
32
|
+
if (popup === null) throw new HostAskError("unavailable", "the browser blocked the consent window");
|
|
33
|
+
for (; ; ) {
|
|
34
|
+
if (popup.closed) throw new HostAskError("cancelled", "the viewer closed the consent window");
|
|
35
|
+
let href;
|
|
36
|
+
try {
|
|
37
|
+
href = popup.location.href;
|
|
38
|
+
} catch {
|
|
39
|
+
href = void 0;
|
|
40
|
+
}
|
|
41
|
+
if (href !== void 0 && href !== "about:blank" && new URL(href).origin === env.origin) {
|
|
42
|
+
popup.close();
|
|
43
|
+
return consentFromRedirect(href);
|
|
44
|
+
}
|
|
45
|
+
await env.wait(POLL_MS);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function browserConsentEnv(win) {
|
|
50
|
+
return {
|
|
51
|
+
origin: win.location.origin,
|
|
52
|
+
open: (url) => win.open(url, "almadar-consent", "popup,width=520,height=720"),
|
|
53
|
+
wait: (ms) => new Promise((resolve) => win.setTimeout(resolve, ms))
|
|
54
|
+
};
|
|
41
55
|
}
|
|
42
56
|
|
|
43
|
-
// src/
|
|
44
|
-
var
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
opened ??= openLocalKernel({
|
|
54
|
-
kernel: seeding.kernel,
|
|
55
|
-
language: seeding.language,
|
|
56
|
-
schema: program,
|
|
57
|
-
persistence: nativeMemoryPersistence(seeding.kernel)
|
|
58
|
-
});
|
|
59
|
-
return opened.evaluate(orbital, request, scope);
|
|
60
|
-
}
|
|
57
|
+
// src/lib/host-actions.ts
|
|
58
|
+
var log = createLogger("almadar:ui:host-actions");
|
|
59
|
+
var audioHost;
|
|
60
|
+
var signOutHost;
|
|
61
|
+
var signInHost;
|
|
62
|
+
var consentHost;
|
|
63
|
+
function registerHostAudio(host) {
|
|
64
|
+
audioHost = host;
|
|
65
|
+
return () => {
|
|
66
|
+
if (audioHost === host) audioHost = void 0;
|
|
61
67
|
};
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
}
|
|
69
|
+
function registerHostSignOut(host) {
|
|
70
|
+
signOutHost = host;
|
|
71
|
+
return () => {
|
|
72
|
+
if (signOutHost === host) signOutHost = void 0;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function registerHostSignIn(host) {
|
|
76
|
+
signInHost = host;
|
|
77
|
+
return () => {
|
|
78
|
+
if (signInHost === host) signInHost = void 0;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function registerHostConsent(host) {
|
|
82
|
+
consentHost = host;
|
|
83
|
+
return () => {
|
|
84
|
+
if (consentHost === host) consentHost = void 0;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
var webHostActions = {
|
|
88
|
+
get audio() {
|
|
89
|
+
return audioHost;
|
|
90
|
+
},
|
|
91
|
+
get signOut() {
|
|
92
|
+
return signOutHost;
|
|
93
|
+
},
|
|
94
|
+
get signIn() {
|
|
95
|
+
return signInHost;
|
|
96
|
+
},
|
|
97
|
+
get consent() {
|
|
98
|
+
return consentHost ?? (typeof window === "undefined" ? void 0 : consentByPopup(browserConsentEnv(window)));
|
|
66
99
|
}
|
|
100
|
+
};
|
|
101
|
+
var traceStreams = /* @__PURE__ */ new Map();
|
|
102
|
+
function streamTrace(args, completion, dispatch, source) {
|
|
103
|
+
const { key, onMessage, failure, trait } = completion;
|
|
104
|
+
if (key === void 0 || onMessage === void 0) return;
|
|
105
|
+
const refuse = (error) => {
|
|
106
|
+
log.error("trace stream refused", { trait, key, error });
|
|
107
|
+
if (failure !== void 0 && dispatch !== void 0) void dispatch(trait, failure, { error, key, ...completion.entityId !== void 0 ? { entityId: completion.entityId } : {} });
|
|
108
|
+
};
|
|
109
|
+
const options = args[0];
|
|
110
|
+
const named = options !== void 0 && options !== null && isJsonObject(options) ? options["traits"] : void 0;
|
|
111
|
+
const traits = Array.isArray(named) ? named.flatMap((t) => typeof t === "string" ? [t] : []) : [];
|
|
112
|
+
if (traits.length === 0) return refuse("program/live trace: name the traits it observes in `traits`");
|
|
113
|
+
if (source === void 0 || dispatch === void 0) return refuse("program/live trace: this host has no kernel trace to stream");
|
|
114
|
+
if (traceStreams.has(key)) return refuse(`key ${key} already has a stream open`);
|
|
115
|
+
traceStreams.set(key, source(traits, (item) => {
|
|
116
|
+
void dispatch(trait, onMessage, { ...item, key, ...completion.entityId !== void 0 ? { entityId: completion.entityId } : {} }).catch((error) => log.error("trace item return failed", { trait, key, error: error.message }));
|
|
117
|
+
}));
|
|
67
118
|
}
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
119
|
+
function cancelStreams(args) {
|
|
120
|
+
const named = args[0];
|
|
121
|
+
const keys = typeof named === "string" ? [named] : Array.isArray(named) ? named.flatMap((k) => typeof k === "string" ? [k] : []) : [];
|
|
122
|
+
for (const key of keys) {
|
|
123
|
+
traceStreams.get(key)?.();
|
|
124
|
+
traceStreams.delete(key);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function answerHostAsk(op, args, completion, dispatch, trace) {
|
|
128
|
+
if (op === "cancel-call") return cancelStreams(args);
|
|
129
|
+
if (op === "program/live" && completion?.onMessage !== void 0) return streamTrace(args, completion, dispatch, trace);
|
|
130
|
+
const outcome = await performHostAnswer(webHostActions, op, args);
|
|
131
|
+
if ("error" in outcome) log.error("host-ask refused", { op, error: outcome.error, kind: outcome.kind });
|
|
132
|
+
if (completion === void 0) return;
|
|
133
|
+
const returned = hostAskReturn(completion, outcome);
|
|
134
|
+
if (returned === void 0) return;
|
|
135
|
+
if (dispatch === void 0) {
|
|
136
|
+
log.error("host-ask has no dispatch to return its answer to", { op, trait: returned.trait, event: returned.event });
|
|
137
|
+
return;
|
|
75
138
|
}
|
|
139
|
+
await dispatch(returned.trait, returned.event, returned.entityId !== void 0 ? { ...returned.payload, entityId: returned.entityId } : returned.payload);
|
|
76
140
|
}
|
|
77
141
|
|
|
78
|
-
// src/runtime/
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
142
|
+
// src/runtime/evaluation/local-store-transport.ts
|
|
143
|
+
function openLocalKernel(options) {
|
|
144
|
+
return openLocalKernel$1({ ...options, pageFacts: options.pageFacts ?? readPageFacts, hostActions: options.hostActions ?? webHostActions });
|
|
145
|
+
}
|
|
146
|
+
async function persistedMemory(kernel, database, entities, locale) {
|
|
147
|
+
const memory = nativeMemoryPersistence(kernel);
|
|
148
|
+
const firstVisit = (await database.changes()).length === 0;
|
|
149
|
+
for (const entity of entities) {
|
|
150
|
+
if (firstVisit) {
|
|
151
|
+
for (const row of instancesForLocale(entity, locale)) await database.create(entity.name, row);
|
|
152
|
+
}
|
|
153
|
+
for (const row of await database.list(entity.name)) {
|
|
154
|
+
await memory.writeWhere({ kind: "upsert", entityType: entity.name, data: row });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const keep = async (entityType, row) => {
|
|
158
|
+
await database.create(entityType, row);
|
|
159
|
+
};
|
|
160
|
+
const mirror = async (op, outcome) => {
|
|
161
|
+
if (outcome.kind === "created") await keep(op.entityType, outcome.row);
|
|
162
|
+
else if (outcome.kind === "updated") {
|
|
163
|
+
if (op.kind === "rekey") await database.delete(op.entityType, op.id);
|
|
164
|
+
await keep(op.entityType, outcome.row);
|
|
165
|
+
} else if (outcome.kind === "deleted" && op.kind !== "create" && op.kind !== "upsert") await database.delete(op.entityType, op.id);
|
|
166
|
+
};
|
|
167
|
+
return {
|
|
168
|
+
getById: (entityType, id) => memory.getById(entityType, id),
|
|
169
|
+
list: (entityType) => memory.list(entityType),
|
|
170
|
+
queryPage: (entityType, query) => memory.queryPage(entityType, query),
|
|
171
|
+
queryIds: (entityType, query) => memory.queryIds(entityType, query),
|
|
172
|
+
queryCapabilities: (entityType) => memory.queryCapabilities(entityType),
|
|
173
|
+
writeCapabilities: (entityType) => memory.writeCapabilities(entityType),
|
|
174
|
+
bindCollection: (entityType, collection) => memory.bindCollection(entityType, collection),
|
|
175
|
+
async create(entityType, data) {
|
|
176
|
+
const { id } = await memory.create(entityType, data);
|
|
177
|
+
const row = await memory.getById(entityType, id);
|
|
178
|
+
if (row !== null) await keep(entityType, row);
|
|
179
|
+
return { id };
|
|
180
|
+
},
|
|
181
|
+
async update(entityType, id, data) {
|
|
182
|
+
await memory.update(entityType, id, data);
|
|
183
|
+
const row = await memory.getById(entityType, id);
|
|
184
|
+
if (row !== null) await keep(entityType, row);
|
|
185
|
+
},
|
|
186
|
+
async delete(entityType, id) {
|
|
187
|
+
await memory.delete(entityType, id);
|
|
188
|
+
await database.delete(entityType, id);
|
|
189
|
+
},
|
|
190
|
+
async writeWhere(op) {
|
|
191
|
+
const outcome = await memory.writeWhere(op);
|
|
192
|
+
await mirror(op, outcome);
|
|
193
|
+
return outcome;
|
|
194
|
+
},
|
|
195
|
+
async writeBatch(batch) {
|
|
196
|
+
const outcomes = await memory.writeBatch(batch);
|
|
197
|
+
for (const [index, op] of batch.ops.entries()) {
|
|
198
|
+
const outcome = outcomes[index];
|
|
199
|
+
if (outcome !== void 0) await mirror(op, outcome);
|
|
200
|
+
}
|
|
201
|
+
return outcomes;
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
}
|
|
99
205
|
function browserStoreName(appName, locale) {
|
|
100
206
|
return locale !== void 0 ? `almadar:${appName}:${locale}` : `almadar:${appName}`;
|
|
101
207
|
}
|
|
102
|
-
async function openBrowserStore(databaseName, orbitals,
|
|
208
|
+
async function openBrowserStore(databaseName, orbitals, factory) {
|
|
103
209
|
const entities = orbitals.flatMap(orbitalInlineEntities).filter(storesRowsInBrowser);
|
|
104
210
|
if (entities.length === 0) return null;
|
|
105
|
-
|
|
211
|
+
return IndexedDbPersistence.open({
|
|
106
212
|
databaseName,
|
|
107
213
|
entityTypes: entities.map((e) => e.name),
|
|
108
214
|
...factory !== void 0 ? { factory } : {}
|
|
109
215
|
});
|
|
110
|
-
|
|
111
|
-
|
|
216
|
+
}
|
|
217
|
+
function browserEntities(orbitals) {
|
|
218
|
+
return orbitals.flatMap(orbitalInlineEntities).filter(storesRowsInBrowser);
|
|
112
219
|
}
|
|
113
220
|
async function openBrowserStoreTransport(options) {
|
|
114
|
-
const stored = await openBrowserStore(options.databaseName, options.schema.orbitals,
|
|
221
|
+
const stored = await openBrowserStore(options.databaseName, options.schema.orbitals, options.factory);
|
|
115
222
|
if (stored === null && options.callService === void 0) {
|
|
116
223
|
throw new Error(`openBrowserStoreTransport: schema "${options.schema.name}" declares no browser-stored entity`);
|
|
117
224
|
}
|
|
118
225
|
const memory = nativeMemoryPersistence(options.kernel);
|
|
119
|
-
const persistence = (0, local_store_transport_exports.localStorePersistence)(options.schema, stored
|
|
226
|
+
const persistence = (0, local_store_transport_exports.localStorePersistence)(options.schema, stored === null ? memory : await persistedMemory(options.kernel, stored, browserEntities(options.schema.orbitals), options.locale), memory);
|
|
120
227
|
return (0, local_store_transport_exports.createLocalStoreTransport)({
|
|
121
228
|
kernelEngine: openLocalKernel({
|
|
122
229
|
kernel: options.kernel,
|
|
123
|
-
language: options.language,
|
|
124
230
|
schema: options.schema,
|
|
125
231
|
persistence,
|
|
126
232
|
...options.callService !== void 0 ? { callService: options.callService } : {},
|
|
127
|
-
...options.
|
|
128
|
-
...options.
|
|
129
|
-
})
|
|
233
|
+
...options.secretPorts !== void 0 ? { secretPorts: options.secretPorts } : {},
|
|
234
|
+
...options.os !== void 0 ? { os: options.os } : {}
|
|
235
|
+
}),
|
|
236
|
+
...options.locale !== void 0 ? { locale: () => options.locale } : {}
|
|
130
237
|
});
|
|
131
238
|
}
|
|
132
|
-
function openBundledBrowserStore(
|
|
133
|
-
const schema = parseOrbitalSchema(bundled);
|
|
239
|
+
function openBundledBrowserStore(schema, kernel, locale, callService, secretPorts, os) {
|
|
134
240
|
return openBrowserStoreTransport({
|
|
135
241
|
databaseName: browserStoreName(schema.name, locale),
|
|
136
242
|
schema,
|
|
137
|
-
kernel,
|
|
138
|
-
language,
|
|
139
|
-
loadSeedProgram,
|
|
140
243
|
...locale !== void 0 ? { locale } : {},
|
|
244
|
+
kernel,
|
|
141
245
|
...callService !== void 0 ? { callService } : {},
|
|
142
|
-
...
|
|
143
|
-
...
|
|
246
|
+
...secretPorts !== void 0 ? { secretPorts } : {},
|
|
247
|
+
...os !== void 0 ? { os } : {}
|
|
144
248
|
});
|
|
145
249
|
}
|
|
146
250
|
var tickLog = createLogger("almadar:runtime:browser-host:ticks");
|
|
147
251
|
var queueLog = createLogger("almadar:runtime:browser-host:queue");
|
|
148
|
-
|
|
149
|
-
for (const entry of traitIndex.byName.values()) {
|
|
150
|
-
for (const tick of entry.irTrait.ticks ?? []) {
|
|
151
|
-
if (tick.interval === "frame") {
|
|
152
|
-
throw new Error(`openBrowserHost has no frame clock; ${entry.orbitalName}.${entry.traitDef.name} tick '${tick.name}' runs every frame`);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
252
|
+
var TICK_PASS_MS = 16;
|
|
157
253
|
async function openBrowserHost(options) {
|
|
158
|
-
const browserStore = await openBrowserStore(options.databaseName, options.schema.orbitals,
|
|
254
|
+
const browserStore = await openBrowserStore(options.databaseName, options.schema.orbitals, options.factory);
|
|
159
255
|
const memory = nativeMemoryPersistence(options.kernel);
|
|
160
|
-
const persistence = (0, local_store_transport_exports.localStorePersistence)(options.schema, browserStore
|
|
161
|
-
const traitIndex = (0, trait_index_exports.buildTraitIndex)(options.schema.orbitals);
|
|
162
|
-
refuseUnhostedTicks(traitIndex);
|
|
256
|
+
const persistence = (0, local_store_transport_exports.localStorePersistence)(options.schema, browserStore === null ? memory : await persistedMemory(options.kernel, browserStore, browserEntities(options.schema.orbitals), options.locale), memory);
|
|
163
257
|
const { schema } = options;
|
|
164
258
|
let transport;
|
|
165
259
|
const listeners = /* @__PURE__ */ new Set();
|
|
166
|
-
|
|
167
|
-
const lane = [];
|
|
168
|
-
let pumping = false;
|
|
169
|
-
let running;
|
|
170
|
-
const pump = async () => {
|
|
171
|
-
if (pumping) return;
|
|
172
|
-
pumping = true;
|
|
173
|
-
for (let grant = lane.shift(); grant !== void 0; grant = lane.shift()) {
|
|
174
|
-
await new Promise(grant);
|
|
175
|
-
}
|
|
176
|
-
pumping = false;
|
|
177
|
-
};
|
|
178
|
-
const take = (turn) => new Promise((taken) => {
|
|
179
|
-
queueLog.debug("queue:wait", { turn: turn.id, running: running?.id });
|
|
180
|
-
turn.lane.push((free) => {
|
|
181
|
-
turn.held = true;
|
|
182
|
-
running = turn;
|
|
183
|
-
queueLog.debug("queue:take", { turn: turn.id });
|
|
184
|
-
turn.release = () => {
|
|
185
|
-
queueLog.debug("queue:release", { turn: turn.id });
|
|
186
|
-
turn.held = false;
|
|
187
|
-
if (running === turn) running = void 0;
|
|
188
|
-
free();
|
|
189
|
-
};
|
|
190
|
-
taken();
|
|
191
|
-
});
|
|
192
|
-
void pump();
|
|
193
|
-
});
|
|
194
|
-
const enqueue = async (lane2, work) => {
|
|
195
|
-
const turn = { id: ++turns, lane: lane2, held: false, done: false, release: () => void 0 };
|
|
196
|
-
await take(turn);
|
|
197
|
-
try {
|
|
198
|
-
return await work();
|
|
199
|
-
} finally {
|
|
200
|
-
turn.done = true;
|
|
201
|
-
if (turn.held) turn.release();
|
|
202
|
-
}
|
|
203
|
-
};
|
|
204
|
-
const serially = (work) => enqueue(lane, work);
|
|
205
|
-
const outsideEventQueue = async (work) => {
|
|
206
|
-
const turn = running;
|
|
207
|
-
queueLog.debug("queue:outside", { turn: turn?.id, held: turn?.held });
|
|
208
|
-
if (turn === void 0 || !turn.held) return work();
|
|
209
|
-
turn.release();
|
|
210
|
-
try {
|
|
211
|
-
return await work();
|
|
212
|
-
} finally {
|
|
213
|
-
await take(turn);
|
|
214
|
-
}
|
|
215
|
-
};
|
|
216
|
-
const servicePorts = (caller, user, message) => {
|
|
217
|
-
const lentBy = running;
|
|
260
|
+
const servicePorts = (caller, user, message, assertReentry) => {
|
|
218
261
|
return {
|
|
219
262
|
caller,
|
|
220
|
-
inputs: () =>
|
|
221
|
-
readableEntities: () =>
|
|
263
|
+
inputs: () => kernelEngine.externalInputs(),
|
|
264
|
+
readableEntities: () => kernelEngine.readableEntities(),
|
|
222
265
|
dispatchInput: (orbital, request) => {
|
|
223
266
|
const host = transport;
|
|
224
267
|
if (!host) return Promise.reject(new Error("openBrowserHost: the host is not open yet"));
|
|
225
|
-
|
|
226
|
-
return dispatchDeclaredInput(
|
|
227
|
-
const response = await send(o, r);
|
|
268
|
+
assertReentry?.();
|
|
269
|
+
return dispatchDeclaredInput(kernelEngine, orbital, request, async (o, r) => {
|
|
270
|
+
const response = await host.send(o, r);
|
|
228
271
|
for (const listener of listeners) listener(o, r, response);
|
|
229
272
|
return response;
|
|
230
273
|
});
|
|
231
274
|
},
|
|
232
|
-
read: async (entity) =>
|
|
275
|
+
read: async (entity) => kernelEngine.readRows(entity, await persistence.list(entity), user),
|
|
233
276
|
message
|
|
234
277
|
};
|
|
235
278
|
};
|
|
236
279
|
let deferred;
|
|
237
280
|
const kernelEngine = openLocalKernel({
|
|
238
281
|
kernel: options.kernel,
|
|
239
|
-
language: options.language,
|
|
240
282
|
schema,
|
|
241
283
|
persistence,
|
|
242
284
|
callService: options.callService,
|
|
243
285
|
servicePorts,
|
|
244
286
|
deferCallOutcome: () => deferred,
|
|
245
|
-
...options.
|
|
287
|
+
...options.secretPorts !== void 0 ? { secretPorts: options.secretPorts } : {},
|
|
246
288
|
...options.onDevice !== void 0 ? { onDevice: options.onDevice } : {},
|
|
247
|
-
...options.tabs !== void 0 ? { tabs: options.tabs } : {}
|
|
289
|
+
...options.tabs !== void 0 ? { tabs: options.tabs } : {},
|
|
290
|
+
...options.os !== void 0 ? { os: options.os } : {}
|
|
248
291
|
});
|
|
249
|
-
const local = (0, local_store_transport_exports.createLocalStoreTransport)({ kernelEngine
|
|
292
|
+
const local = (0, local_store_transport_exports.createLocalStoreTransport)({ kernelEngine });
|
|
250
293
|
transport = local;
|
|
251
294
|
deferred = (call) => {
|
|
252
295
|
const request = {
|
|
@@ -255,62 +298,58 @@ async function openBrowserHost(options) {
|
|
|
255
298
|
targetTrait: call.traitName,
|
|
256
299
|
...call.entityId !== void 0 ? { entityId: call.entityId } : {},
|
|
257
300
|
...call.originClientId !== void 0 ? { clientId: call.originClientId } : {},
|
|
258
|
-
...call.user !== void 0 ? { user: call.user } : {},
|
|
259
301
|
...call.locale !== void 0 ? { locale: call.locale } : {}
|
|
260
302
|
};
|
|
261
|
-
void
|
|
262
|
-
const response = await local.send(call.orbital, request);
|
|
303
|
+
void local.send(call.orbital, request).then((response) => {
|
|
263
304
|
for (const listener of listeners) listener(call.orbital, request, response);
|
|
264
305
|
}).catch((error) => {
|
|
265
306
|
queueLog.error("deferred-outcome:failed", { orbital: call.orbital, event: call.event, trait: call.traitName, error: error.message });
|
|
266
307
|
});
|
|
267
308
|
};
|
|
268
|
-
const
|
|
269
|
-
const
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
let firing = false;
|
|
273
|
-
const fire = () => {
|
|
274
|
-
if (firing) return;
|
|
275
|
-
firing = true;
|
|
276
|
-
const request = {
|
|
277
|
-
event: tickEventKey(tick.name),
|
|
278
|
-
runTick: { trait: entry.traitDef.name, tick: tick.name },
|
|
279
|
-
targetTrait: entry.traitDef.name,
|
|
280
|
-
tick: tick.name
|
|
281
|
-
};
|
|
282
|
-
void serially(async () => {
|
|
283
|
-
const response = await local.send(entry.orbitalName, request);
|
|
284
|
-
if (response.transitioned) for (const listener of listeners) listener(entry.orbitalName, request, response);
|
|
285
|
-
}).catch((error) => {
|
|
286
|
-
tickLog.error("tick:failed", { orbital: entry.orbitalName, trait: entry.traitDef.name, tick: tick.name, error: error.message });
|
|
287
|
-
}).finally(() => {
|
|
288
|
-
firing = false;
|
|
289
|
-
});
|
|
290
|
-
};
|
|
291
|
-
tickHandles.push(
|
|
292
|
-
typeof tick.interval === "string" && (0, cron_exports.isValidCronExpression)(tick.interval) ? scheduler.addCron(tick.interval, fire) : scheduler.add(typeof tick.interval === "number" ? tick.interval : (0, duration_exports.parseDurationString)(tick.interval), fire)
|
|
293
|
-
);
|
|
309
|
+
const runnable = /* @__PURE__ */ new Map();
|
|
310
|
+
for (const trait of kernelEngine.programSurface().traits) {
|
|
311
|
+
for (const tick of trait.ticks) {
|
|
312
|
+
runnable.set(`${trait.name}::${tick.name}`, { orbitalName: trait.orbital, traitName: trait.name, tickName: tick.name });
|
|
294
313
|
}
|
|
295
314
|
}
|
|
315
|
+
const firing = /* @__PURE__ */ new Set();
|
|
316
|
+
const fire = (key, tick) => {
|
|
317
|
+
if (firing.has(key)) return;
|
|
318
|
+
firing.add(key);
|
|
319
|
+
const request = {
|
|
320
|
+
event: tickEventKey(tick.tickName),
|
|
321
|
+
runTick: { trait: tick.traitName, tick: tick.tickName },
|
|
322
|
+
targetTrait: tick.traitName,
|
|
323
|
+
tick: tick.tickName
|
|
324
|
+
};
|
|
325
|
+
void local.send(tick.orbitalName, request).then((response) => {
|
|
326
|
+
if (response.transitioned) for (const listener of listeners) listener(tick.orbitalName, request, response);
|
|
327
|
+
}).catch((error) => {
|
|
328
|
+
tickLog.error("tick:failed", { orbital: tick.orbitalName, trait: tick.traitName, tick: tick.tickName, error: error.message });
|
|
329
|
+
}).finally(() => {
|
|
330
|
+
firing.delete(key);
|
|
331
|
+
});
|
|
332
|
+
};
|
|
333
|
+
const timer = runnable.size === 0 ? void 0 : setInterval(() => {
|
|
334
|
+
for (const due of Object.values(kernelEngine.tickPass(performance.now())).flat()) {
|
|
335
|
+
const key = `${due.trait}::${due.tick}`;
|
|
336
|
+
const tick = runnable.get(key);
|
|
337
|
+
if (tick !== void 0) fire(key, tick);
|
|
338
|
+
}
|
|
339
|
+
}, TICK_PASS_MS);
|
|
296
340
|
return {
|
|
297
341
|
...local,
|
|
298
|
-
send: (orbitalName, request) => serially(() => local.send(orbitalName, request)),
|
|
299
342
|
onInputDispatched(listener) {
|
|
300
343
|
listeners.add(listener);
|
|
301
344
|
return () => listeners.delete(listener);
|
|
302
345
|
},
|
|
303
346
|
routeMounts: (routePath) => kernelEngine.routeMounts(routePath),
|
|
304
347
|
close() {
|
|
305
|
-
|
|
348
|
+
if (timer !== void 0) clearInterval(timer);
|
|
306
349
|
}
|
|
307
350
|
};
|
|
308
351
|
}
|
|
309
352
|
|
|
310
|
-
// src/runtime/effects/composition/index.ts
|
|
311
|
-
var composition_exports = {};
|
|
312
|
-
__reExport(composition_exports, composition_star);
|
|
313
|
-
|
|
314
353
|
// src/runtime/ui/contract-errors.ts
|
|
315
354
|
var RendererContractViolationError = class extends Error {
|
|
316
355
|
constructor(message) {
|
|
@@ -447,20 +486,6 @@ function buildOrbitalsByTrait(schema, resolvedPages = []) {
|
|
|
447
486
|
return map;
|
|
448
487
|
}
|
|
449
488
|
|
|
450
|
-
// src/runtime/ui/traitLinkedEntities.ts
|
|
451
|
-
function buildTraitLinkedEntities(ir) {
|
|
452
|
-
const map = /* @__PURE__ */ new Map();
|
|
453
|
-
for (const page of ir.pages.values()) {
|
|
454
|
-
for (const binding of page.traits) {
|
|
455
|
-
if (binding.linkedEntity) map.set(binding.trait.name, binding.linkedEntity);
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
for (const trait of ir.traits.values()) {
|
|
459
|
-
if (trait.linkedEntity && !map.has(trait.name)) map.set(trait.name, trait.linkedEntity);
|
|
460
|
-
}
|
|
461
|
-
return map;
|
|
462
|
-
}
|
|
463
|
-
|
|
464
489
|
// src/runtime/ui/embedded-traits.ts
|
|
465
490
|
var TRAIT_BINDING_PREFIX = "@trait.";
|
|
466
491
|
function collectTraitRefsFromValue(value, into) {
|
|
@@ -499,19 +524,6 @@ function collectTraitRefsFromEffects(effects, into) {
|
|
|
499
524
|
}
|
|
500
525
|
}
|
|
501
526
|
}
|
|
502
|
-
function collectTraitRefsFromResolvedTrait(trait) {
|
|
503
|
-
const out = /* @__PURE__ */ new Set();
|
|
504
|
-
for (const transition of trait.transitions ?? []) {
|
|
505
|
-
collectTraitRefsFromEffects(transition.effects, out);
|
|
506
|
-
}
|
|
507
|
-
for (const tick of trait.ticks ?? []) {
|
|
508
|
-
collectTraitRefsFromEffects(tick.effects, out);
|
|
509
|
-
}
|
|
510
|
-
for (const field of Object.values(trait.config ?? {})) {
|
|
511
|
-
if (field.default !== void 0) collectTraitRefsFromValue(field.default, out);
|
|
512
|
-
}
|
|
513
|
-
return out;
|
|
514
|
-
}
|
|
515
527
|
function collectEmbeddedTraits(schema) {
|
|
516
528
|
const out = /* @__PURE__ */ new Set();
|
|
517
529
|
if (!schema?.orbitals) return out;
|
|
@@ -545,7 +557,7 @@ function collectEmbeddedTraits(schema) {
|
|
|
545
557
|
return out;
|
|
546
558
|
}
|
|
547
559
|
var PERF_NAMESPACE = "almadar:perf:canvas";
|
|
548
|
-
var
|
|
560
|
+
var log2 = createLogger(PERF_NAMESPACE);
|
|
549
561
|
var RING_SIZE = 50;
|
|
550
562
|
var ring = [];
|
|
551
563
|
var writeIdx = 0;
|
|
@@ -604,7 +616,7 @@ function perfEnd(name, startToken, detail) {
|
|
|
604
616
|
}
|
|
605
617
|
push({ name, durationMs, ts: endTs, detail });
|
|
606
618
|
aggregate(name, durationMs);
|
|
607
|
-
if (isVerbose())
|
|
619
|
+
if (isVerbose()) log2.debug(name, () => ({ durationMs, ...detail ?? {} }));
|
|
608
620
|
}
|
|
609
621
|
function perfTime(name, fn, detail) {
|
|
610
622
|
const t = perfStart(name);
|
|
@@ -651,7 +663,7 @@ function dumpSummary() {
|
|
|
651
663
|
avgMs: Math.round(b.totalMs / b.count * 100) / 100,
|
|
652
664
|
maxMs: Math.round(b.maxMs * 10) / 10
|
|
653
665
|
})).sort((a, b) => b.totalMs - a.totalMs);
|
|
654
|
-
|
|
666
|
+
log2.warn("[PROFILE] summary", { phases: JSON.stringify(rows) });
|
|
655
667
|
buckets.clear();
|
|
656
668
|
}
|
|
657
669
|
function getPerfSnapshot() {
|
|
@@ -684,7 +696,7 @@ var perfStore = {
|
|
|
684
696
|
subscribe,
|
|
685
697
|
getSnapshot
|
|
686
698
|
};
|
|
687
|
-
var
|
|
699
|
+
var log3 = createLogger("almadar:runtime:verify");
|
|
688
700
|
var MAX_EVENT_LOG = 200;
|
|
689
701
|
var EMPTY_SUMMARY = {
|
|
690
702
|
totalChecks: 0,
|
|
@@ -726,7 +738,7 @@ function bindEventBus(eventBus) {
|
|
|
726
738
|
if (!api) return;
|
|
727
739
|
api.sendEvent = (event, payload, traitScope) => {
|
|
728
740
|
const prefixed = event.startsWith("UI:") ? event : traitScope ? `UI:${traitScope}.${event}` : `UI:${event}`;
|
|
729
|
-
|
|
741
|
+
log3.debug("sendEvent", {
|
|
730
742
|
event: prefixed,
|
|
731
743
|
traitScope,
|
|
732
744
|
payloadKeys: payload ? Object.keys(payload) : []
|
|
@@ -760,28 +772,4 @@ function bindTraitStateGetter(getter) {
|
|
|
760
772
|
api.getTraitState = getter;
|
|
761
773
|
}
|
|
762
774
|
|
|
763
|
-
|
|
764
|
-
var types_exports = {};
|
|
765
|
-
__reExport(types_exports, types_star);
|
|
766
|
-
|
|
767
|
-
// src/runtime/events/identity/routing.ts
|
|
768
|
-
var routing_exports = {};
|
|
769
|
-
__reExport(routing_exports, routing_star);
|
|
770
|
-
|
|
771
|
-
// src/runtime/traits/listen-targets.ts
|
|
772
|
-
var listen_targets_exports = {};
|
|
773
|
-
__reExport(listen_targets_exports, listen_targets_star);
|
|
774
|
-
|
|
775
|
-
// src/runtime/traits/OrbitalTraitParsing.ts
|
|
776
|
-
var OrbitalTraitParsing_exports = {};
|
|
777
|
-
__reExport(OrbitalTraitParsing_exports, OrbitalTraitParsing_star);
|
|
778
|
-
|
|
779
|
-
// src/runtime/entities/mockStoreSeed.ts
|
|
780
|
-
var mockStoreSeed_exports = {};
|
|
781
|
-
__reExport(mockStoreSeed_exports, mockStoreSeed_star);
|
|
782
|
-
|
|
783
|
-
// src/runtime/evaluation/residence-transport.ts
|
|
784
|
-
var residence_transport_exports = {};
|
|
785
|
-
__reExport(residence_transport_exports, residence_transport_star);
|
|
786
|
-
|
|
787
|
-
export { OrbitalTraitParsing_exports, PERF_NAMESPACE, RendererContractViolationError, TickScheduler_exports, aggregateSlotContent, assertIsMultiSourceSlotManager, assertIsSlotManager, bindEventBus, bindTraitStateGetter, browserStoreName, buildOrbitalsByTrait, buildTraitLinkedEntities, clearPerf, collectEmbeddedTraits, collectTraitRefsFromResolvedTrait, composition_exports, createSlotSetter, cron_exports, duration_exports, ensureVerificationApi, getOrbitalVerification, listen_targets_exports, local_store_transport_exports, mockStoreSeed_exports, nativeMemoryPersistence, openBrowserHost, openBrowserStore, openBrowserStoreTransport, openBundledBrowserStore, openLocalKernel, perfEnd, perfGauge, perfStart, perfStore, perfTime, perfTimeAsync, pushPerfEntry, residence_transport_exports, routing_exports, seedBrowserStore_exports, std_mock_seed_exports, trait_index_exports, types_exports, validateSlotContent, withBrowserSeeder, withForkedSeeder, wrapCallbackForEvent };
|
|
775
|
+
export { PERF_NAMESPACE, RendererContractViolationError, aggregateSlotContent, answerHostAsk, assertIsMultiSourceSlotManager, assertIsSlotManager, bindEventBus, bindTraitStateGetter, browserStoreName, buildOrbitalsByTrait, clearPerf, collectEmbeddedTraits, createSlotSetter, ensureVerificationApi, getOrbitalVerification, local_store_transport_exports, nativeMemoryPersistence, openBrowserHost, openBrowserStore, openBrowserStoreTransport, openBundledBrowserStore, openLocalKernel, perfEnd, perfGauge, perfStart, perfStore, perfTime, perfTimeAsync, persistedMemory, pushPerfEntry, registerHostAudio, registerHostConsent, registerHostSignIn, registerHostSignOut, validateSlotContent, webHostActions, wrapCallbackForEvent };
|