@skenora/scene-plan 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 (66) hide show
  1. package/README.md +114 -0
  2. package/dist/check/check-scene-input.d.ts +38 -0
  3. package/dist/check/check-scene-input.d.ts.map +1 -0
  4. package/dist/check/check-scene-input.js +209 -0
  5. package/dist/check/check-scene-input.js.map +1 -0
  6. package/dist/compilation/compile.d.ts +4 -0
  7. package/dist/compilation/compile.d.ts.map +1 -0
  8. package/dist/compilation/compile.js +498 -0
  9. package/dist/compilation/compile.js.map +1 -0
  10. package/dist/description/example-recipes.d.ts +66 -0
  11. package/dist/description/example-recipes.d.ts.map +1 -0
  12. package/dist/description/example-recipes.js +1097 -0
  13. package/dist/description/example-recipes.js.map +1 -0
  14. package/dist/description/examples.d.ts +18 -0
  15. package/dist/description/examples.d.ts.map +1 -0
  16. package/dist/description/examples.js +58 -0
  17. package/dist/description/examples.js.map +1 -0
  18. package/dist/description/information.d.ts +415 -0
  19. package/dist/description/information.d.ts.map +1 -0
  20. package/dist/description/information.js +980 -0
  21. package/dist/description/information.js.map +1 -0
  22. package/dist/description/recipes.d.ts +20 -0
  23. package/dist/description/recipes.d.ts.map +1 -0
  24. package/dist/description/recipes.js +163 -0
  25. package/dist/description/recipes.js.map +1 -0
  26. package/dist/description/scene-fields.d.ts +11 -0
  27. package/dist/description/scene-fields.d.ts.map +1 -0
  28. package/dist/description/scene-fields.js +471 -0
  29. package/dist/description/scene-fields.js.map +1 -0
  30. package/dist/diagnostics/diagnostics.d.ts +79 -0
  31. package/dist/diagnostics/diagnostics.d.ts.map +1 -0
  32. package/dist/diagnostics/diagnostics.js +91 -0
  33. package/dist/diagnostics/diagnostics.js.map +1 -0
  34. package/dist/generated/example-gallery.d.ts +2897 -0
  35. package/dist/generated/example-gallery.d.ts.map +1 -0
  36. package/dist/generated/example-gallery.js +3290 -0
  37. package/dist/generated/example-gallery.js.map +1 -0
  38. package/dist/index.d.ts +15 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +15 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/model/json.d.ts +14 -0
  43. package/dist/model/json.d.ts.map +1 -0
  44. package/dist/model/json.js +60 -0
  45. package/dist/model/json.js.map +1 -0
  46. package/dist/model/types.d.ts +329 -0
  47. package/dist/model/types.d.ts.map +1 -0
  48. package/dist/model/types.js +5 -0
  49. package/dist/model/types.js.map +1 -0
  50. package/dist/normalization/normalize.d.ts +7 -0
  51. package/dist/normalization/normalize.d.ts.map +1 -0
  52. package/dist/normalization/normalize.js +145 -0
  53. package/dist/normalization/normalize.js.map +1 -0
  54. package/dist/parsing/parse.d.ts +5 -0
  55. package/dist/parsing/parse.d.ts.map +1 -0
  56. package/dist/parsing/parse.js +330 -0
  57. package/dist/parsing/parse.js.map +1 -0
  58. package/dist/patch/patch.d.ts +6 -0
  59. package/dist/patch/patch.d.ts.map +1 -0
  60. package/dist/patch/patch.js +319 -0
  61. package/dist/patch/patch.js.map +1 -0
  62. package/dist/validation/validate.d.ts +16 -0
  63. package/dist/validation/validate.d.ts.map +1 -0
  64. package/dist/validation/validate.js +704 -0
  65. package/dist/validation/validate.js.map +1 -0
  66. package/package.json +31 -0
@@ -0,0 +1,319 @@
1
+ import { createDiagnostic, finalizeDiagnostics, hasErrors, ScenePlanValidationError, } from "../diagnostics/diagnostics.js";
2
+ import { isJsonObject, isJsonValue } from "../model/json.js";
3
+ import { normalizeScenePatch } from "../normalization/normalize.js";
4
+ import { isStableScenePlanId, validateSceneBlueprint, } from "../validation/validate.js";
5
+ const TARGET_KINDS = new Set([
6
+ "entity",
7
+ "resource",
8
+ "material",
9
+ "materialBinding",
10
+ "textureAnimation",
11
+ "cameraPath",
12
+ "light",
13
+ "flow",
14
+ "setting",
15
+ ]);
16
+ const SETTING_IDS = new Set([
17
+ "camera",
18
+ "environment",
19
+ "ground",
20
+ "fog",
21
+ "weather",
22
+ "postProcess",
23
+ "variables",
24
+ ]);
25
+ const RESERVED_PATH_SEGMENTS = new Set([
26
+ "",
27
+ "__proto__",
28
+ "prototype",
29
+ "constructor",
30
+ "id",
31
+ ]);
32
+ export function validateScenePatch(input, context = {}) {
33
+ const normalized = normalizeScenePatch(input);
34
+ if (!normalized.ok || !normalized.value) {
35
+ return { valid: false, diagnostics: normalized.diagnostics };
36
+ }
37
+ const diagnostics = [...normalized.diagnostics];
38
+ const patch = normalized.value;
39
+ validateTargetPrecondition(patch, context, diagnostics);
40
+ const seenTargets = new Set();
41
+ for (const [index, operation] of patch.operations.entries()) {
42
+ validateOperation(operation, index, context, seenTargets, diagnostics);
43
+ }
44
+ const finalized = finalizeDiagnostics(diagnostics);
45
+ return {
46
+ valid: !hasErrors(finalized),
47
+ normalized: patch,
48
+ diagnostics: finalized,
49
+ };
50
+ }
51
+ export function compileScenePatch(input, context = {}) {
52
+ const validation = validateScenePatch(input, context);
53
+ if (!validation.normalized || !validation.valid) {
54
+ return {
55
+ ok: false,
56
+ ...(validation.normalized === undefined
57
+ ? {}
58
+ : {
59
+ patch: validation.normalized,
60
+ planHash: hashJson(validation.normalized),
61
+ }),
62
+ diagnostics: validation.diagnostics,
63
+ };
64
+ }
65
+ const patch = validation.normalized;
66
+ const operations = [];
67
+ const diagnostics = [...validation.diagnostics];
68
+ for (const [index, operation] of patch.operations.entries()) {
69
+ const path = targetPath(operation.target);
70
+ const state = targetState(context.document, operation.target);
71
+ if (operation.op === "create") {
72
+ operations.push({
73
+ op: "create",
74
+ sourceOperationIndex: index,
75
+ target: structuredClone(operation.target),
76
+ path,
77
+ value: structuredClone(operation.value),
78
+ targetState: state,
79
+ });
80
+ }
81
+ else if (operation.op === "update") {
82
+ operations.push({
83
+ op: "update",
84
+ sourceOperationIndex: index,
85
+ target: structuredClone(operation.target),
86
+ path,
87
+ changes: structuredClone(operation.changes),
88
+ targetState: state,
89
+ ...(context.document === undefined
90
+ ? {}
91
+ : {
92
+ previousValues: operation.changes.map((change) => {
93
+ const value = readRelativeValue(context.document, operation.target, change.path);
94
+ return {
95
+ path: [...change.path],
96
+ ...(value === undefined ? {} : { value }),
97
+ };
98
+ }),
99
+ }),
100
+ });
101
+ }
102
+ else {
103
+ const previousValue = context.document
104
+ ? readTargetValue(context.document, operation.target)
105
+ : undefined;
106
+ operations.push({
107
+ op: "remove",
108
+ sourceOperationIndex: index,
109
+ target: structuredClone(operation.target),
110
+ path,
111
+ targetState: state,
112
+ ...(previousValue === undefined ? {} : { previousValue }),
113
+ });
114
+ }
115
+ }
116
+ const requiresBaseDocument = operations.some((operation) => operation.targetState === "unknown");
117
+ if (requiresBaseDocument) {
118
+ diagnostics.push(createDiagnostic({
119
+ code: "patch-target-conflict",
120
+ stage: "patch",
121
+ path: ["operations"],
122
+ message: "Patch candidate requires a current SceneDocument snapshot before commit",
123
+ recoverable: true,
124
+ }));
125
+ }
126
+ const finalized = finalizeDiagnostics(diagnostics);
127
+ const candidate = Object.freeze({
128
+ schema: "skenora.scene.patch.candidate",
129
+ version: 1,
130
+ target: structuredClone(patch.target),
131
+ operations: Object.freeze(operations.map((operation) => structuredClone(operation))),
132
+ requiresBaseDocument,
133
+ });
134
+ return {
135
+ ok: !hasErrors(finalized),
136
+ patch: structuredClone(patch),
137
+ candidate,
138
+ planHash: hashJson(patch),
139
+ diagnostics: finalized,
140
+ };
141
+ }
142
+ export function assertSceneBlueprint(input, context = {}) {
143
+ const result = validateSceneBlueprint(input, context);
144
+ if (!result.valid)
145
+ throw new ScenePlanValidationError(result.diagnostics);
146
+ }
147
+ function validateTargetPrecondition(patch, context, diagnostics) {
148
+ if (!isStableScenePlanId(patch.target.sceneId)) {
149
+ add(diagnostics, "invalid-id", ["target", "sceneId"], "Patch sceneId is invalid");
150
+ }
151
+ if (!Number.isSafeInteger(patch.target.expectedRevision) ||
152
+ patch.target.expectedRevision < 0) {
153
+ add(diagnostics, "patch-invalid", ["target", "expectedRevision"], "Patch expectedRevision must be a non-negative safe integer");
154
+ }
155
+ if (patch.target.expectedDocumentHash !== undefined &&
156
+ (typeof patch.target.expectedDocumentHash !== "string" ||
157
+ patch.target.expectedDocumentHash.trim().length === 0)) {
158
+ add(diagnostics, "patch-invalid", ["target", "expectedDocumentHash"], "Patch expectedDocumentHash must be a non-empty string");
159
+ }
160
+ if (context.document && context.document.id !== patch.target.sceneId) {
161
+ add(diagnostics, "patch-target-conflict", ["target", "sceneId"], "Patch sceneId does not match the supplied document", { recoverable: true });
162
+ }
163
+ if (context.documentRevision !== undefined &&
164
+ context.documentRevision !== patch.target.expectedRevision) {
165
+ add(diagnostics, "patch-target-conflict", ["target", "expectedRevision"], "Patch expected revision " +
166
+ patch.target.expectedRevision +
167
+ " does not match " +
168
+ context.documentRevision, { recoverable: true });
169
+ }
170
+ if (context.documentHash !== undefined &&
171
+ patch.target.expectedDocumentHash !== undefined &&
172
+ context.documentHash !== patch.target.expectedDocumentHash) {
173
+ add(diagnostics, "patch-target-conflict", ["target", "expectedDocumentHash"], "Patch document hash does not match the supplied document", { recoverable: true });
174
+ }
175
+ }
176
+ function validateOperation(operation, index, context, seenTargets, diagnostics) {
177
+ const path = ["operations", index];
178
+ const target = operation?.target;
179
+ if (!target || !isJsonObject(target)) {
180
+ add(diagnostics, "patch-invalid", [...path, "target"], "Patch operation target is required", { operationIndex: index });
181
+ return;
182
+ }
183
+ if (!TARGET_KINDS.has(target.kind)) {
184
+ add(diagnostics, "patch-unsupported-target", [...path, "target", "kind"], "Patch target kind is unsupported", { operationIndex: index });
185
+ return;
186
+ }
187
+ if (target.kind === "setting") {
188
+ if (!SETTING_IDS.has(target.id)) {
189
+ add(diagnostics, "patch-unsupported-target", [...path, "target", "id"], "Patch setting target is unsupported", { operationIndex: index });
190
+ }
191
+ }
192
+ else if (!isStableScenePlanId(target.id)) {
193
+ add(diagnostics, "invalid-id", [...path, "target", "id"], "Patch target id is invalid", { operationIndex: index });
194
+ }
195
+ const targetKey = target.kind + ":" + target.id;
196
+ if (seenTargets.has(targetKey)) {
197
+ add(diagnostics, "patch-target-conflict", [...path, "target"], "Patch target is addressed more than once: " + targetKey, { operationIndex: index, recoverable: true });
198
+ }
199
+ seenTargets.add(targetKey);
200
+ if (operation.op === "create") {
201
+ if (!isJsonObject(operation.value)) {
202
+ add(diagnostics, "patch-invalid", [...path, "value"], "Create operation requires a JSON object value", { operationIndex: index });
203
+ }
204
+ if (targetState(context.document, target) === "present") {
205
+ add(diagnostics, "patch-target-conflict", [...path, "target"], "Create target already exists", { operationIndex: index, recoverable: true });
206
+ }
207
+ return;
208
+ }
209
+ if (operation.op === "update") {
210
+ if (!Array.isArray(operation.changes) || operation.changes.length === 0) {
211
+ add(diagnostics, "patch-invalid", [...path, "changes"], "Update operation requires at least one change", { operationIndex: index });
212
+ return;
213
+ }
214
+ const changePaths = new Set();
215
+ for (const [changeIndex, change] of operation.changes.entries()) {
216
+ validateChange(change, [...path, "changes", changeIndex], index, changePaths, diagnostics);
217
+ }
218
+ if (targetState(context.document, target) === "absent") {
219
+ add(diagnostics, "patch-target-conflict", [...path, "target"], "Update target does not exist", { operationIndex: index, recoverable: true });
220
+ }
221
+ return;
222
+ }
223
+ if (operation.op !== "remove") {
224
+ add(diagnostics, "patch-invalid", [...path, "op"], "Patch operation must be create, update, or remove", { operationIndex: index });
225
+ }
226
+ else if (targetState(context.document, target) === "absent") {
227
+ add(diagnostics, "patch-target-conflict", [...path, "target"], "Remove target does not exist", { operationIndex: index, recoverable: true });
228
+ }
229
+ }
230
+ function validateChange(change, path, operationIndex, seenPaths, diagnostics) {
231
+ if (!change || !Array.isArray(change.path) || change.path.length === 0) {
232
+ add(diagnostics, "patch-invalid", path, "Patch change path must be non-empty", { operationIndex });
233
+ return;
234
+ }
235
+ const key = change.path.join(".");
236
+ if (seenPaths.has(key)) {
237
+ add(diagnostics, "patch-target-conflict", path, "Patch change path is repeated: " + key, { operationIndex, recoverable: true });
238
+ }
239
+ seenPaths.add(key);
240
+ if (change.path.some((segment) => typeof segment !== "string" || RESERVED_PATH_SEGMENTS.has(segment))) {
241
+ add(diagnostics, "reserved-field", path, "Patch cannot update identity or prototype fields", { operationIndex });
242
+ }
243
+ if (change.path.some((segment) => typeof segment !== "string" || !segment || segment.includes("."))) {
244
+ add(diagnostics, "patch-invalid", path, "Patch change path contains an invalid segment", { operationIndex });
245
+ }
246
+ if (!isJsonValue(change.value)) {
247
+ add(diagnostics, "invalid-value", [...path, "value"], "Patch change value must be JSON", { operationIndex });
248
+ }
249
+ }
250
+ function targetPath(target) {
251
+ if (target.kind === "setting")
252
+ return [target.id];
253
+ const roots = {
254
+ entity: "entities",
255
+ resource: "assets",
256
+ material: "materials",
257
+ materialBinding: "materialBindings",
258
+ textureAnimation: "textureAnimations",
259
+ cameraPath: "cameraPaths",
260
+ light: "lights",
261
+ flow: "flows",
262
+ };
263
+ return [roots[target.kind], target.id];
264
+ }
265
+ function targetState(document, target) {
266
+ if (!document)
267
+ return "unknown";
268
+ return readTargetValue(document, target) === undefined ? "absent" : "present";
269
+ }
270
+ function readTargetValue(document, target) {
271
+ if (target.kind === "setting") {
272
+ return structuredClone(document[target.id]);
273
+ }
274
+ const root = targetPath(target)[0];
275
+ if (root === "lights") {
276
+ const light = document.lights.find((item) => item.id === target.id);
277
+ return light === undefined
278
+ ? undefined
279
+ : structuredClone(light);
280
+ }
281
+ return structuredClone(document[root]?.[target.id]);
282
+ }
283
+ function readRelativeValue(document, target, relativePath) {
284
+ let value = readTargetValue(document, target);
285
+ for (const segment of relativePath) {
286
+ if (!value || typeof value !== "object")
287
+ return undefined;
288
+ value = value[segment];
289
+ }
290
+ return isJsonValue(value) ? structuredClone(value) : undefined;
291
+ }
292
+ function add(diagnostics, code, path, message, options = {}) {
293
+ diagnostics.push(createDiagnostic({
294
+ code,
295
+ stage: "patch",
296
+ path,
297
+ message,
298
+ ...options,
299
+ }));
300
+ }
301
+ function hashJson(value) {
302
+ const serialized = JSON.stringify(canonicalize(value));
303
+ let hash = 0xcbf29ce484222325n;
304
+ for (const character of serialized) {
305
+ hash ^= BigInt(character.charCodeAt(0));
306
+ hash = BigInt.asUintN(64, hash * 0x100000001b3n);
307
+ }
308
+ return "fnv1a64:" + hash.toString(16).padStart(16, "0");
309
+ }
310
+ function canonicalize(value) {
311
+ if (Array.isArray(value))
312
+ return value.map(canonicalize);
313
+ if (!value || typeof value !== "object")
314
+ return value;
315
+ return Object.fromEntries(Object.entries(value)
316
+ .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
317
+ .map(([key, child]) => [key, canonicalize(child)]));
318
+ }
319
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch/patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type SceneDocumentData } from "@skenora/contracts";
2
+ import { type ScenePlanDiagnostic, type ScenePlanValidationResult } from "../diagnostics/diagnostics.js";
3
+ import type { SceneBlueprint, ScenePlanContext } from "../model/types.js";
4
+ export interface SceneBlueprintValidationOptions {
5
+ readonly requireResourceBindings?: boolean;
6
+ }
7
+ export declare function validateSceneBlueprint(input: unknown, context?: ScenePlanContext): ScenePlanValidationResult;
8
+ export declare function validateNormalizedSceneBlueprint(blueprint: SceneBlueprint, context?: ScenePlanContext, options?: SceneBlueprintValidationOptions): readonly ScenePlanDiagnostic[];
9
+ export declare function validateSceneDocumentCandidate(document: unknown): readonly ScenePlanDiagnostic[];
10
+ export declare function isStableScenePlanId(value: unknown): value is string;
11
+ export declare function validateNativeDocumentShape(document: unknown): {
12
+ readonly valid: boolean;
13
+ readonly diagnostics: readonly ScenePlanDiagnostic[];
14
+ };
15
+ export type { SceneDocumentData };
16
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validation/validate.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,iBAAiB,EAOvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,cAAc,EAOd,gBAAgB,EAGjB,MAAM,gBAAgB,CAAC;AAuBxB,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,gBAAqB,GAC7B,yBAAyB,CAoB3B;AAED,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,cAAc,EACzB,OAAO,GAAE,gBAAqB,EAC9B,OAAO,GAAE,+BAAoC,GAC5C,SAAS,mBAAmB,EAAE,CAwEhC;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,OAAO,GAChB,SAAS,mBAAmB,EAAE,CAKhC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEnE;AA61CD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,GAAG;IAC9D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACtD,CAGA;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC"}