@ifc-lite/export 2.9.2 → 2.9.4

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.
@@ -4,10 +4,15 @@
4
4
  * Exports IFC data store to ISO 10303-21 STEP format.
5
5
  * Supports applying property and root attribute mutations before export.
6
6
  */
7
- import type { IfcDataStore } from '@ifc-lite/parser';
7
+ import type { IfcDataStore, IfcAttributeValue, IfcSourceHeader } from '@ifc-lite/parser';
8
8
  import { type MapConversion, type ProjectedCRS } from '@ifc-lite/parser';
9
9
  import type { MutablePropertyView } from '@ifc-lite/mutations';
10
- import { type RandomSource } from '@ifc-lite/encoding';
10
+ import type { PropertySet, QuantitySet } from '@ifc-lite/data';
11
+ import type { RandomSource } from '@ifc-lite/encoding';
12
+ import { type IfcSchemaVersion } from './schema-converter.js';
13
+ import { type ModificationLedger, type SourceLineDelivery } from './delta-modification-ledger.js';
14
+ import { createSourceRefReader } from './source-ref-bounds.js';
15
+ import { type EffectiveEntityIndex } from './effective-index.js';
11
16
  /**
12
17
  * Options for STEP export
13
18
  */
@@ -51,14 +56,20 @@ export interface StepExportOptions {
51
56
  * Seeded randomness for the GlobalIds this exporter SYNTHESIZES:
52
57
  * the `IfcPropertySet` / `IfcElementQuantity` roots regenerated for
53
58
  * mutated (or overlay-created) property and quantity sets, their
54
- * `IfcRelDefinesByProperties` links, and any `IFCPROXY` placeholder minted
55
- * by schema conversion. Without it those come from the platform CSPRNG, so
56
- * two exports of the same model differ in exactly those bytes - which
57
- * breaks byte-reproducibility for in-store builds that call
59
+ * `IfcRelDefinesByProperties` links. Without it those come from the platform
60
+ * CSPRNG, so two exports of the same model differ in exactly those bytes -
61
+ * which breaks byte-reproducibility for in-store builds that call
58
62
  * `addPropertySet` / `addQuantitySet` (the sets themselves live in the
59
63
  * mutation overlay and only become IFC roots here). Pass the same seeded
60
64
  * source used for `SpatialAnchor.guidRandom` to close that gap. Default
61
- * (omitted) behaviour is unchanged: random.
65
+ * (omitted) behaviour for THESE ids is unchanged: random.
66
+ *
67
+ * NOT the `IFCPROXY` placeholders any more (#2733). Those used to be minted
68
+ * from this source too, so an omitted `guidRandom` made every downgraded
69
+ * IFC4X3 entity differ on re-export. They are now derived from the source
70
+ * line when this is omitted, and only fall back to this source when it is
71
+ * supplied - so passing a seeded source still pins them, but NOT passing one
72
+ * no longer makes them random. See `convertStepLine`.
62
73
  */
63
74
  guidRandom?: RandomSource;
64
75
  /**
@@ -104,17 +115,121 @@ export interface StepExportResult {
104
115
  * Non-fatal refusals: things the caller asked for that this export could
105
116
  * not write. Empty when the export did everything it was asked to do.
106
117
  *
107
- * A requested `georefMutations.mapConversion` is the one case today: with
108
- * no `IfcGeometricRepresentationContext` to reference as `SourceCRS`, the
118
+ * A requested `georefMutations.mapConversion` is one case: with no
119
+ * `IfcGeometricRepresentationContext` to reference as `SourceCRS`, the
109
120
  * `IfcMapConversion` is skipped (writing it would produce a dangling
110
121
  * reference) while the `IfcProjectedCRS` is still written — so the output
111
122
  * is indistinguishable from "no map conversion was requested" unless the
112
- * caller reads this (#2067). Same `string[]` shape as
113
- * `MergeExportResult.stats.warnings`.
123
+ * caller reads this (#2067).
124
+ *
125
+ * A WITHHELD RELATIONSHIP is the other: when a relationship names an
126
+ * entity this export is not writing, in a slot with no spelling for an
127
+ * omitted reference, the whole relationship line is dropped rather than
128
+ * shipped dangling — see {@link relationshipWithheldWarning}. This can
129
+ * happen on a plain full export with no options set at all, so it is
130
+ * reported rather than left to be discovered by a diff.
131
+ *
132
+ * Same `string[]` shape as `MergeExportResult.stats.warnings`.
114
133
  */
115
134
  warnings: string[];
116
135
  };
117
136
  }
137
+ /**
138
+ * What {@link StepExporter.applySourceLineMutations} produced: the rewritten
139
+ * line, plus which edit kinds that rewrite actually delivered. The delivery
140
+ * half is {@link SourceLineDelivery} rather than three loose booleans so that
141
+ * the pipeline and the ledger cannot disagree about what a source line carries
142
+ * — an added kind has one place to be added.
143
+ */
144
+ export type SourceLineMutations = SourceLineDelivery & {
145
+ text: string;
146
+ };
147
+ /**
148
+ * The state one `export()` call shares across its seven phases.
149
+ *
150
+ * Introduced by step 1 of #2475: `export()` is ~1267 lines and the phases a
151
+ * split would separate are held together by ~30 local bindings, most of which
152
+ * are read in three or more phases. Naming that set once — as an interface
153
+ * with a single construction site at the top of `export()` — is what lets a
154
+ * later phase extraction take one parameter instead of fifteen.
155
+ *
156
+ * Two properties of this object are load-bearing and must survive every later
157
+ * move:
158
+ *
159
+ * 1. **The predicates are members, not duplicated expressions.** Six of them
160
+ * (`isOverlayCreated`, `isReadableSourceRef`, `isGeometryExcluded`,
161
+ * `hasEmittableHostBytes`, `willBeEmitted`,
162
+ * `isRefExcludedDuringClosureWalk`) exist precisely so two phases cannot
163
+ * disagree about a gate — see the comments at their construction sites for
164
+ * the corrupt files the earlier, per-phase versions let through (#2491,
165
+ * #2414, #2398, #2637). A phase that reimplements one of these instead of
166
+ * reading it off the pass reintroduces exactly that class of defect.
167
+ * 2. **`allowedEntityIds` and `hiddenProductIds` are mutable, and the
168
+ * predicates close over the pass rather than over a snapshot.** The
169
+ * visible-only closure walk assigns both AFTER construction, and
170
+ * `isRefExcludedDuringClosureWalk` is handed to that walk while they are
171
+ * still null. The output-line filter reads them too, through
172
+ * `isOmittedFromOutput` -> `willBeEmitted`, so neither can be a snapshot
173
+ * taken before the walk ran — that is the invariant the #2637 regression
174
+ * broke.
175
+ *
176
+ * Deliberately NOT on the pass, and why: `isOmittedFromOutput`,
177
+ * `mayNameOmittedRefs` and
178
+ * `overlayNewEntityCount` are eagerly-computed values whose value is only
179
+ * defined after work that runs past this construction site, so hoisting them
180
+ * would change what they compute rather than where they are named;
181
+ * `generatedTypeOwnedPsetIds` is read in one phase only — a local inside
182
+ * `step-property-sets.ts:generatePropertyAndQuantitySetEntities`, which holds
183
+ * both the loop that writes it and the loop that reads it (#2475).
184
+ */
185
+ export interface ExportPass {
186
+ /** Output accumulator: every DATA-section line this export will write. */
187
+ readonly entities: string[];
188
+ /** Lines contributed by entities that have no source record. */
189
+ newEntityCount: number;
190
+ readonly schema: IfcSchemaVersion;
191
+ readonly sourceSchema: IfcSchemaVersion;
192
+ readonly converting: boolean;
193
+ readonly sourceHeader: IfcSourceHeader | undefined;
194
+ readonly schemaToken: string;
195
+ readonly overlayActive: boolean;
196
+ readonly effective: EffectiveEntityIndex;
197
+ readonly modifications: ModificationLedger;
198
+ /** Widened from the imported `InPlaceNominees` (whose sets are readonly)
199
+ * because the collection passes below add to them. */
200
+ readonly inPlaceNominees: {
201
+ attribute: Set<number>;
202
+ georeferencing: Set<number>;
203
+ };
204
+ allowedEntityIds: Set<number> | null;
205
+ hiddenProductIds: ReadonlySet<number> | null;
206
+ readonly modifiedEntities: Set<number>;
207
+ readonly modifiedAttributes: Map<number, Map<string, string>>;
208
+ readonly newPropertySets: Array<{
209
+ entityId: number;
210
+ psets: PropertySet[];
211
+ }>;
212
+ readonly newQuantitySets: Array<{
213
+ entityId: number;
214
+ qsets: QuantitySet[];
215
+ }>;
216
+ readonly typeOwnedPsetNamesByEntity: Map<number, Set<string>>;
217
+ readonly typeOwnedPsetIdsByEntity: Map<number, number[]>;
218
+ readonly rewrittenEntityIds: Set<number>;
219
+ readonly rewrittenEntityLines: Map<number, string>;
220
+ readonly overlayTypeOwnedPsets: Map<number, IfcAttributeValue>;
221
+ readonly skipPropertySetIds: Set<number>;
222
+ readonly skipRelationshipIds: Set<number>;
223
+ readonly newGeorefLines: string[];
224
+ readonly warnings: string[];
225
+ readonly buildHeader: (modifications: number) => string;
226
+ readonly isOverlayCreated: (entityId: number) => boolean;
227
+ readonly isReadableSourceRef: ReturnType<typeof createSourceRefReader>;
228
+ readonly isGeometryExcluded: (entityId: number, recordType: string) => boolean;
229
+ readonly hasEmittableHostBytes: (entityId: number) => boolean;
230
+ readonly willBeEmitted: (entityId: number) => boolean;
231
+ readonly isRefExcludedDuringClosureWalk: (id: number) => boolean;
232
+ }
118
233
  /**
119
234
  * IFC STEP file exporter
120
235
  */
@@ -123,11 +238,23 @@ export declare class StepExporter {
123
238
  private mutationView;
124
239
  private nextExpressId;
125
240
  private entityExtractor;
126
- /** Lazily-resolved fallback `#id` of an IfcOwnerHistory that survives the
127
- * current export closure (or `$` when the file has none). */
128
- private ownerHistoryFallbackRef;
129
- /** Per-host cache of an element's own OwnerHistory ref (`#id` or null). */
130
- private ownerHistoryByEntity;
241
+ /**
242
+ * The owner-history memos the property-set and quantity-set generators read.
243
+ *
244
+ * Owned here and handed to `step-property-sets.ts` BY REFERENCE rather than
245
+ * stored on its context: the reset below is an `export()`-level statement,
246
+ * and the comment there is where "per export, not per exporter" is argued.
247
+ * Moving the storage into a per-export context would make that reset
248
+ * implicit — the same invariant, in a place nothing says it (#2475 step 2b).
249
+ */
250
+ private ownerHistory;
251
+ /**
252
+ * "Can this record's line actually be read out of this store's source?"
253
+ * (`source-ref-bounds.ts`, #2491). Built once — `dataStore` is assigned in
254
+ * the constructor and never reassigned — so the gates outside `export`'s
255
+ * closure share one predicate instead of rebuilding it per call.
256
+ */
257
+ private isReadableSourceRef;
131
258
  constructor(dataStore: IfcDataStore, mutationView?: MutablePropertyView);
132
259
  /**
133
260
  * Export to STEP format
@@ -142,53 +269,6 @@ export declare class StepExporter {
142
269
  * Export only property/quantity changes (lightweight export)
143
270
  */
144
271
  exportPropertiesOnly(options: Omit<StepExportOptions, 'includeGeometry'>): StepExportResult;
145
- /**
146
- * Resolve a STEP reference to an existing IfcOwnerHistory for the
147
- * IfcPropertySet / IfcRelDefinesByProperties / IfcElementQuantity entities we
148
- * generate for `hostEntityId`'s mutations. OwnerHistory is optional in IFC4 but
149
- * MANDATORY in IFC2X3 (IfcRoot.OwnerHistory), so emitting `$` yields an invalid
150
- * IFC2X3 file that strict readers (e.g. BIM Vision) reject.
151
- *
152
- * Prefer the host element's OWN owner history, then any owner history that
153
- * survives this export, then `$` only when none does.
154
- *
155
- * "Survives" is `willBeEmitted`, the same predicate that decides whether the
156
- * host itself may have psets generated for it. A reference is a reference: it
157
- * is no more acceptable to point an emitted `IfcPropertySet` at an owner
158
- * history the session deleted than at a host it deleted. This used to consult
159
- * only the `visibleOnly` closure, so an overlay-created OwnerHistory that was
160
- * later deleted still got referenced — a dangling `#N`, reached through the
161
- * one attribute the generators fill in for themselves.
162
- */
163
- private resolveOwnerHistoryRef;
164
- /**
165
- * The overlay's answer for one positional slot of an overlay-created entity,
166
- * falling back to the creation payload only when the overlay has NOTHING to
167
- * say about that slot.
168
- *
169
- * **Ask `Map.has`, never `??`.** `setPositionalAttribute(id, slot, null)` is
170
- * an explicit "clear this slot", and its value is `null`, so `??` reads the
171
- * overlay's answer as an absence and reinstates the authored one. That is the
172
- * same overlay-versus-buffer confusion this whole change is about, one
173
- * attribute wide: an explicit null IS the overlay's answer, and the overlay is
174
- * the authority. Cleared OwnerHistory came back as the authored reference, and
175
- * a cleared `HasPropertySets` resurrected the list the user had removed.
176
- */
177
- private overlaySlotValue;
178
- /**
179
- * Read an element's own OwnerHistory reference (`#id`), or null when the
180
- * element omits one (`$`) or cannot be parsed. OwnerHistory is the second
181
- * attribute of every IfcRoot subtype, immediately after the GlobalId string.
182
- */
183
- private getOwnerHistoryRefOfEntity;
184
- /**
185
- * Generate STEP entities for property sets
186
- */
187
- private generatePropertySetEntities;
188
- /**
189
- * Generate STEP entities for quantity sets (IfcElementQuantity)
190
- */
191
- private generateQuantitySetEntities;
192
272
  /**
193
273
  * THE mutation pipeline for a line read out of the source buffer: retype,
194
274
  * then named attribute edits, then positional edits.
@@ -249,6 +329,15 @@ export declare class StepExporter {
249
329
  * with `$`. So the declared type decides first, and inference is the fallback
250
330
  * for slots the schema does not classify (references, SELECTs, numerics),
251
331
  * where reading the old token is exactly the right heuristic.
332
+ *
333
+ * Before this REAL check existed, "the declared type decides first" was true
334
+ * for enum/string slots only — a REAL-backed slot (`IfcMapConversion.
335
+ * OrthogonalHeight`, any other `IfcLengthMeasure`/`IfcReal`-typed attribute)
336
+ * fell straight to `serializeAttributeValue`'s token inference, which quotes
337
+ * anything it cannot recognize as numeric. A schema-legal `$` placeholder
338
+ * carries no digits to recognize, so setting such a field for the first time
339
+ * wrote `'12345'` in a slot ISO 10303-21 requires to be an unquoted REAL —
340
+ * silently invalid output (#2724, LTplus-AG/ifc-lite#2475).
252
341
  */
253
342
  private serializeNamedAttribute;
254
343
  /**
@@ -289,82 +378,40 @@ export declare class StepExporter {
289
378
  * cover, so a whole-number edit can't silently downgrade the slot.
290
379
  */
291
380
  private serializePositionalOverride;
292
- private resolveMapUnitReference;
293
- private normalizeMapUnitName;
294
- /**
295
- * `effective` filters the candidates the same way the georef reads above do:
296
- * returning a tombstoned unit id hands the caller a `#id` for a line the
297
- * export never writes. Returning null instead makes `resolveMapUnitReference`
298
- * synthesise a fresh unit, which is the outcome a deleted unit deserves.
299
- */
300
- private findLengthUnitReference;
301
- /**
302
- * Record that a requested IfcMapConversion could not be written. Emitting it
303
- * anyway would leave `SourceCRS` pointing at nothing, so the refusal is the
304
- * correct output — but the file alone cannot express it, which is why it goes
305
- * back to the caller in `stats.warnings` as well as to the console (#2067).
306
- */
307
- private reportMapConversionRefused;
308
- /**
309
- * Record that a requested IfcMapConversion could not be written because
310
- * there is no IfcProjectedCRS to attach it to — a different refusal from
311
- * {@link reportMapConversionRefused}: "no CRS to attach it to" rather than
312
- * "no context to reference" (#2105).
313
- */
314
- private reportMapConversionRefusedNoCrs;
315
- /**
316
- * `effective` again: the id returned here becomes the new IfcMapConversion's
317
- * SourceCRS, so a tombstoned context would leave the created line pointing at
318
- * a record the export skips — a dangling reference and an invalid file.
319
- */
320
- private findPreferredGeometricRepresentationContextId;
321
- /**
322
- * Generate a new IFC GlobalId (22 character base64). `random` is the
323
- * export's optional seeded source (`StepExportOptions.guidRandom`);
324
- * undefined keeps the default random path.
325
- */
326
- private generateGlobalId;
327
381
  /**
328
382
  * Find the maximum EXPRESS ID in the data store
329
383
  */
330
384
  private findMaxExpressId;
331
385
  /**
332
- * Find a unit entity ID by name (simplified - returns null for now)
333
- */
334
- private findUnitId;
335
- /**
336
- * Check if an entity type is a geometry-related type
337
- */
338
- private isGeometryEntity;
339
- /**
340
- * Build a one-shot reverse index of every IfcRelDefinesByProperties in
341
- * the source: for each related entity, list the rels and property/quantity
342
- * sets that reference it. Used by the export pre-pass so the per-entity
343
- * "find owning rels" step is O(K) rather than O(N) per modified entity.
386
+ * The exporter state `step-georeferencing.ts` cannot read off the pass.
344
387
  *
345
- * `relatedByRel` is the same walk read the other way round, so the deleted-host
346
- * sweep costs nothing extra.
347
- */
348
- private buildRelDefinesByPropertiesIndex;
349
- /**
350
- * Get entity IDs related by IfcRelDefinesByProperties (the related objects)
351
- */
352
- private getRelatedEntities;
353
- /**
354
- * Get the property set ID from IfcRelDefinesByProperties
355
- */
356
- private getRelatedPropertySet;
357
- /**
358
- * Get the name of a property set by parsing the entity
388
+ * `allocateExpressId` hands out ids from THIS exporter's `nextExpressId`,
389
+ * which the property-set and quantity-set generators in
390
+ * `step-property-sets.ts` increment at six further sites through the same
391
+ * callback — hoisting the counter onto the pass would change what it
392
+ * computes, not merely where it is named, so both phases get a callback
393
+ * instead (#2475 step 2a).
359
394
  */
360
- private getPropertySetName;
395
+ private georefContext;
361
396
  /**
362
- * Get the name of an element quantity set by parsing the entity
397
+ * The state `step-property-sets.ts` cannot read off the pass (#2475 2b/2c).
398
+ *
399
+ * `allocateExpressId` is the same callback `georefContext` hands out, over
400
+ * the same counter, so the ids the two phases allocate stay in one sequence.
401
+ * `ownerHistory` is passed by reference — the object is this exporter's, and
402
+ * `export()` resets it. `isReadableSourceRef` is the instance predicate, not
403
+ * `pass.isReadableSourceRef`, because two consumers of that module
404
+ * (`buildRelDefinesByPropertiesIndex`, `retainSharedAtoms`) run with no pass
405
+ * in hand; both readers are built over the same source.
406
+ *
407
+ * Rebuilt per call, as `georefContext` is: every call site runs once per
408
+ * export bar `retainSharedAtoms`, which hoists it out of its loop.
363
409
  */
364
- private getElementQuantityName;
410
+ private propertySetContext;
365
411
  /**
366
- * Get IDs of properties in a property set
412
+ * Check if an entity type is a geometry-related type
367
413
  */
414
+ private isGeometryEntity;
368
415
  /**
369
416
  * Un-skip property/quantity atoms that a surviving (non-skipped, and — under
370
417
  * visible-only export — still-included) IfcPropertySet / IfcElementQuantity
@@ -379,19 +426,6 @@ export declare class StepExporter {
379
426
  * original value.
380
427
  */
381
428
  private retainSharedAtoms;
382
- private getPropertyIdsInSet;
383
- /**
384
- * The full HasPropertySets id list of a type object, from whichever authority
385
- * owns the record.
386
- *
387
- * Slot 5 is `HasPropertySets` on every `IfcTypeObject` subtype. For a source
388
- * record the list is parsed out of the file; for an overlay-created type it is
389
- * read off the authored payload, where a reference is the documented `'#42'`
390
- * string form. Reading only the source made every pset on a created
391
- * `IfcWallType` look unowned, which is how it ended up on an occurrence
392
- * relation instead (#2012).
393
- */
394
- private getTypeOwnedHasPropertySetIds;
395
429
  }
396
430
  /**
397
431
  * Quick export function for simple use cases.
@@ -1 +1 @@
1
- {"version":3,"file":"step-exporter.d.ts","sourceRoot":"","sources":["../src/step-exporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"step-exporter.d.ts","sourceRoot":"","sources":["../src/step-exporter.ts"],"names":[],"mappings":"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"}