@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.
- package/README.md +114 -0
- package/dist/check/check-scene-input.d.ts +38 -0
- package/dist/check/check-scene-input.d.ts.map +1 -0
- package/dist/check/check-scene-input.js +209 -0
- package/dist/check/check-scene-input.js.map +1 -0
- package/dist/compilation/compile.d.ts +4 -0
- package/dist/compilation/compile.d.ts.map +1 -0
- package/dist/compilation/compile.js +498 -0
- package/dist/compilation/compile.js.map +1 -0
- package/dist/description/example-recipes.d.ts +66 -0
- package/dist/description/example-recipes.d.ts.map +1 -0
- package/dist/description/example-recipes.js +1097 -0
- package/dist/description/example-recipes.js.map +1 -0
- package/dist/description/examples.d.ts +18 -0
- package/dist/description/examples.d.ts.map +1 -0
- package/dist/description/examples.js +58 -0
- package/dist/description/examples.js.map +1 -0
- package/dist/description/information.d.ts +415 -0
- package/dist/description/information.d.ts.map +1 -0
- package/dist/description/information.js +980 -0
- package/dist/description/information.js.map +1 -0
- package/dist/description/recipes.d.ts +20 -0
- package/dist/description/recipes.d.ts.map +1 -0
- package/dist/description/recipes.js +163 -0
- package/dist/description/recipes.js.map +1 -0
- package/dist/description/scene-fields.d.ts +11 -0
- package/dist/description/scene-fields.d.ts.map +1 -0
- package/dist/description/scene-fields.js +471 -0
- package/dist/description/scene-fields.js.map +1 -0
- package/dist/diagnostics/diagnostics.d.ts +79 -0
- package/dist/diagnostics/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics/diagnostics.js +91 -0
- package/dist/diagnostics/diagnostics.js.map +1 -0
- package/dist/generated/example-gallery.d.ts +2897 -0
- package/dist/generated/example-gallery.d.ts.map +1 -0
- package/dist/generated/example-gallery.js +3290 -0
- package/dist/generated/example-gallery.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/model/json.d.ts +14 -0
- package/dist/model/json.d.ts.map +1 -0
- package/dist/model/json.js +60 -0
- package/dist/model/json.js.map +1 -0
- package/dist/model/types.d.ts +329 -0
- package/dist/model/types.d.ts.map +1 -0
- package/dist/model/types.js +5 -0
- package/dist/model/types.js.map +1 -0
- package/dist/normalization/normalize.d.ts +7 -0
- package/dist/normalization/normalize.d.ts.map +1 -0
- package/dist/normalization/normalize.js +145 -0
- package/dist/normalization/normalize.js.map +1 -0
- package/dist/parsing/parse.d.ts +5 -0
- package/dist/parsing/parse.d.ts.map +1 -0
- package/dist/parsing/parse.js +330 -0
- package/dist/parsing/parse.js.map +1 -0
- package/dist/patch/patch.d.ts +6 -0
- package/dist/patch/patch.d.ts.map +1 -0
- package/dist/patch/patch.js +319 -0
- package/dist/patch/patch.js.map +1 -0
- package/dist/validation/validate.d.ts +16 -0
- package/dist/validation/validate.d.ts.map +1 -0
- package/dist/validation/validate.js +704 -0
- package/dist/validation/validate.js.map +1 -0
- 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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"}
|