@skenora/sdk 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 +167 -0
- package/dist/editor.d.ts +14 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +14 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lightbox.d.ts +3 -0
- package/dist/lightbox.d.ts.map +1 -0
- package/dist/lightbox.js +2 -0
- package/dist/lightbox.js.map +1 -0
- package/dist/playback-config.d.ts +27 -0
- package/dist/playback-config.d.ts.map +1 -0
- package/dist/playback-config.js +87 -0
- package/dist/playback-config.js.map +1 -0
- package/dist/renderer-diagnostics.d.ts +4 -0
- package/dist/renderer-diagnostics.d.ts.map +1 -0
- package/dist/renderer-diagnostics.js +85 -0
- package/dist/renderer-diagnostics.js.map +1 -0
- package/dist/renderer.d.ts +10 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +8 -0
- package/dist/renderer.js.map +1 -0
- package/dist/scene-config.d.ts +58 -0
- package/dist/scene-config.d.ts.map +1 -0
- package/dist/scene-config.js +223 -0
- package/dist/scene-config.js.map +1 -0
- package/dist/scene-plan/apply-patch.d.ts +5 -0
- package/dist/scene-plan/apply-patch.d.ts.map +1 -0
- package/dist/scene-plan/apply-patch.js +174 -0
- package/dist/scene-plan/apply-patch.js.map +1 -0
- package/dist/scene-plan/executor.d.ts +26 -0
- package/dist/scene-plan/executor.d.ts.map +1 -0
- package/dist/scene-plan/executor.js +928 -0
- package/dist/scene-plan/executor.js.map +1 -0
- package/dist/scene-plan/gateway.d.ts +15 -0
- package/dist/scene-plan/gateway.d.ts.map +1 -0
- package/dist/scene-plan/gateway.js +104 -0
- package/dist/scene-plan/gateway.js.map +1 -0
- package/dist/scene-plan/index.d.ts +4 -0
- package/dist/scene-plan/index.d.ts.map +1 -0
- package/dist/scene-plan/index.js +4 -0
- package/dist/scene-plan/index.js.map +1 -0
- package/dist/scene-plan/types.d.ts +181 -0
- package/dist/scene-plan/types.d.ts.map +1 -0
- package/dist/scene-plan/types.js +2 -0
- package/dist/scene-plan/types.js.map +1 -0
- package/dist/skenora-renderer.d.ts +117 -0
- package/dist/skenora-renderer.d.ts.map +1 -0
- package/dist/skenora-renderer.js +464 -0
- package/dist/skenora-renderer.js.map +1 -0
- package/dist/skenora-scene.d.ts +263 -0
- package/dist/skenora-scene.d.ts.map +1 -0
- package/dist/skenora-scene.js +832 -0
- package/dist/skenora-scene.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { assertSceneDocument, createEmptySceneDocument, normalizeSceneDocument, parseSceneDocument, serializeSceneDocument, } from "@skenora/contracts";
|
|
2
|
+
export const SCENE_CONFIG_SECTION_FILES = Object.freeze({
|
|
3
|
+
assets: "assets.json",
|
|
4
|
+
entities: "entities.json",
|
|
5
|
+
materials: "materials.json",
|
|
6
|
+
environment: "environment.json",
|
|
7
|
+
lighting: "lighting.json",
|
|
8
|
+
camera: "camera.json",
|
|
9
|
+
effects: "effects.json",
|
|
10
|
+
flows: "flows.json",
|
|
11
|
+
extensions: "extensions.json",
|
|
12
|
+
});
|
|
13
|
+
export function getSceneConfig(document, section) {
|
|
14
|
+
const config = sectionConfig(document, section);
|
|
15
|
+
return structuredClone(config);
|
|
16
|
+
}
|
|
17
|
+
export function applySceneConfig(document, section, config) {
|
|
18
|
+
const next = structuredClone(document);
|
|
19
|
+
switch (section) {
|
|
20
|
+
case "assets":
|
|
21
|
+
next.assets = structuredClone(config.assets);
|
|
22
|
+
break;
|
|
23
|
+
case "entities": {
|
|
24
|
+
const value = config;
|
|
25
|
+
next.entities = structuredClone(value.entities);
|
|
26
|
+
next.rootEntityIds = structuredClone(value.rootEntityIds);
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
case "materials": {
|
|
30
|
+
const value = config;
|
|
31
|
+
next.materials = structuredClone(value.materials);
|
|
32
|
+
next.materialBindings = structuredClone(value.materialBindings);
|
|
33
|
+
next.textureAnimations = structuredClone(value.textureAnimations);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case "environment": {
|
|
37
|
+
const value = config;
|
|
38
|
+
next.environment = structuredClone(value.environment);
|
|
39
|
+
next.ground = structuredClone(value.ground);
|
|
40
|
+
next.fog = structuredClone(value.fog);
|
|
41
|
+
next.weather = structuredClone(value.weather);
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
case "lighting":
|
|
45
|
+
next.lights = structuredClone(config.lights);
|
|
46
|
+
break;
|
|
47
|
+
case "camera": {
|
|
48
|
+
const value = config;
|
|
49
|
+
next.camera = structuredClone(value.camera);
|
|
50
|
+
next.cameraPaths = structuredClone(value.cameraPaths);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case "effects":
|
|
54
|
+
next.postProcess = structuredClone(config.postProcess);
|
|
55
|
+
break;
|
|
56
|
+
case "flows": {
|
|
57
|
+
const value = config;
|
|
58
|
+
next.flows = structuredClone(value.flows);
|
|
59
|
+
next.variables = structuredClone(value.variables);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case "extensions":
|
|
63
|
+
next.extensions = structuredClone(config.extensions);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
const normalized = normalizeSceneDocument(next);
|
|
67
|
+
assertSceneDocument(normalized);
|
|
68
|
+
return normalized;
|
|
69
|
+
}
|
|
70
|
+
export function serializeSceneConfig(document, section, options = {}) {
|
|
71
|
+
const value = {
|
|
72
|
+
schema: "skenora.scene.section",
|
|
73
|
+
version: 1,
|
|
74
|
+
section,
|
|
75
|
+
data: getSceneConfig(document, section),
|
|
76
|
+
};
|
|
77
|
+
return serializeJson(value, options.space);
|
|
78
|
+
}
|
|
79
|
+
export function parseSceneConfig(json, expectedSection) {
|
|
80
|
+
const value = JSON.parse(json);
|
|
81
|
+
if (!isRecord(value) ||
|
|
82
|
+
value.schema !== "skenora.scene.section" ||
|
|
83
|
+
value.version !== 1 ||
|
|
84
|
+
value.section !== expectedSection ||
|
|
85
|
+
!isRecord(value.data)) {
|
|
86
|
+
throw new Error(`Invalid Skenora scene section: ${expectedSection}`);
|
|
87
|
+
}
|
|
88
|
+
return structuredClone(value.data);
|
|
89
|
+
}
|
|
90
|
+
export function exportSceneJsonBundle(document, options = {}) {
|
|
91
|
+
assertSceneDocument(document);
|
|
92
|
+
const files = Object.fromEntries(Object.entries(SCENE_CONFIG_SECTION_FILES).map(([section, path]) => [
|
|
93
|
+
path,
|
|
94
|
+
serializeSceneConfig(document, section, options),
|
|
95
|
+
]));
|
|
96
|
+
const manifest = {
|
|
97
|
+
schema: "skenora.scene.bundle",
|
|
98
|
+
version: 1,
|
|
99
|
+
scene: {
|
|
100
|
+
schema: document.schema,
|
|
101
|
+
version: document.version,
|
|
102
|
+
id: document.id,
|
|
103
|
+
name: document.name,
|
|
104
|
+
},
|
|
105
|
+
files: { ...SCENE_CONFIG_SECTION_FILES },
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
manifest: serializeJson(manifest, options.space),
|
|
109
|
+
files: Object.freeze(files),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export function parseSceneJsonBundle(bundle) {
|
|
113
|
+
const manifestValue = JSON.parse(bundle.manifest);
|
|
114
|
+
const manifest = assertManifest(manifestValue);
|
|
115
|
+
const base = createEmptySceneDocument(manifest.scene.id, manifest.scene.name);
|
|
116
|
+
const configs = {};
|
|
117
|
+
for (const section of Object.keys(SCENE_CONFIG_SECTION_FILES)) {
|
|
118
|
+
const path = manifest.files[section];
|
|
119
|
+
const json = bundle.files[path];
|
|
120
|
+
if (json === undefined) {
|
|
121
|
+
throw new Error(`Scene bundle file is missing: ${path}`);
|
|
122
|
+
}
|
|
123
|
+
configs[section] = parseSceneConfig(json, section);
|
|
124
|
+
}
|
|
125
|
+
const document = {
|
|
126
|
+
...base,
|
|
127
|
+
...configs.assets,
|
|
128
|
+
...configs.entities,
|
|
129
|
+
...configs.materials,
|
|
130
|
+
...configs.environment,
|
|
131
|
+
...configs.lighting,
|
|
132
|
+
...configs.camera,
|
|
133
|
+
...configs.effects,
|
|
134
|
+
...configs.flows,
|
|
135
|
+
...configs.extensions,
|
|
136
|
+
};
|
|
137
|
+
const normalized = normalizeSceneDocument(document);
|
|
138
|
+
assertSceneDocument(normalized);
|
|
139
|
+
return normalized;
|
|
140
|
+
}
|
|
141
|
+
export function parseSceneJson(input) {
|
|
142
|
+
return typeof input === "string"
|
|
143
|
+
? parseSceneDocument(input)
|
|
144
|
+
: parseSceneJsonBundle(input);
|
|
145
|
+
}
|
|
146
|
+
export function serializeSceneJson(document, options = {}) {
|
|
147
|
+
return serializeSceneDocument(document, options.space);
|
|
148
|
+
}
|
|
149
|
+
function sectionConfig(document, section) {
|
|
150
|
+
const sections = {
|
|
151
|
+
assets: { assets: document.assets },
|
|
152
|
+
entities: {
|
|
153
|
+
entities: document.entities,
|
|
154
|
+
rootEntityIds: document.rootEntityIds,
|
|
155
|
+
},
|
|
156
|
+
materials: {
|
|
157
|
+
materials: document.materials,
|
|
158
|
+
materialBindings: document.materialBindings,
|
|
159
|
+
textureAnimations: document.textureAnimations,
|
|
160
|
+
},
|
|
161
|
+
environment: {
|
|
162
|
+
environment: document.environment,
|
|
163
|
+
ground: document.ground,
|
|
164
|
+
fog: document.fog,
|
|
165
|
+
weather: document.weather,
|
|
166
|
+
},
|
|
167
|
+
lighting: { lights: document.lights },
|
|
168
|
+
camera: {
|
|
169
|
+
camera: document.camera,
|
|
170
|
+
cameraPaths: document.cameraPaths,
|
|
171
|
+
},
|
|
172
|
+
effects: { postProcess: document.postProcess },
|
|
173
|
+
flows: {
|
|
174
|
+
flows: document.flows,
|
|
175
|
+
variables: document.variables,
|
|
176
|
+
},
|
|
177
|
+
extensions: { extensions: document.extensions },
|
|
178
|
+
};
|
|
179
|
+
return sections[section];
|
|
180
|
+
}
|
|
181
|
+
function assertManifest(value) {
|
|
182
|
+
if (!isRecord(value) ||
|
|
183
|
+
value.schema !== "skenora.scene.bundle" ||
|
|
184
|
+
value.version !== 1 ||
|
|
185
|
+
!isRecord(value.scene) ||
|
|
186
|
+
value.scene.schema !== "skenora.scene" ||
|
|
187
|
+
value.scene.version !== 1 ||
|
|
188
|
+
typeof value.scene.id !== "string" ||
|
|
189
|
+
!value.scene.id.trim() ||
|
|
190
|
+
typeof value.scene.name !== "string" ||
|
|
191
|
+
!value.scene.name.trim() ||
|
|
192
|
+
!isRecord(value.files)) {
|
|
193
|
+
throw new Error("Invalid Skenora scene bundle manifest");
|
|
194
|
+
}
|
|
195
|
+
for (const section of Object.keys(SCENE_CONFIG_SECTION_FILES)) {
|
|
196
|
+
if (typeof value.files[section] !== "string" ||
|
|
197
|
+
!value.files[section].trim()) {
|
|
198
|
+
throw new Error(`Scene bundle manifest is missing section: ${section}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return structuredClone(value);
|
|
202
|
+
}
|
|
203
|
+
function serializeJson(value, requestedSpace = 2) {
|
|
204
|
+
if (!Number.isInteger(requestedSpace) ||
|
|
205
|
+
requestedSpace < 0 ||
|
|
206
|
+
requestedSpace > 10) {
|
|
207
|
+
throw new Error("Scene serialization space must be an integer from 0 to 10");
|
|
208
|
+
}
|
|
209
|
+
return `${JSON.stringify(sortJsonValue(value), null, requestedSpace)}\n`;
|
|
210
|
+
}
|
|
211
|
+
function sortJsonValue(value) {
|
|
212
|
+
if (Array.isArray(value))
|
|
213
|
+
return value.map(sortJsonValue);
|
|
214
|
+
if (!isRecord(value))
|
|
215
|
+
return value;
|
|
216
|
+
return Object.fromEntries(Object.entries(value)
|
|
217
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
218
|
+
.map(([key, item]) => [key, sortJsonValue(item)]));
|
|
219
|
+
}
|
|
220
|
+
function isRecord(value) {
|
|
221
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=scene-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-config.js","sourceRoot":"","sources":["../src/scene-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type SceneDocumentData } from "@skenora/contracts";
|
|
2
|
+
import type { ScenePatchCandidate } from "@skenora/scene-plan";
|
|
3
|
+
import type { ResourceBindingTable } from "@skenora/resources";
|
|
4
|
+
export declare function materializeScenePatch(document: Readonly<SceneDocumentData>, candidate: ScenePatchCandidate, bindings?: ResourceBindingTable): SceneDocumentData;
|
|
5
|
+
//# sourceMappingURL=apply-patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-patch.d.ts","sourceRoot":"","sources":["../../src/scene-plan/apply-patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,mBAAmB,EAGpB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAsB/D,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACrC,SAAS,EAAE,mBAAmB,EAC9B,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,iBAAiB,CAQnB"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { assertSceneDocument, normalizeSceneDocument, } from "@skenora/contracts";
|
|
2
|
+
import { isJsonObject, } from "@skenora/scene-plan";
|
|
3
|
+
const RECORD_ROOTS = {
|
|
4
|
+
resource: "assets",
|
|
5
|
+
entity: "entities",
|
|
6
|
+
material: "materials",
|
|
7
|
+
materialBinding: "materialBindings",
|
|
8
|
+
textureAnimation: "textureAnimations",
|
|
9
|
+
cameraPath: "cameraPaths",
|
|
10
|
+
flow: "flows",
|
|
11
|
+
};
|
|
12
|
+
const SETTING_ROOTS = new Set([
|
|
13
|
+
"camera",
|
|
14
|
+
"environment",
|
|
15
|
+
"ground",
|
|
16
|
+
"fog",
|
|
17
|
+
"weather",
|
|
18
|
+
"postProcess",
|
|
19
|
+
"variables",
|
|
20
|
+
]);
|
|
21
|
+
export function materializeScenePatch(document, candidate, bindings) {
|
|
22
|
+
const next = structuredClone(document);
|
|
23
|
+
for (const operation of candidate.operations) {
|
|
24
|
+
applyOperation(next, operation, bindings);
|
|
25
|
+
}
|
|
26
|
+
const normalized = normalizeSceneDocument(next);
|
|
27
|
+
assertSceneDocument(normalized);
|
|
28
|
+
return normalized;
|
|
29
|
+
}
|
|
30
|
+
function applyOperation(document, operation, bindings) {
|
|
31
|
+
if (operation.op === "create") {
|
|
32
|
+
const value = operation.target.kind === "resource"
|
|
33
|
+
? resourceBindingValue(operation.target.id, bindings)
|
|
34
|
+
: withTargetId(operation.target, operation.value);
|
|
35
|
+
setTargetValue(document, operation.target, value);
|
|
36
|
+
if (operation.target.kind === "entity") {
|
|
37
|
+
const entity = document.entities[operation.target.id];
|
|
38
|
+
if (entity?.parentId === null &&
|
|
39
|
+
!document.rootEntityIds.includes(entity.id)) {
|
|
40
|
+
document.rootEntityIds.push(entity.id);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (operation.op === "remove") {
|
|
46
|
+
if (operation.target.kind === "setting") {
|
|
47
|
+
throw new Error("ScenePatch cannot remove a document setting: " + operation.target.id);
|
|
48
|
+
}
|
|
49
|
+
removeTargetValue(document, operation.target);
|
|
50
|
+
if (operation.target.kind === "entity") {
|
|
51
|
+
document.rootEntityIds = document.rootEntityIds.filter((id) => id !== operation.target.id);
|
|
52
|
+
}
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const current = getTargetValue(document, operation.target);
|
|
56
|
+
if (!isJsonObject(current)) {
|
|
57
|
+
throw new Error("Patch update target is not a JSON object: " +
|
|
58
|
+
operation.target.kind +
|
|
59
|
+
":" +
|
|
60
|
+
operation.target.id);
|
|
61
|
+
}
|
|
62
|
+
const updated = structuredClone(current);
|
|
63
|
+
for (const change of operation.changes) {
|
|
64
|
+
if (operation.target.kind === "resource" &&
|
|
65
|
+
["source", "uri", "integrity", "kind"].includes(change.path[0] ?? "")) {
|
|
66
|
+
throw new Error("ScenePatch cannot mutate authorized resource fields: " +
|
|
67
|
+
change.path.join("."));
|
|
68
|
+
}
|
|
69
|
+
setRelativeValue(updated, change.path, change.value);
|
|
70
|
+
}
|
|
71
|
+
setTargetValue(document, operation.target, updated);
|
|
72
|
+
}
|
|
73
|
+
function resourceBindingValue(assetRef, bindings) {
|
|
74
|
+
if (!bindings) {
|
|
75
|
+
throw new Error("ScenePatch resource creation requires an authorized binding: " +
|
|
76
|
+
assetRef);
|
|
77
|
+
}
|
|
78
|
+
return structuredClone(bindings.require(assetRef).asset);
|
|
79
|
+
}
|
|
80
|
+
function getTargetValue(document, target) {
|
|
81
|
+
if (target.kind === "setting") {
|
|
82
|
+
if (!SETTING_ROOTS.has(target.id)) {
|
|
83
|
+
throw new Error("Unsupported ScenePatch setting: " + target.id);
|
|
84
|
+
}
|
|
85
|
+
return structuredClone(document[target.id]);
|
|
86
|
+
}
|
|
87
|
+
if (target.kind === "light") {
|
|
88
|
+
const light = document.lights.find((item) => item.id === target.id);
|
|
89
|
+
return light === undefined
|
|
90
|
+
? undefined
|
|
91
|
+
: structuredClone(light);
|
|
92
|
+
}
|
|
93
|
+
const root = RECORD_ROOTS[target.kind];
|
|
94
|
+
if (!root)
|
|
95
|
+
throw new Error("Unsupported ScenePatch target kind: " + target.kind);
|
|
96
|
+
return structuredClone(document[root]?.[target.id]);
|
|
97
|
+
}
|
|
98
|
+
function setTargetValue(document, target, value) {
|
|
99
|
+
if (target.kind === "setting") {
|
|
100
|
+
if (!SETTING_ROOTS.has(target.id)) {
|
|
101
|
+
throw new Error("Unsupported ScenePatch setting: " + target.id);
|
|
102
|
+
}
|
|
103
|
+
document[target.id] =
|
|
104
|
+
structuredClone(value);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (target.kind === "light") {
|
|
108
|
+
const index = document.lights.findIndex((item) => item.id === target.id);
|
|
109
|
+
const light = structuredClone(value);
|
|
110
|
+
if (index === -1) {
|
|
111
|
+
document.lights.push(light);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
document.lights[index] =
|
|
115
|
+
light;
|
|
116
|
+
}
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const root = RECORD_ROOTS[target.kind];
|
|
120
|
+
if (!root)
|
|
121
|
+
throw new Error("Unsupported ScenePatch target kind: " + target.kind);
|
|
122
|
+
const record = document[root];
|
|
123
|
+
if (!record)
|
|
124
|
+
throw new Error("SceneDocument root is unavailable: " + root);
|
|
125
|
+
record[target.id] = structuredClone(value);
|
|
126
|
+
}
|
|
127
|
+
function removeTargetValue(document, target) {
|
|
128
|
+
if (target.kind === "setting") {
|
|
129
|
+
throw new Error("ScenePatch cannot remove a document setting: " + target.id);
|
|
130
|
+
}
|
|
131
|
+
if (target.kind === "light") {
|
|
132
|
+
const index = document.lights.findIndex((item) => item.id === target.id);
|
|
133
|
+
if (index >= 0)
|
|
134
|
+
document.lights.splice(index, 1);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const root = RECORD_ROOTS[target.kind];
|
|
138
|
+
if (!root)
|
|
139
|
+
throw new Error("Unsupported ScenePatch target kind: " + target.kind);
|
|
140
|
+
delete document[root][target.id];
|
|
141
|
+
}
|
|
142
|
+
function withTargetId(target, value) {
|
|
143
|
+
if (target.kind === "setting")
|
|
144
|
+
return structuredClone(value);
|
|
145
|
+
const existing = value.id;
|
|
146
|
+
if (existing !== undefined && existing !== target.id) {
|
|
147
|
+
throw new Error("Patch create value id does not match target: " +
|
|
148
|
+
String(existing) +
|
|
149
|
+
" != " +
|
|
150
|
+
target.id);
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
...structuredClone(value),
|
|
154
|
+
id: target.id,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function setRelativeValue(target, path, value) {
|
|
158
|
+
if (path.length === 0) {
|
|
159
|
+
throw new Error("Patch update path must not be empty");
|
|
160
|
+
}
|
|
161
|
+
let current = target;
|
|
162
|
+
for (const segment of path.slice(0, -1)) {
|
|
163
|
+
const next = current[segment];
|
|
164
|
+
if (next === undefined) {
|
|
165
|
+
current[segment] = {};
|
|
166
|
+
}
|
|
167
|
+
else if (!isJsonObject(next)) {
|
|
168
|
+
throw new Error("Patch update path crosses a non-object field: " + segment);
|
|
169
|
+
}
|
|
170
|
+
current = current[segment];
|
|
171
|
+
}
|
|
172
|
+
current[path[path.length - 1]] = structuredClone(value);
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=apply-patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-patch.js","sourceRoot":"","sources":["../../src/scene-plan/apply-patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type EditorSession } from "@skenora/editor";
|
|
2
|
+
import { type ScenePlanContext } from "@skenora/scene-plan";
|
|
3
|
+
import { type ResourceResolver } from "@skenora/resources";
|
|
4
|
+
import type { ScenePlanApplyOptions, ScenePlanApplyResult, ScenePlanExecutorOptions, ScenePlanInspectOptions, ScenePlanInspectResult, ScenePlanValidationOptions, ScenePlanValidationResult, ScenePlanWaitOptions, SceneRevisionToken } from "./types.js";
|
|
5
|
+
import type { EditorRuntimeBridge } from "@skenora/babylon-editor";
|
|
6
|
+
export declare class ScenePlanExecutor {
|
|
7
|
+
#private;
|
|
8
|
+
readonly editor: EditorSession;
|
|
9
|
+
readonly bridge: EditorRuntimeBridge;
|
|
10
|
+
readonly resources: ResourceResolver;
|
|
11
|
+
readonly sessionEpoch: string;
|
|
12
|
+
readonly capabilities: readonly import("@skenora/scene-plan").SceneCapabilityDescriptor[];
|
|
13
|
+
readonly context: Omit<ScenePlanContext, "resourceBindings">;
|
|
14
|
+
constructor(options: ScenePlanExecutorOptions);
|
|
15
|
+
get revisionToken(): SceneRevisionToken;
|
|
16
|
+
inspectScene(options?: ScenePlanInspectOptions): ScenePlanInspectResult;
|
|
17
|
+
validateBlueprint(input: unknown, options?: ScenePlanValidationOptions): ScenePlanValidationResult;
|
|
18
|
+
validatePatch(input: unknown, options?: ScenePlanValidationOptions): ScenePlanValidationResult;
|
|
19
|
+
validatePlan(input: unknown, options?: ScenePlanValidationOptions): ScenePlanValidationResult;
|
|
20
|
+
applyPlan(input: unknown, options?: ScenePlanApplyOptions): Promise<ScenePlanApplyResult>;
|
|
21
|
+
applyBlueprint(input: unknown, options?: ScenePlanApplyOptions): Promise<ScenePlanApplyResult>;
|
|
22
|
+
applyPatch(input: unknown, options?: ScenePlanApplyOptions): Promise<ScenePlanApplyResult>;
|
|
23
|
+
waitOperation(operationId: string, options?: ScenePlanWaitOptions): Promise<ScenePlanApplyResult> | null;
|
|
24
|
+
dispose(): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/scene-plan/executor.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,KAAK,gBAAgB,EAItB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAQL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EAEpB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EAKtB,0BAA0B,EAC1B,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAOnE,qBAAa,iBAAiB;;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,SAAS,OAAO,qBAAqB,EAAE,yBAAyB,EAAE,CAAC;IAC1F,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;gBAajD,OAAO,EAAE,wBAAwB;IAuC7C,IAAI,aAAa,IAAI,kBAAkB,CAGtC;IAED,YAAY,CAAC,OAAO,GAAE,uBAA4B,GAAG,sBAAsB;IA2B3E,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,0BAA+B,GACvC,yBAAyB;IAqB5B,aAAa,CACX,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,0BAA+B,GACvC,yBAAyB;IA2B5B,YAAY,CACV,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,0BAA+B,GACvC,yBAAyB;IAM5B,SAAS,CACP,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC;IAgBhC,cAAc,CACZ,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC;IAgBhC,UAAU,CACR,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC;IAgBhC,aAAa,CACX,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAQvC,OAAO,IAAI,IAAI;CA8iBhB"}
|