@kumwe/studio-preview 0.1.0-alpha.4 → 0.1.0-alpha.6
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/README.md +41 -12
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/preview-client.d.ts +22 -1
- package/dist/preview-client.d.ts.map +1 -1
- package/dist/preview-client.js +301 -56
- package/dist/preview-client.js.map +1 -1
- package/dist/preview-host.d.ts +17 -3
- package/dist/preview-host.d.ts.map +1 -1
- package/dist/preview-host.js +226 -70
- package/dist/preview-host.js.map +1 -1
- package/dist/preview-identity.d.ts +29 -0
- package/dist/preview-identity.d.ts.map +1 -0
- package/dist/preview-identity.js +61 -0
- package/dist/preview-identity.js.map +1 -0
- package/package.json +3 -2
package/dist/preview-host.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isPreviewMessage, STUDIO_CONTRACT_VERSION, STUDIO_WIRE_PROTOCOL_VERSION, } from '@kumwe/studio-protocol';
|
|
1
|
+
import { isPreviewMarker, isPreviewMessage, isPreviewRenderedPayload, STUDIO_CONTRACT_VERSION, STUDIO_WIRE_PROTOCOL_VERSION, } from '@kumwe/studio-protocol';
|
|
2
2
|
import { normalizeOrigin, } from './preview-client.js';
|
|
3
3
|
/**
|
|
4
4
|
* The preview-surface half of the channel: answers `studio.preview/render` and
|
|
@@ -13,17 +13,23 @@ export class PreviewHost {
|
|
|
13
13
|
#measureCallback;
|
|
14
14
|
#renderCallback;
|
|
15
15
|
#renderer;
|
|
16
|
+
#viewportListeners = new Set();
|
|
17
|
+
#disposeListeners = new Set();
|
|
16
18
|
#selectListeners = new Set();
|
|
19
|
+
#markerInventory = new Set();
|
|
17
20
|
#sessionGeneration;
|
|
18
21
|
#source;
|
|
19
22
|
#target;
|
|
20
23
|
#targetOrigin;
|
|
24
|
+
#usedRequestIds = new Set();
|
|
21
25
|
#viewports;
|
|
26
|
+
#activeMeasure;
|
|
27
|
+
#activeRender;
|
|
22
28
|
#disposed = false;
|
|
23
29
|
#lastInboundSequence = -1;
|
|
24
|
-
#
|
|
25
|
-
#latestRenderDigest;
|
|
30
|
+
#measureGeneration = 0;
|
|
26
31
|
#measuredRenderDigest;
|
|
32
|
+
#renderGeneration = 0;
|
|
27
33
|
#sequence = 0;
|
|
28
34
|
constructor(options) {
|
|
29
35
|
this.#targetOrigin = normalizeOrigin(options.targetOrigin);
|
|
@@ -56,7 +62,7 @@ export class PreviewHost {
|
|
|
56
62
|
renderer: this.#renderer,
|
|
57
63
|
viewports: [...this.#viewports],
|
|
58
64
|
},
|
|
59
|
-
sequence: this.#sequence
|
|
65
|
+
sequence: this.#sequence,
|
|
60
66
|
sessionGeneration: this.#sessionGeneration,
|
|
61
67
|
type: 'studio.preview/ready',
|
|
62
68
|
});
|
|
@@ -68,9 +74,47 @@ export class PreviewHost {
|
|
|
68
74
|
this.#disposed = true;
|
|
69
75
|
this.#source.removeEventListener('message', this.#listener);
|
|
70
76
|
this.#selectListeners.clear();
|
|
71
|
-
this.#
|
|
72
|
-
this.#
|
|
77
|
+
this.#viewportListeners.clear();
|
|
78
|
+
this.#disposeListeners.clear();
|
|
79
|
+
this.#invalidateMeasure('Preview host was disposed.');
|
|
80
|
+
this.#invalidateRender('Preview host was disposed.');
|
|
73
81
|
this.#measuredRenderDigest = undefined;
|
|
82
|
+
this.#markerInventory.clear();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Report a trusted interaction with a marked region. The renderer reports
|
|
86
|
+
* intent, never raw input events, and the marker carries nothing beyond the
|
|
87
|
+
* node identity the render already published.
|
|
88
|
+
*/
|
|
89
|
+
announceActivation(payload) {
|
|
90
|
+
this.#assertActive();
|
|
91
|
+
if (!this.#markerInventory.has(payload.marker) ||
|
|
92
|
+
!isPreviewMarker(payload.marker, this.#measuredRenderDigest)) {
|
|
93
|
+
throw new RangeError('Preview activation marker is not in the current render inventory.');
|
|
94
|
+
}
|
|
95
|
+
this.#post({
|
|
96
|
+
channelId: this.#channelId,
|
|
97
|
+
contractVersion: STUDIO_CONTRACT_VERSION,
|
|
98
|
+
kind: 'preview-message',
|
|
99
|
+
payload,
|
|
100
|
+
sequence: this.#sequence,
|
|
101
|
+
sessionGeneration: this.#sessionGeneration,
|
|
102
|
+
type: 'studio.preview/activated',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/** Observe viewport instructions the client drives the surface with. */
|
|
106
|
+
onViewport(listener) {
|
|
107
|
+
this.#viewportListeners.add(listener);
|
|
108
|
+
return () => {
|
|
109
|
+
this.#viewportListeners.delete(listener);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** Observe requests to revoke the resources held for a superseded draft. */
|
|
113
|
+
onDispose(listener) {
|
|
114
|
+
this.#disposeListeners.add(listener);
|
|
115
|
+
return () => {
|
|
116
|
+
this.#disposeListeners.delete(listener);
|
|
117
|
+
};
|
|
74
118
|
}
|
|
75
119
|
onSelect(listener) {
|
|
76
120
|
this.#selectListeners.add(listener);
|
|
@@ -84,15 +128,16 @@ export class PreviewHost {
|
|
|
84
128
|
*/
|
|
85
129
|
reload(reason) {
|
|
86
130
|
this.#assertActive();
|
|
87
|
-
this.#
|
|
88
|
-
this.#
|
|
131
|
+
this.#invalidateMeasure('Preview renderer reloaded.');
|
|
132
|
+
this.#invalidateRender('Preview renderer reloaded.');
|
|
89
133
|
this.#measuredRenderDigest = undefined;
|
|
134
|
+
this.#markerInventory.clear();
|
|
90
135
|
this.#post({
|
|
91
136
|
channelId: this.#channelId,
|
|
92
137
|
contractVersion: STUDIO_CONTRACT_VERSION,
|
|
93
138
|
kind: 'preview-message',
|
|
94
139
|
payload: { reason },
|
|
95
|
-
sequence: this.#sequence
|
|
140
|
+
sequence: this.#sequence,
|
|
96
141
|
sessionGeneration: this.#sessionGeneration,
|
|
97
142
|
type: 'studio.preview/reload',
|
|
98
143
|
});
|
|
@@ -106,7 +151,7 @@ export class PreviewHost {
|
|
|
106
151
|
contractVersion: STUDIO_CONTRACT_VERSION,
|
|
107
152
|
kind: 'preview-message',
|
|
108
153
|
payload: { reason },
|
|
109
|
-
sequence: this.#sequence
|
|
154
|
+
sequence: this.#sequence,
|
|
110
155
|
sessionGeneration: this.#sessionGeneration,
|
|
111
156
|
type: 'studio.preview/teardown',
|
|
112
157
|
});
|
|
@@ -119,57 +164,114 @@ export class PreviewHost {
|
|
|
119
164
|
}
|
|
120
165
|
#handleMeasure(payload) {
|
|
121
166
|
const requestId = payload.requestId;
|
|
122
|
-
this.#
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
defaultMessage: 'Preview measurement is unavailable.',
|
|
167
|
+
if (this.#usedRequestIds.has(requestId)) {
|
|
168
|
+
this.#postError(requestId, {
|
|
169
|
+
code: 'studio.preview/request-id-reused',
|
|
170
|
+
defaultMessage: 'The preview request identifier was already used in this session.',
|
|
127
171
|
retryable: false,
|
|
128
172
|
});
|
|
129
173
|
return;
|
|
130
174
|
}
|
|
175
|
+
this.#usedRequestIds.add(requestId);
|
|
131
176
|
if (this.#measuredRenderDigest === undefined) {
|
|
132
177
|
// Nothing has rendered yet, so there is no digest to bind geometry to.
|
|
133
|
-
this.#
|
|
178
|
+
this.#postError(requestId, {
|
|
134
179
|
code: 'studio.preview/measure-unavailable',
|
|
135
180
|
defaultMessage: 'Preview measurement is unavailable.',
|
|
136
181
|
retryable: true,
|
|
137
182
|
});
|
|
138
183
|
return;
|
|
139
184
|
}
|
|
140
|
-
const
|
|
185
|
+
const draftDigest = this.#measuredRenderDigest;
|
|
186
|
+
if (payload.markers.some((marker) => !this.#markerInventory.has(marker) || !isPreviewMarker(marker, draftDigest))) {
|
|
187
|
+
this.#postError(requestId, {
|
|
188
|
+
code: 'studio.preview/measure-stale-marker',
|
|
189
|
+
defaultMessage: 'Preview measurement markers are not in the current render inventory.',
|
|
190
|
+
retryable: true,
|
|
191
|
+
});
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if (this.#measureCallback === undefined) {
|
|
195
|
+
this.#postError(requestId, {
|
|
196
|
+
code: 'studio.preview/measure-unavailable',
|
|
197
|
+
defaultMessage: 'Preview measurement is unavailable.',
|
|
198
|
+
retryable: false,
|
|
199
|
+
});
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
this.#invalidateMeasure('Preview measurement was superseded.');
|
|
203
|
+
const active = {
|
|
204
|
+
controller: new AbortController(),
|
|
205
|
+
draftDigest,
|
|
206
|
+
generation: this.#measureGeneration,
|
|
207
|
+
requestId,
|
|
208
|
+
};
|
|
209
|
+
this.#activeMeasure = active;
|
|
210
|
+
const markers = [...payload.markers];
|
|
141
211
|
let result;
|
|
142
212
|
try {
|
|
143
|
-
result = this.#measureCallback(markers);
|
|
213
|
+
result = this.#measureCallback(markers, active.controller.signal);
|
|
144
214
|
}
|
|
145
215
|
catch {
|
|
146
|
-
this.#settleMeasureFailure(
|
|
216
|
+
this.#settleMeasureFailure(active, measureFailed());
|
|
147
217
|
return;
|
|
148
218
|
}
|
|
149
|
-
void result.then((measurement) => {
|
|
150
|
-
|
|
219
|
+
void Promise.resolve(result).then((measurement) => {
|
|
220
|
+
try {
|
|
221
|
+
this.#settleMeasured(active, markers, measurement);
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
this.#settleMeasureFailure(active, measureFailed());
|
|
225
|
+
}
|
|
151
226
|
}, () => {
|
|
152
|
-
this.#settleMeasureFailure(
|
|
227
|
+
this.#settleMeasureFailure(active, measureFailed());
|
|
153
228
|
});
|
|
154
229
|
}
|
|
155
230
|
#handleRender(payload) {
|
|
156
|
-
|
|
157
|
-
|
|
231
|
+
if (this.#usedRequestIds.has(payload.requestId)) {
|
|
232
|
+
this.#postError(payload.requestId, {
|
|
233
|
+
code: 'studio.preview/request-id-reused',
|
|
234
|
+
defaultMessage: 'The preview request identifier was already used in this session.',
|
|
235
|
+
retryable: false,
|
|
236
|
+
});
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
this.#usedRequestIds.add(payload.requestId);
|
|
240
|
+
this.#invalidateMeasure('Preview measurement was superseded by a render.');
|
|
241
|
+
this.#invalidateRender('Preview render was superseded.');
|
|
242
|
+
this.#measuredRenderDigest = undefined;
|
|
243
|
+
this.#markerInventory.clear();
|
|
244
|
+
const active = {
|
|
245
|
+
controller: new AbortController(),
|
|
246
|
+
draftDigest: payload.draftDigest,
|
|
247
|
+
generation: this.#renderGeneration,
|
|
248
|
+
requestId: payload.requestId,
|
|
249
|
+
};
|
|
250
|
+
this.#activeRender = active;
|
|
158
251
|
let result;
|
|
159
252
|
try {
|
|
160
|
-
result = this.#renderCallback(payload);
|
|
253
|
+
result = this.#renderCallback(payload, active.controller.signal);
|
|
161
254
|
}
|
|
162
255
|
catch {
|
|
163
|
-
this.#settleFailure(
|
|
256
|
+
this.#settleFailure(active);
|
|
164
257
|
return;
|
|
165
258
|
}
|
|
166
|
-
void result.then((rendered) => {
|
|
167
|
-
|
|
259
|
+
void Promise.resolve(result).then((rendered) => {
|
|
260
|
+
try {
|
|
261
|
+
this.#settleRendered(active, rendered);
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
this.#settleFailure(active);
|
|
265
|
+
}
|
|
168
266
|
}, () => {
|
|
169
|
-
this.#settleFailure(
|
|
267
|
+
this.#settleFailure(active);
|
|
170
268
|
});
|
|
171
269
|
}
|
|
172
270
|
#post(message) {
|
|
271
|
+
if (!isPreviewMessage(message)) {
|
|
272
|
+
throw new TypeError('Refused an invalid outbound preview message.');
|
|
273
|
+
}
|
|
274
|
+
this.#sequence += 1;
|
|
173
275
|
this.#target.postMessage(message, this.#targetOrigin);
|
|
174
276
|
}
|
|
175
277
|
#receive(event) {
|
|
@@ -193,28 +295,58 @@ export class PreviewHost {
|
|
|
193
295
|
listener(event.data.payload);
|
|
194
296
|
}
|
|
195
297
|
}
|
|
298
|
+
else if (event.data.type === 'studio.preview/viewport') {
|
|
299
|
+
// Geometry captured before a resize or semantic viewport switch no longer
|
|
300
|
+
// describes the surface. Invalidate before listeners apply the new viewport.
|
|
301
|
+
this.#invalidateMeasure('Preview viewport changed.');
|
|
302
|
+
for (const listener of this.#viewportListeners) {
|
|
303
|
+
listener(event.data.payload);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
else if (event.data.type === 'studio.preview/dispose') {
|
|
307
|
+
// Resource revocation for a superseded draft; the channel stays open.
|
|
308
|
+
if (event.data.payload.draftDigest === undefined ||
|
|
309
|
+
event.data.payload.draftDigest === this.#activeRender?.draftDigest) {
|
|
310
|
+
this.#invalidateRender('Preview render was disposed.');
|
|
311
|
+
}
|
|
312
|
+
if (event.data.payload.draftDigest === undefined ||
|
|
313
|
+
event.data.payload.draftDigest === this.#measuredRenderDigest) {
|
|
314
|
+
this.#invalidateMeasure('Preview measurement was disposed.');
|
|
315
|
+
this.#measuredRenderDigest = undefined;
|
|
316
|
+
this.#markerInventory.clear();
|
|
317
|
+
}
|
|
318
|
+
for (const listener of this.#disposeListeners) {
|
|
319
|
+
listener(event.data.payload);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
196
322
|
else if (event.data.type === 'studio.preview/teardown') {
|
|
197
323
|
this.dispose();
|
|
198
324
|
}
|
|
199
325
|
}
|
|
200
326
|
// Measurer failure details never cross the channel: the rejection reason is dropped and a
|
|
201
327
|
// stable generic error is posted instead, correlated by the request identifier.
|
|
202
|
-
#settleMeasureFailure(
|
|
203
|
-
if (this.#
|
|
328
|
+
#settleMeasureFailure(active, failure) {
|
|
329
|
+
if (!this.#isActiveMeasure(active)) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
this.#activeMeasure = undefined;
|
|
333
|
+
this.#postError(active.requestId, failure);
|
|
334
|
+
}
|
|
335
|
+
#postError(correlationId, failure) {
|
|
336
|
+
if (this.#disposed) {
|
|
204
337
|
return;
|
|
205
338
|
}
|
|
206
|
-
this.#latestMeasureRequestId = undefined;
|
|
207
339
|
this.#post({
|
|
208
340
|
channelId: this.#channelId,
|
|
209
341
|
contractVersion: STUDIO_CONTRACT_VERSION,
|
|
210
342
|
kind: 'preview-message',
|
|
211
343
|
payload: {
|
|
212
344
|
code: failure.code,
|
|
213
|
-
correlationId
|
|
345
|
+
correlationId,
|
|
214
346
|
message: { defaultMessage: failure.defaultMessage, key: failure.code },
|
|
215
347
|
retryable: failure.retryable,
|
|
216
348
|
},
|
|
217
|
-
sequence: this.#sequence
|
|
349
|
+
sequence: this.#sequence,
|
|
218
350
|
sessionGeneration: this.#sessionGeneration,
|
|
219
351
|
type: 'studio.preview/error',
|
|
220
352
|
});
|
|
@@ -223,12 +355,10 @@ export class PreviewHost {
|
|
|
223
355
|
// markers from the request are answered — requested markers the measurer cannot place are
|
|
224
356
|
// listed as unknown, extra markers it invents are dropped. A measurement superseded by a
|
|
225
357
|
// newer request, voided by a reload, or settling after disposal is dropped silently.
|
|
226
|
-
#settleMeasured(
|
|
227
|
-
|
|
228
|
-
if (this.#disposed || this.#latestMeasureRequestId !== requestId || draftDigest === undefined) {
|
|
358
|
+
#settleMeasured(active, markers, measurement) {
|
|
359
|
+
if (!this.#isActiveMeasure(active)) {
|
|
229
360
|
return;
|
|
230
361
|
}
|
|
231
|
-
this.#latestMeasureRequestId = undefined;
|
|
232
362
|
const measurements = {};
|
|
233
363
|
const unknown = [];
|
|
234
364
|
for (const marker of markers) {
|
|
@@ -247,14 +377,14 @@ export class PreviewHost {
|
|
|
247
377
|
}));
|
|
248
378
|
}
|
|
249
379
|
}
|
|
250
|
-
|
|
380
|
+
const message = {
|
|
251
381
|
channelId: this.#channelId,
|
|
252
382
|
contractVersion: STUDIO_CONTRACT_VERSION,
|
|
253
383
|
kind: 'preview-message',
|
|
254
384
|
payload: {
|
|
255
|
-
draftDigest,
|
|
385
|
+
draftDigest: active.draftDigest,
|
|
256
386
|
measurements,
|
|
257
|
-
requestId,
|
|
387
|
+
requestId: active.requestId,
|
|
258
388
|
unknown,
|
|
259
389
|
viewport: {
|
|
260
390
|
devicePixelRatio: measurement.viewport.devicePixelRatio,
|
|
@@ -264,61 +394,87 @@ export class PreviewHost {
|
|
|
264
394
|
width: measurement.viewport.width,
|
|
265
395
|
},
|
|
266
396
|
},
|
|
267
|
-
sequence: this.#sequence
|
|
397
|
+
sequence: this.#sequence,
|
|
268
398
|
sessionGeneration: this.#sessionGeneration,
|
|
269
399
|
type: 'studio.preview/measurements',
|
|
270
|
-
}
|
|
400
|
+
};
|
|
401
|
+
if (!isPreviewMessage(message)) {
|
|
402
|
+
this.#settleMeasureFailure(active, measureFailed());
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
this.#activeMeasure = undefined;
|
|
406
|
+
this.#post(message);
|
|
271
407
|
}
|
|
272
408
|
// Renderer failure details never cross the channel: the rejection reason is dropped and a
|
|
273
|
-
// stable generic error is posted instead, correlated by the request
|
|
274
|
-
#settleFailure(
|
|
275
|
-
if (this.#
|
|
409
|
+
// stable generic error is posted instead, correlated by the unique render request id.
|
|
410
|
+
#settleFailure(active) {
|
|
411
|
+
if (!this.#isActiveRender(active)) {
|
|
276
412
|
return;
|
|
277
413
|
}
|
|
278
|
-
this.#
|
|
279
|
-
this.#
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
payload: {
|
|
284
|
-
code: 'studio.preview/render-failed',
|
|
285
|
-
correlationId: draftDigest,
|
|
286
|
-
message: {
|
|
287
|
-
defaultMessage: 'Preview rendering failed.',
|
|
288
|
-
key: 'studio.preview/render-failed',
|
|
289
|
-
},
|
|
290
|
-
retryable: true,
|
|
291
|
-
},
|
|
292
|
-
sequence: this.#sequence++,
|
|
293
|
-
sessionGeneration: this.#sessionGeneration,
|
|
294
|
-
type: 'studio.preview/error',
|
|
414
|
+
this.#activeRender = undefined;
|
|
415
|
+
this.#postError(active.requestId, {
|
|
416
|
+
code: 'studio.preview/render-failed',
|
|
417
|
+
defaultMessage: 'Preview rendering failed.',
|
|
418
|
+
retryable: true,
|
|
295
419
|
});
|
|
296
420
|
}
|
|
297
421
|
// The response digest is stamped from the request, so a callback can never answer for a
|
|
298
422
|
// different draft than the one it was asked to render. Results that were superseded by a
|
|
299
423
|
// newer request, or that settle after disposal, are dropped silently.
|
|
300
|
-
#settleRendered(
|
|
301
|
-
if (this.#
|
|
424
|
+
#settleRendered(active, rendered) {
|
|
425
|
+
if (!this.#isActiveRender(active)) {
|
|
302
426
|
return;
|
|
303
427
|
}
|
|
304
|
-
|
|
428
|
+
if (!isPreviewRenderedPayload(rendered) ||
|
|
429
|
+
rendered.draftDigest !== active.draftDigest ||
|
|
430
|
+
rendered.requestId !== active.requestId) {
|
|
431
|
+
this.#settleFailure(active);
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
this.#activeRender = undefined;
|
|
305
435
|
// The surface now shows this render; measurements are bound to its digest.
|
|
306
|
-
this.#measuredRenderDigest = draftDigest;
|
|
436
|
+
this.#measuredRenderDigest = active.draftDigest;
|
|
437
|
+
this.#markerInventory.clear();
|
|
438
|
+
for (const marker of rendered.markers) {
|
|
439
|
+
this.#markerInventory.add(marker);
|
|
440
|
+
}
|
|
307
441
|
this.#post({
|
|
308
442
|
channelId: this.#channelId,
|
|
309
443
|
contractVersion: STUDIO_CONTRACT_VERSION,
|
|
310
444
|
kind: 'preview-message',
|
|
311
445
|
payload: {
|
|
312
446
|
diagnostics: rendered.diagnostics,
|
|
313
|
-
draftDigest,
|
|
447
|
+
draftDigest: active.draftDigest,
|
|
314
448
|
markers: rendered.markers,
|
|
315
|
-
|
|
449
|
+
markerMap: rendered.markerMap,
|
|
450
|
+
requestId: active.requestId,
|
|
316
451
|
},
|
|
317
|
-
sequence: this.#sequence
|
|
452
|
+
sequence: this.#sequence,
|
|
318
453
|
sessionGeneration: this.#sessionGeneration,
|
|
319
454
|
type: 'studio.preview/rendered',
|
|
320
455
|
});
|
|
321
456
|
}
|
|
457
|
+
#invalidateMeasure(reason) {
|
|
458
|
+
this.#measureGeneration += 1;
|
|
459
|
+
this.#activeMeasure?.controller.abort(reason);
|
|
460
|
+
this.#activeMeasure = undefined;
|
|
461
|
+
}
|
|
462
|
+
#invalidateRender(reason) {
|
|
463
|
+
this.#renderGeneration += 1;
|
|
464
|
+
this.#activeRender?.controller.abort(reason);
|
|
465
|
+
this.#activeRender = undefined;
|
|
466
|
+
}
|
|
467
|
+
#isActiveMeasure(active) {
|
|
468
|
+
return (!this.#disposed &&
|
|
469
|
+
this.#activeMeasure === active &&
|
|
470
|
+
active.generation === this.#measureGeneration &&
|
|
471
|
+
active.draftDigest === this.#measuredRenderDigest);
|
|
472
|
+
}
|
|
473
|
+
#isActiveRender(active) {
|
|
474
|
+
return (!this.#disposed &&
|
|
475
|
+
this.#activeRender === active &&
|
|
476
|
+
active.generation === this.#renderGeneration);
|
|
477
|
+
}
|
|
322
478
|
}
|
|
323
479
|
function measureFailed() {
|
|
324
480
|
return {
|
package/dist/preview-host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-host.js","sourceRoot":"","sources":["../src/preview-host.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"preview-host.js","sourceRoot":"","sources":["../src/preview-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type CanonicalSerializationOptions } from '@kumwe/studio-core';
|
|
2
|
+
import type { BlueprintDocument, NodeId, StableId, StudioArtifact } from '@kumwe/studio-protocol';
|
|
3
|
+
export interface PreviewDigestOptions extends CanonicalSerializationOptions {
|
|
4
|
+
/** Web Crypto implementation used to hash the canonical bytes. */
|
|
5
|
+
subtle?: Pick<SubtleCrypto, 'digest'>;
|
|
6
|
+
}
|
|
7
|
+
export interface PreviewMarkerInventory {
|
|
8
|
+
markerMap: Record<StableId, NodeId>;
|
|
9
|
+
markers: StableId[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Return the exact digest preimage for a complete, schema-valid Studio draft.
|
|
13
|
+
* No transport envelope, prefix, BOM, viewport, revision override, or trailing
|
|
14
|
+
* newline is added: the preimage is only the canonical UTF-8 artifact bytes.
|
|
15
|
+
* The authoritative host MUST schema- and semantics-validate the artifact
|
|
16
|
+
* before treating this helper's result as a valid draft identity.
|
|
17
|
+
*/
|
|
18
|
+
export declare function canonicalPreviewDraftBytes(draft: StudioArtifact, options?: Readonly<CanonicalSerializationOptions>): Uint8Array;
|
|
19
|
+
/** Compute the lowercase SHA-256 hex identity of a complete Studio draft. */
|
|
20
|
+
export declare function computePreviewDraftDigest(draft: StudioArtifact, options?: Readonly<PreviewDigestOptions>): Promise<string>;
|
|
21
|
+
/** Create the canonical marker for one zero-based Blueprint preorder ordinal. */
|
|
22
|
+
export declare function createPreviewMarker(draftDigest: string, ordinal: number): StableId;
|
|
23
|
+
/**
|
|
24
|
+
* Build the portable marker inventory for a Blueprint. Traversal is roots in
|
|
25
|
+
* array order, each node before descendants, slot names in ascending UTF-16
|
|
26
|
+
* code-unit order, and children in array order. Node ids must be unique.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createPreviewMarkerInventory(draft: BlueprintDocument, draftDigest: string): PreviewMarkerInventory;
|
|
29
|
+
//# sourceMappingURL=preview-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-identity.d.ts","sourceRoot":"","sources":["../src/preview-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,KAAK,EACV,iBAAiB,EAGjB,MAAM,EACN,QAAQ,EACR,cAAc,EACf,MAAM,wBAAwB,CAAC;AAKhC,MAAM,WAAW,oBAAqB,SAAQ,6BAA6B;IACzE,kEAAkE;IAClE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,QAAQ,CAAC,6BAA6B,CAAM,GACpD,UAAU,CAEZ;AAED,6EAA6E;AAC7E,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,QAAQ,CAAC,oBAAoB,CAAM,GAC3C,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAQlF;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,MAAM,GAClB,sBAAsB,CA4BxB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { canonicalUtf8Bytes } from '@kumwe/studio-core';
|
|
2
|
+
const draftDigestPattern = /^[0-9a-f]{64}$/u;
|
|
3
|
+
const maximumMarkerOrdinal = 99_999;
|
|
4
|
+
/**
|
|
5
|
+
* Return the exact digest preimage for a complete, schema-valid Studio draft.
|
|
6
|
+
* No transport envelope, prefix, BOM, viewport, revision override, or trailing
|
|
7
|
+
* newline is added: the preimage is only the canonical UTF-8 artifact bytes.
|
|
8
|
+
* The authoritative host MUST schema- and semantics-validate the artifact
|
|
9
|
+
* before treating this helper's result as a valid draft identity.
|
|
10
|
+
*/
|
|
11
|
+
export function canonicalPreviewDraftBytes(draft, options = {}) {
|
|
12
|
+
return canonicalUtf8Bytes(draft, options);
|
|
13
|
+
}
|
|
14
|
+
/** Compute the lowercase SHA-256 hex identity of a complete Studio draft. */
|
|
15
|
+
export async function computePreviewDraftDigest(draft, options = {}) {
|
|
16
|
+
const subtle = options.subtle ?? globalThis.crypto.subtle;
|
|
17
|
+
const serializationOptions = options.maximumDepth === undefined ? {} : { maximumDepth: options.maximumDepth };
|
|
18
|
+
const preimage = Uint8Array.from(canonicalPreviewDraftBytes(draft, serializationOptions));
|
|
19
|
+
const digest = await subtle.digest('SHA-256', preimage);
|
|
20
|
+
return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
21
|
+
}
|
|
22
|
+
/** Create the canonical marker for one zero-based Blueprint preorder ordinal. */
|
|
23
|
+
export function createPreviewMarker(draftDigest, ordinal) {
|
|
24
|
+
if (!draftDigestPattern.test(draftDigest)) {
|
|
25
|
+
throw new TypeError('Preview draft digest must be 64 lowercase hexadecimal characters.');
|
|
26
|
+
}
|
|
27
|
+
if (!Number.isSafeInteger(ordinal) || ordinal < 0 || ordinal > maximumMarkerOrdinal) {
|
|
28
|
+
throw new RangeError(`Preview marker ordinal must be between 0 and ${maximumMarkerOrdinal}.`);
|
|
29
|
+
}
|
|
30
|
+
return `studio.preview/node/${draftDigest}/${ordinal}`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build the portable marker inventory for a Blueprint. Traversal is roots in
|
|
34
|
+
* array order, each node before descendants, slot names in ascending UTF-16
|
|
35
|
+
* code-unit order, and children in array order. Node ids must be unique.
|
|
36
|
+
*/
|
|
37
|
+
export function createPreviewMarkerInventory(draft, draftDigest) {
|
|
38
|
+
const markerMap = {};
|
|
39
|
+
const markers = [];
|
|
40
|
+
const nodeIds = new Set();
|
|
41
|
+
const visit = (node) => {
|
|
42
|
+
if (nodeIds.has(node.id)) {
|
|
43
|
+
throw new TypeError(`Preview marker inventory cannot contain duplicate node id ${node.id}.`);
|
|
44
|
+
}
|
|
45
|
+
nodeIds.add(node.id);
|
|
46
|
+
const marker = createPreviewMarker(draftDigest, markers.length);
|
|
47
|
+
markers.push(marker);
|
|
48
|
+
markerMap[marker] = node.id;
|
|
49
|
+
const slots = Object.entries(node.slots).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0);
|
|
50
|
+
for (const [, children] of slots) {
|
|
51
|
+
for (const child of children) {
|
|
52
|
+
visit(child);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
for (const root of draft.roots) {
|
|
57
|
+
visit(root);
|
|
58
|
+
}
|
|
59
|
+
return { markerMap, markers };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=preview-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-identity.js","sourceRoot":"","sources":["../src/preview-identity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kumwe/studio-preview",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.6",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/kumwe/studio.git",
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
"build": "tsc -b"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@kumwe/studio-
|
|
29
|
+
"@kumwe/studio-core": "0.1.0-alpha.8",
|
|
30
|
+
"@kumwe/studio-protocol": "0.1.0-alpha.6"
|
|
30
31
|
},
|
|
31
32
|
"publishConfig": {
|
|
32
33
|
"access": "public",
|