@ifc-lite/parser 3.2.0 → 3.3.1
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/columnar-parser.d.ts +10 -2
- package/dist/columnar-parser.d.ts.map +1 -1
- package/dist/columnar-parser.js +79 -5
- package/dist/columnar-parser.js.map +1 -1
- package/dist/data-store-transport.d.ts +1 -0
- package/dist/data-store-transport.d.ts.map +1 -1
- package/dist/data-store-transport.js +2 -0
- package/dist/data-store-transport.js.map +1 -1
- package/dist/generated/serializers.d.ts +5 -64
- package/dist/generated/serializers.d.ts.map +1 -1
- package/dist/generated/serializers.js +10 -215
- package/dist/generated/serializers.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/on-demand-extractors.d.ts +19 -0
- package/dist/on-demand-extractors.d.ts.map +1 -1
- package/dist/on-demand-extractors.js +34 -4
- package/dist/on-demand-extractors.js.map +1 -1
- package/dist/parser.worker.d.ts.map +1 -1
- package/dist/parser.worker.js +11 -2
- package/dist/parser.worker.js.map +1 -1
- package/dist/source-header.d.ts +9 -0
- package/dist/source-header.d.ts.map +1 -0
- package/dist/source-header.js +206 -0
- package/dist/source-header.js.map +1 -0
- package/dist/spatial-hierarchy-builder.d.ts.map +1 -1
- package/dist/spatial-hierarchy-builder.js +41 -12
- package/dist/spatial-hierarchy-builder.js.map +1 -1
- package/dist/wasm-init-retry.d.ts +45 -0
- package/dist/wasm-init-retry.d.ts.map +1 -0
- package/dist/wasm-init-retry.js +60 -0
- package/dist/wasm-init-retry.js.map +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.worker.js","sourceRoot":"","sources":["../src/parser.worker.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;GAWG;AAEH,OAAO,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAEL,WAAW,EACX,iBAAiB,GAGlB,MAAM,2BAA2B,CAAC;AA0EnC,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,WAAoC,CAAC;IAClD,OAAO,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,OAAkC,EAAE,SAA0B;IAChF,MAAM,CAAC,GAAG,IAAyB,CAAC;IACpC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,IAAI,iBAAiB,GAAsD,IAAI,CAAC;AAChF,IAAI,WAAW,GAAyB,IAAI,CAAC;AAE7C,KAAK,UAAU,iBAAiB;IAC9B,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAChD,IAAI,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"parser.worker.js","sourceRoot":"","sources":["../src/parser.worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IfcSourceHeader } from '@ifc-lite/data';
|
|
2
|
+
/**
|
|
3
|
+
* Parse the HEADER section of a STEP/IFC buffer into {@link IfcSourceHeader}.
|
|
4
|
+
* Returns `undefined` when no recognisable header records are present (e.g.
|
|
5
|
+
* non-STEP input). Cheap: only the first {@link MAX_HEADER_BYTES} are decoded,
|
|
6
|
+
* truncated at the first `ENDSEC` so the DATA section is never scanned.
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseSourceHeader(buffer: Uint8Array): IfcSourceHeader | undefined;
|
|
9
|
+
//# sourceMappingURL=source-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-header.d.ts","sourceRoot":"","sources":["../src/source-header.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA0HtD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS,CA0DjF"}
|
|
@@ -0,0 +1,206 @@
|
|
|
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
|
+
* Parse the ISO 10303-21 HEADER section of a STEP/IFC file into the structured
|
|
6
|
+
* {@link IfcSourceHeader} the exporter uses to round-trip header fidelity.
|
|
7
|
+
*
|
|
8
|
+
* This is deliberately a small, self-contained, quote-aware reader rather than
|
|
9
|
+
* a reuse of the generic STEP value parser: `FILE_DESCRIPTION` items and
|
|
10
|
+
* `FILE_NAME` fields routinely contain commas and parentheses inside quoted
|
|
11
|
+
* strings (e.g. `'CoordinateReference [..., ProjectSite: Origin]'`), which a
|
|
12
|
+
* splitter that ignores quote state would mis-split.
|
|
13
|
+
*/
|
|
14
|
+
import { safeUtf8Decode } from '@ifc-lite/data';
|
|
15
|
+
/** Headers are tiny; cap the decode so a huge file's body is never scanned. */
|
|
16
|
+
const MAX_HEADER_BYTES = 64 * 1024;
|
|
17
|
+
/**
|
|
18
|
+
* Split STEP record arguments at top-level commas, respecting paren/bracket
|
|
19
|
+
* nesting and single-quoted strings (with `''` escapes). Returns the raw,
|
|
20
|
+
* still-escaped argument substrings (trimmed).
|
|
21
|
+
*/
|
|
22
|
+
function splitTopLevel(inner) {
|
|
23
|
+
const args = [];
|
|
24
|
+
let depth = 0;
|
|
25
|
+
let inString = false;
|
|
26
|
+
let current = '';
|
|
27
|
+
for (let i = 0; i < inner.length; i++) {
|
|
28
|
+
const ch = inner[i];
|
|
29
|
+
if (inString) {
|
|
30
|
+
current += ch;
|
|
31
|
+
if (ch === "'") {
|
|
32
|
+
if (inner[i + 1] === "'") {
|
|
33
|
+
current += "'";
|
|
34
|
+
i++;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
inString = false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (ch === "'") {
|
|
43
|
+
inString = true;
|
|
44
|
+
current += ch;
|
|
45
|
+
}
|
|
46
|
+
else if (ch === '(' || ch === '[') {
|
|
47
|
+
depth++;
|
|
48
|
+
current += ch;
|
|
49
|
+
}
|
|
50
|
+
else if (ch === ')' || ch === ']') {
|
|
51
|
+
depth--;
|
|
52
|
+
current += ch;
|
|
53
|
+
}
|
|
54
|
+
else if (ch === ',' && depth === 0) {
|
|
55
|
+
args.push(current.trim());
|
|
56
|
+
current = '';
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
current += ch;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (current.trim().length > 0 || args.length > 0) {
|
|
63
|
+
args.push(current.trim());
|
|
64
|
+
}
|
|
65
|
+
return args;
|
|
66
|
+
}
|
|
67
|
+
/** Reverse the STEP string escapes this codebase emits (`''` and `\\`). */
|
|
68
|
+
function unescapeStepString(str) {
|
|
69
|
+
return str.replace(/''/g, "'").replace(/\\\\/g, '\\');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Decode a single STEP argument to a string, or `undefined` for `$`
|
|
73
|
+
* (unset) / `*` (derived) / empty.
|
|
74
|
+
*/
|
|
75
|
+
function decodeOptString(arg) {
|
|
76
|
+
const t = arg.trim();
|
|
77
|
+
if (t === '' || t === '$' || t === '*')
|
|
78
|
+
return undefined;
|
|
79
|
+
if (t.length >= 2 && t.startsWith("'") && t.endsWith("'")) {
|
|
80
|
+
return unescapeStepString(t.slice(1, -1));
|
|
81
|
+
}
|
|
82
|
+
return t;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Decode a STEP list argument (`('a','b',...)`) into a string array. `$` /
|
|
86
|
+
* empty yield `[]`. List entries that are unset are dropped.
|
|
87
|
+
*/
|
|
88
|
+
function decodeStringList(arg) {
|
|
89
|
+
const t = arg.trim();
|
|
90
|
+
if (t === '' || t === '$' || t === '*')
|
|
91
|
+
return [];
|
|
92
|
+
if (!t.startsWith('(') || !t.endsWith(')')) {
|
|
93
|
+
// Tolerate a bare single value where a list was expected.
|
|
94
|
+
const single = decodeOptString(t);
|
|
95
|
+
return single === undefined ? [] : [single];
|
|
96
|
+
}
|
|
97
|
+
return splitTopLevel(t.slice(1, -1))
|
|
98
|
+
.map(decodeOptString)
|
|
99
|
+
.filter((v) => v !== undefined);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Extract the argument substring inside the parentheses of `KEYWORD( ... )`,
|
|
103
|
+
* starting the search at `fromIndex`. Quote- and nesting-aware so a quoted
|
|
104
|
+
* `)` never closes the record early. Returns `null` if not found.
|
|
105
|
+
*/
|
|
106
|
+
function extractRecordArgs(text, keyword, fromIndex = 0) {
|
|
107
|
+
const upper = text.toUpperCase();
|
|
108
|
+
const at = upper.indexOf(keyword, fromIndex);
|
|
109
|
+
if (at < 0)
|
|
110
|
+
return null;
|
|
111
|
+
let i = at + keyword.length;
|
|
112
|
+
while (i < text.length && /\s/.test(text[i]))
|
|
113
|
+
i++;
|
|
114
|
+
if (text[i] !== '(')
|
|
115
|
+
return null;
|
|
116
|
+
const start = i;
|
|
117
|
+
let depth = 0;
|
|
118
|
+
let inString = false;
|
|
119
|
+
for (; i < text.length; i++) {
|
|
120
|
+
const ch = text[i];
|
|
121
|
+
if (inString) {
|
|
122
|
+
if (ch === "'") {
|
|
123
|
+
if (text[i + 1] === "'")
|
|
124
|
+
i++;
|
|
125
|
+
else
|
|
126
|
+
inString = false;
|
|
127
|
+
}
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (ch === "'") {
|
|
131
|
+
inString = true;
|
|
132
|
+
}
|
|
133
|
+
else if (ch === '(') {
|
|
134
|
+
depth++;
|
|
135
|
+
}
|
|
136
|
+
else if (ch === ')') {
|
|
137
|
+
depth--;
|
|
138
|
+
if (depth === 0)
|
|
139
|
+
return text.slice(start + 1, i);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Parse the HEADER section of a STEP/IFC buffer into {@link IfcSourceHeader}.
|
|
146
|
+
* Returns `undefined` when no recognisable header records are present (e.g.
|
|
147
|
+
* non-STEP input). Cheap: only the first {@link MAX_HEADER_BYTES} are decoded,
|
|
148
|
+
* truncated at the first `ENDSEC` so the DATA section is never scanned.
|
|
149
|
+
*/
|
|
150
|
+
export function parseSourceHeader(buffer) {
|
|
151
|
+
const cap = Math.min(buffer.length, MAX_HEADER_BYTES);
|
|
152
|
+
let text = safeUtf8Decode(buffer, 0, cap);
|
|
153
|
+
const endSec = text.toUpperCase().indexOf('ENDSEC');
|
|
154
|
+
if (endSec >= 0)
|
|
155
|
+
text = text.slice(0, endSec);
|
|
156
|
+
const descRecord = extractRecordArgs(text, 'FILE_DESCRIPTION');
|
|
157
|
+
const nameRecord = extractRecordArgs(text, 'FILE_NAME');
|
|
158
|
+
const schemaRecord = extractRecordArgs(text, 'FILE_SCHEMA');
|
|
159
|
+
if (descRecord === null && nameRecord === null && schemaRecord === null) {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
// FILE_DESCRIPTION( (<items>), <implementation_level> )
|
|
163
|
+
let description = [];
|
|
164
|
+
let implementationLevel = '2;1';
|
|
165
|
+
if (descRecord !== null) {
|
|
166
|
+
const parts = splitTopLevel(descRecord);
|
|
167
|
+
if (parts.length >= 1)
|
|
168
|
+
description = decodeStringList(parts[0]);
|
|
169
|
+
if (parts.length >= 2)
|
|
170
|
+
implementationLevel = decodeOptString(parts[1]) ?? '2;1';
|
|
171
|
+
}
|
|
172
|
+
// FILE_NAME( name, time_stamp, (author), (organization),
|
|
173
|
+
// preprocessor_version, originating_system, authorization )
|
|
174
|
+
let name;
|
|
175
|
+
let timeStamp;
|
|
176
|
+
let author = [];
|
|
177
|
+
let organization = [];
|
|
178
|
+
let preprocessorVersion;
|
|
179
|
+
let originatingSystem;
|
|
180
|
+
let authorization;
|
|
181
|
+
if (nameRecord !== null) {
|
|
182
|
+
const parts = splitTopLevel(nameRecord);
|
|
183
|
+
name = decodeOptString(parts[0] ?? '');
|
|
184
|
+
timeStamp = decodeOptString(parts[1] ?? '');
|
|
185
|
+
author = decodeStringList(parts[2] ?? '');
|
|
186
|
+
organization = decodeStringList(parts[3] ?? '');
|
|
187
|
+
preprocessorVersion = decodeOptString(parts[4] ?? '');
|
|
188
|
+
originatingSystem = decodeOptString(parts[5] ?? '');
|
|
189
|
+
authorization = decodeOptString(parts[6] ?? '');
|
|
190
|
+
}
|
|
191
|
+
// FILE_SCHEMA( (<identifier>, ...) )
|
|
192
|
+
const schemaIdentifiers = schemaRecord !== null ? decodeStringList(schemaRecord) : [];
|
|
193
|
+
return {
|
|
194
|
+
description,
|
|
195
|
+
implementationLevel,
|
|
196
|
+
name,
|
|
197
|
+
timeStamp,
|
|
198
|
+
author,
|
|
199
|
+
organization,
|
|
200
|
+
preprocessorVersion,
|
|
201
|
+
originatingSystem,
|
|
202
|
+
authorization,
|
|
203
|
+
schemaIdentifiers,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=source-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-header.js","sourceRoot":"","sources":["../src/source-header.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spatial-hierarchy-builder.d.ts","sourceRoot":"","sources":["../src/spatial-hierarchy-builder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAe,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"spatial-hierarchy-builder.d.ts","sourceRoot":"","sources":["../src/spatial-hierarchy-builder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAe,MAAM,gBAAgB,CAAC;AAUjH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,qBAAa,uBAAuB;IAClC;;;;OAIG;IACH,KAAK,CACH,QAAQ,EAAE,WAAW,EACrB,aAAa,EAAE,iBAAiB,EAChC,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE;QAAE,IAAI,EAAE;YAAE,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;SAAE,CAAA;KAAE,EACxE,eAAe,GAAE,MAAY,GAC5B,gBAAgB;IA6HnB,OAAO,CAAC,SAAS;IAuJjB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAsDzB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
-
import { IfcTypeEnum, RelationshipType, createLogger, isBuildingLikeSpatialType, isSpatialStructureType, isStoreyLikeSpatialType, } from '@ifc-lite/data';
|
|
4
|
+
import { IfcTypeEnum, RelationshipType, createLogger, isBuildingLikeSpatialType, isSpaceLikeSpatialType, isSpatialStructureType, isStoreyLikeSpatialType, } from '@ifc-lite/data';
|
|
5
5
|
import { EntityExtractor } from './entity-extractor.js';
|
|
6
6
|
const log = createLogger('SpatialHierarchy');
|
|
7
7
|
export class SpatialHierarchyBuilder {
|
|
@@ -135,24 +135,44 @@ export class SpatialHierarchyBuilder {
|
|
|
135
135
|
// gate on whether the EntityTable happened to record the type. Dropping
|
|
136
136
|
// missing entities silently hides every IfcReferent/IfcSignal/IfcAlignment
|
|
137
137
|
// under an IfcRailway/IfcRoad even though the relationship graph has them.
|
|
138
|
-
|
|
138
|
+
// A contained spatial element — an IfcSpace / IfcSpatialZone attached to a
|
|
139
|
+
// storey via IfcRelContainedInSpatialStructure, which is what Revit Family +
|
|
140
|
+
// Dynamo emit instead of IfcRelAggregates — is a tree NODE, not a contained
|
|
141
|
+
// product. Split it out here and promote it below; without this it was
|
|
142
|
+
// filtered out and vanished from the hierarchy (#1075). Unknown-typed
|
|
143
|
+
// entities (not in the EntityTable, e.g. some IFC4x3 leaves) stay elements.
|
|
144
|
+
const containedElements = [];
|
|
145
|
+
const containedSpatialChildren = [];
|
|
146
|
+
for (const id of rawContainedElements) {
|
|
139
147
|
const childType = entityTypeMap.get(id);
|
|
140
|
-
if (childType
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
148
|
+
if (childType !== undefined && isSpatialStructureType(childType) && childType !== IfcTypeEnum.IfcProject) {
|
|
149
|
+
containedSpatialChildren.push(id);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
containedElements.push(id);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
144
155
|
// Get child spatial elements via IfcRelAggregates (inverse - who aggregates this?)
|
|
145
156
|
// Actually, we want forward - what does this element aggregate?
|
|
146
157
|
const aggregatedChildren = relationships.getRelated(expressId, RelationshipType.Aggregates, 'forward');
|
|
147
|
-
//
|
|
158
|
+
// Spatial child nodes come from BOTH aggregation and containment. Dedupe so a
|
|
159
|
+
// space referenced by both relationships isn't built twice (which `visited`
|
|
160
|
+
// would otherwise reduce to a duplicate leaf node).
|
|
148
161
|
const childNodes = [];
|
|
149
|
-
|
|
162
|
+
const spatialChildIds = new Set();
|
|
163
|
+
const addSpatialChild = (childId) => {
|
|
164
|
+
if (spatialChildIds.has(childId))
|
|
165
|
+
return;
|
|
150
166
|
const childType = entityTypeMap.get(childId) ?? IfcTypeEnum.Unknown;
|
|
151
167
|
if (isSpatialStructureType(childType) && childType !== IfcTypeEnum.IfcProject) {
|
|
152
|
-
|
|
153
|
-
childNodes.push(
|
|
168
|
+
spatialChildIds.add(childId);
|
|
169
|
+
childNodes.push(this.buildNode(childId, entities, relationships, strings, source, entityIndex, byStorey, byBuilding, bySite, bySpace, storeyElevations, elementToStorey, entityTypeMap, lengthUnitScale, visited));
|
|
154
170
|
}
|
|
155
|
-
}
|
|
171
|
+
};
|
|
172
|
+
for (const childId of aggregatedChildren)
|
|
173
|
+
addSpatialChild(childId);
|
|
174
|
+
for (const childId of containedSpatialChildren)
|
|
175
|
+
addSpatialChild(childId);
|
|
156
176
|
// Add elements to appropriate maps
|
|
157
177
|
if (isStoreyLikeSpatialType(typeEnum)) {
|
|
158
178
|
byStorey.set(expressId, containedElements);
|
|
@@ -163,13 +183,22 @@ export class SpatialHierarchyBuilder {
|
|
|
163
183
|
else if (typeEnum === IfcTypeEnum.IfcSite) {
|
|
164
184
|
bySite.set(expressId, containedElements);
|
|
165
185
|
}
|
|
166
|
-
else if (typeEnum
|
|
186
|
+
else if (isSpaceLikeSpatialType(typeEnum)) {
|
|
187
|
+
// IfcSpace and IfcSpatialZone both roll up their contained elements here.
|
|
167
188
|
bySpace.set(expressId, containedElements);
|
|
168
189
|
}
|
|
169
190
|
if (isStoreyLikeSpatialType(typeEnum)) {
|
|
170
191
|
for (const elementId of containedElements) {
|
|
171
192
|
elementToStorey.set(elementId, expressId);
|
|
172
193
|
}
|
|
194
|
+
// Map the storey's spatial children (IfcSpace / IfcSpatialZone) to it too,
|
|
195
|
+
// so a selected space resolves "which storey it's on" — the space itself
|
|
196
|
+
// is a child node, not in containedElements (#1075).
|
|
197
|
+
for (const childId of spatialChildIds) {
|
|
198
|
+
if (!elementToStorey.has(childId)) {
|
|
199
|
+
elementToStorey.set(childId, expressId);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
173
202
|
}
|
|
174
203
|
return {
|
|
175
204
|
expressId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spatial-hierarchy-builder.js","sourceRoot":"","sources":["../src/spatial-hierarchy-builder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"spatial-hierarchy-builder.js","sourceRoot":"","sources":["../src/spatial-hierarchy-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilient one-shot retry around wasm-bindgen's `init()`.
|
|
3
|
+
*
|
|
4
|
+
* wasm-bindgen's streaming loader rethrows on a non-OK HTTP status or a failed
|
|
5
|
+
* fetch of `ifc-lite_bg.wasm` (it only falls back to `arrayBuffer`+`instantiate`
|
|
6
|
+
* for the wrong-MIME case), surfacing as `TypeError: Failed to execute
|
|
7
|
+
* 'compile' on 'WebAssembly': HTTP status code is not ok`. A transient blip — a
|
|
8
|
+
* cold CDN edge, a mid-deploy race, a flaky proxy/antivirus — can produce a
|
|
9
|
+
* one-off failure that a second attempt recovers.
|
|
10
|
+
*
|
|
11
|
+
* Extracted from the worker so it is unit-testable without a real wasm bundle.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* True when `message` looks like a transient transport/download failure of the
|
|
15
|
+
* engine binary (worth one retry) rather than a genuine corrupt-module or
|
|
16
|
+
* validation error (which must propagate immediately so real bugs aren't
|
|
17
|
+
* masked).
|
|
18
|
+
*
|
|
19
|
+
* Per the WebAssembly Web API, the streaming loader validates the HTTP response
|
|
20
|
+
* (status, MIME, CORS) and rejects with a `TypeError` BEFORE compiling, so only
|
|
21
|
+
* those transport failures are retry-worthy. Invalid bytes (corrupt module,
|
|
22
|
+
* wrong magic header) reject with a `CompileError` — retrying just refetches
|
|
23
|
+
* the same bad bytes, so those fail fast.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isTransientWasmLoadError(message: string): boolean;
|
|
26
|
+
export interface InitWasmRetryOptions {
|
|
27
|
+
/** Delay before the single retry. Default 300ms; pass 0 in tests. */
|
|
28
|
+
retryDelayMs?: number;
|
|
29
|
+
/** Injected sleep (tests pass an instant resolver). */
|
|
30
|
+
sleep?: (ms: number) => Promise<void>;
|
|
31
|
+
/** Injected logger (defaults to `console.warn`). */
|
|
32
|
+
warn?: (message: string) => void;
|
|
33
|
+
/** Context label for the log line. */
|
|
34
|
+
label?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Run `init` once; on a transient-looking failure, wait and retry exactly once.
|
|
38
|
+
* Non-transient failures propagate without a retry. The second failure (if any)
|
|
39
|
+
* propagates to the caller.
|
|
40
|
+
*
|
|
41
|
+
* @param init Thunk that performs the actual `init(...)` call (so callers can
|
|
42
|
+
* bind their own wasm URL / arguments).
|
|
43
|
+
*/
|
|
44
|
+
export declare function initWasmWithRetry(init: () => Promise<unknown>, options?: InitWasmRetryOptions): Promise<void>;
|
|
45
|
+
//# sourceMappingURL=wasm-init-retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-init-retry.d.ts","sourceRoot":"","sources":["../src/wasm-init-retry.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOjE;AAED,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,oDAAoD;IACpD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC5B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
* Resilient one-shot retry around wasm-bindgen's `init()`.
|
|
6
|
+
*
|
|
7
|
+
* wasm-bindgen's streaming loader rethrows on a non-OK HTTP status or a failed
|
|
8
|
+
* fetch of `ifc-lite_bg.wasm` (it only falls back to `arrayBuffer`+`instantiate`
|
|
9
|
+
* for the wrong-MIME case), surfacing as `TypeError: Failed to execute
|
|
10
|
+
* 'compile' on 'WebAssembly': HTTP status code is not ok`. A transient blip — a
|
|
11
|
+
* cold CDN edge, a mid-deploy race, a flaky proxy/antivirus — can produce a
|
|
12
|
+
* one-off failure that a second attempt recovers.
|
|
13
|
+
*
|
|
14
|
+
* Extracted from the worker so it is unit-testable without a real wasm bundle.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* True when `message` looks like a transient transport/download failure of the
|
|
18
|
+
* engine binary (worth one retry) rather than a genuine corrupt-module or
|
|
19
|
+
* validation error (which must propagate immediately so real bugs aren't
|
|
20
|
+
* masked).
|
|
21
|
+
*
|
|
22
|
+
* Per the WebAssembly Web API, the streaming loader validates the HTTP response
|
|
23
|
+
* (status, MIME, CORS) and rejects with a `TypeError` BEFORE compiling, so only
|
|
24
|
+
* those transport failures are retry-worthy. Invalid bytes (corrupt module,
|
|
25
|
+
* wrong magic header) reject with a `CompileError` — retrying just refetches
|
|
26
|
+
* the same bad bytes, so those fail fast.
|
|
27
|
+
*/
|
|
28
|
+
export function isTransientWasmLoadError(message) {
|
|
29
|
+
// Fail fast on genuine module-validation errors even if a transport-ish word
|
|
30
|
+
// somehow appears in the message.
|
|
31
|
+
if (/compileerror|validation error|magic (?:word|number)|invalid (?:wasm|module)/i.test(message)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return /HTTP status code is not ok|failed to fetch|network ?error|load failed/i.test(message);
|
|
35
|
+
}
|
|
36
|
+
const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
37
|
+
/**
|
|
38
|
+
* Run `init` once; on a transient-looking failure, wait and retry exactly once.
|
|
39
|
+
* Non-transient failures propagate without a retry. The second failure (if any)
|
|
40
|
+
* propagates to the caller.
|
|
41
|
+
*
|
|
42
|
+
* @param init Thunk that performs the actual `init(...)` call (so callers can
|
|
43
|
+
* bind their own wasm URL / arguments).
|
|
44
|
+
*/
|
|
45
|
+
export async function initWasmWithRetry(init, options = {}) {
|
|
46
|
+
const { retryDelayMs = 300, sleep = defaultSleep, warn = console.warn, label = 'wasm' } = options;
|
|
47
|
+
try {
|
|
48
|
+
await init();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
53
|
+
if (!isTransientWasmLoadError(msg))
|
|
54
|
+
throw err;
|
|
55
|
+
warn(`[${label}] WASM engine load failed (${msg}); retrying once`);
|
|
56
|
+
await sleep(retryDelayMs);
|
|
57
|
+
await init();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=wasm-init-retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-init-retry.js","sourceRoot":"","sources":["../src/wasm-init-retry.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,6EAA6E;IAC7E,kCAAkC;IAClC,IAAI,8EAA8E,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjG,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,wEAAwE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChG,CAAC;AAaD,MAAM,YAAY,GAAG,CAAC,EAAU,EAAiB,EAAE,CACjD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA4B,EAC5B,UAAgC,EAAE;IAElC,MAAM,EAAE,YAAY,GAAG,GAAG,EAAE,KAAK,GAAG,YAAY,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;IAClG,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;QAC9C,IAAI,CAAC,IAAI,KAAK,8BAA8B,GAAG,kBAAkB,CAAC,CAAC;QACnE,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/parser",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"description": "IFC/STEP parser for IFC-Lite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@ifc-lite/data": "^2.0
|
|
20
|
+
"@ifc-lite/data": "^2.1.0",
|
|
21
21
|
"@ifc-lite/encoding": "^1.14.7",
|
|
22
22
|
"@ifc-lite/ifcx": "^2.1.5",
|
|
23
|
-
"@ifc-lite/wasm": "^2.
|
|
23
|
+
"@ifc-lite/wasm": "^2.9.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"typescript": "^6.0.3",
|