@ifc-lite/export 4.5.0 → 4.7.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.
Files changed (208) hide show
  1. package/README.md +5 -5
  2. package/dist/appearance-dependencies.d.ts.map +1 -1
  3. package/dist/appearance-dependencies.js +1 -0
  4. package/dist/appearance-dependencies.js.map +1 -1
  5. package/dist/attribute-real-slots.d.ts.map +1 -1
  6. package/dist/attribute-real-slots.js +7 -1
  7. package/dist/attribute-real-slots.js.map +1 -1
  8. package/dist/attribute-slot-types.js +2 -2
  9. package/dist/attribute-slot-types.js.map +1 -1
  10. package/dist/demesh-prune.d.ts.map +1 -1
  11. package/dist/demesh-prune.js +1 -0
  12. package/dist/demesh-prune.js.map +1 -1
  13. package/dist/demesh-writer.d.ts.map +1 -1
  14. package/dist/demesh-writer.js +1 -0
  15. package/dist/demesh-writer.js.map +1 -1
  16. package/dist/effective-index.d.ts.map +1 -1
  17. package/dist/effective-index.js +2 -0
  18. package/dist/effective-index.js.map +1 -1
  19. package/dist/entity-iteration.d.ts.map +1 -1
  20. package/dist/entity-iteration.js +1 -0
  21. package/dist/entity-iteration.js.map +1 -1
  22. package/dist/entity-type-sets.js +2 -2
  23. package/dist/entity-type-sets.js.map +1 -1
  24. package/dist/generated/ifc4-required-slots.d.ts +17 -0
  25. package/dist/generated/ifc4-required-slots.d.ts.map +1 -0
  26. package/dist/generated/ifc4-required-slots.js +619 -0
  27. package/dist/generated/ifc4-required-slots.js.map +1 -0
  28. package/dist/georef-closure.d.ts.map +1 -1
  29. package/dist/georef-closure.js +5 -0
  30. package/dist/georef-closure.js.map +1 -1
  31. package/dist/ifc5-effective-rows.d.ts +16 -0
  32. package/dist/ifc5-effective-rows.d.ts.map +1 -0
  33. package/dist/ifc5-effective-rows.js +90 -0
  34. package/dist/ifc5-effective-rows.js.map +1 -0
  35. package/dist/ifc5-export-helpers.d.ts +19 -0
  36. package/dist/ifc5-export-helpers.d.ts.map +1 -1
  37. package/dist/ifc5-export-helpers.js +16 -0
  38. package/dist/ifc5-export-helpers.js.map +1 -1
  39. package/dist/ifc5-exporter.d.ts +9 -11
  40. package/dist/ifc5-exporter.d.ts.map +1 -1
  41. package/dist/ifc5-exporter.js +38 -95
  42. package/dist/ifc5-exporter.js.map +1 -1
  43. package/dist/ifc5-pset-properties.d.ts +61 -0
  44. package/dist/ifc5-pset-properties.d.ts.map +1 -0
  45. package/dist/ifc5-pset-properties.js +100 -0
  46. package/dist/ifc5-pset-properties.js.map +1 -0
  47. package/dist/ifc5-tree-scope.js +3 -0
  48. package/dist/ifc5-tree-scope.js.map +1 -1
  49. package/dist/index.d.ts +1 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/lod0-generator.d.ts.map +1 -1
  54. package/dist/lod0-generator.js +2 -0
  55. package/dist/lod0-generator.js.map +1 -1
  56. package/dist/merged-context.d.ts.map +1 -1
  57. package/dist/merged-context.js +3 -0
  58. package/dist/merged-context.js.map +1 -1
  59. package/dist/merged-decomposition-parents.d.ts +99 -0
  60. package/dist/merged-decomposition-parents.d.ts.map +1 -0
  61. package/dist/merged-decomposition-parents.js +142 -0
  62. package/dist/merged-decomposition-parents.js.map +1 -0
  63. package/dist/merged-empty-containers-refs.d.ts +24 -0
  64. package/dist/merged-empty-containers-refs.d.ts.map +1 -0
  65. package/dist/merged-empty-containers-refs.js +126 -0
  66. package/dist/merged-empty-containers-refs.js.map +1 -0
  67. package/dist/merged-empty-containers.d.ts +31 -0
  68. package/dist/merged-empty-containers.d.ts.map +1 -1
  69. package/dist/merged-empty-containers.js +14 -123
  70. package/dist/merged-empty-containers.js.map +1 -1
  71. package/dist/merged-exporter.d.ts +7 -18
  72. package/dist/merged-exporter.d.ts.map +1 -1
  73. package/dist/merged-exporter.js +80 -70
  74. package/dist/merged-exporter.js.map +1 -1
  75. package/dist/merged-header.d.ts +11 -0
  76. package/dist/merged-header.d.ts.map +1 -0
  77. package/dist/merged-header.js +23 -0
  78. package/dist/merged-header.js.map +1 -0
  79. package/dist/nonrel-positional-ref-narrowing.d.ts +3 -0
  80. package/dist/nonrel-positional-ref-narrowing.d.ts.map +1 -0
  81. package/dist/nonrel-positional-ref-narrowing.js +194 -0
  82. package/dist/nonrel-positional-ref-narrowing.js.map +1 -0
  83. package/dist/nonrel-ref-list-types.d.ts +13 -0
  84. package/dist/nonrel-ref-list-types.d.ts.map +1 -0
  85. package/dist/nonrel-ref-list-types.js +162 -0
  86. package/dist/nonrel-ref-list-types.js.map +1 -0
  87. package/dist/parquet-created-entity-rows.d.ts +20 -0
  88. package/dist/parquet-created-entity-rows.d.ts.map +1 -0
  89. package/dist/parquet-created-entity-rows.js +40 -0
  90. package/dist/parquet-created-entity-rows.js.map +1 -0
  91. package/dist/parquet-exporter-ondemand.d.ts +3 -2
  92. package/dist/parquet-exporter-ondemand.d.ts.map +1 -1
  93. package/dist/parquet-exporter-ondemand.js +15 -6
  94. package/dist/parquet-exporter-ondemand.js.map +1 -1
  95. package/dist/parquet-exporter.d.ts +5 -12
  96. package/dist/parquet-exporter.d.ts.map +1 -1
  97. package/dist/parquet-exporter.js +57 -84
  98. package/dist/parquet-exporter.js.map +1 -1
  99. package/dist/parquet-relationship-rows.d.ts +11 -0
  100. package/dist/parquet-relationship-rows.d.ts.map +1 -0
  101. package/dist/parquet-relationship-rows.js +57 -0
  102. package/dist/parquet-relationship-rows.js.map +1 -0
  103. package/dist/parquet-spatial-rows.d.ts +14 -0
  104. package/dist/parquet-spatial-rows.d.ts.map +1 -0
  105. package/dist/parquet-spatial-rows.js +57 -0
  106. package/dist/parquet-spatial-rows.js.map +1 -0
  107. package/dist/reference-collector.d.ts +17 -1
  108. package/dist/reference-collector.d.ts.map +1 -1
  109. package/dist/reference-collector.js +30 -1
  110. package/dist/reference-collector.js.map +1 -1
  111. package/dist/registry-entity-names.d.ts +3 -0
  112. package/dist/registry-entity-names.d.ts.map +1 -0
  113. package/dist/registry-entity-names.js +38 -0
  114. package/dist/registry-entity-names.js.map +1 -0
  115. package/dist/relationship-slot-bounds.d.ts +14 -0
  116. package/dist/relationship-slot-bounds.d.ts.map +1 -0
  117. package/dist/relationship-slot-bounds.js +64 -0
  118. package/dist/relationship-slot-bounds.js.map +1 -0
  119. package/dist/retype.d.ts.map +1 -1
  120. package/dist/retype.js +5 -2
  121. package/dist/retype.js.map +1 -1
  122. package/dist/schema-conversion-loss-report.d.ts +97 -0
  123. package/dist/schema-conversion-loss-report.d.ts.map +1 -0
  124. package/dist/schema-conversion-loss-report.js +116 -0
  125. package/dist/schema-conversion-loss-report.js.map +1 -0
  126. package/dist/schema-converter-attr-remap.d.ts +8 -0
  127. package/dist/schema-converter-attr-remap.d.ts.map +1 -1
  128. package/dist/schema-converter-attr-remap.js +14 -1
  129. package/dist/schema-converter-attr-remap.js.map +1 -1
  130. package/dist/schema-converter-enums.d.ts +27 -0
  131. package/dist/schema-converter-enums.d.ts.map +1 -0
  132. package/dist/schema-converter-enums.js +117 -0
  133. package/dist/schema-converter-enums.js.map +1 -0
  134. package/dist/schema-converter-ifc4-slots.d.ts +36 -0
  135. package/dist/schema-converter-ifc4-slots.d.ts.map +1 -0
  136. package/dist/schema-converter-ifc4-slots.js +70 -0
  137. package/dist/schema-converter-ifc4-slots.js.map +1 -0
  138. package/dist/schema-converter.d.ts +41 -19
  139. package/dist/schema-converter.d.ts.map +1 -1
  140. package/dist/schema-converter.js +73 -42
  141. package/dist/schema-converter.js.map +1 -1
  142. package/dist/schema-enum-policy.d.ts +48 -0
  143. package/dist/schema-enum-policy.d.ts.map +1 -0
  144. package/dist/schema-enum-policy.js +26 -0
  145. package/dist/schema-enum-policy.js.map +1 -0
  146. package/dist/schema-untranslatable.d.ts +84 -2
  147. package/dist/schema-untranslatable.d.ts.map +1 -1
  148. package/dist/schema-untranslatable.js +98 -3
  149. package/dist/schema-untranslatable.js.map +1 -1
  150. package/dist/step-collection.js +1 -1
  151. package/dist/step-collection.js.map +1 -1
  152. package/dist/step-export-types.d.ts +13 -3
  153. package/dist/step-export-types.d.ts.map +1 -1
  154. package/dist/step-exporter.d.ts.map +1 -1
  155. package/dist/step-exporter.js +4 -2
  156. package/dist/step-exporter.js.map +1 -1
  157. package/dist/step-georeferencing.js +2 -0
  158. package/dist/step-georeferencing.js.map +1 -1
  159. package/dist/step-header.d.ts.map +1 -1
  160. package/dist/step-header.js +1 -0
  161. package/dist/step-header.js.map +1 -1
  162. package/dist/step-map-unit.d.ts.map +1 -1
  163. package/dist/step-map-unit.js +4 -0
  164. package/dist/step-map-unit.js.map +1 -1
  165. package/dist/step-overlay-entities.d.ts.map +1 -1
  166. package/dist/step-overlay-entities.js +5 -1
  167. package/dist/step-overlay-entities.js.map +1 -1
  168. package/dist/step-pass-builder.d.ts.map +1 -1
  169. package/dist/step-pass-builder.js +8 -1
  170. package/dist/step-pass-builder.js.map +1 -1
  171. package/dist/step-property-set-generators.d.ts.map +1 -1
  172. package/dist/step-property-set-generators.js +17 -0
  173. package/dist/step-property-set-generators.js.map +1 -1
  174. package/dist/step-property-set-index.d.ts +4 -10
  175. package/dist/step-property-set-index.d.ts.map +1 -1
  176. package/dist/step-property-set-index.js +52 -8
  177. package/dist/step-property-set-index.js.map +1 -1
  178. package/dist/step-property-set-readers.d.ts.map +1 -1
  179. package/dist/step-property-set-readers.js +4 -0
  180. package/dist/step-property-set-readers.js.map +1 -1
  181. package/dist/step-ref-scan.d.ts +6 -0
  182. package/dist/step-ref-scan.d.ts.map +1 -0
  183. package/dist/step-ref-scan.js +52 -0
  184. package/dist/step-ref-scan.js.map +1 -0
  185. package/dist/step-serialization.d.ts.map +1 -1
  186. package/dist/step-serialization.js +18 -2
  187. package/dist/step-serialization.js.map +1 -1
  188. package/dist/step-shared-atom-retention.d.ts +5 -0
  189. package/dist/step-shared-atom-retention.d.ts.map +1 -0
  190. package/dist/step-shared-atom-retention.js +60 -0
  191. package/dist/step-shared-atom-retention.js.map +1 -0
  192. package/dist/step-source-iteration.d.ts +1 -1
  193. package/dist/step-source-iteration.d.ts.map +1 -1
  194. package/dist/step-source-iteration.js +50 -45
  195. package/dist/step-source-iteration.js.map +1 -1
  196. package/dist/style-closure.d.ts.map +1 -1
  197. package/dist/style-closure.js +11 -0
  198. package/dist/style-closure.js.map +1 -1
  199. package/dist/subset-entity-reader.d.ts.map +1 -1
  200. package/dist/subset-entity-reader.js +3 -2
  201. package/dist/subset-entity-reader.js.map +1 -1
  202. package/dist/subset-roots.js +2 -2
  203. package/dist/subset-roots.js.map +1 -1
  204. package/package.json +11 -10
  205. package/dist/merged-rel-aggregates.d.ts +0 -63
  206. package/dist/merged-rel-aggregates.d.ts.map +0 -1
  207. package/dist/merged-rel-aggregates.js +0 -122
  208. package/dist/merged-rel-aggregates.js.map +0 -1
@@ -1,12 +1,15 @@
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, EntityFlags, IFC_ENTITY_NAMES, exactTypeName, flattenRelationshipEdges, relationshipTypeName } from '@ifc-lite/data';
4
+ import { IfcTypeEnum, EntityFlags, IFC_ENTITY_NAMES, exactTypeName } from '@ifc-lite/data';
5
5
  import { getEffectiveEntityIndex } from './effective-index.js';
6
+ import { parquetSpatialRows } from './parquet-spatial-rows.js';
6
7
  import { columnsToParquet } from './columns-to-parquet.js';
7
8
  import { PARQUET_UINT32_COLUMNS } from './parquet-uint32-columns.js';
8
9
  import { writePropertiesOnDemand, writeQuantitiesOnDemand } from './parquet-exporter-ondemand.js';
9
10
  import { propertyValueTypeToString, quantityTypeToString } from './parquet-type-strings.js';
11
+ import { appendCreatedParquetEntityRows } from './parquet-created-entity-rows.js';
12
+ import { parquetRelationshipRows } from './parquet-relationship-rows.js';
10
13
  /**
11
14
  * Export to ara3d BIM Open Schema compatible Parquet files.
12
15
  * Creates a .bos archive (ZIP of Parquet files).
@@ -20,18 +23,11 @@ export class ParquetExporter {
20
23
  * (README example, `tests/integration.test.ts`) keep working unchanged and
21
24
  * keep exporting the source model as parsed.
22
25
  *
23
- * When supplied, entities the overlay tombstoned via
24
- * `MutablePropertyView.deleteEntity()` — and every row that references
25
- * one — are dropped from `Entities`, `Properties`, `Quantities`,
26
- * `Relationships`, `SpatialHierarchy` and the geometry tables
27
- * (`VertexBuffer`, `IndexBuffer`, `Meshes`) (#2046; geometry tables
28
- * joined the set after they were found still emitting a deleted
29
- * entity's mesh into an otherwise-filtered archive). Unlike
30
- * `StepExporter`/`Ifc5Exporter`, this is deletion-only: unlike those
31
- * two, the writers below column-copy typed arrays out of the store in
32
- * one shot rather than looping per entity, so they cannot also apply
33
- * the overlay's pset/quantity/attribute edits the way a per-entity
34
- * emission pass can. That is a known, separate gap.
26
+ * When supplied, tombstoned entities and rows that reference them are
27
+ * dropped from every table (#2046), and overlay-created entities are
28
+ * appended to `Entities.parquet`. Relationship rows resolve authored
29
+ * records and edited endpoints; property and quantity rows resolve live
30
+ * overlays. Geometry payload edits remain a separate gap.
35
31
  */
36
32
  constructor(store, geometryResult, mutationView) {
37
33
  this.store = store;
@@ -62,9 +58,12 @@ export class ParquetExporter {
62
58
  const files = new Map();
63
59
  // Non-geometry files
64
60
  files.set('Entities.parquet', await this.writeEntities());
65
- files.set('Properties.parquet', await this.writeProperties());
61
+ let propertyCount = 0;
62
+ files.set('Properties.parquet', await this.writeProperties(count => { propertyCount = count; }));
66
63
  files.set('Quantities.parquet', await this.writeQuantities());
67
- files.set('Relationships.parquet', await this.writeRelationships());
64
+ const effective = this.getEffective();
65
+ const relationshipRows = parquetRelationshipRows(this.store, this.mutationView, effective);
66
+ files.set('Relationships.parquet', await this.toParquet(relationshipRows));
68
67
  files.set('Strings.parquet', await this.writeStrings());
69
68
  // Geometry files (if available)
70
69
  if (options.includeGeometry !== false && this.geometryResult) {
@@ -73,11 +72,11 @@ export class ParquetExporter {
73
72
  files.set('Meshes.parquet', await this.writeMeshes());
74
73
  }
75
74
  // Spatial hierarchy
76
- if (this.store.spatialHierarchy) {
77
- files.set('SpatialHierarchy.parquet', await this.writeSpatialHierarchy());
75
+ if (this.store.spatialHierarchy || effective) {
76
+ files.set('SpatialHierarchy.parquet', await this.writeSpatialHierarchy(relationshipRows, effective));
78
77
  }
79
78
  // Metadata
80
- files.set('Metadata.json', this.writeMetadata());
79
+ files.set('Metadata.json', this.writeMetadata(new Set(relationshipRows.RelId).size, propertyCount));
81
80
  return this.createZipArchive(files);
82
81
  }
83
82
  /**
@@ -103,11 +102,7 @@ export class ParquetExporter {
103
102
  const { entities, strings } = this.store;
104
103
  const effective = this.getEffective();
105
104
  const expressId = Array.from(entities.expressId);
106
- // Row i's identity IS expressId[i] (columnar layout, one row per
107
- // parsed entity) — the same predicate every other column below is
108
- // filtered by.
109
- const keep = effective ? expressId.map((id) => !effective.isDeleted(id)) : null;
110
- return this.toParquet(filterColumns({
105
+ const columns = {
111
106
  ExpressId: expressId,
112
107
  GlobalId: mapTypedArray(entities.globalId, i => strings.get(i)),
113
108
  Name: mapTypedArray(entities.name, i => strings.get(i)),
@@ -146,11 +141,20 @@ export class ParquetExporter {
146
141
  ContainedInStorey: Array.from(entities.containedInStorey),
147
142
  DefinedByType: Array.from(entities.definedByType),
148
143
  GeometryIndex: Array.from(entities.geometryIndex),
149
- }, keep));
144
+ };
145
+ appendCreatedParquetEntityRows(columns, this.store, this.mutationView, effective);
146
+ // Source rows retain their columnar order; live creations follow in
147
+ // allocation order. Tombstones are filtered from both domains.
148
+ const keep = effective ? columns.ExpressId.map((id) => !effective.isDeleted(id)) : null;
149
+ return this.toParquet(filterColumns(columns, keep));
150
150
  }
151
- async writeProperties() {
151
+ async writeProperties(onCount) {
152
152
  const { properties, strings } = this.store;
153
153
  const effective = this.getEffective();
154
+ if (this.mutationView) {
155
+ const onDemand = properties.entityId.length === 0;
156
+ return writePropertiesOnDemand(this.store, effective, this.mutationView, onDemand ? this.store.onDemandPropertyMap?.keys() ?? [] : properties.entityIndex.keys(), onDemand ? id => this.store.getProperties(id) : id => properties.getForEntity(id), onCount);
157
+ }
154
158
  // `IfcParser.parseColumnar` (the sole parse path every real caller of
155
159
  // this exporter goes through — `packages/parser`'s `parseLite`) never
156
160
  // populates `store.properties`: it builds a `PropertyTableBuilder` but
@@ -165,12 +169,13 @@ export class ParquetExporter {
165
169
  // this file's own tests). Route through the on-demand path first;
166
170
  // fall back to the bulk table when it was actually populated.
167
171
  if (properties.entityId.length === 0 && this.store.onDemandPropertyMap && this.store.onDemandPropertyMap.size > 0) {
168
- return writePropertiesOnDemand(this.store, effective);
172
+ return writePropertiesOnDemand(this.store, effective, null, undefined, undefined, onCount);
169
173
  }
170
174
  const entityId = Array.from(properties.entityId);
171
175
  // A property row belongs to the entity named in its own EntityId
172
176
  // column, not to its own row index — filter on that, not on ExpressId.
173
177
  const keep = effective ? entityId.map((id) => !effective.isDeleted(id)) : null;
178
+ onCount?.(keep ? keep.filter(Boolean).length : entityId.length);
174
179
  return this.toParquet(filterColumns({
175
180
  EntityId: entityId,
176
181
  PsetName: mapTypedArray(properties.psetName, i => strings.get(i)),
@@ -186,6 +191,10 @@ export class ParquetExporter {
186
191
  async writeQuantities() {
187
192
  const { quantities, strings } = this.store;
188
193
  const effective = this.getEffective();
194
+ if (this.mutationView) {
195
+ const onDemand = quantities.entityId.length === 0;
196
+ return writeQuantitiesOnDemand(this.store, effective, this.mutationView, onDemand ? this.store.onDemandQuantityMap?.keys() ?? [] : quantities.entityIndex.keys(), onDemand ? id => this.store.getQuantities(id) : id => quantities.getForEntity(id));
197
+ }
189
198
  // Same gap as `writeProperties`: `store.quantities` is only ever
190
199
  // populated when a caller bulk-builds it directly (this file's own
191
200
  // tests); the real `parseColumnar` path leaves it empty and serves
@@ -206,41 +215,7 @@ export class ParquetExporter {
206
215
  }, keep), new Set(['Value']));
207
216
  }
208
217
  async writeRelationships() {
209
- const { relationships } = this.store;
210
- const effective = this.getEffective();
211
- // One row per `IfcRel*` STEP record, including any collapsed into
212
- // an edge's `shadowedRelationshipIds` (#3760/#3782) — not one row
213
- // per deduped edge; see `flattenRelationshipEdges`'s doc comment.
214
- const sourceIds = [];
215
- const targetIds = [];
216
- const relTypes = [];
217
- const relIds = [];
218
- for (const row of flattenRelationshipEdges(relationships.forward)) {
219
- // An edge naming a tombstoned entity on either end no longer
220
- // has a live entity to relate — drop the row rather than
221
- // leave a dangling SourceId/TargetId in the export.
222
- //
223
- // `relationshipId` gets the same treatment: an `IfcRel*` record
224
- // is itself a row in Entities.parquet (the columnar parser
225
- // indexes it like any other line), so emitting a RelId for a
226
- // deleted one leaves a dangling reference too. Because each
227
- // shadowed id is its own row here, this drops exactly the
228
- // deleted record and keeps a live sibling — the same rule
229
- // `edgeSurvives` applies to the CLI/MCP `related()` path
230
- // (#3782 review).
231
- if (effective && (effective.isDeleted(row.sourceId) || effective.isDeleted(row.targetId) || effective.isDeleted(row.relationshipId)))
232
- continue;
233
- sourceIds.push(row.sourceId);
234
- targetIds.push(row.targetId);
235
- relTypes.push(relationshipTypeName(row.type));
236
- relIds.push(row.relationshipId);
237
- }
238
- return this.toParquet({
239
- SourceId: sourceIds,
240
- TargetId: targetIds,
241
- RelType: relTypes,
242
- RelId: relIds,
243
- });
218
+ return this.toParquet(parquetRelationshipRows(this.store, this.mutationView, this.getEffective()));
244
219
  }
245
220
  async writeStrings() {
246
221
  const { strings } = this.store;
@@ -372,13 +347,22 @@ export class ParquetExporter {
372
347
  IndexCount: indexCounts,
373
348
  });
374
349
  }
375
- async writeSpatialHierarchy() {
350
+ async writeSpatialHierarchy(relationships, effective) {
351
+ if (effective) {
352
+ const rows = parquetSpatialRows(relationships, effective);
353
+ return this.toParquet({
354
+ ElementId: rows.map(r => r.ElementId),
355
+ StoreyId: rows.map(r => r.StoreyId),
356
+ BuildingId: rows.map(r => r.BuildingId),
357
+ SiteId: rows.map(r => r.SiteId),
358
+ SpaceId: rows.map(r => r.SpaceId),
359
+ });
360
+ }
376
361
  if (!this.store.spatialHierarchy) {
377
362
  throw new Error('Spatial hierarchy not available');
378
363
  }
379
364
  const rows = [];
380
365
  const { spatialHierarchy } = this.store;
381
- const effective = this.getEffective();
382
366
  // Build lookup maps for fast parent access
383
367
  const storeyToBuilding = new Map();
384
368
  const buildingToSite = new Map();
@@ -407,18 +391,6 @@ export class ParquetExporter {
407
391
  const buildingId = storeyToBuilding.get(storeyId) ?? -1;
408
392
  const siteId = buildingId >= 0 ? (buildingToSite.get(buildingId) ?? -1) : -1;
409
393
  for (const elementId of elementIds) {
410
- // A tombstoned element is not a row in Entities.parquet either
411
- // (see writeEntities) — leaving it here would point
412
- // SpatialHierarchy.parquet at an id no other table has.
413
- //
414
- // Deletion-only, and only for the element itself: a deleted
415
- // STOREY/BUILDING/SITE still surfaces as StoreyId/BuildingId/
416
- // SiteId on a surviving element's row (spatialHierarchy is a
417
- // source-parse snapshot with no overlay-aware re-parenting —
418
- // the same class of problem Ifc5Exporter's re-parenting pass
419
- // solves, #2047 — not addressed here).
420
- if (effective?.isDeleted(elementId))
421
- continue;
422
394
  // Check if element is in a space by iterating bySpace
423
395
  let spaceId = -1;
424
396
  for (const [sid, spaceElementIds] of spatialHierarchy.bySpace) {
@@ -444,7 +416,7 @@ export class ParquetExporter {
444
416
  SpaceId: rows.map(r => r.SpaceId),
445
417
  });
446
418
  }
447
- writeMetadata() {
419
+ writeMetadata(relationshipCount, propertyCount) {
448
420
  const metadata = {
449
421
  version: '2.0.0',
450
422
  generator: 'IFC-Lite',
@@ -461,8 +433,8 @@ export class ParquetExporter {
461
433
  meshCount: this.geometryResult?.meshes.length ?? 0,
462
434
  vertexCount: this.geometryResult ? this.geometryResult.totalVertices : 0,
463
435
  triangleCount: this.geometryResult ? this.geometryResult.totalTriangles : 0,
464
- propertyCount: this.store.properties.count,
465
- relationshipCount: new Set([...this.store.relationships.forward.edgeRelIds, ...(this.store.relationships.forward.shadowedRelIds ?? [])]).size, // distinct IfcRel* records, not raw edges (#3760/#4205)
436
+ propertyCount,
437
+ relationshipCount, // distinct exported IfcRel records, not raw edges (#3760/#4205)
466
438
  },
467
439
  };
468
440
  return new TextEncoder().encode(JSON.stringify(metadata, null, 2));
@@ -473,13 +445,14 @@ export class ParquetExporter {
473
445
  async toParquet(columns, floatColumns) {
474
446
  return columnsToParquet(columns, floatColumns, PARQUET_UINT32_COLUMNS);
475
447
  }
448
+ // fflate, not JSZip: JSZip writes "version needed to extract" 1.0 on
449
+ // DEFLATE entries, where the ZIP APPNOTE requires 2.0 (#3612).
476
450
  async createZipArchive(files) {
477
- const JSZip = (await import('jszip')).default;
478
- const zip = new JSZip();
479
- for (const [name, data] of files) {
480
- zip.file(name, data);
481
- }
482
- return zip.generateAsync({ type: 'uint8array', compression: 'DEFLATE' });
451
+ const { zipSync } = await import('fflate');
452
+ // Entry names are file names with an extension, never integer-like
453
+ // keys, so the object keeps the Map's insertion order. zipSync rather
454
+ // than async `zip`, which starts uncapped workers (see bcf writer-archive).
455
+ return zipSync(Object.fromEntries(files), { level: 6 });
483
456
  }
484
457
  }
485
458
  // Helper functions
@@ -1 +1 @@
1
- {"version":3,"file":"parquet-exporter.js","sourceRoot":"","sources":["../src/parquet-exporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parquet-exporter.js","sourceRoot":"","sources":["../src/parquet-exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { MutablePropertyView } from '@ifc-lite/mutations';
2
+ import { type IfcDataStore } from '@ifc-lite/parser';
3
+ import type { EffectiveEntityIndex } from './effective-index.js';
4
+ /** The four columns of the BOS relationship table, one row per relationship edge. */
5
+ export declare function parquetRelationshipRows(store: IfcDataStore, view: MutablePropertyView | null, effective: EffectiveEntityIndex | null): {
6
+ SourceId: number[];
7
+ TargetId: number[];
8
+ RelType: string[];
9
+ RelId: number[];
10
+ };
11
+ //# sourceMappingURL=parquet-relationship-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-relationship-rows.d.ts","sourceRoot":"","sources":["../src/parquet-relationship-rows.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAuC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,qFAAqF;AACrF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAChC,SAAS,EAAE,oBAAoB,GAAG,IAAI,GACrC;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CA8ChF"}
@@ -0,0 +1,57 @@
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
+ import { flattenRelationshipEdges, relationshipTypeName } from '@ifc-lite/data';
5
+ import { resolveEffectiveRelationshipOverlay } from '@ifc-lite/parser';
6
+ /** The four columns of the BOS relationship table, one row per relationship edge. */
7
+ export function parquetRelationshipRows(store, view, effective) {
8
+ const rows = { SourceId: [], TargetId: [], RelType: [], RelId: [] };
9
+ const overlay = view ? resolveEffectiveRelationshipOverlay(store, {
10
+ createdEntities: () => view.getNewEntities(),
11
+ mutatedEntityIds: () => {
12
+ const ids = new Set([
13
+ ...view.getTypeMutations().keys(),
14
+ ...view.getAttributeMutationsByEntity().keys(),
15
+ ]);
16
+ // Positional edits may deliberately skip undo history. Ask the live
17
+ // overlay for each effective IfcRel record rather than replaying history.
18
+ for (const [type, relationIds] of effective?.byType ?? []) {
19
+ if (!type.startsWith('IFCREL'))
20
+ continue;
21
+ for (const id of relationIds) {
22
+ if (view.getPositionalMutationsForEntity(id)?.size)
23
+ ids.add(id);
24
+ }
25
+ }
26
+ return [...ids].filter(id => !view.isDeleted(id));
27
+ },
28
+ namedAttributes: id => view.getAttributeMutationsForEntity(id).map(({ name, value }) => [name, value]),
29
+ positionalAttributes: id => view.getPositionalMutationsForEntity(id) ?? [],
30
+ entityType: id => view.getEntityTypeMutation(id)?.newType,
31
+ isDeleted: id => view.isDeleted(id),
32
+ }) : null;
33
+ const add = (source, target, type, relation) => {
34
+ if (effective && (effective.isDeleted(source) || effective.isDeleted(target) || effective.isDeleted(relation)))
35
+ return;
36
+ rows.SourceId.push(source);
37
+ rows.TargetId.push(target);
38
+ rows.RelType.push(type);
39
+ rows.RelId.push(relation);
40
+ };
41
+ // The parsed graph preserves distinct IfcRel records that name the same
42
+ // endpoints. Suppress only records whose effective payload was rebuilt.
43
+ for (const edge of flattenRelationshipEdges(store.relationships.forward)) {
44
+ if (overlay?.supersededSourceIds.has(edge.relationshipId))
45
+ continue;
46
+ add(edge.sourceId, edge.targetId, relationshipTypeName(edge.type), edge.relationshipId);
47
+ }
48
+ for (const relation of overlay?.relationships ?? []) {
49
+ for (const source of relation.relating) {
50
+ for (const target of relation.related) {
51
+ add(source, target, relation.relationshipType, relation.relationshipId);
52
+ }
53
+ }
54
+ }
55
+ return rows;
56
+ }
57
+ //# sourceMappingURL=parquet-relationship-rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-relationship-rows.js","sourceRoot":"","sources":["../src/parquet-relationship-rows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { EffectiveEntityIndex } from './effective-index.js';
2
+ import type { parquetRelationshipRows } from './parquet-relationship-rows.js';
3
+ type RelationshipRows = ReturnType<typeof parquetRelationshipRows>;
4
+ export interface SpatialRow {
5
+ ElementId: number;
6
+ StoreyId: number;
7
+ BuildingId: number;
8
+ SiteId: number;
9
+ SpaceId: number;
10
+ }
11
+ /** Resolve the spatial table from the same live relationship edges exported to BOS. */
12
+ export declare function parquetSpatialRows(relationships: RelationshipRows, effective: EffectiveEntityIndex): SpatialRow[];
13
+ export {};
14
+ //# sourceMappingURL=parquet-spatial-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-spatial-rows.d.ts","sourceRoot":"","sources":["../src/parquet-spatial-rows.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEnE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,gBAAgB,EAC/B,SAAS,EAAE,oBAAoB,GAC9B,UAAU,EAAE,CAoCd"}
@@ -0,0 +1,57 @@
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
+ /** Resolve the spatial table from the same live relationship edges exported to BOS. */
5
+ export function parquetSpatialRows(relationships, effective) {
6
+ const parentOf = new Map();
7
+ const containerOf = new Map();
8
+ for (let i = 0; i < relationships.RelId.length; i++) {
9
+ const source = relationships.SourceId[i];
10
+ const target = relationships.TargetId[i];
11
+ if (relationships.RelType[i] === 'IfcRelAggregates')
12
+ parentOf.set(target, source);
13
+ if (relationships.RelType[i] === 'IfcRelContainedInSpatialStructure')
14
+ containerOf.set(target, source);
15
+ }
16
+ const rows = [];
17
+ for (const [elementId, containerId] of containerOf) {
18
+ if (!effective.has(elementId))
19
+ continue;
20
+ let storeyId = -1;
21
+ let buildingId = -1;
22
+ let siteId = -1;
23
+ let spaceId = -1;
24
+ let current = containerId;
25
+ const seen = new Set();
26
+ // File-supplied aggregation can cycle. Iteration and the visited set
27
+ // bound the walk without rejecting legitimate deep spatial hierarchies.
28
+ while (current !== undefined && !seen.has(current) && effective.has(current)) {
29
+ seen.add(current);
30
+ switch (effective.typeOf(current)) {
31
+ case 'IFCSPACE':
32
+ if (spaceId < 0)
33
+ spaceId = current;
34
+ break;
35
+ case 'IFCBUILDINGSTOREY':
36
+ if (storeyId < 0)
37
+ storeyId = current;
38
+ break;
39
+ case 'IFCBUILDING':
40
+ if (buildingId < 0)
41
+ buildingId = current;
42
+ break;
43
+ case 'IFCSITE':
44
+ if (siteId < 0)
45
+ siteId = current;
46
+ break;
47
+ }
48
+ current = parentOf.get(current);
49
+ }
50
+ if (storeyId < 0)
51
+ continue;
52
+ rows.push({ ElementId: elementId, StoreyId: storeyId, BuildingId: buildingId, SiteId: siteId, SpaceId: spaceId });
53
+ }
54
+ rows.sort((a, b) => a.ElementId - b.ElementId);
55
+ return rows;
56
+ }
57
+ //# sourceMappingURL=parquet-spatial-rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-spatial-rows.js","sourceRoot":"","sources":["../src/parquet-spatial-rows.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAe/D,uFAAuF;AACvF,MAAM,UAAU,kBAAkB,CAChC,aAA+B,EAC/B,SAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;QAC1C,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,kBAAkB;YAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClF,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,mCAAmC;YAAE,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxG,CAAC;IAED,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,WAAW,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QACxC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,IAAI,OAAO,GAAuB,WAAW,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,qEAAqE;QACrE,wEAAwE;QACxE,OAAO,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,QAAQ,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,KAAK,UAAU;oBAAE,IAAI,OAAO,GAAG,CAAC;wBAAE,OAAO,GAAG,OAAO,CAAC;oBAAC,MAAM;gBAC3D,KAAK,mBAAmB;oBAAE,IAAI,QAAQ,GAAG,CAAC;wBAAE,QAAQ,GAAG,OAAO,CAAC;oBAAC,MAAM;gBACtE,KAAK,aAAa;oBAAE,IAAI,UAAU,GAAG,CAAC;wBAAE,UAAU,GAAG,OAAO,CAAC;oBAAC,MAAM;gBACpE,KAAK,SAAS;oBAAE,IAAI,MAAM,GAAG,CAAC;wBAAE,MAAM,GAAG,OAAO,CAAC;oBAAC,MAAM;YAC1D,CAAC;YACD,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,QAAQ,GAAG,CAAC;YAAE,SAAS;QAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACpH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -24,6 +24,7 @@
24
24
  */
25
25
  import type { IfcDataStore, IfcSourceBytes } from '@ifc-lite/parser';
26
26
  import type { EffectiveEntityIndex } from './effective-index.js';
27
+ import type { IfcSchemaVersion } from './schema-converter.js';
27
28
  import { INFRASTRUCTURE_TYPES, PRODUCT_TYPES, collectDescendantNames } from './entity-type-sets.js';
28
29
  export { INFRASTRUCTURE_TYPES, PRODUCT_TYPES, collectDescendantNames };
29
30
  /**
@@ -180,8 +181,23 @@ export declare function collectReferencedEntityIds(rootIds: Set<number>, source:
180
181
  * this exact dangling-ref shape (#2398): a relationship that still names an
181
182
  * entity the session deleted ships the same `#N` with no `#N=` line, on a
182
183
  * path with no `visibleOnly` involved at all.
184
+ *
185
+ * `schemaVersion` is optional and, when given, holds a narrowed list to its
186
+ * OWN declared lower bound (`relationship-slot-bounds.ts`, reading the line's
187
+ * own `record.type` against the version-correct schema registry) before
188
+ * accepting the narrowing — see that file's doc for why: an `IFCREL*` line's
189
+ * own list attributes are never declared above `[1:?]` in any of the three
190
+ * schemas this repo ships (checked across all `IfcRel*` entities), so every
191
+ * EXISTING caller that omits it keeps its exact prior behaviour. A
192
+ * `STYLE_RESCUE_TYPES` line CAN carry a higher bound —
193
+ * `IfcTextureMap.Vertices` is `LIST [3:?]` — so callers on that path (#5262)
194
+ * pass it. When narrowing would still drop a slot below its own bound, the
195
+ * slot is left exactly as the source wrote it, the excluded ref(s) still
196
+ * dangling: the same "narrow reach only, never a new invalid shape" choice
197
+ * `narrowNonRelPositionalRefLists` already makes for the sibling
198
+ * non-relationship rule (#5181).
183
199
  */
184
- export declare function filterHiddenRefsFromRelationshipLine(line: string, isExcluded: (id: number) => boolean): string | null;
200
+ export declare function filterHiddenRefsFromRelationshipLine(line: string, isExcluded: (id: number) => boolean, schemaVersion?: IfcSchemaVersion): string | null;
185
201
  /**
186
202
  * The "does this relationship's own line survive at all" half of
187
203
  * {@link filterHiddenRefsFromRelationshipLine}, extracted as a standalone
@@ -1 +1 @@
1
- {"version":3,"file":"reference-collector.d.ts","sourceRoot":"","sources":["../src/reference-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reference-collector.d.ts","sourceRoot":"","sources":["../src/reference-collector.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAM9D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAC;AAEvE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,QAAsD,CAAC;AA2F/E;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,GAAG,cAAc,EACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAKV;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,MAAM,EAAE,UAAU,GAAG,cAAc,EACnC,WAAW,EAAE;IACX,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACvF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACnD,WAAW,CAAC,CACV,EAAE,EAAE,MAAM,EACV,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,GACnE,aAAa,CAAC,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;IACzD,aAAa,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IACvD,iBAAiB,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;CACzC,EACD,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GACtC,GAAG,CAAC,MAAM,CAAC,CA0Ob;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,wBAAgB,oCAAoC,CAClD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,EACnC,aAAa,CAAC,EAAE,gBAAgB,GAC/B,MAAM,GAAG,IAAI,CA6Df;AA0CD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,EACpD,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAClC,OAAO,CAST;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAgB3E;AA8CD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAC/B,KAAK,CAAC,EAAE,oBAAoB,GAC3B;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAqEvD"}
@@ -3,6 +3,7 @@
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  import { asSourceBytes, STEP_TRIVIA } from '@ifc-lite/parser';
5
5
  import { readStepSlots, splitTopLevelListItems } from './step-argument-parser.js';
6
+ import { readRelationshipSlotLowerBound } from './relationship-slot-bounds.js';
6
7
  // Schema-derived type-set machinery (INFRASTRUCTURE_TYPES, PRODUCT_TYPES,
7
8
  // collectDescendantNames) lives in `entity-type-sets.ts` — shared with
8
9
  // `subset-roots.ts`, which derives IFC_ROOT_TYPES the same way. Re-exported
@@ -470,8 +471,23 @@ export function collectReferencedEntityIds(rootIds, source, entityIndex, exclude
470
471
  * this exact dangling-ref shape (#2398): a relationship that still names an
471
472
  * entity the session deleted ships the same `#N` with no `#N=` line, on a
472
473
  * path with no `visibleOnly` involved at all.
474
+ *
475
+ * `schemaVersion` is optional and, when given, holds a narrowed list to its
476
+ * OWN declared lower bound (`relationship-slot-bounds.ts`, reading the line's
477
+ * own `record.type` against the version-correct schema registry) before
478
+ * accepting the narrowing — see that file's doc for why: an `IFCREL*` line's
479
+ * own list attributes are never declared above `[1:?]` in any of the three
480
+ * schemas this repo ships (checked across all `IfcRel*` entities), so every
481
+ * EXISTING caller that omits it keeps its exact prior behaviour. A
482
+ * `STYLE_RESCUE_TYPES` line CAN carry a higher bound —
483
+ * `IfcTextureMap.Vertices` is `LIST [3:?]` — so callers on that path (#5262)
484
+ * pass it. When narrowing would still drop a slot below its own bound, the
485
+ * slot is left exactly as the source wrote it, the excluded ref(s) still
486
+ * dangling: the same "narrow reach only, never a new invalid shape" choice
487
+ * `narrowNonRelPositionalRefLists` already makes for the sibling
488
+ * non-relationship rule (#5181).
473
489
  */
474
- export function filterHiddenRefsFromRelationshipLine(line, isExcluded) {
490
+ export function filterHiddenRefsFromRelationshipLine(line, isExcluded, schemaVersion) {
475
491
  const record = readStepSlots(line);
476
492
  // This helper is also the output gate for relationship/source-style lines.
477
493
  // Once a line identifies itself as a STEP entity, refusing its slot layout
@@ -498,6 +514,19 @@ export function filterHiddenRefsFromRelationshipLine(line, isExcluded) {
498
514
  if (survivors.length !== items.length) {
499
515
  if (survivors.length === 0)
500
516
  return null;
517
+ if (schemaVersion !== undefined) {
518
+ const lowerBound = readRelationshipSlotLowerBound(entityType, index, schemaVersion);
519
+ if (lowerBound !== undefined && survivors.length < lowerBound) {
520
+ // Narrowing would still leave this slot below its OWN declared
521
+ // lower bound (#5262) — e.g. `IfcTextureMap.Vertices`,
522
+ // `LIST [3:?]`: 2 survivors is a DIFFERENT invalid file than the
523
+ // dangling ref it would replace. Leave it exactly as the source
524
+ // wrote it; the excluded ref stays dangling, the pre-existing
525
+ // defect class this whole gate only narrows the REACH of.
526
+ nextAttrs.push(rawAttr);
527
+ continue;
528
+ }
529
+ }
501
530
  changed = true;
502
531
  nextAttrs.push(`${leading}(${survivors.join(',')})${trailing}`);
503
532
  continue;