@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.
@@ -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
- #latestMeasureRequestId;
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.#latestMeasureRequestId = undefined;
72
- this.#latestRenderDigest = undefined;
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.#latestMeasureRequestId = undefined;
88
- this.#latestRenderDigest = undefined;
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.#latestMeasureRequestId = requestId;
123
- if (this.#measureCallback === undefined) {
124
- this.#settleMeasureFailure(requestId, {
125
- code: 'studio.preview/measure-unavailable',
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.#settleMeasureFailure(requestId, {
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 markers = [...new Set(payload.markers)];
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(requestId, measureFailed());
216
+ this.#settleMeasureFailure(active, measureFailed());
147
217
  return;
148
218
  }
149
- void result.then((measurement) => {
150
- this.#settleMeasured(requestId, markers, measurement);
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(requestId, measureFailed());
227
+ this.#settleMeasureFailure(active, measureFailed());
153
228
  });
154
229
  }
155
230
  #handleRender(payload) {
156
- const draftDigest = payload.draftDigest;
157
- this.#latestRenderDigest = draftDigest;
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(draftDigest);
256
+ this.#settleFailure(active);
164
257
  return;
165
258
  }
166
- void result.then((rendered) => {
167
- this.#settleRendered(draftDigest, rendered);
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(draftDigest);
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(requestId, failure) {
203
- if (this.#disposed || this.#latestMeasureRequestId !== requestId) {
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: requestId,
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(requestId, markers, measurement) {
227
- const draftDigest = this.#measuredRenderDigest;
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
- this.#post({
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's draft digest.
274
- #settleFailure(draftDigest) {
275
- if (this.#disposed || this.#latestRenderDigest !== draftDigest) {
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.#latestRenderDigest = undefined;
279
- this.#post({
280
- channelId: this.#channelId,
281
- contractVersion: STUDIO_CONTRACT_VERSION,
282
- kind: 'preview-message',
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(draftDigest, rendered) {
301
- if (this.#disposed || this.#latestRenderDigest !== draftDigest) {
424
+ #settleRendered(active, rendered) {
425
+ if (!this.#isActiveRender(active)) {
302
426
  return;
303
427
  }
304
- this.#latestRenderDigest = undefined;
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
- ...(rendered.markerMap === undefined ? {} : { markerMap: rendered.markerMap }),
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 {
@@ -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.4",
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-protocol": "0.1.0-alpha.4"
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",