@ifc-lite/ifcx 1.2.1 → 1.6.0
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/dist/federated-composition.d.ts +69 -0
- package/dist/federated-composition.d.ts.map +1 -0
- package/dist/federated-composition.js +300 -0
- package/dist/federated-composition.js.map +1 -0
- package/dist/index.d.ts +68 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +178 -1
- package/dist/index.js.map +1 -1
- package/dist/layer-stack.d.ts +151 -0
- package/dist/layer-stack.d.ts.map +1 -0
- package/dist/layer-stack.js +248 -0
- package/dist/layer-stack.js.map +1 -0
- package/dist/path-resolver.d.ts +113 -0
- package/dist/path-resolver.d.ts.map +1 -0
- package/dist/path-resolver.js +211 -0
- package/dist/path-resolver.js.map +1 -0
- package/dist/writer.d.ts +99 -0
- package/dist/writer.d.ts.map +1 -0
- package/dist/writer.js +220 -0
- package/dist/writer.js.map +1 -0
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -7,6 +7,9 @@ import { extractProperties, isQuantityProperty } from './property-extractor.js';
|
|
|
7
7
|
import { extractGeometry } from './geometry-extractor.js';
|
|
8
8
|
import { buildHierarchy } from './hierarchy-builder.js';
|
|
9
9
|
import { StringTable, RelationshipGraphBuilder, RelationshipType, QuantityTableBuilder, } from '@ifc-lite/data';
|
|
10
|
+
// Federated composition imports
|
|
11
|
+
import { createLayerStack } from './layer-stack.js';
|
|
12
|
+
import { composeFederated, } from './federated-composition.js';
|
|
10
13
|
// Re-export types
|
|
11
14
|
export * from './types.js';
|
|
12
15
|
export { composeIfcx, findRoots, getDescendants, getPathToRoot } from './composition.js';
|
|
@@ -14,6 +17,12 @@ export { extractEntities } from './entity-extractor.js';
|
|
|
14
17
|
export { extractProperties, isQuantityProperty } from './property-extractor.js';
|
|
15
18
|
export { extractGeometry } from './geometry-extractor.js';
|
|
16
19
|
export { buildHierarchy } from './hierarchy-builder.js';
|
|
20
|
+
// Re-export federated composition
|
|
21
|
+
export { LayerStack, createLayerStack, } from './layer-stack.js';
|
|
22
|
+
export { PathIndex, createPathIndex, parsePath, } from './path-resolver.js';
|
|
23
|
+
export { composeFederated, } from './federated-composition.js';
|
|
24
|
+
// IFCX writer for export
|
|
25
|
+
export { IfcxWriter, exportToIfcx, } from './writer.js';
|
|
17
26
|
/**
|
|
18
27
|
* Parse an IFCX file and return data compatible with existing ifc-lite pipeline.
|
|
19
28
|
*/
|
|
@@ -171,9 +180,16 @@ function buildQuantities(composed, pathToId, strings) {
|
|
|
171
180
|
return builder.build();
|
|
172
181
|
}
|
|
173
182
|
/**
|
|
174
|
-
* Detect if a buffer contains IFCX (JSON)
|
|
183
|
+
* Detect if a buffer contains IFCX (JSON), IFC (STEP), or GLB (binary glTF) format.
|
|
175
184
|
*/
|
|
176
185
|
export function detectFormat(buffer) {
|
|
186
|
+
// Check GLB magic bytes first (binary format, 4-byte magic: 0x46546C67 = 'glTF')
|
|
187
|
+
if (buffer.byteLength >= 4) {
|
|
188
|
+
const magic = new DataView(buffer).getUint32(0, true);
|
|
189
|
+
if (magic === 0x46546c67) {
|
|
190
|
+
return 'glb';
|
|
191
|
+
}
|
|
192
|
+
}
|
|
177
193
|
const bytes = new Uint8Array(buffer, 0, Math.min(100, buffer.byteLength));
|
|
178
194
|
const start = new TextDecoder().decode(bytes).trim();
|
|
179
195
|
// IFCX is JSON starting with {
|
|
@@ -186,4 +202,165 @@ export function detectFormat(buffer) {
|
|
|
186
202
|
}
|
|
187
203
|
return 'unknown';
|
|
188
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Parse multiple IFCX files as federated layers.
|
|
207
|
+
*
|
|
208
|
+
* Files are loaded as layers with the first file being the base (weakest)
|
|
209
|
+
* and subsequent files being overlays (stronger). Layer order can be
|
|
210
|
+
* adjusted after parsing using the returned LayerStack.
|
|
211
|
+
*
|
|
212
|
+
* @param files - Array of file buffers with names
|
|
213
|
+
* @param options - Parse options
|
|
214
|
+
* @returns Federated parse result with layer information
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* const result = await parseFederatedIfcx([
|
|
219
|
+
* { buffer: baseBuffer, name: 'hello-wall.ifcx' },
|
|
220
|
+
* { buffer: overlayBuffer, name: 'add-fire-rating.ifcx' },
|
|
221
|
+
* ]);
|
|
222
|
+
*
|
|
223
|
+
* // Wall now has FireRating property from overlay
|
|
224
|
+
* const wallProps = result.properties.getForEntity(wallId);
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
export async function parseFederatedIfcx(files, options = {}) {
|
|
228
|
+
const startTime = performance.now();
|
|
229
|
+
if (files.length === 0) {
|
|
230
|
+
throw new Error('At least one IFCX file is required');
|
|
231
|
+
}
|
|
232
|
+
options.onProgress?.({ phase: 'parse', percent: 0 });
|
|
233
|
+
// Phase 1: Parse all files and build layer stack
|
|
234
|
+
const layerStack = createLayerStack();
|
|
235
|
+
let totalSize = 0;
|
|
236
|
+
for (let i = 0; i < files.length; i++) {
|
|
237
|
+
const { buffer, name } = files[i];
|
|
238
|
+
totalSize += buffer.byteLength;
|
|
239
|
+
const text = new TextDecoder().decode(buffer);
|
|
240
|
+
let file;
|
|
241
|
+
try {
|
|
242
|
+
file = JSON.parse(text);
|
|
243
|
+
}
|
|
244
|
+
catch (e) {
|
|
245
|
+
throw new Error(`Invalid IFCX file "${name}": JSON parse error - ${e}`);
|
|
246
|
+
}
|
|
247
|
+
// Validate header
|
|
248
|
+
if (!file.header?.ifcxVersion?.toLowerCase().includes('ifcx')) {
|
|
249
|
+
throw new Error(`Invalid IFCX file "${name}": missing or invalid header.ifcxVersion`);
|
|
250
|
+
}
|
|
251
|
+
// Add as layer (first file is weakest, last is strongest)
|
|
252
|
+
// We add at position 0 so later files become strongest
|
|
253
|
+
layerStack.addLayerAt(file, buffer, name, 0, {
|
|
254
|
+
type: 'file',
|
|
255
|
+
filename: name,
|
|
256
|
+
size: buffer.byteLength,
|
|
257
|
+
});
|
|
258
|
+
options.onProgress?.({
|
|
259
|
+
phase: 'parse',
|
|
260
|
+
percent: Math.round(((i + 1) / files.length) * 100),
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
options.onProgress?.({ phase: 'compose', percent: 0 });
|
|
264
|
+
// Phase 2: Compose federated layers
|
|
265
|
+
const compositionResult = composeFederated(layerStack, {
|
|
266
|
+
onProgress: (phase, percent) => {
|
|
267
|
+
options.onProgress?.({ phase: `compose-${phase}`, percent });
|
|
268
|
+
},
|
|
269
|
+
maxInheritDepth: options.maxInheritDepth,
|
|
270
|
+
});
|
|
271
|
+
options.onProgress?.({ phase: 'compose', percent: 100 });
|
|
272
|
+
// Convert composed nodes to standard ComposedNode format for extractors
|
|
273
|
+
const composed = new Map();
|
|
274
|
+
for (const [path, node] of compositionResult.composed) {
|
|
275
|
+
composed.set(path, node);
|
|
276
|
+
}
|
|
277
|
+
// Phase 3: Extract entities
|
|
278
|
+
options.onProgress?.({ phase: 'entities', percent: 0 });
|
|
279
|
+
const strings = new StringTable();
|
|
280
|
+
const { entities, pathToId, idToPath } = extractEntities(composed, strings);
|
|
281
|
+
options.onProgress?.({ phase: 'entities', percent: 100 });
|
|
282
|
+
// Phase 4: Extract properties
|
|
283
|
+
options.onProgress?.({ phase: 'properties', percent: 0 });
|
|
284
|
+
const properties = extractProperties(composed, pathToId, strings);
|
|
285
|
+
options.onProgress?.({ phase: 'properties', percent: 100 });
|
|
286
|
+
// Phase 5: Extract geometry
|
|
287
|
+
options.onProgress?.({ phase: 'geometry', percent: 0 });
|
|
288
|
+
const meshes = extractGeometry(composed, pathToId);
|
|
289
|
+
options.onProgress?.({ phase: 'geometry', percent: 100 });
|
|
290
|
+
// Phase 6: Build hierarchy
|
|
291
|
+
options.onProgress?.({ phase: 'hierarchy', percent: 0 });
|
|
292
|
+
const spatialHierarchy = buildHierarchy(composed, pathToId);
|
|
293
|
+
options.onProgress?.({ phase: 'hierarchy', percent: 100 });
|
|
294
|
+
// Phase 7: Build relationships
|
|
295
|
+
options.onProgress?.({ phase: 'relationships', percent: 0 });
|
|
296
|
+
const relationships = buildRelationships(composed, pathToId);
|
|
297
|
+
options.onProgress?.({ phase: 'relationships', percent: 100 });
|
|
298
|
+
// Phase 8: Build quantities
|
|
299
|
+
const quantities = buildQuantities(composed, pathToId, strings);
|
|
300
|
+
// Build path-to-layers map
|
|
301
|
+
const pathToLayers = new Map();
|
|
302
|
+
for (const [path, node] of compositionResult.composed) {
|
|
303
|
+
pathToLayers.set(path, Array.from(node.contributingLayers));
|
|
304
|
+
}
|
|
305
|
+
const parseTime = performance.now() - startTime;
|
|
306
|
+
return {
|
|
307
|
+
entities,
|
|
308
|
+
properties,
|
|
309
|
+
quantities,
|
|
310
|
+
relationships,
|
|
311
|
+
spatialHierarchy,
|
|
312
|
+
strings,
|
|
313
|
+
meshes,
|
|
314
|
+
pathToId,
|
|
315
|
+
idToPath,
|
|
316
|
+
schemaVersion: 'IFC5',
|
|
317
|
+
fileSize: totalSize,
|
|
318
|
+
entityCount: entities.count,
|
|
319
|
+
parseTime,
|
|
320
|
+
// Federated-specific fields
|
|
321
|
+
layerStack,
|
|
322
|
+
pathIndex: compositionResult.pathIndex,
|
|
323
|
+
compositionStats: {
|
|
324
|
+
layersUsed: compositionResult.stats.layersUsed,
|
|
325
|
+
inheritanceResolutions: compositionResult.stats.inheritanceResolutions,
|
|
326
|
+
crossLayerReferences: compositionResult.stats.crossLayerReferences,
|
|
327
|
+
},
|
|
328
|
+
pathToLayers,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Add an overlay layer to an existing federated result.
|
|
333
|
+
* Returns a new result with the overlay applied.
|
|
334
|
+
*/
|
|
335
|
+
export async function addIfcxOverlay(baseResult, overlayBuffer, overlayName, options = {}) {
|
|
336
|
+
// Parse overlay file
|
|
337
|
+
const text = new TextDecoder().decode(overlayBuffer);
|
|
338
|
+
let file;
|
|
339
|
+
try {
|
|
340
|
+
file = JSON.parse(text);
|
|
341
|
+
}
|
|
342
|
+
catch (e) {
|
|
343
|
+
throw new Error(`Invalid IFCX overlay "${overlayName}": JSON parse error - ${e}`);
|
|
344
|
+
}
|
|
345
|
+
// Validate header
|
|
346
|
+
if (!file.header?.ifcxVersion?.toLowerCase().includes('ifcx')) {
|
|
347
|
+
throw new Error(`Invalid IFCX overlay "${overlayName}": missing or invalid header.ifcxVersion`);
|
|
348
|
+
}
|
|
349
|
+
// Add to layer stack (at top = strongest)
|
|
350
|
+
baseResult.layerStack.addLayer(file, overlayBuffer, overlayName, {
|
|
351
|
+
type: 'file',
|
|
352
|
+
filename: overlayName,
|
|
353
|
+
size: overlayBuffer.byteLength,
|
|
354
|
+
});
|
|
355
|
+
// Re-compose with new layer
|
|
356
|
+
// Collect all files from the layer stack
|
|
357
|
+
const files = baseResult.layerStack
|
|
358
|
+
.getLayers()
|
|
359
|
+
.map((layer) => ({
|
|
360
|
+
buffer: layer.buffer,
|
|
361
|
+
name: layer.name,
|
|
362
|
+
}))
|
|
363
|
+
.reverse(); // Reverse because layers are stored strongest-first
|
|
364
|
+
return parseFederatedIfcx(files, options);
|
|
365
|
+
}
|
|
189
366
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layer Stack for Federated IFCX Composition
|
|
3
|
+
*
|
|
4
|
+
* Manages multiple IFCX files as ordered layers for USD-style composition.
|
|
5
|
+
* Higher layers (lower index) have stronger opinions and override lower layers.
|
|
6
|
+
*/
|
|
7
|
+
import type { IfcxFile, IfcxNode } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Source information for a layer.
|
|
10
|
+
*/
|
|
11
|
+
export type LayerSource = {
|
|
12
|
+
type: 'file';
|
|
13
|
+
filename: string;
|
|
14
|
+
size: number;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'url';
|
|
17
|
+
url: string;
|
|
18
|
+
} | {
|
|
19
|
+
type: 'buffer';
|
|
20
|
+
name: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* A single layer in the composition stack.
|
|
24
|
+
*/
|
|
25
|
+
export interface IfcxLayer {
|
|
26
|
+
/** Unique identifier for this layer */
|
|
27
|
+
id: string;
|
|
28
|
+
/** Display name */
|
|
29
|
+
name: string;
|
|
30
|
+
/** Parsed IFCX file data */
|
|
31
|
+
file: IfcxFile;
|
|
32
|
+
/** Original buffer (for re-parsing if needed) */
|
|
33
|
+
buffer: ArrayBuffer;
|
|
34
|
+
/** Position in stack (0 = strongest) */
|
|
35
|
+
strength: number;
|
|
36
|
+
/** Whether this layer is enabled for composition */
|
|
37
|
+
enabled: boolean;
|
|
38
|
+
/** Source information */
|
|
39
|
+
source: LayerSource;
|
|
40
|
+
/** Nodes indexed by path for this layer */
|
|
41
|
+
nodesByPath: Map<string, IfcxNode[]>;
|
|
42
|
+
/** Timestamp when layer was loaded */
|
|
43
|
+
loadedAt: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Layer Stack manages ordered IFCX layers for federated composition.
|
|
47
|
+
*/
|
|
48
|
+
export declare class LayerStack {
|
|
49
|
+
private layers;
|
|
50
|
+
private nextId;
|
|
51
|
+
/**
|
|
52
|
+
* Add a new layer to the stack.
|
|
53
|
+
* New layers are added at the top (strongest position).
|
|
54
|
+
*
|
|
55
|
+
* @param file - Parsed IFCX file
|
|
56
|
+
* @param buffer - Original buffer
|
|
57
|
+
* @param name - Display name for the layer
|
|
58
|
+
* @param source - Source information
|
|
59
|
+
* @returns Layer ID
|
|
60
|
+
*/
|
|
61
|
+
addLayer(file: IfcxFile, buffer: ArrayBuffer, name: string, source?: LayerSource): string;
|
|
62
|
+
/**
|
|
63
|
+
* Add a layer at a specific position.
|
|
64
|
+
*
|
|
65
|
+
* @param file - Parsed IFCX file
|
|
66
|
+
* @param buffer - Original buffer
|
|
67
|
+
* @param name - Display name
|
|
68
|
+
* @param position - Position in stack (0 = strongest)
|
|
69
|
+
* @param source - Source information
|
|
70
|
+
* @returns Layer ID
|
|
71
|
+
*/
|
|
72
|
+
addLayerAt(file: IfcxFile, buffer: ArrayBuffer, name: string, position: number, source?: LayerSource): string;
|
|
73
|
+
/**
|
|
74
|
+
* Remove a layer from the stack.
|
|
75
|
+
*/
|
|
76
|
+
removeLayer(layerId: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Reorder layers based on new order of IDs.
|
|
79
|
+
* IDs not in the list are removed. IDs not found are ignored.
|
|
80
|
+
*/
|
|
81
|
+
reorderLayers(orderedIds: string[]): void;
|
|
82
|
+
/**
|
|
83
|
+
* Move a layer to a new position.
|
|
84
|
+
*/
|
|
85
|
+
moveLayer(layerId: string, newPosition: number): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Toggle layer enabled state.
|
|
88
|
+
*/
|
|
89
|
+
setLayerEnabled(layerId: string, enabled: boolean): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Toggle layer enabled state.
|
|
92
|
+
*/
|
|
93
|
+
toggleLayer(layerId: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Get a layer by ID.
|
|
96
|
+
*/
|
|
97
|
+
getLayer(layerId: string): IfcxLayer | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Get all layers in order (strongest first).
|
|
100
|
+
*/
|
|
101
|
+
getLayers(): readonly IfcxLayer[];
|
|
102
|
+
/**
|
|
103
|
+
* Get only enabled layers in order (strongest first).
|
|
104
|
+
*/
|
|
105
|
+
getEnabledLayers(): IfcxLayer[];
|
|
106
|
+
/**
|
|
107
|
+
* Get layer count.
|
|
108
|
+
*/
|
|
109
|
+
get count(): number;
|
|
110
|
+
/**
|
|
111
|
+
* Check if stack is empty.
|
|
112
|
+
*/
|
|
113
|
+
get isEmpty(): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Clear all layers.
|
|
116
|
+
*/
|
|
117
|
+
clear(): void;
|
|
118
|
+
/**
|
|
119
|
+
* Get all unique paths across all enabled layers.
|
|
120
|
+
*/
|
|
121
|
+
getAllPaths(): Set<string>;
|
|
122
|
+
/**
|
|
123
|
+
* Get nodes for a path from all enabled layers, ordered by strength.
|
|
124
|
+
*/
|
|
125
|
+
getNodesForPath(path: string): Array<{
|
|
126
|
+
layer: IfcxLayer;
|
|
127
|
+
nodes: IfcxNode[];
|
|
128
|
+
}>;
|
|
129
|
+
/**
|
|
130
|
+
* Check if a path exists in any enabled layer.
|
|
131
|
+
*/
|
|
132
|
+
hasPath(path: string): boolean;
|
|
133
|
+
/**
|
|
134
|
+
* Get summary statistics.
|
|
135
|
+
*/
|
|
136
|
+
getStats(): {
|
|
137
|
+
layerCount: number;
|
|
138
|
+
enabledCount: number;
|
|
139
|
+
totalNodes: number;
|
|
140
|
+
uniquePaths: number;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Update strength values based on current order.
|
|
144
|
+
*/
|
|
145
|
+
private updateStrengths;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Create a new empty layer stack.
|
|
149
|
+
*/
|
|
150
|
+
export declare function createLayerStack(): LayerStack;
|
|
151
|
+
//# sourceMappingURL=layer-stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer-stack.d.ts","sourceRoot":"","sources":["../src/layer-stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* Layer Stack manages ordered IFCX layers for federated composition.
|
|
6
|
+
*/
|
|
7
|
+
export class LayerStack {
|
|
8
|
+
layers = [];
|
|
9
|
+
nextId = 1;
|
|
10
|
+
/**
|
|
11
|
+
* Add a new layer to the stack.
|
|
12
|
+
* New layers are added at the top (strongest position).
|
|
13
|
+
*
|
|
14
|
+
* @param file - Parsed IFCX file
|
|
15
|
+
* @param buffer - Original buffer
|
|
16
|
+
* @param name - Display name for the layer
|
|
17
|
+
* @param source - Source information
|
|
18
|
+
* @returns Layer ID
|
|
19
|
+
*/
|
|
20
|
+
addLayer(file, buffer, name, source) {
|
|
21
|
+
const id = `layer-${this.nextId++}`;
|
|
22
|
+
// Index nodes by path
|
|
23
|
+
const nodesByPath = new Map();
|
|
24
|
+
for (const node of file.data) {
|
|
25
|
+
const existing = nodesByPath.get(node.path) || [];
|
|
26
|
+
existing.push(node);
|
|
27
|
+
nodesByPath.set(node.path, existing);
|
|
28
|
+
}
|
|
29
|
+
const layer = {
|
|
30
|
+
id,
|
|
31
|
+
name,
|
|
32
|
+
file,
|
|
33
|
+
buffer,
|
|
34
|
+
strength: 0, // Will be updated
|
|
35
|
+
enabled: true,
|
|
36
|
+
source: source || { type: 'buffer', name },
|
|
37
|
+
nodesByPath,
|
|
38
|
+
loadedAt: Date.now(),
|
|
39
|
+
};
|
|
40
|
+
// Insert at top (strongest position)
|
|
41
|
+
this.layers.unshift(layer);
|
|
42
|
+
// Update all strengths
|
|
43
|
+
this.updateStrengths();
|
|
44
|
+
return id;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Add a layer at a specific position.
|
|
48
|
+
*
|
|
49
|
+
* @param file - Parsed IFCX file
|
|
50
|
+
* @param buffer - Original buffer
|
|
51
|
+
* @param name - Display name
|
|
52
|
+
* @param position - Position in stack (0 = strongest)
|
|
53
|
+
* @param source - Source information
|
|
54
|
+
* @returns Layer ID
|
|
55
|
+
*/
|
|
56
|
+
addLayerAt(file, buffer, name, position, source) {
|
|
57
|
+
const id = `layer-${this.nextId++}`;
|
|
58
|
+
const nodesByPath = new Map();
|
|
59
|
+
for (const node of file.data) {
|
|
60
|
+
const existing = nodesByPath.get(node.path) || [];
|
|
61
|
+
existing.push(node);
|
|
62
|
+
nodesByPath.set(node.path, existing);
|
|
63
|
+
}
|
|
64
|
+
const layer = {
|
|
65
|
+
id,
|
|
66
|
+
name,
|
|
67
|
+
file,
|
|
68
|
+
buffer,
|
|
69
|
+
strength: position,
|
|
70
|
+
enabled: true,
|
|
71
|
+
source: source || { type: 'buffer', name },
|
|
72
|
+
nodesByPath,
|
|
73
|
+
loadedAt: Date.now(),
|
|
74
|
+
};
|
|
75
|
+
// Insert at specified position
|
|
76
|
+
const clampedPos = Math.max(0, Math.min(position, this.layers.length));
|
|
77
|
+
this.layers.splice(clampedPos, 0, layer);
|
|
78
|
+
this.updateStrengths();
|
|
79
|
+
return id;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Remove a layer from the stack.
|
|
83
|
+
*/
|
|
84
|
+
removeLayer(layerId) {
|
|
85
|
+
const index = this.layers.findIndex((l) => l.id === layerId);
|
|
86
|
+
if (index === -1)
|
|
87
|
+
return false;
|
|
88
|
+
this.layers.splice(index, 1);
|
|
89
|
+
this.updateStrengths();
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Reorder layers based on new order of IDs.
|
|
94
|
+
* IDs not in the list are removed. IDs not found are ignored.
|
|
95
|
+
*/
|
|
96
|
+
reorderLayers(orderedIds) {
|
|
97
|
+
const layerMap = new Map(this.layers.map((l) => [l.id, l]));
|
|
98
|
+
const newLayers = [];
|
|
99
|
+
for (const id of orderedIds) {
|
|
100
|
+
const layer = layerMap.get(id);
|
|
101
|
+
if (layer) {
|
|
102
|
+
newLayers.push(layer);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
this.layers = newLayers;
|
|
106
|
+
this.updateStrengths();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Move a layer to a new position.
|
|
110
|
+
*/
|
|
111
|
+
moveLayer(layerId, newPosition) {
|
|
112
|
+
const currentIndex = this.layers.findIndex((l) => l.id === layerId);
|
|
113
|
+
if (currentIndex === -1)
|
|
114
|
+
return false;
|
|
115
|
+
const [layer] = this.layers.splice(currentIndex, 1);
|
|
116
|
+
const clampedPos = Math.max(0, Math.min(newPosition, this.layers.length));
|
|
117
|
+
this.layers.splice(clampedPos, 0, layer);
|
|
118
|
+
this.updateStrengths();
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Toggle layer enabled state.
|
|
123
|
+
*/
|
|
124
|
+
setLayerEnabled(layerId, enabled) {
|
|
125
|
+
const layer = this.layers.find((l) => l.id === layerId);
|
|
126
|
+
if (!layer)
|
|
127
|
+
return false;
|
|
128
|
+
layer.enabled = enabled;
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Toggle layer enabled state.
|
|
133
|
+
*/
|
|
134
|
+
toggleLayer(layerId) {
|
|
135
|
+
const layer = this.layers.find((l) => l.id === layerId);
|
|
136
|
+
if (!layer)
|
|
137
|
+
return false;
|
|
138
|
+
layer.enabled = !layer.enabled;
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get a layer by ID.
|
|
143
|
+
*/
|
|
144
|
+
getLayer(layerId) {
|
|
145
|
+
return this.layers.find((l) => l.id === layerId);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get all layers in order (strongest first).
|
|
149
|
+
*/
|
|
150
|
+
getLayers() {
|
|
151
|
+
return this.layers;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get only enabled layers in order (strongest first).
|
|
155
|
+
*/
|
|
156
|
+
getEnabledLayers() {
|
|
157
|
+
return this.layers.filter((l) => l.enabled);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get layer count.
|
|
161
|
+
*/
|
|
162
|
+
get count() {
|
|
163
|
+
return this.layers.length;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if stack is empty.
|
|
167
|
+
*/
|
|
168
|
+
get isEmpty() {
|
|
169
|
+
return this.layers.length === 0;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Clear all layers.
|
|
173
|
+
*/
|
|
174
|
+
clear() {
|
|
175
|
+
this.layers = [];
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get all unique paths across all enabled layers.
|
|
179
|
+
*/
|
|
180
|
+
getAllPaths() {
|
|
181
|
+
const paths = new Set();
|
|
182
|
+
for (const layer of this.getEnabledLayers()) {
|
|
183
|
+
for (const path of layer.nodesByPath.keys()) {
|
|
184
|
+
paths.add(path);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return paths;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get nodes for a path from all enabled layers, ordered by strength.
|
|
191
|
+
*/
|
|
192
|
+
getNodesForPath(path) {
|
|
193
|
+
const results = [];
|
|
194
|
+
for (const layer of this.getEnabledLayers()) {
|
|
195
|
+
const nodes = layer.nodesByPath.get(path);
|
|
196
|
+
if (nodes && nodes.length > 0) {
|
|
197
|
+
results.push({ layer, nodes });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return results;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Check if a path exists in any enabled layer.
|
|
204
|
+
*/
|
|
205
|
+
hasPath(path) {
|
|
206
|
+
for (const layer of this.getEnabledLayers()) {
|
|
207
|
+
if (layer.nodesByPath.has(path)) {
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get summary statistics.
|
|
215
|
+
*/
|
|
216
|
+
getStats() {
|
|
217
|
+
const enabledLayers = this.getEnabledLayers();
|
|
218
|
+
let totalNodes = 0;
|
|
219
|
+
const uniquePaths = new Set();
|
|
220
|
+
for (const layer of enabledLayers) {
|
|
221
|
+
for (const [path, nodes] of layer.nodesByPath) {
|
|
222
|
+
uniquePaths.add(path);
|
|
223
|
+
totalNodes += nodes.length;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
layerCount: this.layers.length,
|
|
228
|
+
enabledCount: enabledLayers.length,
|
|
229
|
+
totalNodes,
|
|
230
|
+
uniquePaths: uniquePaths.size,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Update strength values based on current order.
|
|
235
|
+
*/
|
|
236
|
+
updateStrengths() {
|
|
237
|
+
for (let i = 0; i < this.layers.length; i++) {
|
|
238
|
+
this.layers[i].strength = i;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Create a new empty layer stack.
|
|
244
|
+
*/
|
|
245
|
+
export function createLayerStack() {
|
|
246
|
+
return new LayerStack();
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=layer-stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer-stack.js","sourceRoot":"","sources":["../src/layer-stack.ts"],"names":[],"mappings":"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"}
|