@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,91 @@
1
+ export class ScenePlanValidationError extends Error {
2
+ diagnostics;
3
+ constructor(diagnostics) {
4
+ const owned = freezeDiagnostics(diagnostics);
5
+ super(owned.map((diagnostic) => formatDiagnostic(diagnostic)).join("; "));
6
+ this.name = "ScenePlanValidationError";
7
+ this.diagnostics = owned;
8
+ }
9
+ }
10
+ export function createDiagnostic(input) {
11
+ return Object.freeze({
12
+ version: 1,
13
+ code: input.code,
14
+ severity: input.severity ?? "error",
15
+ stage: input.stage,
16
+ path: Object.freeze([...(input.path ?? [])]),
17
+ message: input.message,
18
+ recoverable: input.recoverable ?? input.severity === "warning",
19
+ ...(input.entityId === undefined ? {} : { entityId: input.entityId }),
20
+ ...(input.assetId === undefined ? {} : { assetId: input.assetId }),
21
+ ...(input.materialId === undefined ? {} : { materialId: input.materialId }),
22
+ ...(input.operationIndex === undefined
23
+ ? {}
24
+ : { operationIndex: input.operationIndex }),
25
+ ...(input.details === undefined
26
+ ? {}
27
+ : { details: structuredClone(input.details) }),
28
+ });
29
+ }
30
+ /** Dedupe and sort diagnostics so callers can safely compare results. */
31
+ export function finalizeDiagnostics(diagnostics) {
32
+ const unique = new Map();
33
+ for (const diagnostic of diagnostics) {
34
+ const owned = createDiagnostic(diagnostic);
35
+ const key = JSON.stringify([
36
+ owned.stage,
37
+ owned.severity,
38
+ owned.code,
39
+ owned.path,
40
+ owned.message,
41
+ owned.entityId ?? null,
42
+ owned.assetId ?? null,
43
+ owned.materialId ?? null,
44
+ owned.operationIndex ?? null,
45
+ ]);
46
+ if (!unique.has(key))
47
+ unique.set(key, owned);
48
+ }
49
+ return Object.freeze([...unique.values()].sort(compareDiagnostics).map((item) => item));
50
+ }
51
+ export function hasErrors(diagnostics) {
52
+ return diagnostics.some((diagnostic) => diagnostic.severity === "error");
53
+ }
54
+ function freezeDiagnostics(diagnostics) {
55
+ return finalizeDiagnostics(diagnostics);
56
+ }
57
+ function compareDiagnostics(left, right) {
58
+ const path = comparePaths(left.path, right.path);
59
+ if (path !== 0)
60
+ return path;
61
+ const fields = ["stage", "severity", "code", "message"];
62
+ for (const field of fields) {
63
+ const comparison = String(left[field]).localeCompare(String(right[field]));
64
+ if (comparison !== 0)
65
+ return comparison;
66
+ }
67
+ return 0;
68
+ }
69
+ function comparePaths(left, right) {
70
+ const length = Math.min(left.length, right.length);
71
+ for (let index = 0; index < length; index += 1) {
72
+ const leftPart = left[index];
73
+ const rightPart = right[index];
74
+ if (leftPart === rightPart)
75
+ continue;
76
+ if (typeof leftPart === "number" && typeof rightPart === "number") {
77
+ return leftPart - rightPart;
78
+ }
79
+ return String(leftPart).localeCompare(String(rightPart));
80
+ }
81
+ return left.length - right.length;
82
+ }
83
+ function formatDiagnostic(diagnostic) {
84
+ const path = diagnostic.path.length
85
+ ? diagnostic.path.reduce((value, segment) => typeof segment === "number"
86
+ ? `${value}[${segment}]`
87
+ : `${value}.${segment}`, "$")
88
+ : "$";
89
+ return `${path}: ${diagnostic.message}`;
90
+ }
91
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/diagnostics/diagnostics.ts"],"names":[],"mappings":"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"}