@ifc-lite/export 2.0.0 → 2.1.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.
@@ -16,6 +16,17 @@ export interface MergeModelInput {
16
16
  name: string;
17
17
  /** Parsed IFC data store (must have source buffer) */
18
18
  dataStore: IfcDataStore;
19
+ /**
20
+ * Length unit scale of this model — the factor that converts the model's raw
21
+ * IFC length values into base SI metres (`1.0` metres, `0.001` millimetres,
22
+ * `0.3048` feet, …). Optional: when omitted the exporter reads
23
+ * `dataStore.lengthUnitScale`, falling back to `1.0`.
24
+ *
25
+ * The merge compares each model's scale to the first model's to decide
26
+ * whether it can be folded into the unified project (same unit) or must be
27
+ * federated as its own project (different unit). See {@link MergedExporter}.
28
+ */
29
+ lengthUnitScale?: number;
19
30
  }
20
31
  /**
21
32
  * Options for merged STEP export
@@ -38,6 +49,24 @@ export interface MergeExportOptions {
38
49
  * - 'keep-first': Keep the first model's IfcProject as the root
39
50
  */
40
51
  projectStrategy?: 'keep-first';
52
+ /**
53
+ * How to reconcile models whose length unit differs from the first model's.
54
+ *
55
+ * - `'auto'` (default): unit-aware merge. Models that share the first
56
+ * model's length unit are unified into a single `IfcProject` (spatial
57
+ * structure and infrastructure deduplicated). A model with a *different*
58
+ * length unit is federated — it keeps its own `IfcProject`,
59
+ * `IfcUnitAssignment` and representation contexts so its coordinates stay
60
+ * correctly scaled, instead of being silently reinterpreted under the
61
+ * first model's unit. The output then contains more than one `IfcProject`
62
+ * (a deliberate relaxation of the IfcSingleProjectInstance rule, flagged in
63
+ * `stats.warnings`) — the only way to preserve mixed units in one file
64
+ * without rewriting every length-valued attribute.
65
+ * - `'assume-shared'`: treat every model as sharing the first model's unit
66
+ * (the pre-1332 behaviour). Use only when the caller has already
67
+ * normalised units; mixing real units under this mode mis-scales geometry.
68
+ */
69
+ unitReconciliation?: 'auto' | 'assume-shared';
41
70
  /** Apply visibility filtering to each model before merging */
42
71
  visibleOnly?: boolean;
43
72
  /** Hidden entity IDs per model (local expressIds) */
@@ -76,20 +105,54 @@ export interface MergeExportResult {
76
105
  totalEntityCount: number;
77
106
  /** File size in bytes */
78
107
  fileSize: number;
108
+ /**
109
+ * Number of models federated as their own IfcProject because their length
110
+ * unit differed from the first model's. 0 means a single unified project.
111
+ */
112
+ federatedModelCount: number;
113
+ /**
114
+ * Human-readable advisories about the merge (empty on a clean single-unit
115
+ * merge). Notably flags when federation produced more than one IfcProject,
116
+ * which intentionally relaxes the IfcSingleProjectInstance schema rule.
117
+ */
118
+ warnings: string[];
79
119
  };
80
120
  }
81
121
  /**
82
122
  * Merges multiple IFC models into a single STEP file.
83
123
  *
84
124
  * Uses the same approach as IfcOpenShell's MergeProjects recipe, extended
85
- * with spatial hierarchy unification:
125
+ * with spatial hierarchy unification and unit-aware federation:
86
126
  * 1. First model's entities use their original IDs
87
127
  * 2. Subsequent models' IDs are offset to avoid collisions
88
- * 3. IfcProject is unified all references remapped to the first model's project
89
- * 4. Spatial structure (Site, Building, Storey) is unified by name/elevation:
90
- * matching entities are remapped to the first model's equivalents so that
91
- * products from all models end up in the same unified tree
92
- * 5. Duplicate entities and shared infrastructure (units, contexts) are skipped
128
+ * 3. A model that shares the first model's length unit is *unified*: its
129
+ * IfcProject is remapped to the first model's, spatial structure (Site,
130
+ * Building, Storey) is unified by name/elevation, and shared infrastructure
131
+ * (units, contexts) is deduplicated.
132
+ * 4. A model with a *different* length unit is *federated*: it keeps its own
133
+ * IfcProject, IfcUnitAssignment and representation contexts, so its raw
134
+ * coordinates remain correctly scaled rather than being reinterpreted under
135
+ * the first model's unit (the mis-scale bug, issue #1332).
136
+ * 5. GlobalIds are reconciled, not blindly duplicated: a non-relationship
137
+ * rooted entity that repeats a GlobalId already emitted *in the same unit
138
+ * space* is unified (references remapped to the one instance). Otherwise —
139
+ * a federated/different-unit instance, or an objectified relationship whose
140
+ * payload (RelatedObjects) may differ — it is kept and re-stamped with a
141
+ * fresh deterministic GlobalId so the file has no duplicate-GlobalId errors
142
+ * and no relationship membership is lost.
143
+ *
144
+ * Conformance trade-off: when federation triggers, the file contains more than
145
+ * one IfcProject, which intentionally relaxes the IfcSingleProjectInstance
146
+ * EXPRESS rule (SIZEOF(IfcProject) <= 1). This is the only way to keep two
147
+ * different length units in one STEP file without rewriting every length-valued
148
+ * coordinate, and it is strictly better than the previous silent mis-scale.
149
+ * `MergeExportResult.stats.warnings` flags it; pass
150
+ * `unitReconciliation: 'assume-shared'` to force a single project when units
151
+ * are already normalised.
152
+ *
153
+ * Limitation: federation only unifies a model against the *first* model's unit
154
+ * group. Two non-first models that share a unit different from the first are
155
+ * each kept as independent projects (correct, just less deduplicated).
93
156
  */
94
157
  export declare class MergedExporter {
95
158
  private models;
@@ -101,6 +164,83 @@ export declare class MergedExporter {
101
164
  * responsive during large merged exports.
102
165
  */
103
166
  exportAsync(options: MergeExportOptions): Promise<MergeExportResult>;
167
+ /**
168
+ * Assemble the result stats, including any federation conformance warnings.
169
+ */
170
+ private buildStats;
171
+ /**
172
+ * Build the ifc-lite provenance header. Merged files have no single source
173
+ * header to round-trip, so we deliberately emit our own rather than picking
174
+ * one model's FILE_DESCRIPTION arbitrarily.
175
+ */
176
+ private buildHeader;
177
+ /**
178
+ * Compute the model-independent state shared by export()/exportAsync():
179
+ * per-model id offsets and the primary model's project/infra/spatial/unit info.
180
+ */
181
+ private buildMergeSetup;
182
+ /**
183
+ * Resolve a model's length unit scale (raw IFC length → metres). Prefers an
184
+ * explicit `lengthUnitScale` on the input, else the value the parser stamped
185
+ * on the data store, else metres.
186
+ */
187
+ private resolveUnitScale;
188
+ /** True when two length unit scales are equal within relative tolerance. */
189
+ private unitsCompatible;
190
+ /**
191
+ * Resolve the set of express ids to include for a model under visibility
192
+ * filtering, or `null` when no filtering is requested (include everything).
193
+ */
194
+ private computeIncludedEntityIds;
195
+ /**
196
+ * Plan how a model's entities are remapped, skipped, or re-stamped, given
197
+ * whether it shares the primary model's length unit (`compatible`).
198
+ *
199
+ * Compatible (or `assume-shared`) models are unified into the primary project:
200
+ * their IfcProject, shared infrastructure, and matching spatial structure are
201
+ * deduplicated, and a rooted entity repeating an already-emitted GlobalId is
202
+ * unified to that one instance.
203
+ *
204
+ * Incompatible (federated) models keep their own project, units, contexts and
205
+ * spatial structure so their coordinates stay correctly scaled; a rooted
206
+ * entity whose GlobalId collides with one already emitted is given a fresh
207
+ * deterministic GlobalId, since the two cannot be the same instance across
208
+ * different unit spaces.
209
+ */
210
+ private planModel;
211
+ /**
212
+ * Render one source entity into its final STEP line: apply id offset + shared
213
+ * remaps, re-stamp a federated GlobalId if needed, apply schema conversion,
214
+ * and register the emitted GlobalId so later models can reconcile against it.
215
+ * Returns `null` when schema conversion drops the entity.
216
+ */
217
+ private renderEntity;
218
+ /**
219
+ * Read the GlobalId (first quoted attribute) from an already-rendered STEP
220
+ * line. Used to register the id that was actually emitted, after any id
221
+ * remap, GlobalId re-stamp, or schema conversion. Returns null if the first
222
+ * quoted token is not a 22-char GlobalId.
223
+ */
224
+ private readLeadingGuid;
225
+ /**
226
+ * Mint a fresh, deterministic, collision-free GlobalId for an entity whose id
227
+ * collides. Seeded from the original GlobalId and the model's stable id so the
228
+ * output is reproducible and does not churn when an unrelated earlier model
229
+ * changes size; checked against both already-emitted ids and the ids minted
230
+ * so far for this model.
231
+ */
232
+ private mintUniqueGuid;
233
+ /**
234
+ * Read an entity's GlobalId (first attribute) by decoding only its head.
235
+ * Returns the 22-char id for a rooted entity, or `null` for any entity whose
236
+ * first attribute is not a GlobalId (geometry, lists, property atoms, …).
237
+ */
238
+ private extractGlobalIdFast;
239
+ /**
240
+ * Replace an entity's GlobalId (first quoted attribute) with `newGuid`.
241
+ * `newGuid` is a 22-char IFC id (no quote in its charset), so this is safe.
242
+ */
243
+ private replaceGlobalId;
104
244
  /**
105
245
  * Remap all #ID references in a STEP entity line.
106
246
  * Applies offset to all IDs, then overrides with specific remappings.
@@ -1 +1 @@
1
- {"version":3,"file":"merged-exporter.d.ts","sourceRoot":"","sources":["../src/merged-exporter.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0BrD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,SAAS,EAAE,YAAY,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mFAAmF;IACnF,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9C,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,eAAe,CAAC,EAAE,YAAY,CAAC;IAE/B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,0DAA0D;IAC1D,wBAAwB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAE3D,yCAAyC;IACzC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;IAC/C,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,OAAO,EAAE,UAAU,CAAC;IACpB,iBAAiB;IACjB,KAAK,EAAE;QACL,8BAA8B;QAC9B,UAAU,EAAE,MAAM,CAAC;QACnB,mCAAmC;QACnC,gBAAgB,EAAE,MAAM,CAAC;QACzB,yBAAyB;QACzB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,eAAe,EAAE;IAOrC,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB;IAmKtD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsK1E;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAsDvB;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAelC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IA2E5B;;;;;;;;;OASG;IACH,OAAO,CAAC,0BAA0B;IA8BlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CA0D7B"}
1
+ {"version":3,"file":"merged-exporter.d.ts","sourceRoot":"","sources":["../src/merged-exporter.ts"],"names":[],"mappings":"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"}
@@ -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 { generateHeader } from '@ifc-lite/parser';
4
+ import { generateHeader, deterministicGlobalId } from '@ifc-lite/parser';
5
5
  import { decodeIfcString } from '@ifc-lite/encoding';
6
6
  import { safeUtf8Decode } from '@ifc-lite/data';
7
7
  import { collectReferencedEntityIds, getVisibleEntityIds, collectStyleEntities } from './reference-collector.js';
@@ -14,18 +14,97 @@ const SHARED_INFRASTRUCTURE_TYPES = new Set([
14
14
  'IFCGEOMETRICREPRESENTATIONCONTEXT',
15
15
  'IFCGEOMETRICREPRESENTATIONSUBCONTEXT',
16
16
  ]);
17
+ /**
18
+ * An IfcGloballyUniqueId is exactly 22 characters of the buildingSMART base64
19
+ * alphabet. We use this to recognise a rooted entity (IfcRoot subtype) by its
20
+ * first attribute. Geometry/list entities never carry a string there, but some
21
+ * non-rooted RESOURCE entities lead with a Name/Identifier string that can
22
+ * legitimately be 22 charset chars (e.g. a coded property key). Those are
23
+ * excluded by type ({@link NON_ROOTED_STRING_TYPES}) so their Name is never
24
+ * mistaken for a GlobalId — otherwise the GlobalId reconciliation could drop or
25
+ * rename them.
26
+ */
27
+ const GLOBAL_ID_RE = /^[0-9A-Za-z_$]{22}$/;
28
+ /**
29
+ * Non-IfcRoot entity types whose first attribute is (or can be) a quoted
30
+ * Name/Identifier string. They must NOT be treated as rooted by GlobalId, even
31
+ * when that string happens to be 22 charset characters. (IfcRoot property
32
+ * containers like IFCPROPERTYSET / IFCELEMENTQUANTITY are deliberately absent —
33
+ * they ARE rooted and carry a real GlobalId at attribute 0.)
34
+ *
35
+ * This is a best-effort denylist, not an exhaustive IfcRoot classifier — the
36
+ * merge works off raw STEP text and has no schema table. It covers the resource
37
+ * families that realistically appear in federated models; an unlisted
38
+ * string-leading resource type is only ever a problem if two models share an
39
+ * identical 22-char charset Name for it AND it collides, which is negligible. A
40
+ * miss in the other direction (treating a real root as non-rooted) is safe — it
41
+ * just skips one GlobalId reconciliation.
42
+ */
43
+ const NON_ROOTED_STRING_TYPES = new Set([
44
+ // IfcSimpleProperty / IfcComplexProperty (IfcPropertyAbstraction — not rooted)
45
+ 'IFCPROPERTYSINGLEVALUE', 'IFCPROPERTYENUMERATEDVALUE', 'IFCPROPERTYLISTVALUE',
46
+ 'IFCPROPERTYBOUNDEDVALUE', 'IFCPROPERTYTABLEVALUE', 'IFCPROPERTYREFERENCEVALUE',
47
+ 'IFCCOMPLEXPROPERTY',
48
+ // IfcPhysicalQuantity (not rooted)
49
+ 'IFCQUANTITYLENGTH', 'IFCQUANTITYAREA', 'IFCQUANTITYVOLUME', 'IFCQUANTITYCOUNT',
50
+ 'IFCQUANTITYWEIGHT', 'IFCQUANTITYTIME', 'IFCQUANTITYNUMBER', 'IFCPHYSICALCOMPLEXQUANTITY',
51
+ // Materials & their constituents (IfcMaterialDefinition — not rooted; lead with a Name)
52
+ 'IFCMATERIAL', 'IFCMATERIALPROFILE', 'IFCMATERIALPROFILESET',
53
+ 'IFCMATERIALCONSTITUENT', 'IFCMATERIALCONSTITUENTSET',
54
+ // Classification, library & document refs (IfcExternalInformation/Reference)
55
+ 'IFCCLASSIFICATION', 'IFCCLASSIFICATIONREFERENCE',
56
+ 'IFCLIBRARYINFORMATION', 'IFCLIBRARYREFERENCE', 'IFCEXTERNALREFERENCE',
57
+ 'IFCDOCUMENTINFORMATION', 'IFCDOCUMENTREFERENCE',
58
+ // Constraints & approvals (lead with a Name/Identifier)
59
+ 'IFCMETRIC', 'IFCOBJECTIVE', 'IFCAPPROVAL', 'IFCTABLE',
60
+ // Actors (IfcPerson/IfcOrganization lead with an Identification string)
61
+ 'IFCPERSON', 'IFCORGANIZATION',
62
+ // Presentation layers, styles & text literals (lead with a Name/Literal string)
63
+ 'IFCPRESENTATIONLAYERASSIGNMENT', 'IFCPRESENTATIONLAYERWITHSTYLE',
64
+ 'IFCSURFACESTYLE', 'IFCCURVESTYLE', 'IFCTEXTSTYLE', 'IFCFILLAREASTYLE',
65
+ 'IFCTEXTLITERAL', 'IFCTEXTLITERALWITHEXTENT',
66
+ ]);
67
+ /** True for IfcRelationship subtypes (objectified relationships). */
68
+ function isRelationshipType(typeUpper) {
69
+ return typeUpper.startsWith('IFCREL');
70
+ }
71
+ /** Relative tolerance for comparing two length unit scale factors. */
72
+ const UNIT_SCALE_TOLERANCE = 1e-6;
17
73
  /**
18
74
  * Merges multiple IFC models into a single STEP file.
19
75
  *
20
76
  * Uses the same approach as IfcOpenShell's MergeProjects recipe, extended
21
- * with spatial hierarchy unification:
77
+ * with spatial hierarchy unification and unit-aware federation:
22
78
  * 1. First model's entities use their original IDs
23
79
  * 2. Subsequent models' IDs are offset to avoid collisions
24
- * 3. IfcProject is unified all references remapped to the first model's project
25
- * 4. Spatial structure (Site, Building, Storey) is unified by name/elevation:
26
- * matching entities are remapped to the first model's equivalents so that
27
- * products from all models end up in the same unified tree
28
- * 5. Duplicate entities and shared infrastructure (units, contexts) are skipped
80
+ * 3. A model that shares the first model's length unit is *unified*: its
81
+ * IfcProject is remapped to the first model's, spatial structure (Site,
82
+ * Building, Storey) is unified by name/elevation, and shared infrastructure
83
+ * (units, contexts) is deduplicated.
84
+ * 4. A model with a *different* length unit is *federated*: it keeps its own
85
+ * IfcProject, IfcUnitAssignment and representation contexts, so its raw
86
+ * coordinates remain correctly scaled rather than being reinterpreted under
87
+ * the first model's unit (the mis-scale bug, issue #1332).
88
+ * 5. GlobalIds are reconciled, not blindly duplicated: a non-relationship
89
+ * rooted entity that repeats a GlobalId already emitted *in the same unit
90
+ * space* is unified (references remapped to the one instance). Otherwise —
91
+ * a federated/different-unit instance, or an objectified relationship whose
92
+ * payload (RelatedObjects) may differ — it is kept and re-stamped with a
93
+ * fresh deterministic GlobalId so the file has no duplicate-GlobalId errors
94
+ * and no relationship membership is lost.
95
+ *
96
+ * Conformance trade-off: when federation triggers, the file contains more than
97
+ * one IfcProject, which intentionally relaxes the IfcSingleProjectInstance
98
+ * EXPRESS rule (SIZEOF(IfcProject) <= 1). This is the only way to keep two
99
+ * different length units in one STEP file without rewriting every length-valued
100
+ * coordinate, and it is strictly better than the previous silent mis-scale.
101
+ * `MergeExportResult.stats.warnings` flags it; pass
102
+ * `unitReconciliation: 'assume-shared'` to force a single project when units
103
+ * are already normalised.
104
+ *
105
+ * Limitation: federation only unifies a model against the *first* model's unit
106
+ * group. Two non-first models that share a unit different from the first are
107
+ * each kept as independent projects (correct, just less deduplicated).
29
108
  */
30
109
  export class MergedExporter {
31
110
  models;
@@ -38,117 +117,39 @@ export class MergedExporter {
38
117
  export(options) {
39
118
  const onProgress = options.onProgress;
40
119
  const schema = (options.schema || 'IFC4');
41
- // Generate header. Policy: a federated/merged file has no single source
42
- // header to round-trip, so we deliberately emit an ifc-lite provenance
43
- // header rather than picking one model's FILE_DESCRIPTION arbitrarily.
44
- const header = generateHeader({
45
- schema,
46
- description: options.description || `Merged export of ${this.models.length} models from ifc-lite`,
47
- author: options.author || '',
48
- organization: options.organization || '',
49
- application: options.application || 'ifc-lite',
50
- filename: options.filename || 'merged.ifc',
51
- });
120
+ const header = this.buildHeader(options, schema);
121
+ const setup = this.buildMergeSetup(options);
52
122
  const allEntityLines = [];
53
- // Track ID offsets per model
54
- let nextAvailableId = 1;
55
- const modelOffsets = new Map();
56
- // First pass: determine ID offsets. Span the COMPLETE entity set (incl.
57
- // deferred property atoms) so the next model's offset clears every id this
58
- // model will emit — otherwise a deferred atom at a high id collides.
59
- for (const model of this.models) {
60
- modelOffsets.set(model.id, nextAvailableId - 1); // offset = nextAvailableId - 1 so IDs start at nextAvailableId
61
- nextAvailableId += getMaxExpressId(getCompleteEntityIndex(model.dataStore));
62
- }
63
- // Collect first model's info for deduplication
64
- const firstModel = this.models[0];
65
- const firstModelOffset = modelOffsets.get(firstModel.id);
66
- const firstModelInfraMap = this.findInfrastructureEntities(firstModel.dataStore);
67
- const firstProjectIds = this.findEntitiesByType(firstModel.dataStore, 'IFCPROJECT');
68
- // Build spatial lookup from first model for Site/Building/Storey unification
69
- const spatialLookup = this.buildSpatialLookup(firstModel.dataStore);
70
- // Process each model
123
+ // Tracks every GlobalId already emitted → its final express id + unit scale,
124
+ // so later models can unify against (shared unit) or stay unique from
125
+ // (federated / different unit) it.
126
+ const guidToFinalId = new Map();
71
127
  let isFirstModel = true;
128
+ let federatedModelCount = 0;
72
129
  for (const model of this.models) {
73
- const offset = modelOffsets.get(model.id);
130
+ const offset = setup.modelOffsets.get(model.id);
74
131
  const source = model.dataStore.source;
75
132
  if (!source || source.length === 0)
76
133
  continue;
77
134
  // Complete view over byId + any deferred property atoms, so the closure
78
135
  // walk and the emit loop both reach every entity the source defines.
79
136
  const completeIndex = getCompleteEntityIndex(model.dataStore);
80
- // Determine which entities to include
81
- let includedEntityIds = null;
82
- if (options.visibleOnly) {
83
- const hiddenIds = options.hiddenEntityIdsByModel?.get(model.id) ?? new Set();
84
- const isolatedIds = options.isolatedEntityIdsByModel?.get(model.id) ?? null;
85
- const { roots, hiddenProductIds } = getVisibleEntityIds(model.dataStore, hiddenIds, isolatedIds);
86
- includedEntityIds = collectReferencedEntityIds(roots, source, completeIndex, hiddenProductIds);
87
- // Second pass: collect style entities that reference included geometry
88
- collectStyleEntities(includedEntityIds, source, {
89
- byId: completeIndex,
90
- byType: model.dataStore.entityIndex.byType,
91
- });
92
- }
93
- // Build remap table (references to remap) and skip set (entities to omit)
94
- const sharedRemap = new Map();
95
- const skipEntityIds = new Set();
96
- if (!isFirstModel) {
97
- // Remap this model's IfcProject references → first model's IfcProject.
98
- const projectIds = this.findEntitiesByType(model.dataStore, 'IFCPROJECT');
99
- if (firstProjectIds.length > 0) {
100
- for (const pid of projectIds) {
101
- sharedRemap.set(pid, firstProjectIds[0] + firstModelOffset);
102
- skipEntityIds.add(pid);
103
- }
104
- }
105
- // Remap and skip duplicate infrastructure (units, contexts)
106
- const modelInfra = this.findInfrastructureEntities(model.dataStore);
107
- for (const [type, firstIds] of firstModelInfraMap) {
108
- const thisIds = modelInfra.get(type);
109
- if (thisIds && firstIds.length > 0 && thisIds.length > 0) {
110
- sharedRemap.set(thisIds[0], firstIds[0] + firstModelOffset);
111
- skipEntityIds.add(thisIds[0]);
112
- }
113
- }
114
- // Unify spatial hierarchy: match Site, Building, Storey to first model
115
- this.unifySpatialEntities(model.dataStore, spatialLookup, firstModelOffset, sharedRemap, skipEntityIds);
116
- // Skip IfcRelAggregates that become fully redundant after unification.
117
- // e.g. Model2's Project→Site becomes FirstProject→FirstSite which
118
- // already exists from Model1, causing duplicate tree nodes.
119
- this.skipRedundantRelAggregates(model.dataStore, sharedRemap, skipEntityIds);
120
- }
121
- // Emit entities for this model
137
+ const includedEntityIds = this.computeIncludedEntityIds(model, options, completeIndex, source);
138
+ const modelScale = this.resolveUnitScale(model);
139
+ const compatible = isFirstModel || setup.assumeShared
140
+ || this.unitsCompatible(modelScale, setup.primaryScale);
141
+ if (!isFirstModel && !compatible)
142
+ federatedModelCount++;
143
+ const plan = this.planModel(model, completeIndex, isFirstModel, compatible, setup, guidToFinalId);
144
+ const sourceSchema = model.dataStore.schemaVersion || 'IFC4';
122
145
  for (const [expressId, entityRef] of completeIndex) {
123
- // Skip entities outside the visible closure
124
- if (includedEntityIds !== null && !includedEntityIds.has(expressId)) {
146
+ if (includedEntityIds !== null && !includedEntityIds.has(expressId))
125
147
  continue;
126
- }
127
- // Skip duplicate entities (project, infrastructure)
128
- if (skipEntityIds.has(expressId)) {
148
+ if (plan.skipEntityIds.has(expressId))
129
149
  continue;
130
- }
131
- // Get original entity text — safeUtf8Decode handles SAB-backed sources
132
- const entityText = safeUtf8Decode(source, entityRef.byteOffset, entityRef.byteOffset + entityRef.byteLength);
133
- // Remap IDs if this is not the first model or if offset is non-zero
134
- let finalText;
135
- if (offset === 0 && sharedRemap.size === 0) {
136
- finalText = entityText;
137
- }
138
- else {
139
- finalText = this.remapEntityText(entityText, offset, sharedRemap);
140
- }
141
- // Apply schema conversion if target differs from source
142
- const sourceSchema = model.dataStore.schemaVersion || 'IFC4';
143
- if (needsConversion(sourceSchema, schema)) {
144
- const converted = convertStepLine(finalText, sourceSchema, schema);
145
- if (converted !== null) {
146
- allEntityLines.push(converted);
147
- }
148
- }
149
- else {
150
- allEntityLines.push(finalText);
151
- }
150
+ const line = this.renderEntity(expressId, entityRef, source, offset, plan, sourceSchema, schema, guidToFinalId, modelScale);
151
+ if (line !== null)
152
+ allEntityLines.push(line);
152
153
  }
153
154
  isFirstModel = false;
154
155
  }
@@ -158,11 +159,7 @@ export class MergedExporter {
158
159
  const content = assembleStepBytes(header, allEntityLines);
159
160
  return {
160
161
  content,
161
- stats: {
162
- modelCount: this.models.length,
163
- totalEntityCount: allEntityLines.length,
164
- fileSize: content.byteLength,
165
- },
162
+ stats: this.buildStats(allEntityLines.length, content.byteLength, federatedModelCount),
166
163
  };
167
164
  }
168
165
  /**
@@ -175,38 +172,23 @@ export class MergedExporter {
175
172
  const schema = (options.schema || 'IFC4');
176
173
  // See export(): merged files emit an ifc-lite provenance header by policy
177
174
  // (no single source header to preserve across federated models).
178
- const header = generateHeader({
179
- schema,
180
- description: options.description || `Merged export of ${this.models.length} models from ifc-lite`,
181
- author: options.author || '',
182
- organization: options.organization || '',
183
- application: options.application || 'ifc-lite',
184
- filename: options.filename || 'merged.ifc',
185
- });
175
+ const header = this.buildHeader(options, schema);
176
+ const setup = this.buildMergeSetup(options);
186
177
  const allEntityLines = [];
178
+ const guidToFinalId = new Map();
187
179
  // First pass: count total entities for progress
188
180
  let totalEntities = 0;
189
181
  for (const model of this.models) {
190
182
  totalEntities += getCompleteEntityIndex(model.dataStore).size;
191
183
  }
192
- let nextAvailableId = 1;
193
- const modelOffsets = new Map();
194
- for (const model of this.models) {
195
- modelOffsets.set(model.id, nextAvailableId - 1);
196
- nextAvailableId += getMaxExpressId(getCompleteEntityIndex(model.dataStore));
197
- }
198
- const firstModel = this.models[0];
199
- const firstModelOffset = modelOffsets.get(firstModel.id);
200
- const firstModelInfraMap = this.findInfrastructureEntities(firstModel.dataStore);
201
- const firstProjectIds = this.findEntitiesByType(firstModel.dataStore, 'IFCPROJECT');
202
- const spatialLookup = this.buildSpatialLookup(firstModel.dataStore);
203
184
  let isFirstModel = true;
204
185
  let entitiesProcessed = 0;
186
+ let federatedModelCount = 0;
205
187
  const YIELD_INTERVAL = 2000;
206
188
  if (onProgress)
207
189
  onProgress({ phase: 'preparing', percent: 0, entitiesProcessed: 0, entitiesTotal: totalEntities });
208
190
  for (const model of this.models) {
209
- const offset = modelOffsets.get(model.id);
191
+ const offset = setup.modelOffsets.get(model.id);
210
192
  const source = model.dataStore.source;
211
193
  if (!source || source.length === 0)
212
194
  continue;
@@ -220,61 +202,23 @@ export class MergedExporter {
220
202
  });
221
203
  }
222
204
  const completeIndex = getCompleteEntityIndex(model.dataStore);
223
- let includedEntityIds = null;
224
- if (options.visibleOnly) {
225
- const hiddenIds = options.hiddenEntityIdsByModel?.get(model.id) ?? new Set();
226
- const isolatedIds = options.isolatedEntityIdsByModel?.get(model.id) ?? null;
227
- const { roots, hiddenProductIds } = getVisibleEntityIds(model.dataStore, hiddenIds, isolatedIds);
228
- includedEntityIds = collectReferencedEntityIds(roots, source, completeIndex, hiddenProductIds);
229
- collectStyleEntities(includedEntityIds, source, {
230
- byId: completeIndex,
231
- byType: model.dataStore.entityIndex.byType,
232
- });
233
- }
234
- const sharedRemap = new Map();
235
- const skipEntityIds = new Set();
236
- if (!isFirstModel) {
237
- const projectIds = this.findEntitiesByType(model.dataStore, 'IFCPROJECT');
238
- if (firstProjectIds.length > 0) {
239
- for (const pid of projectIds) {
240
- sharedRemap.set(pid, firstProjectIds[0] + firstModelOffset);
241
- skipEntityIds.add(pid);
242
- }
243
- }
244
- const modelInfra = this.findInfrastructureEntities(model.dataStore);
245
- for (const [type, firstIds] of firstModelInfraMap) {
246
- const thisIds = modelInfra.get(type);
247
- if (thisIds && firstIds.length > 0 && thisIds.length > 0) {
248
- sharedRemap.set(thisIds[0], firstIds[0] + firstModelOffset);
249
- skipEntityIds.add(thisIds[0]);
250
- }
251
- }
252
- this.unifySpatialEntities(model.dataStore, spatialLookup, firstModelOffset, sharedRemap, skipEntityIds);
253
- this.skipRedundantRelAggregates(model.dataStore, sharedRemap, skipEntityIds);
254
- }
205
+ const includedEntityIds = this.computeIncludedEntityIds(model, options, completeIndex, source);
206
+ const modelScale = this.resolveUnitScale(model);
207
+ const compatible = isFirstModel || setup.assumeShared
208
+ || this.unitsCompatible(modelScale, setup.primaryScale);
209
+ if (!isFirstModel && !compatible)
210
+ federatedModelCount++;
211
+ const plan = this.planModel(model, completeIndex, isFirstModel, compatible, setup, guidToFinalId);
212
+ const sourceSchema = model.dataStore.schemaVersion || 'IFC4';
255
213
  let entityCount = 0;
256
214
  for (const [expressId, entityRef] of completeIndex) {
257
215
  if (includedEntityIds !== null && !includedEntityIds.has(expressId))
258
216
  continue;
259
- if (skipEntityIds.has(expressId))
217
+ if (plan.skipEntityIds.has(expressId))
260
218
  continue;
261
- const entityText = safeUtf8Decode(source, entityRef.byteOffset, entityRef.byteOffset + entityRef.byteLength);
262
- let finalText;
263
- if (offset === 0 && sharedRemap.size === 0) {
264
- finalText = entityText;
265
- }
266
- else {
267
- finalText = this.remapEntityText(entityText, offset, sharedRemap);
268
- }
269
- const sourceSchema = model.dataStore.schemaVersion || 'IFC4';
270
- if (needsConversion(sourceSchema, schema)) {
271
- const converted = convertStepLine(finalText, sourceSchema, schema);
272
- if (converted !== null)
273
- allEntityLines.push(converted);
274
- }
275
- else {
276
- allEntityLines.push(finalText);
277
- }
219
+ const line = this.renderEntity(expressId, entityRef, source, offset, plan, sourceSchema, schema, guidToFinalId, modelScale);
220
+ if (line !== null)
221
+ allEntityLines.push(line);
278
222
  entityCount++;
279
223
  entitiesProcessed++;
280
224
  // Yield to event loop every YIELD_INTERVAL entities
@@ -304,13 +248,311 @@ export class MergedExporter {
304
248
  }
305
249
  return {
306
250
  content,
307
- stats: {
308
- modelCount: this.models.length,
309
- totalEntityCount: allEntityLines.length,
310
- fileSize: content.byteLength,
311
- },
251
+ stats: this.buildStats(allEntityLines.length, content.byteLength, federatedModelCount),
252
+ };
253
+ }
254
+ /**
255
+ * Assemble the result stats, including any federation conformance warnings.
256
+ */
257
+ buildStats(totalEntityCount, fileSize, federatedModelCount) {
258
+ const warnings = [];
259
+ if (federatedModelCount > 0) {
260
+ warnings.push(`${federatedModelCount} model(s) had a length unit differing from the first model and were ` +
261
+ `federated as separate IfcProject roots to keep their geometry correctly scaled. The output ` +
262
+ `therefore contains ${federatedModelCount + 1} IfcProject instances, which intentionally relaxes ` +
263
+ `the IfcSingleProjectInstance rule (SIZEOF(IfcProject) <= 1). Some single-project viewers may ` +
264
+ `only show the first project. Pass unitReconciliation:'assume-shared' to force one project when ` +
265
+ `units are already normalised.`);
266
+ }
267
+ return { modelCount: this.models.length, totalEntityCount, fileSize, federatedModelCount, warnings };
268
+ }
269
+ /**
270
+ * Build the ifc-lite provenance header. Merged files have no single source
271
+ * header to round-trip, so we deliberately emit our own rather than picking
272
+ * one model's FILE_DESCRIPTION arbitrarily.
273
+ */
274
+ buildHeader(options, schema) {
275
+ return generateHeader({
276
+ schema,
277
+ description: options.description || `Merged export of ${this.models.length} models from ifc-lite`,
278
+ author: options.author || '',
279
+ organization: options.organization || '',
280
+ application: options.application || 'ifc-lite',
281
+ filename: options.filename || 'merged.ifc',
282
+ });
283
+ }
284
+ /**
285
+ * Compute the model-independent state shared by export()/exportAsync():
286
+ * per-model id offsets and the primary model's project/infra/spatial/unit info.
287
+ */
288
+ buildMergeSetup(options) {
289
+ // Determine ID offsets. Span the COMPLETE entity set (incl. deferred
290
+ // property atoms) so the next model's offset clears every id this model
291
+ // will emit — otherwise a deferred atom at a high id collides.
292
+ let nextAvailableId = 1;
293
+ const modelOffsets = new Map();
294
+ for (const model of this.models) {
295
+ modelOffsets.set(model.id, nextAvailableId - 1); // start at nextAvailableId
296
+ nextAvailableId += getMaxExpressId(getCompleteEntityIndex(model.dataStore));
297
+ }
298
+ const firstModel = this.models[0];
299
+ return {
300
+ modelOffsets,
301
+ firstModelOffset: modelOffsets.get(firstModel.id),
302
+ firstModelInfraMap: this.findInfrastructureEntities(firstModel.dataStore),
303
+ firstProjectIds: this.findEntitiesByType(firstModel.dataStore, 'IFCPROJECT'),
304
+ spatialLookup: this.buildSpatialLookup(firstModel.dataStore),
305
+ primaryScale: this.resolveUnitScale(firstModel),
306
+ assumeShared: options.unitReconciliation === 'assume-shared',
312
307
  };
313
308
  }
309
+ /**
310
+ * Resolve a model's length unit scale (raw IFC length → metres). Prefers an
311
+ * explicit `lengthUnitScale` on the input, else the value the parser stamped
312
+ * on the data store, else metres.
313
+ */
314
+ resolveUnitScale(model) {
315
+ const explicit = model.lengthUnitScale;
316
+ if (typeof explicit === 'number' && explicit > 0)
317
+ return explicit;
318
+ const fromStore = model.dataStore.lengthUnitScale;
319
+ if (typeof fromStore === 'number' && fromStore > 0)
320
+ return fromStore;
321
+ return 1.0;
322
+ }
323
+ /** True when two length unit scales are equal within relative tolerance. */
324
+ unitsCompatible(a, b) {
325
+ if (a === b)
326
+ return true;
327
+ const max = Math.max(Math.abs(a), Math.abs(b));
328
+ if (max === 0)
329
+ return true;
330
+ return Math.abs(a - b) <= max * UNIT_SCALE_TOLERANCE;
331
+ }
332
+ /**
333
+ * Resolve the set of express ids to include for a model under visibility
334
+ * filtering, or `null` when no filtering is requested (include everything).
335
+ */
336
+ computeIncludedEntityIds(model, options, completeIndex, source) {
337
+ if (!options.visibleOnly)
338
+ return null;
339
+ const hiddenIds = options.hiddenEntityIdsByModel?.get(model.id) ?? new Set();
340
+ const isolatedIds = options.isolatedEntityIdsByModel?.get(model.id) ?? null;
341
+ const { roots, hiddenProductIds } = getVisibleEntityIds(model.dataStore, hiddenIds, isolatedIds);
342
+ const included = collectReferencedEntityIds(roots, source, completeIndex, hiddenProductIds);
343
+ // Second pass: collect style entities that reference included geometry.
344
+ collectStyleEntities(included, source, {
345
+ byId: completeIndex,
346
+ byType: model.dataStore.entityIndex.byType,
347
+ });
348
+ return included;
349
+ }
350
+ /**
351
+ * Plan how a model's entities are remapped, skipped, or re-stamped, given
352
+ * whether it shares the primary model's length unit (`compatible`).
353
+ *
354
+ * Compatible (or `assume-shared`) models are unified into the primary project:
355
+ * their IfcProject, shared infrastructure, and matching spatial structure are
356
+ * deduplicated, and a rooted entity repeating an already-emitted GlobalId is
357
+ * unified to that one instance.
358
+ *
359
+ * Incompatible (federated) models keep their own project, units, contexts and
360
+ * spatial structure so their coordinates stay correctly scaled; a rooted
361
+ * entity whose GlobalId collides with one already emitted is given a fresh
362
+ * deterministic GlobalId, since the two cannot be the same instance across
363
+ * different unit spaces.
364
+ */
365
+ planModel(model, completeIndex, isFirstModel, compatible, setup, guidToFinalId) {
366
+ const source = model.dataStore.source;
367
+ const sharedRemap = new Map();
368
+ const skipEntityIds = new Set();
369
+ const guidRewrite = new Map();
370
+ // One cheap pass to read each rooted entity's GlobalId (first attribute).
371
+ const localGuids = new Map();
372
+ for (const [id, ref] of completeIndex) {
373
+ const guid = this.extractGlobalIdFast(ref, source);
374
+ if (guid !== null)
375
+ localGuids.set(id, guid);
376
+ }
377
+ if (!isFirstModel && compatible) {
378
+ // Remap this model's IfcProject references → first model's IfcProject.
379
+ const projectIds = this.findEntitiesByType(model.dataStore, 'IFCPROJECT');
380
+ if (setup.firstProjectIds.length > 0) {
381
+ for (const pid of projectIds) {
382
+ sharedRemap.set(pid, setup.firstProjectIds[0] + setup.firstModelOffset);
383
+ skipEntityIds.add(pid);
384
+ }
385
+ }
386
+ // Remap and skip duplicate infrastructure (units, contexts).
387
+ const modelInfra = this.findInfrastructureEntities(model.dataStore);
388
+ for (const [type, firstIds] of setup.firstModelInfraMap) {
389
+ const thisIds = modelInfra.get(type);
390
+ if (thisIds && firstIds.length > 0 && thisIds.length > 0) {
391
+ sharedRemap.set(thisIds[0], firstIds[0] + setup.firstModelOffset);
392
+ skipEntityIds.add(thisIds[0]);
393
+ }
394
+ }
395
+ // Unify spatial hierarchy: match Site, Building, Storey to first model.
396
+ this.unifySpatialEntities(model.dataStore, setup.spatialLookup, setup.firstModelOffset, sharedRemap, skipEntityIds);
397
+ // Skip IfcRelAggregates that become fully redundant after unification.
398
+ this.skipRedundantRelAggregates(model.dataStore, sharedRemap, skipEntityIds);
399
+ }
400
+ if (!isFirstModel) {
401
+ // GlobalId reconciliation against everything emitted by earlier models.
402
+ const pendingMinted = new Set();
403
+ for (const [id, guid] of localGuids) {
404
+ if (skipEntityIds.has(id))
405
+ continue; // already unified/deduped above
406
+ const prior = guidToFinalId.get(guid);
407
+ if (prior === undefined)
408
+ continue; // first occurrence — kept as-is
409
+ // Unify (drop + remap refs to the one instance) ONLY when this is a
410
+ // physical/spatial root AND both this model and the emitter share the
411
+ // primary unit. Two conditions force "keep + re-stamp" instead:
412
+ // - Objectified relationships (IfcRel*): same GlobalId does not imply
413
+ // the same membership (e.g. a storey-containment listing different
414
+ // elements per discipline), so dropping one would orphan elements.
415
+ // - The colliding instance was emitted in a different unit space
416
+ // (a federated model), so unifying would reinterpret coordinates —
417
+ // the very mis-scale this fix prevents, reached transitively.
418
+ const type = (completeIndex.get(id)?.type ?? '').toUpperCase();
419
+ const emitterIsPrimaryUnit = this.unitsCompatible(prior.scale, setup.primaryScale);
420
+ const canUnify = compatible && emitterIsPrimaryUnit && !isRelationshipType(type);
421
+ if (canUnify) {
422
+ sharedRemap.set(id, prior.finalId);
423
+ skipEntityIds.add(id);
424
+ }
425
+ else {
426
+ guidRewrite.set(id, this.mintUniqueGuid(guid, model.id, guidToFinalId, pendingMinted));
427
+ }
428
+ }
429
+ }
430
+ return { sharedRemap, skipEntityIds, guidRewrite, localGuids };
431
+ }
432
+ /**
433
+ * Render one source entity into its final STEP line: apply id offset + shared
434
+ * remaps, re-stamp a federated GlobalId if needed, apply schema conversion,
435
+ * and register the emitted GlobalId so later models can reconcile against it.
436
+ * Returns `null` when schema conversion drops the entity.
437
+ */
438
+ renderEntity(localId, entityRef, source, offset, plan, sourceSchema, targetSchema, guidToFinalId, modelScale) {
439
+ const entityText = safeUtf8Decode(source, entityRef.byteOffset, entityRef.byteOffset + entityRef.byteLength);
440
+ // Remap ids. Fast path: the first model (offset 0, no remaps) is byte-identical.
441
+ let finalText;
442
+ if (offset === 0 && plan.sharedRemap.size === 0) {
443
+ finalText = entityText;
444
+ }
445
+ else {
446
+ finalText = this.remapEntityText(entityText, offset, plan.sharedRemap);
447
+ }
448
+ // Re-stamp the GlobalId for a federated entity whose id collides.
449
+ const mintedGuid = plan.guidRewrite.get(localId);
450
+ if (mintedGuid !== undefined) {
451
+ finalText = this.replaceGlobalId(finalText, mintedGuid);
452
+ }
453
+ if (needsConversion(sourceSchema, targetSchema)) {
454
+ const converted = convertStepLine(finalText, sourceSchema, targetSchema);
455
+ if (converted === null)
456
+ return null;
457
+ finalText = converted;
458
+ }
459
+ // Record the emitted GlobalId → final express id + unit scale, for rooted
460
+ // entities only. Read it from the FINAL line, not the source: schema
461
+ // conversion can replace an unsupported rooted type with an IFCPROXY that
462
+ // carries a freshly-minted GlobalId, so the source guid would be stale.
463
+ // Emitted entities are not sharedRemap keys, so their final id is
464
+ // localId + offset.
465
+ if (plan.localGuids.has(localId)) {
466
+ const emittedGuid = this.readLeadingGuid(finalText)
467
+ ?? mintedGuid ?? plan.localGuids.get(localId);
468
+ if (emittedGuid !== undefined) {
469
+ guidToFinalId.set(emittedGuid, { finalId: localId + offset, scale: modelScale });
470
+ }
471
+ }
472
+ return finalText;
473
+ }
474
+ /**
475
+ * Read the GlobalId (first quoted attribute) from an already-rendered STEP
476
+ * line. Used to register the id that was actually emitted, after any id
477
+ * remap, GlobalId re-stamp, or schema conversion. Returns null if the first
478
+ * quoted token is not a 22-char GlobalId.
479
+ */
480
+ readLeadingGuid(entityText) {
481
+ const open = entityText.indexOf('(');
482
+ if (open === -1)
483
+ return null;
484
+ const q1 = entityText.indexOf("'", open + 1);
485
+ if (q1 === -1)
486
+ return null;
487
+ const q2 = entityText.indexOf("'", q1 + 1);
488
+ if (q2 === -1)
489
+ return null;
490
+ const raw = entityText.slice(q1 + 1, q2);
491
+ return GLOBAL_ID_RE.test(raw) ? raw : null;
492
+ }
493
+ /**
494
+ * Mint a fresh, deterministic, collision-free GlobalId for an entity whose id
495
+ * collides. Seeded from the original GlobalId and the model's stable id so the
496
+ * output is reproducible and does not churn when an unrelated earlier model
497
+ * changes size; checked against both already-emitted ids and the ids minted
498
+ * so far for this model.
499
+ */
500
+ mintUniqueGuid(original, modelId, guidToFinalId, pendingMinted) {
501
+ let candidate = deterministicGlobalId(`${original}#${modelId}`);
502
+ let n = 0;
503
+ while (guidToFinalId.has(candidate) || pendingMinted.has(candidate)) {
504
+ candidate = deterministicGlobalId(`${original}#${modelId}#${n++}`);
505
+ }
506
+ pendingMinted.add(candidate);
507
+ return candidate;
508
+ }
509
+ /**
510
+ * Read an entity's GlobalId (first attribute) by decoding only its head.
511
+ * Returns the 22-char id for a rooted entity, or `null` for any entity whose
512
+ * first attribute is not a GlobalId (geometry, lists, property atoms, …).
513
+ */
514
+ extractGlobalIdFast(ref, source) {
515
+ // Non-rooted resource entities (property/quantity/material/style/actor …)
516
+ // lead with a Name string that can itself be 22 charset chars; never treat
517
+ // those as a GlobalId or reconciliation would drop/rename them.
518
+ if (NON_ROOTED_STRING_TYPES.has((ref.type ?? '').toUpperCase()))
519
+ return null;
520
+ // 128 bytes comfortably spans `#<id>=<LONGEST_TYPE_NAME>('<22-char id>'`,
521
+ // so the GlobalId is always fully inside the window.
522
+ const end = Math.min(ref.byteOffset + 128, ref.byteOffset + ref.byteLength);
523
+ const head = safeUtf8Decode(source, ref.byteOffset, end);
524
+ const open = head.indexOf('(');
525
+ if (open === -1)
526
+ return null;
527
+ let i = open + 1;
528
+ while (i < head.length && (head[i] === ' ' || head[i] === '\t' || head[i] === '\n' || head[i] === '\r'))
529
+ i++;
530
+ if (head[i] !== "'")
531
+ return null;
532
+ // A GlobalId never contains a quote (charset excludes it), so the next
533
+ // quote closes it.
534
+ const close = head.indexOf("'", i + 1);
535
+ if (close === -1)
536
+ return null;
537
+ const raw = head.slice(i + 1, close);
538
+ return GLOBAL_ID_RE.test(raw) ? raw : null;
539
+ }
540
+ /**
541
+ * Replace an entity's GlobalId (first quoted attribute) with `newGuid`.
542
+ * `newGuid` is a 22-char IFC id (no quote in its charset), so this is safe.
543
+ */
544
+ replaceGlobalId(entityText, newGuid) {
545
+ const open = entityText.indexOf('(');
546
+ if (open === -1)
547
+ return entityText;
548
+ const q1 = entityText.indexOf("'", open + 1);
549
+ if (q1 === -1)
550
+ return entityText;
551
+ const q2 = entityText.indexOf("'", q1 + 1);
552
+ if (q2 === -1)
553
+ return entityText;
554
+ return entityText.slice(0, q1 + 1) + newGuid + entityText.slice(q2);
555
+ }
314
556
  /**
315
557
  * Remap all #ID references in a STEP entity line.
316
558
  * Applies offset to all IDs, then overrides with specific remappings.
@@ -1 +1 @@
1
- {"version":3,"file":"merged-exporter.js","sourceRoot":"","sources":["../src/merged-exporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merged-exporter.js","sourceRoot":"","sources":["../src/merged-exporter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ifc-lite/export",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Export formats for IFC-Lite",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,15 +16,15 @@
16
16
  "parquet-wasm": "^0.7.1",
17
17
  "apache-arrow": "^21.1.0",
18
18
  "jszip": "^3.10.0",
19
- "@ifc-lite/geometry": "^2.9.0",
19
+ "@ifc-lite/geometry": "^2.11.0",
20
20
  "@ifc-lite/data": "^2.2.0",
21
21
  "@ifc-lite/encoding": "^1.14.7",
22
- "@ifc-lite/parser": "^3.3.1",
23
- "@ifc-lite/mutations": "^1.16.0"
22
+ "@ifc-lite/mutations": "^1.16.0",
23
+ "@ifc-lite/parser": "^3.4.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "typescript": "^6.0.3",
27
- "vitest": "^4.1.0",
27
+ "vitest": "^4.1.9",
28
28
  "@ifc-lite/ifcx": "^2.1.5"
29
29
  },
30
30
  "license": "MPL-2.0",