@skenora/sdk 0.1.2

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.
Files changed (58) hide show
  1. package/README.md +167 -0
  2. package/dist/editor.d.ts +14 -0
  3. package/dist/editor.d.ts.map +1 -0
  4. package/dist/editor.js +14 -0
  5. package/dist/editor.js.map +1 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +3 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lightbox.d.ts +3 -0
  11. package/dist/lightbox.d.ts.map +1 -0
  12. package/dist/lightbox.js +2 -0
  13. package/dist/lightbox.js.map +1 -0
  14. package/dist/playback-config.d.ts +27 -0
  15. package/dist/playback-config.d.ts.map +1 -0
  16. package/dist/playback-config.js +87 -0
  17. package/dist/playback-config.js.map +1 -0
  18. package/dist/renderer-diagnostics.d.ts +4 -0
  19. package/dist/renderer-diagnostics.d.ts.map +1 -0
  20. package/dist/renderer-diagnostics.js +85 -0
  21. package/dist/renderer-diagnostics.js.map +1 -0
  22. package/dist/renderer.d.ts +10 -0
  23. package/dist/renderer.d.ts.map +1 -0
  24. package/dist/renderer.js +8 -0
  25. package/dist/renderer.js.map +1 -0
  26. package/dist/scene-config.d.ts +58 -0
  27. package/dist/scene-config.d.ts.map +1 -0
  28. package/dist/scene-config.js +223 -0
  29. package/dist/scene-config.js.map +1 -0
  30. package/dist/scene-plan/apply-patch.d.ts +5 -0
  31. package/dist/scene-plan/apply-patch.d.ts.map +1 -0
  32. package/dist/scene-plan/apply-patch.js +174 -0
  33. package/dist/scene-plan/apply-patch.js.map +1 -0
  34. package/dist/scene-plan/executor.d.ts +26 -0
  35. package/dist/scene-plan/executor.d.ts.map +1 -0
  36. package/dist/scene-plan/executor.js +928 -0
  37. package/dist/scene-plan/executor.js.map +1 -0
  38. package/dist/scene-plan/gateway.d.ts +15 -0
  39. package/dist/scene-plan/gateway.d.ts.map +1 -0
  40. package/dist/scene-plan/gateway.js +104 -0
  41. package/dist/scene-plan/gateway.js.map +1 -0
  42. package/dist/scene-plan/index.d.ts +4 -0
  43. package/dist/scene-plan/index.d.ts.map +1 -0
  44. package/dist/scene-plan/index.js +4 -0
  45. package/dist/scene-plan/index.js.map +1 -0
  46. package/dist/scene-plan/types.d.ts +181 -0
  47. package/dist/scene-plan/types.d.ts.map +1 -0
  48. package/dist/scene-plan/types.js +2 -0
  49. package/dist/scene-plan/types.js.map +1 -0
  50. package/dist/skenora-renderer.d.ts +117 -0
  51. package/dist/skenora-renderer.d.ts.map +1 -0
  52. package/dist/skenora-renderer.js +464 -0
  53. package/dist/skenora-renderer.js.map +1 -0
  54. package/dist/skenora-scene.d.ts +263 -0
  55. package/dist/skenora-scene.d.ts.map +1 -0
  56. package/dist/skenora-scene.js +832 -0
  57. package/dist/skenora-scene.js.map +1 -0
  58. package/package.json +55 -0
@@ -0,0 +1,464 @@
1
+ import { assertSceneDocument, normalizeSceneDocument, } from "@skenora/contracts";
2
+ import { createCausationMetadata, EventHub, } from "@skenora/events";
3
+ import {} from "@skenora/resources";
4
+ import { createWorkspaceResourceContext, } from "@skenora/resources/workspace";
5
+ import { RUNTIME_CAMERA_CAPABILITY, RUNTIME_MATERIAL_ANIMATIONS_CAPABILITY, RuntimeSession, } from "@skenora/runtime/projection";
6
+ import { MemoryWorkspaceSource, } from "@skenora/workspace";
7
+ import { getSkenoraPlaybackConfig, normalizeSkenoraPlaybackConfig, } from "./playback-config.js";
8
+ /**
9
+ * Read-only full-scene player. It owns runtime behavior but deliberately has no
10
+ * EditorSession, command, undo, persistence, or document mutation surface.
11
+ */
12
+ export class SkenoraRenderer {
13
+ events;
14
+ #resources;
15
+ #resourceContext;
16
+ #runtime;
17
+ #cameraCapability;
18
+ #flowOptions;
19
+ #flow = null;
20
+ #ownsEvents;
21
+ #modelLoadPolicy;
22
+ #playbackOverride;
23
+ #thirdPersonCallbacks;
24
+ #lifetime = new AbortController();
25
+ #modelFailures = [];
26
+ #document = null;
27
+ #playback = {};
28
+ #thirdPerson = null;
29
+ #pathUnsubscribe = null;
30
+ #resumeThirdPersonAfterPath = false;
31
+ #pathGeneration = 0;
32
+ #loadGeneration = 0;
33
+ #status = "idle";
34
+ #error = null;
35
+ constructor(options) {
36
+ const source = options.source ?? new MemoryWorkspaceSource();
37
+ this.#resourceContext = createWorkspaceResourceContext(source, {
38
+ ...(options.resources ? { resources: options.resources } : {}),
39
+ ...(options.resourceProviders
40
+ ? { resourceProviders: options.resourceProviders }
41
+ : {}),
42
+ });
43
+ this.#resources = this.#resourceContext.resources;
44
+ this.#runtime = new RuntimeSession(options.canvas, {
45
+ adaptToDeviceRatio: true,
46
+ ...options.runtime,
47
+ executionMode: "playback",
48
+ });
49
+ this.#cameraCapability = this.#runtime.capabilities.require(RUNTIME_CAMERA_CAPABILITY);
50
+ this.#runtime.capabilities.replace(RUNTIME_CAMERA_CAPABILITY, this.#createCoordinatedCameraCapability());
51
+ this.#flowOptions = options.flow ?? {};
52
+ this.#ownsEvents = options.events === undefined;
53
+ this.events = options.events ?? new EventHub();
54
+ this.#modelLoadPolicy = options.modelLoadPolicy ?? "best-effort";
55
+ this.#playbackOverride = options.playback
56
+ ? normalizeSkenoraPlaybackConfig(options.playback)
57
+ : undefined;
58
+ this.#thirdPersonCallbacks = options.thirdPersonCallbacks;
59
+ this.#bindRuntimeEvents();
60
+ }
61
+ static async create(options) {
62
+ const renderer = new SkenoraRenderer(options);
63
+ try {
64
+ await renderer.load(options.document);
65
+ return renderer;
66
+ }
67
+ catch (error) {
68
+ renderer.dispose();
69
+ throw error;
70
+ }
71
+ }
72
+ get status() {
73
+ return this.#status;
74
+ }
75
+ get error() {
76
+ return this.#error;
77
+ }
78
+ get ready() {
79
+ return this.#status === "ready";
80
+ }
81
+ getCapabilityAvailability() {
82
+ return this.#runtime.getCapabilityAvailability();
83
+ }
84
+ getQualityState() {
85
+ return this.#runtime.getQualityState();
86
+ }
87
+ getBackendSnapshot() {
88
+ this.#assertActive();
89
+ return this.#runtime.getBackendSnapshot();
90
+ }
91
+ getGpuProgramCacheSnapshot() {
92
+ this.#assertActive();
93
+ return this.#runtime.getGpuProgramCacheSnapshot();
94
+ }
95
+ probe() {
96
+ this.#assertReady();
97
+ return this.#runtime.probe();
98
+ }
99
+ /** Project anchors into render-pixel coordinates; the host owns text layout/UI. */
100
+ projectAnnotations() {
101
+ this.#assertReady();
102
+ return structuredClone(this.#runtime.annotations.project(this.#document));
103
+ }
104
+ get document() {
105
+ this.#assertReady();
106
+ return structuredClone(this.#document);
107
+ }
108
+ get modelFailures() {
109
+ return Object.freeze(this.#modelFailures.map((item) => ({ ...item })));
110
+ }
111
+ get cameraPathState() {
112
+ this.#assertReady();
113
+ return this.#camera().getPathState();
114
+ }
115
+ get thirdPersonEnabled() {
116
+ return this.#thirdPerson?.enabled ?? false;
117
+ }
118
+ on(type, handler, signal) {
119
+ return this.events.subscribe(type, handler, signal ? { signal } : {});
120
+ }
121
+ async load(document) {
122
+ this.#assertActive();
123
+ const candidate = normalizeSceneDocument(structuredClone(document));
124
+ assertSceneDocument(candidate);
125
+ const generation = ++this.#loadGeneration;
126
+ this.#stopPlayback();
127
+ this.#modelFailures.length = 0;
128
+ this.#document = null;
129
+ this.#setStatus("loading");
130
+ try {
131
+ if (!(await this.#configureFlow(candidate, generation)))
132
+ return;
133
+ await this.#runtime.loadDocument(candidate, this.#resources, {
134
+ modelLoadPolicy: this.#modelLoadPolicy,
135
+ });
136
+ if (generation !== this.#loadGeneration)
137
+ return;
138
+ this.#document = structuredClone(candidate);
139
+ this.#playback = mergePlaybackConfig(getSkenoraPlaybackConfig(candidate), this.#playbackOverride);
140
+ this.#bindCameraPathEvents();
141
+ if (!(await this.#configureThirdPerson(this.#playback.thirdPerson, generation))) {
142
+ return;
143
+ }
144
+ this.#setStatus("ready");
145
+ this.#startConfiguredPlayback();
146
+ }
147
+ catch (error) {
148
+ if (generation === this.#loadGeneration) {
149
+ this.#setStatus("error", error);
150
+ }
151
+ throw error;
152
+ }
153
+ }
154
+ async startFlows(payload) {
155
+ this.#assertReady();
156
+ if (!this.#flow)
157
+ throw new Error("Flow support is disabled");
158
+ await this.#flow.start(payload);
159
+ this.events.publish("flow.changed", { running: this.#flow.running }, { source: "renderer" });
160
+ }
161
+ stopFlows() {
162
+ this.#assertReady();
163
+ const cancelled = this.#flow?.stop() ?? 0;
164
+ this.events.publish("flow.changed", { running: false }, { source: "renderer" });
165
+ return cancelled;
166
+ }
167
+ playMaterialAnimation(materialId, animationId, options) {
168
+ this.#assertReady();
169
+ return this.#runtime.capabilities
170
+ .require(RUNTIME_MATERIAL_ANIMATIONS_CAPABILITY)
171
+ .play(materialId, animationId, options);
172
+ }
173
+ pauseMaterialAnimation(materialId, animationId) {
174
+ this.#assertReady();
175
+ return this.#runtime.capabilities
176
+ .require(RUNTIME_MATERIAL_ANIMATIONS_CAPABILITY)
177
+ .pause(materialId, animationId);
178
+ }
179
+ resumeMaterialAnimation(materialId, animationId) {
180
+ this.#assertReady();
181
+ return this.#runtime.capabilities
182
+ .require(RUNTIME_MATERIAL_ANIMATIONS_CAPABILITY)
183
+ .resume(materialId, animationId);
184
+ }
185
+ stopMaterialAnimation(materialId, animationId) {
186
+ this.#assertReady();
187
+ this.#runtime.capabilities
188
+ .require(RUNTIME_MATERIAL_ANIMATIONS_CAPABILITY)
189
+ .stop(materialId, animationId);
190
+ }
191
+ resetMaterialAnimation(materialId, animationId) {
192
+ this.#assertReady();
193
+ this.#runtime.capabilities
194
+ .require(RUNTIME_MATERIAL_ANIMATIONS_CAPABILITY)
195
+ .reset(materialId, animationId);
196
+ }
197
+ getMaterialAnimationState(materialId, animationId) {
198
+ this.#assertReady();
199
+ return this.#runtime.capabilities
200
+ .require(RUNTIME_MATERIAL_ANIMATIONS_CAPABILITY)
201
+ .getState(materialId, animationId);
202
+ }
203
+ playCameraPath(pathId, options = {}) {
204
+ this.#assertReady();
205
+ return this.#camera().playPath(pathId, options);
206
+ }
207
+ #playCameraPath(pathId, options = {}) {
208
+ const generation = ++this.#pathGeneration;
209
+ this.#resumeThirdPersonAfterPath =
210
+ this.#resumeThirdPersonAfterPath || (this.#thirdPerson?.enabled ?? false);
211
+ if (this.#resumeThirdPersonAfterPath)
212
+ this.#thirdPerson?.disable();
213
+ return this.#cameraCapability.playPath(pathId, options).finally(() => {
214
+ if (generation !== this.#pathGeneration)
215
+ return;
216
+ this.#restoreThirdPersonAfterPath();
217
+ });
218
+ }
219
+ pauseCameraPath() {
220
+ this.#assertReady();
221
+ return this.#camera().pausePath();
222
+ }
223
+ resumeCameraPath() {
224
+ this.#assertReady();
225
+ return this.#camera().resumePath();
226
+ }
227
+ stopCameraPath() {
228
+ this.#assertReady();
229
+ this.#camera().stopPath();
230
+ }
231
+ #stopCameraPath() {
232
+ this.#pathGeneration += 1;
233
+ this.#cameraCapability.stopPath();
234
+ this.#restoreThirdPersonAfterPath();
235
+ }
236
+ enableThirdPerson() {
237
+ this.#assertReady();
238
+ if (!this.#thirdPerson) {
239
+ throw new Error("Third-person navigation is not configured");
240
+ }
241
+ if (this.#camera().getPathState().status !== "idle") {
242
+ this.stopCameraPath();
243
+ }
244
+ this.#thirdPerson.enable();
245
+ this.#publishThirdPersonState();
246
+ }
247
+ disableThirdPerson() {
248
+ this.#assertReady();
249
+ this.#resumeThirdPersonAfterPath = false;
250
+ this.#thirdPerson?.disable();
251
+ this.#publishThirdPersonState();
252
+ }
253
+ setThirdPersonAction(action, active) {
254
+ this.#assertReady();
255
+ if (!this.#thirdPerson) {
256
+ throw new Error("Third-person navigation is not configured");
257
+ }
258
+ this.#thirdPerson.setAction(action, active);
259
+ }
260
+ updateThirdPersonOptions(options) {
261
+ this.#assertReady();
262
+ if (!this.#thirdPerson) {
263
+ throw new Error("Third-person navigation is not configured");
264
+ }
265
+ this.#thirdPerson.updateOptions(options);
266
+ }
267
+ frame(entityIds) {
268
+ this.#assertReady();
269
+ this.#camera().frame(entityIds);
270
+ }
271
+ /** Data-only selectors for the currently loaded asset; no material handles. */
272
+ describeMaterialSlots(entityId) {
273
+ this.#assertReady();
274
+ return this.#runtime.describeMaterialSlots(entityId);
275
+ }
276
+ resize() {
277
+ this.#assertActive();
278
+ this.#runtime.resize();
279
+ }
280
+ pause() {
281
+ this.#assertActive();
282
+ this.#runtime.pause();
283
+ }
284
+ resume() {
285
+ this.#assertActive();
286
+ this.#runtime.resume();
287
+ }
288
+ dispose() {
289
+ if (this.#status === "disposed")
290
+ return;
291
+ this.#loadGeneration += 1;
292
+ this.#stopPlayback();
293
+ this.#lifetime.abort();
294
+ this.#flow?.dispose();
295
+ this.#runtime.dispose();
296
+ this.#resourceContext.ownedResources?.dispose();
297
+ this.#document = null;
298
+ this.#setStatus("disposed");
299
+ if (this.#ownsEvents)
300
+ this.events.dispose();
301
+ }
302
+ #startConfiguredPlayback() {
303
+ if ((this.#playback.autoStartFlows ?? true) && this.#flow) {
304
+ void this.startFlows().catch((error) => this.#publishError(error, "startFlows"));
305
+ }
306
+ const cameraPath = this.#playback.cameraPath;
307
+ if (cameraPath && (cameraPath.autoStart ?? true)) {
308
+ const options = toCameraPathOptions(cameraPath);
309
+ void this.playCameraPath(cameraPath.id, options).catch((error) => this.#publishError(error, `playCameraPath:${cameraPath.id}`));
310
+ }
311
+ }
312
+ async #configureFlow(document, generation) {
313
+ if (this.#flowOptions === false ||
314
+ Object.keys(document.flows).length === 0) {
315
+ this.#flow?.dispose();
316
+ this.#flow = null;
317
+ return true;
318
+ }
319
+ const { RuntimeFlowController } = await import("@skenora/babylon-editor/runtime-flow");
320
+ if (generation !== this.#loadGeneration || this.#status === "disposed") {
321
+ return false;
322
+ }
323
+ this.#flow ??= new RuntimeFlowController(this.#runtime, this.#flowOptions);
324
+ this.#flow.setDocument(document);
325
+ return true;
326
+ }
327
+ async #configureThirdPerson(config, generation) {
328
+ this.#thirdPerson?.dispose();
329
+ this.#thirdPerson = null;
330
+ if (!config)
331
+ return true;
332
+ const { RuntimeThirdPersonController } = await import("@skenora/runtime/interaction");
333
+ if (generation !== this.#loadGeneration || this.#status === "disposed") {
334
+ return false;
335
+ }
336
+ this.#thirdPerson = new RuntimeThirdPersonController(this.#runtime, {
337
+ ...config.options,
338
+ ...this.#thirdPersonCallbacks,
339
+ entityId: config.entityId,
340
+ enabled: config.enabled ?? true,
341
+ });
342
+ this.#publishThirdPersonState();
343
+ return true;
344
+ }
345
+ #stopPlayback() {
346
+ this.#pathUnsubscribe?.();
347
+ this.#pathUnsubscribe = null;
348
+ this.#pathGeneration += 1;
349
+ this.#resumeThirdPersonAfterPath = false;
350
+ this.#thirdPerson?.dispose();
351
+ this.#thirdPerson = null;
352
+ if (this.#document) {
353
+ try {
354
+ this.#cameraCapability.stopPath();
355
+ }
356
+ catch {
357
+ // The previous runtime projection may already have been replaced.
358
+ }
359
+ try {
360
+ this.#runtime.stopDocumentBehaviors();
361
+ }
362
+ catch {
363
+ // The previous runtime projection may already have been replaced.
364
+ }
365
+ }
366
+ this.#flow?.stop();
367
+ }
368
+ #bindCameraPathEvents() {
369
+ this.#pathUnsubscribe?.();
370
+ this.#pathUnsubscribe = this.#camera().subscribePath((state) => this.events.publish("camera-path.changed", state, { source: "renderer" }));
371
+ }
372
+ #restoreThirdPersonAfterPath() {
373
+ if (this.#resumeThirdPersonAfterPath && this.#thirdPerson) {
374
+ this.#thirdPerson.enable();
375
+ this.#publishThirdPersonState();
376
+ }
377
+ this.#resumeThirdPersonAfterPath = false;
378
+ }
379
+ #publishThirdPersonState() {
380
+ const controller = this.#thirdPerson;
381
+ if (!controller)
382
+ return;
383
+ this.events.publish("third-person.changed", { entityId: controller.entityId, enabled: controller.enabled }, { source: "renderer" });
384
+ }
385
+ #camera() {
386
+ return this.#runtime.capabilities.require(RUNTIME_CAMERA_CAPABILITY);
387
+ }
388
+ #createCoordinatedCameraCapability() {
389
+ return {
390
+ frame: (entityIds) => this.#cameraCapability.frame(entityIds),
391
+ activateEntity: (entityId, controls) => this.#cameraCapability.activateEntity(entityId, controls),
392
+ restoreViewport: () => this.#cameraCapability.restoreViewport(),
393
+ playPath: (pathId, options) => this.#playCameraPath(pathId, options),
394
+ pausePath: () => this.#cameraCapability.pausePath(),
395
+ resumePath: () => this.#cameraCapability.resumePath(),
396
+ stopPath: () => this.#stopCameraPath(),
397
+ getPathState: () => this.#cameraCapability.getPathState(),
398
+ subscribePath: (listener) => this.#cameraCapability.subscribePath(listener),
399
+ };
400
+ }
401
+ #bindRuntimeEvents() {
402
+ const signal = this.#lifetime.signal;
403
+ this.#runtime.events.subscribe("runtime.gpu-program.preparation", (report, event) => this.events.publish("gpu-program.preparation", report, createCausationMetadata(event, "renderer")), { signal });
404
+ this.#runtime.events.subscribe("runtime.probe.completed", (report, event) => this.events.publish("runtime.probe.completed", report, createCausationMetadata(event, "renderer")), { signal });
405
+ this.#runtime.events.subscribe("runtime.material.animation", (state, event) => this.events.publish("material.animation", state, createCausationMetadata(event, "renderer")), { signal });
406
+ this.#runtime.events.subscribe("runtime.quality.changed", (state, event) => this.events.publish("quality.changed", state, createCausationMetadata(event, "renderer")), { signal });
407
+ this.#runtime.events.subscribe("runtime.material.preparation", (state, event) => this.events.publish("material.preparation", state, createCausationMetadata(event, "renderer")), { signal });
408
+ this.#runtime.events.subscribe("runtime.loading", ({ loading }, event) => this.events.publish("runtime.loading", { loading }, createCausationMetadata(event, "renderer")), { signal });
409
+ this.#runtime.events.subscribe("runtime.loading.progress", (progress, event) => this.events.publish("model.loading.progress", progress, createCausationMetadata(event, "renderer")), { signal });
410
+ this.#runtime.events.subscribe("runtime.model.loaded", ({ entityId }, event) => this.events.publish("model.loaded", { entityId }, createCausationMetadata(event, "renderer")), { signal });
411
+ this.#runtime.events.subscribe("runtime.model.failed", ({ entityId, error }, event) => {
412
+ this.#modelFailures.push({ entityId, error });
413
+ this.events.publish("model.failed", { entityId, error }, createCausationMetadata(event, "renderer"));
414
+ }, { signal });
415
+ this.#runtime.events.subscribe("runtime.error", ({ error, operation }) => this.#publishError(error, operation), { signal });
416
+ }
417
+ #setStatus(status, error = null) {
418
+ this.#status = status;
419
+ this.#error = error;
420
+ this.events.publish("status.changed", { status, error }, { source: "renderer" });
421
+ }
422
+ #publishError(error, operation) {
423
+ this.events.publish("error", { error, operation }, { source: "renderer" });
424
+ }
425
+ #assertReady() {
426
+ if (this.#status !== "ready") {
427
+ throw new Error(`SkenoraRenderer is not ready: ${this.#status}`);
428
+ }
429
+ }
430
+ #assertActive() {
431
+ if (this.#status === "disposed") {
432
+ throw new Error("SkenoraRenderer has been disposed");
433
+ }
434
+ }
435
+ }
436
+ function mergePlaybackConfig(document, override) {
437
+ if (!override)
438
+ return document;
439
+ return {
440
+ ...document,
441
+ ...override,
442
+ ...(override.cameraPath === undefined
443
+ ? {}
444
+ : { cameraPath: override.cameraPath }),
445
+ ...(override.thirdPerson === undefined
446
+ ? {}
447
+ : { thirdPerson: override.thirdPerson }),
448
+ };
449
+ }
450
+ function toCameraPathOptions(config) {
451
+ return {
452
+ ...(config.loop === undefined ? {} : { loop: config.loop }),
453
+ ...(config.playbackRate === undefined
454
+ ? {}
455
+ : { playbackRate: config.playbackRate }),
456
+ ...(config.startProgress === undefined
457
+ ? {}
458
+ : { startProgress: config.startProgress }),
459
+ ...(config.restoreCameraOnStop === undefined
460
+ ? {}
461
+ : { restoreCameraOnStop: config.restoreCameraOnStop }),
462
+ };
463
+ }
464
+ //# sourceMappingURL=skenora-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skenora-renderer.js","sourceRoot":"","sources":["../src/skenora-renderer.ts"],"names":[],"mappings":"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"}