@ifc-lite/export 4.9.0 → 4.12.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.
Files changed (191) hide show
  1. package/dist/affected-set.d.ts +9 -0
  2. package/dist/affected-set.d.ts.map +1 -0
  3. package/dist/affected-set.js +72 -0
  4. package/dist/affected-set.js.map +1 -0
  5. package/dist/anonymize-placement.d.ts +0 -34
  6. package/dist/anonymize-placement.d.ts.map +1 -1
  7. package/dist/anonymize-placement.js +58 -27
  8. package/dist/anonymize-placement.js.map +1 -1
  9. package/dist/declared-property-type.d.ts +7 -0
  10. package/dist/declared-property-type.d.ts.map +1 -1
  11. package/dist/declared-property-type.js +29 -2
  12. package/dist/declared-property-type.js.map +1 -1
  13. package/dist/edit-ownership.d.ts +7 -0
  14. package/dist/edit-ownership.d.ts.map +1 -0
  15. package/dist/edit-ownership.js +95 -0
  16. package/dist/edit-ownership.js.map +1 -0
  17. package/dist/effective-index.d.ts.map +1 -1
  18. package/dist/effective-index.js +12 -5
  19. package/dist/effective-index.js.map +1 -1
  20. package/dist/entity-subgraph.d.ts +11 -3
  21. package/dist/entity-subgraph.d.ts.map +1 -1
  22. package/dist/entity-subgraph.js +54 -11
  23. package/dist/entity-subgraph.js.map +1 -1
  24. package/dist/grid-placement-dependents.d.ts +4 -0
  25. package/dist/grid-placement-dependents.d.ts.map +1 -0
  26. package/dist/grid-placement-dependents.js +71 -0
  27. package/dist/grid-placement-dependents.js.map +1 -0
  28. package/dist/grid-reference-context.d.ts +6 -0
  29. package/dist/grid-reference-context.d.ts.map +1 -0
  30. package/dist/grid-reference-context.js +68 -0
  31. package/dist/grid-reference-context.js.map +1 -0
  32. package/dist/ifc5-exporter.d.ts.map +1 -1
  33. package/dist/ifc5-exporter.js +5 -4
  34. package/dist/ifc5-exporter.js.map +1 -1
  35. package/dist/index.d.ts +5 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +8 -4
  38. package/dist/index.js.map +1 -1
  39. package/dist/lod-geometry-types.d.ts +5 -0
  40. package/dist/lod-geometry-types.d.ts.map +1 -1
  41. package/dist/lod0-generator.d.ts.map +1 -1
  42. package/dist/lod0-generator.js +52 -18
  43. package/dist/lod0-generator.js.map +1 -1
  44. package/dist/lod1-generator.d.ts.map +1 -1
  45. package/dist/lod1-generator.js +4 -1
  46. package/dist/lod1-generator.js.map +1 -1
  47. package/dist/merged-empty-containers-refs.d.ts.map +1 -1
  48. package/dist/merged-empty-containers-refs.js +5 -3
  49. package/dist/merged-empty-containers-refs.js.map +1 -1
  50. package/dist/merged-exporter.d.ts.map +1 -1
  51. package/dist/merged-exporter.js +31 -31
  52. package/dist/merged-exporter.js.map +1 -1
  53. package/dist/merged-remap.d.ts +0 -8
  54. package/dist/merged-remap.d.ts.map +1 -1
  55. package/dist/merged-remap.js +7 -17
  56. package/dist/merged-remap.js.map +1 -1
  57. package/dist/obj.d.ts +8 -8
  58. package/dist/obj.js +8 -8
  59. package/dist/parquet-exporter.d.ts.map +1 -1
  60. package/dist/parquet-exporter.js +14 -2
  61. package/dist/parquet-exporter.js.map +1 -1
  62. package/dist/property-value-serialization.d.ts.map +1 -1
  63. package/dist/property-value-serialization.js +7 -3
  64. package/dist/property-value-serialization.js.map +1 -1
  65. package/dist/reference-collector.d.ts.map +1 -1
  66. package/dist/reference-collector.js +17 -16
  67. package/dist/reference-collector.js.map +1 -1
  68. package/dist/retype.d.ts.map +1 -1
  69. package/dist/retype.js +12 -11
  70. package/dist/retype.js.map +1 -1
  71. package/dist/schema-conversion-loss-report.d.ts +2 -1
  72. package/dist/schema-conversion-loss-report.d.ts.map +1 -1
  73. package/dist/schema-conversion-loss-report.js +20 -11
  74. package/dist/schema-conversion-loss-report.js.map +1 -1
  75. package/dist/schema-converter-mep.d.ts +2 -0
  76. package/dist/schema-converter-mep.d.ts.map +1 -0
  77. package/dist/schema-converter-mep.js +9 -0
  78. package/dist/schema-converter-mep.js.map +1 -0
  79. package/dist/schema-converter-mep.json +96 -0
  80. package/dist/schema-converter-product-proxy.d.ts +25 -0
  81. package/dist/schema-converter-product-proxy.d.ts.map +1 -0
  82. package/dist/schema-converter-product-proxy.js +33 -0
  83. package/dist/schema-converter-product-proxy.js.map +1 -0
  84. package/dist/schema-converter-renames.d.ts +32 -0
  85. package/dist/schema-converter-renames.d.ts.map +1 -0
  86. package/dist/schema-converter-renames.js +60 -0
  87. package/dist/schema-converter-renames.js.map +1 -0
  88. package/dist/schema-converter.d.ts +8 -16
  89. package/dist/schema-converter.d.ts.map +1 -1
  90. package/dist/schema-converter.js +44 -71
  91. package/dist/schema-converter.js.map +1 -1
  92. package/dist/schema-style-flatten.d.ts +82 -0
  93. package/dist/schema-style-flatten.d.ts.map +1 -0
  94. package/dist/schema-style-flatten.js +245 -0
  95. package/dist/schema-style-flatten.js.map +1 -0
  96. package/dist/step-argument-parser.d.ts +7 -2
  97. package/dist/step-argument-parser.d.ts.map +1 -1
  98. package/dist/step-argument-parser.js +69 -62
  99. package/dist/step-argument-parser.js.map +1 -1
  100. package/dist/step-attribute-mutations.d.ts.map +1 -1
  101. package/dist/step-attribute-mutations.js +21 -22
  102. package/dist/step-attribute-mutations.js.map +1 -1
  103. package/dist/step-coordinate-options.d.ts +8 -0
  104. package/dist/step-coordinate-options.d.ts.map +1 -1
  105. package/dist/step-export-contexts.d.ts +1 -1
  106. package/dist/step-export-contexts.d.ts.map +1 -1
  107. package/dist/step-export-contexts.js +4 -1
  108. package/dist/step-export-contexts.js.map +1 -1
  109. package/dist/step-export-types.d.ts +6 -0
  110. package/dist/step-export-types.d.ts.map +1 -1
  111. package/dist/step-export-types.js.map +1 -1
  112. package/dist/step-exporter.d.ts.map +1 -1
  113. package/dist/step-exporter.js +19 -19
  114. package/dist/step-exporter.js.map +1 -1
  115. package/dist/step-map-unit-normalization.d.ts +3 -5
  116. package/dist/step-map-unit-normalization.d.ts.map +1 -1
  117. package/dist/step-map-unit-normalization.js +12 -8
  118. package/dist/step-map-unit-normalization.js.map +1 -1
  119. package/dist/step-map-unit.d.ts +3 -78
  120. package/dist/step-map-unit.d.ts.map +1 -1
  121. package/dist/step-map-unit.js +33 -195
  122. package/dist/step-map-unit.js.map +1 -1
  123. package/dist/step-native-set-record.d.ts +6 -0
  124. package/dist/step-native-set-record.d.ts.map +1 -0
  125. package/dist/step-native-set-record.js +30 -0
  126. package/dist/step-native-set-record.js.map +1 -0
  127. package/dist/step-outer-args.d.ts +10 -0
  128. package/dist/step-outer-args.d.ts.map +1 -1
  129. package/dist/step-outer-args.js +29 -12
  130. package/dist/step-outer-args.js.map +1 -1
  131. package/dist/step-overlay-entities.d.ts +2 -0
  132. package/dist/step-overlay-entities.d.ts.map +1 -1
  133. package/dist/step-overlay-entities.js +43 -11
  134. package/dist/step-overlay-entities.js.map +1 -1
  135. package/dist/step-pass-builder.d.ts.map +1 -1
  136. package/dist/step-pass-builder.js +4 -0
  137. package/dist/step-pass-builder.js.map +1 -1
  138. package/dist/step-property-set-collection.d.ts.map +1 -1
  139. package/dist/step-property-set-collection.js +24 -8
  140. package/dist/step-property-set-collection.js.map +1 -1
  141. package/dist/step-property-set-generators.d.ts +8 -2
  142. package/dist/step-property-set-generators.d.ts.map +1 -1
  143. package/dist/step-property-set-generators.js +26 -10
  144. package/dist/step-property-set-generators.js.map +1 -1
  145. package/dist/step-property-set-index.d.ts.map +1 -1
  146. package/dist/step-property-set-index.js +8 -3
  147. package/dist/step-property-set-index.js.map +1 -1
  148. package/dist/step-property-set-readers.d.ts +6 -0
  149. package/dist/step-property-set-readers.d.ts.map +1 -1
  150. package/dist/step-property-set-readers.js +68 -14
  151. package/dist/step-property-set-readers.js.map +1 -1
  152. package/dist/step-property-sets.d.ts +17 -4
  153. package/dist/step-property-sets.d.ts.map +1 -1
  154. package/dist/step-property-sets.js +79 -20
  155. package/dist/step-property-sets.js.map +1 -1
  156. package/dist/step-record-frame.d.ts +69 -0
  157. package/dist/step-record-frame.d.ts.map +1 -0
  158. package/dist/step-record-frame.js +136 -0
  159. package/dist/step-record-frame.js.map +1 -0
  160. package/dist/step-ref-scan.d.ts +8 -0
  161. package/dist/step-ref-scan.d.ts.map +1 -1
  162. package/dist/step-ref-scan.js +29 -8
  163. package/dist/step-ref-scan.js.map +1 -1
  164. package/dist/step-serialization.d.ts +16 -4
  165. package/dist/step-serialization.d.ts.map +1 -1
  166. package/dist/step-serialization.js +39 -13
  167. package/dist/step-serialization.js.map +1 -1
  168. package/dist/step-slot-grammar.d.ts +21 -18
  169. package/dist/step-slot-grammar.d.ts.map +1 -1
  170. package/dist/step-slot-grammar.js +210 -177
  171. package/dist/step-slot-grammar.js.map +1 -1
  172. package/dist/step-source-iteration.d.ts +1 -1
  173. package/dist/step-source-iteration.d.ts.map +1 -1
  174. package/dist/step-source-iteration.js +27 -3
  175. package/dist/step-source-iteration.js.map +1 -1
  176. package/dist/step-type-owned-quantities.d.ts +34 -0
  177. package/dist/step-type-owned-quantities.d.ts.map +1 -0
  178. package/dist/step-type-owned-quantities.js +222 -0
  179. package/dist/step-type-owned-quantities.js.map +1 -0
  180. package/dist/step-vertical-datum-normalization.d.ts +17 -0
  181. package/dist/step-vertical-datum-normalization.d.ts.map +1 -0
  182. package/dist/step-vertical-datum-normalization.js +52 -0
  183. package/dist/step-vertical-datum-normalization.js.map +1 -0
  184. package/dist/unit-normalize.d.ts.map +1 -1
  185. package/dist/unit-normalize.js +13 -20
  186. package/dist/unit-normalize.js.map +1 -1
  187. package/dist/zero-content.d.ts +21 -3
  188. package/dist/zero-content.d.ts.map +1 -1
  189. package/dist/zero-content.js +35 -3
  190. package/dist/zero-content.js.map +1 -1
  191. package/package.json +11 -11
@@ -0,0 +1,9 @@
1
+ import type { IfcDataStore } from '@ifc-lite/parser';
2
+ import type { MutablePropertyView } from '@ifc-lite/mutations';
3
+ export type RemeshCause = 'shape' | 'created' | 'hostsChanged';
4
+ /**
5
+ * The live model-local express ids to re-mesh for an edit of `expressIds`.
6
+ * Always includes the live targets themselves.
7
+ */
8
+ export declare function expandAffectedSet(store: IfcDataStore, view: MutablePropertyView | null, expressIds: Iterable<number>, cause: RemeshCause): Set<number>;
9
+ //# sourceMappingURL=affected-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"affected-set.d.ts","sourceRoot":"","sources":["../src/affected-set.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;AAe/D;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAChC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,WAAW,GACjB,GAAG,CAAC,MAAM,CAAC,CAuBb"}
@@ -0,0 +1,72 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Which elements an edit forces the mesher to rebuild (#6232 WP1).
6
+ *
7
+ * Openings and fillings are placed RELATIVE to their host, and an opening's
8
+ * void is cut out of its host's mesh, so an element's mesh is not a function
9
+ * of its own record alone:
10
+ *
11
+ * - a changed OPENING re-cuts its host;
12
+ * - a host whose placement or body changed moves its openings and the
13
+ * fillings in them ('hostsChanged', and 'created', where the host is new);
14
+ * - a 'shape' edit (the element's own body, same placement) re-cuts nothing
15
+ * but itself and, for an opening, its host (its fillings are re-meshed
16
+ * too: the relationships found do not say which side is which, and one
17
+ * extra element costs less than a second lookup).
18
+ *
19
+ * The inverse relationships are the ones `remeshContextRoots` already finds,
20
+ * including relationships the session created, so this reads them from there
21
+ * rather than walking the graph a second way. Tombstoned ids are dropped.
22
+ */
23
+ import { IfcTypeEnum, IfcTypeEnumFromString } from '@ifc-lite/data';
24
+ import { gridPlacementDependents, remeshContextRoots } from './entity-subgraph.js';
25
+ /** The effective IFC class (UPPERCASE), retypes and overlay creations included. */
26
+ function typeOf(store, view, id) {
27
+ const created = view?.getNewEntity(id);
28
+ const type = view?.getEntityTypeMutation(id)?.newType ?? created?.type ?? store.entities.getTypeName(id);
29
+ return type ? type.toUpperCase() : undefined;
30
+ }
31
+ function isLive(store, view, id) {
32
+ if (view?.getTombstones().has(id))
33
+ return false;
34
+ // @raw-entity-enumeration-ok point lookup of one id; tombstones and overlay creations are answered from the view on the lines around it
35
+ return Boolean(view?.getNewEntity(id)) || store.entityIndex.byId.has(id);
36
+ }
37
+ /**
38
+ * The live model-local express ids to re-mesh for an edit of `expressIds`.
39
+ * Always includes the live targets themselves.
40
+ */
41
+ export function expandAffectedSet(store, view, expressIds, cause) {
42
+ const targets = new Set();
43
+ for (const id of expressIds)
44
+ if (isLive(store, view, id))
45
+ targets.add(id);
46
+ if (targets.size === 0)
47
+ return targets;
48
+ const out = new Set(targets);
49
+ if ([...targets].some((id) => typeOf(store, view, id) === 'IFCGRID')) {
50
+ for (const id of gridPlacementDependents(store, view, targets))
51
+ out.add(id);
52
+ }
53
+ const context = remeshContextRoots(store, view, targets);
54
+ const openingTargets = [...targets].some((id) => IfcTypeEnumFromString(typeOf(store, view, id) ?? '') === IfcTypeEnum.IfcOpeningElement);
55
+ for (const id of context) {
56
+ const type = typeOf(store, view, id);
57
+ if (!type || type === 'IFCPROJECT' || type.startsWith('IFCREL'))
58
+ continue;
59
+ if (cause !== 'shape') {
60
+ out.add(id);
61
+ continue;
62
+ }
63
+ // A reshaped opening re-cuts its host; nothing else moves.
64
+ if (openingTargets && IfcTypeEnumFromString(type) !== IfcTypeEnum.IfcOpeningElement)
65
+ out.add(id);
66
+ }
67
+ for (const id of out)
68
+ if (!isLive(store, view, id))
69
+ out.delete(id);
70
+ return out;
71
+ }
72
+ //# sourceMappingURL=affected-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"affected-set.js","sourceRoot":"","sources":["../src/affected-set.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,3 @@
1
- /**
2
- * Root-placement zeroing and georeferencing/address blanking for the
3
- * "anonymized isolated export" feature (#2934, plan section A4).
4
- *
5
- * Coordinates are the strongest identifying signal a reproduction carries —
6
- * an absolute site position pins the model to a real address — but the
7
- * ROTATION in the placement chain and any non-orthogonal cuts are exactly
8
- * what a parsing bug reproduction needs to keep. So this module zeroes only
9
- * the TRANSLATION of each root `IfcLocalPlacement` (`PlacementRelTo = $`),
10
- * leaving `Axis`/`RefDirection` and every child placement untouched.
11
- *
12
- * **Clone, never rewrite.** `IfcCartesianPoint` and `IfcAxis2Placement3D` /
13
- * `2D` records are routinely SHARED — two storeys placed at the same origin,
14
- * or a template point reused across a model — so rewriting one in place would
15
- * silently move every other placement that happens to reference the same
16
- * point. Each zeroed root gets its own freshly-cloned point and axis via
17
- * `StoreEditor.addEntity`, and only the root's `RelativePlacement` slot is
18
- * repointed (`setPositionalAttribute`) to the clone. Nothing else in the
19
- * model ever sees the edit.
20
- *
21
- * The same clone-and-repoint mechanism handles
22
- * `IfcGeometricRepresentationContext.WorldCoordinateSystem` (a second, less
23
- * obvious place a survey offset can live — #2934's plan A4 step 4) and is
24
- * shared between both call sites as {@link zeroAxisPlacementSlot}.
25
- *
26
- * `IfcGridPlacement` / `IfcLinearPlacement` roots have no `RelativePlacement`
27
- * → `IfcCartesianPoint` chain to clone against, so they are left untouched
28
- * and reported as a warning rather than silently ignored or corrupted.
29
- *
30
- * Reads go through {@link readEntityArgs} / {@link attrIndex}
31
- * (`subset-entity-reader.ts`) so a positional slot is always resolved BY
32
- * EXPRESS NAME against the schema registry, never a hand-counted index that
33
- * would silently drift the day an entity's attribute layout changes.
34
- */
35
1
  import type { IfcSourceBytes } from '@ifc-lite/parser';
36
2
  import type { MutablePropertyView, StoreEditor } from '@ifc-lite/mutations';
37
3
  import type { EffectiveEntityIndex } from './effective-index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"anonymize-placement.d.ts","sourceRoot":"","sources":["../src/anonymize-placement.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAM7D,+DAA+D;AAC/D,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAC9C,gBAAgB,EAChB,mBAAmB,GAAG,sBAAsB,CAC7C,CAAC;AAEF;2EAC2E;AAC3E,MAAM,WAAW,4BAA4B;IAC3C;6CACyC;IACzC,gBAAgB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACjE;;;iDAG6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,EAC1C,KAAK,EAAE,oBAAoB,EAC3B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,mBAAmB,EACzB,IAAI,CAAC,EAAE,6BAA6B,GACnC,4BAA4B,CAc9B"}
1
+ {"version":3,"file":"anonymize-placement.d.ts","sourceRoot":"","sources":["../src/anonymize-placement.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAM7D,+DAA+D;AAC/D,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAC9C,gBAAgB,EAChB,mBAAmB,GAAG,sBAAsB,CAC7C,CAAC;AAEF;2EAC2E;AAC3E,MAAM,WAAW,4BAA4B;IAC3C;6CACyC;IACzC,gBAAgB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACjE;;;iDAG6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,EAC1C,KAAK,EAAE,oBAAoB,EAC3B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,mBAAmB,EACzB,IAAI,CAAC,EAAE,6BAA6B,GACnC,4BAA4B,CAc9B"}
@@ -1,6 +1,41 @@
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
+ /**
5
+ * Root-placement zeroing and georeferencing/address blanking for the
6
+ * "anonymized isolated export" feature (#2934, plan section A4).
7
+ *
8
+ * Coordinates are the strongest identifying signal a reproduction carries —
9
+ * an absolute site position pins the model to a real address — but the
10
+ * ROTATION in the placement chain and any non-orthogonal cuts are exactly
11
+ * what a parsing bug reproduction needs to keep. So this module zeroes only
12
+ * the TRANSLATION of each root `IfcLocalPlacement` (`PlacementRelTo = $`),
13
+ * leaving `Axis`/`RefDirection` and every child placement untouched.
14
+ *
15
+ * **Clone, never rewrite.** `IfcCartesianPoint` and `IfcAxis2Placement3D` /
16
+ * `2D` records are routinely SHARED — two storeys placed at the same origin,
17
+ * or a template point reused across a model — so rewriting one in place would
18
+ * silently move every other placement that happens to reference the same
19
+ * point. Each zeroed root gets its own freshly-cloned point and axis via
20
+ * `StoreEditor.addEntity`, and only the root's `RelativePlacement` slot is
21
+ * repointed (`setPositionalAttribute`) to the clone. Nothing else in the
22
+ * model ever sees the edit.
23
+ *
24
+ * The same clone-and-repoint mechanism handles
25
+ * `IfcGeometricRepresentationContext.WorldCoordinateSystem` (a second, less
26
+ * obvious place a survey offset can live — #2934's plan A4 step 4) and is
27
+ * shared between both call sites as {@link zeroAxisPlacementSlot}.
28
+ *
29
+ * `IfcGridPlacement` / `IfcLinearPlacement` roots have no `RelativePlacement`
30
+ * → `IfcCartesianPoint` chain to clone against, so they are left untouched
31
+ * and reported as a warning rather than silently ignored or corrupted.
32
+ *
33
+ * Reads go through {@link readEntityArgs} / {@link attrIndex}
34
+ * (`subset-entity-reader.ts`) so a positional slot is always resolved BY
35
+ * EXPRESS NAME against the schema registry, never a hand-counted index that
36
+ * would silently drift the day an entity's attribute layout changes.
37
+ */
38
+ import { walkPlacementChain } from '@ifc-lite/data';
4
39
  import { attrIndex, readEntityArgs } from './subset-entity-reader.js';
5
40
  import { splitTopLevelListItems } from './step-argument-parser.js';
6
41
  import { entityRef, stepReal } from './step-serialization.js';
@@ -84,40 +119,36 @@ function zeroRootPlacements(store, index, includedIds, editor, warnings, zeroedP
84
119
  * `IfcLocalPlacement` with `PlacementRelTo = $` (a zeroable root) or a
85
120
  * non-`IfcLocalPlacement` record the chain cannot continue past (an
86
121
  * `IfcGridPlacement` / `IfcLinearPlacement`, reported by the caller). `null`
87
- * when the chain could not be safely walked at all — a cycle, a hop past the
88
- * 256-hop cap, or a link that does not resolve to a readable record — each
89
- * case appending its own warning before returning.
122
+ * when the chain could not be safely walked at all — a cycle or a link that
123
+ * does not resolve to a readable record — each case appending its own warning
124
+ * before returning. The walk is the shared `walkPlacementChain` (#7791): a
125
+ * visited set and no hop cap, so a long legal chain is followed in full.
90
126
  */
91
127
  function findRootPlacement(store, index, startPlacementId, warnings) {
92
- const visited = new Set();
93
- let currentId = startPlacementId;
94
- let hops = 0;
95
- for (;;) {
96
- if (visited.has(currentId)) {
97
- warnings.push(`Placement chain from #${startPlacementId} revisits #${currentId} (PlacementRelTo cycle); left untouched.`);
98
- return null;
99
- }
100
- visited.add(currentId);
101
- hops++;
102
- if (hops > 256) {
103
- warnings.push(`Placement chain from #${startPlacementId} exceeds 256 hops; left untouched rather than followed indefinitely.`);
104
- return null;
105
- }
106
- const rec = readEntityArgs(store, index, currentId);
128
+ const types = new Map();
129
+ let unreadableId = null;
130
+ const walked = walkPlacementChain(startPlacementId, (id) => {
131
+ const rec = readEntityArgs(store, index, id);
107
132
  if (!rec) {
108
- warnings.push(`Placement #${currentId} in the chain from #${startPlacementId} could not be read; left untouched.`);
133
+ unreadableId = id;
109
134
  return null;
110
135
  }
111
- if (rec.type !== 'IFCLOCALPLACEMENT') {
112
- return { rootId: currentId, rootType: rec.type };
113
- }
136
+ types.set(id, rec.type);
137
+ if (rec.type !== 'IFCLOCALPLACEMENT')
138
+ return null;
114
139
  const relToIdx = attrIndex(rec.type, 'PlacementRelTo'); // `rec.type` is always IFCLOCALPLACEMENT here — order verified identical across all 3 schemas (#3309)
115
- const parentId = relToIdx >= 0 && relToIdx < rec.args.length ? parseRef(rec.args[relToIdx]) : null;
116
- if (parentId === null) {
117
- return { rootId: currentId, rootType: rec.type };
118
- }
119
- currentId = parentId;
140
+ return relToIdx >= 0 && relToIdx < rec.args.length ? parseRef(rec.args[relToIdx]) : null;
141
+ });
142
+ if (walked.end === 'cycle') {
143
+ warnings.push(`Placement chain from #${startPlacementId} revisits #${walked.revisited} (PlacementRelTo cycle); left untouched.`);
144
+ return null;
145
+ }
146
+ if (unreadableId !== null) {
147
+ warnings.push(`Placement #${unreadableId} in the chain from #${startPlacementId} could not be read; left untouched.`);
148
+ return null;
120
149
  }
150
+ const rootId = walked.ids[walked.ids.length - 1];
151
+ return { rootId, rootType: types.get(rootId) };
121
152
  }
122
153
  // ---------------------------------------------------------------------------
123
154
  // IfcGeometricRepresentationContext.WorldCoordinateSystem
@@ -1 +1 @@
1
- {"version":3,"file":"anonymize-placement.js","sourceRoot":"","sources":["../src/anonymize-placement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anonymize-placement.js","sourceRoot":"","sources":["../src/anonymize-placement.ts"],"names":[],"mappings":"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"}
@@ -130,4 +130,11 @@ export declare function declaredNominalValueType(value: unknown, type: PropertyV
130
130
  * from the property's shape alone.
131
131
  */
132
132
  export declare function serializeNominalValue(value: unknown, type: PropertyValueType, dataType: string | undefined): string;
133
+ /** Validate an explicitly authored IfcValue declaration before a mutation can be written.
134
+ * Unlike regeneration's loss-tolerant fallback, an authored declaration must be exact and representable.
135
+ */
136
+ export declare function validatePropertyDataType(value: string | number | boolean | null, dataType: string): {
137
+ valueType: PropertyValueType;
138
+ dataType: string;
139
+ };
133
140
  //# sourceMappingURL=declared-property-type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"declared-property-type.d.ts","sourceRoot":"","sources":["../src/declared-property-type.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6GG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA0HnD;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAAoC,CAAC;AAqBhG;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,GAAG,IAAI,CAqBf;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAIR"}
1
+ {"version":3,"file":"declared-property-type.d.ts","sourceRoot":"","sources":["../src/declared-property-type.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6GG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA2HnD;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAAoC,CAAC;AAqBhG;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,GAAG,IAAI,CAqBf;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgBtJ"}
@@ -114,7 +114,7 @@
114
114
  import { PropertyValueType } from '@ifc-lite/data';
115
115
  import { SCHEMA_REGISTRY } from '@ifc-lite/parser';
116
116
  import { getSelectDefinedLeaves } from './select-qualification.js';
117
- import { serializeTypedMarker } from './step-serialization.js';
117
+ import { serializeTypedMarker, toStepInteger } from './step-serialization.js';
118
118
  import { serializePropertyValue } from './property-value-serialization.js';
119
119
  /** The SELECT `IfcPropertySingleValue.NominalValue` is declared as. */
120
120
  const NOMINAL_VALUE_SELECT = 'IfcValue';
@@ -186,7 +186,8 @@ function valueFitsBase(value, base) {
186
186
  case 'NUMBER':
187
187
  return typeof value === 'number' && Number.isFinite(value);
188
188
  case 'INTEGER':
189
- return typeof value === 'number' && Number.isInteger(value);
189
+ // Below 1e21: `String(1e21)` is `1e+21`, no STEP INTEGER (#7679).
190
+ return typeof value === 'number' && Number.isInteger(value) && toStepInteger(value) !== null;
190
191
  case 'BOOLEAN':
191
192
  case 'LOGICAL':
192
193
  // Not a truthiness test: `serializeTypedMarker` reads `'.F.'` and
@@ -298,4 +299,30 @@ export function serializeNominalValue(value, type, dataType) {
298
299
  return serializePropertyValue(value, type);
299
300
  return serializeTypedMarker(declared, value);
300
301
  }
302
+ /** Validate an explicitly authored IfcValue declaration before a mutation can be written.
303
+ * Unlike regeneration's loss-tolerant fallback, an authored declaration must be exact and representable.
304
+ */
305
+ export function validatePropertyDataType(value, dataType) {
306
+ const leaf = lookupNominalValueLeaf(dataType.toUpperCase());
307
+ if (!leaf)
308
+ throw new Error('Property dataType must name a defined member of IfcValue');
309
+ const [name, base] = leaf;
310
+ if (!['STRING', 'REAL', 'NUMBER', 'INTEGER', 'BOOLEAN', 'LOGICAL'].includes(base))
311
+ throw new Error('Property declaration requires a scalar IfcValue member');
312
+ if (value !== null && !valueFitsBase(value, base))
313
+ throw new Error(`Property value does not fit ${name}`);
314
+ const constraint = CONSTRAINED_MEMBERS.get(name);
315
+ if (value !== null && constraint && !constraint(value))
316
+ throw new Error(`Property value violates the domain of ${name}`);
317
+ const width = SCHEMA_REGISTRY.types[name]?.match(/^STRING\((\d+)\)/i);
318
+ if (width && typeof value === 'string') {
319
+ let count = 0;
320
+ for (const _character of value)
321
+ if (++count > Number(width[1]))
322
+ throw new Error(`Property value exceeds the string width of ${name}`);
323
+ }
324
+ const valueType = base === 'STRING' ? PropertyValueType.String : base === 'INTEGER' ? PropertyValueType.Integer
325
+ : base === 'BOOLEAN' ? PropertyValueType.Boolean : base === 'LOGICAL' ? PropertyValueType.Logical : PropertyValueType.Real;
326
+ return { valueType, dataType: name };
327
+ }
301
328
  //# sourceMappingURL=declared-property-type.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"declared-property-type.js","sourceRoot":"","sources":["../src/declared-property-type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"declared-property-type.js","sourceRoot":"","sources":["../src/declared-property-type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type IfcDataStore } from '@ifc-lite/parser';
2
+ import { type MutablePropertyView } from '@ifc-lite/mutations';
3
+ /** In-place writes may only affect the requested products. A shared geometry
4
+ * or placement leaf is refused before writing rather than moving/resizing a
5
+ * second occurrence. Reverse walks stop at products and are iterative. */
6
+ export declare function editOwnershipRefusal(store: IfcDataStore, view: MutablePropertyView, writtenIds: readonly number[], allowedProducts: ReadonlySet<number>): string | null;
7
+ //# sourceMappingURL=edit-ownership.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-ownership.d.ts","sourceRoot":"","sources":["../src/edit-ownership.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAgC/D;;0EAE0E;AAC1E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GAClH,MAAM,GAAG,IAAI,CA6Cf"}
@@ -0,0 +1,95 @@
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 { getInheritanceChainAcrossSchemas } from '@ifc-lite/parser';
5
+ import { collectRefsInByteRange } from './reference-collector.js';
6
+ import { getCompleteEntityIndex } from './entity-iteration.js';
7
+ import { effectiveCreatedRecord, effectiveSourceRecord } from './effective-source-record.js';
8
+ /** The parsed source/index are immutable. Build their reverse references once
9
+ * per loaded model; only the live overlay is rescanned for each edit. */
10
+ const sourceReferences = new WeakMap();
11
+ function sourceInverse(store) {
12
+ const cached = sourceReferences.get(store);
13
+ // @raw-entity-enumeration-ok identity comparison only; enumeration below uses the complete index
14
+ if (cached?.source === store.source && cached.primary === store.entityIndex.byId
15
+ && cached.deferred === store.deferredEntityIndex)
16
+ return cached.inverse;
17
+ const inverse = new Map();
18
+ for (const [id, record] of getCompleteEntityIndex(store)) {
19
+ for (const ref of new Set(collectRefsInByteRange(store.source, record.byteOffset, record.byteLength))) {
20
+ if (ref === id)
21
+ continue;
22
+ const parents = inverse.get(ref) ?? [];
23
+ parents.push(id);
24
+ inverse.set(ref, parents);
25
+ }
26
+ }
27
+ // @raw-entity-enumeration-ok retain immutable index identity only for inverse-cache invalidation
28
+ sourceReferences.set(store, { source: store.source, primary: store.entityIndex.byId, deferred: store.deferredEntityIndex, inverse });
29
+ return inverse;
30
+ }
31
+ /** In-place writes may only affect the requested products. A shared geometry
32
+ * or placement leaf is refused before writing rather than moving/resizing a
33
+ * second occurrence. Reverse walks stop at products and are iterative. */
34
+ export function editOwnershipRefusal(store, view, writtenIds, allowedProducts) {
35
+ if (writtenIds.length === 0)
36
+ return null;
37
+ const baseline = sourceInverse(store), inverse = new Map();
38
+ const changed = new Set(view.getEffectiveChanges().map(change => change.entityId));
39
+ for (const entity of view.getNewEntities())
40
+ changed.add(entity.expressId);
41
+ const encoder = new TextEncoder(), decoder = new TextDecoder();
42
+ for (const expressId of changed) {
43
+ if (view.getTombstones().has(expressId))
44
+ continue;
45
+ const created = effectiveCreatedRecord(view, expressId, store.schemaVersion);
46
+ // @raw-entity-enumeration-ok point lookup of an already changed record's source bytes; effectiveSourceRecord applies the overlay
47
+ const source = created ? undefined : store.entityIndex.byId.get(expressId);
48
+ let refs;
49
+ if (created) {
50
+ const bytes = encoder.encode(created.text);
51
+ refs = collectRefsInByteRange(bytes, 0, bytes.length);
52
+ }
53
+ else if (source) {
54
+ if (view.getPositionalMutationsForEntity(expressId)?.size || view.getAttributeMutationsForEntity(expressId).length || view.getEntityTypeMutation(expressId)) {
55
+ const text = decoder.decode(store.source.slice(source.byteOffset, source.byteOffset + source.byteLength));
56
+ const effective = effectiveSourceRecord(view, expressId, text, source.type, store.schemaVersion);
57
+ const bytes = encoder.encode(effective.text);
58
+ refs = collectRefsInByteRange(bytes, 0, bytes.length);
59
+ }
60
+ else
61
+ refs = collectRefsInByteRange(store.source, source.byteOffset, source.byteLength);
62
+ }
63
+ else
64
+ continue;
65
+ for (const ref of new Set(refs)) {
66
+ if (ref === expressId)
67
+ continue;
68
+ const parents = inverse.get(ref) ?? [];
69
+ parents.push(expressId);
70
+ inverse.set(ref, parents);
71
+ }
72
+ }
73
+ const queue = [...writtenIds], visited = new Set();
74
+ while (queue.length) {
75
+ const id = queue.pop();
76
+ if (visited.has(id))
77
+ continue;
78
+ visited.add(id);
79
+ if (view.getTombstones().has(id))
80
+ continue;
81
+ // @raw-entity-enumeration-ok point class fallback after tombstone, retype and created-record handling
82
+ const type = view.getEntityTypeMutation(id)?.newType ?? view.getNewEntity(id)?.type ?? store.entityIndex.byId.get(id)?.type;
83
+ if (type && getInheritanceChainAcrossSchemas(type).includes('IfcProduct')) {
84
+ if (!allowedProducts.has(id))
85
+ return `The edit shares placement or geometry with #${id}; shared occurrences cannot be edited in place`;
86
+ continue;
87
+ }
88
+ for (const parent of baseline.get(id) ?? [])
89
+ if (!changed.has(parent))
90
+ queue.push(parent);
91
+ queue.push(...(inverse.get(id) ?? []));
92
+ }
93
+ return null;
94
+ }
95
+ //# sourceMappingURL=edit-ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-ownership.js","sourceRoot":"","sources":["../src/edit-ownership.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"effective-index.d.ts","sourceRoot":"","sources":["../src/effective-index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAkC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;qEACiE;IACjE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IACtD,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACtC;mEAC+D;IAC/D,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B;mDAC+C;IAC/C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAClD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,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;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,iBAAiB,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC;;;;;;;;;;;;;OAaG;IACH,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxE;oDACgD;IAChD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,YAAY,EACvB,YAAY,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EACpD,cAAc,EAAE,OAAO,GACtB,oBAAoB,CAkBtB;AAySD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAQ1F"}
1
+ {"version":3,"file":"effective-index.d.ts","sourceRoot":"","sources":["../src/effective-index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAkC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;qEACiE;IACjE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IACtD,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACtC;mEAC+D;IAC/D,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B;mDAC+C;IAC/C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAClD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,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;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,iBAAiB,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC;;;;;;;;;;;;;OAaG;IACH,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxE;oDACgD;IAChD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,YAAY,EACvB,YAAY,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EACpD,cAAc,EAAE,OAAO,GACtB,oBAAoB,CAkBtB;AAuSD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAQ1F"}
@@ -318,10 +318,10 @@ class OverlayIndex {
318
318
  get byType() {
319
319
  if (this.cachedByType)
320
320
  return this.cachedByType;
321
- // Shallow copy: the arrays are SHARED with the store until a key actually
322
- // changes, and every key that changes is replaced with a fresh array. The
323
- // store's own index is never mutated.
321
+ // Arrays stay SHARED with the store until a key changes; a changed key gets ONE fresh
322
+ // array (`owned`) that later appends grow: the store is never mutated, N appends are O(N).
324
323
  const out = new Map(this.sourceByType);
324
+ const owned = new Set();
325
325
  const removeByType = new Map();
326
326
  const markRemoved = (id) => {
327
327
  const sourceType = this.base.get(id)?.type.toUpperCase();
@@ -342,12 +342,19 @@ class OverlayIndex {
342
342
  }
343
343
  for (const [type, ids] of removeByType) {
344
344
  const arr = out.get(type);
345
- if (arr)
345
+ if (arr) {
346
346
  out.set(type, arr.filter((id) => !ids.has(id)));
347
+ owned.add(type);
348
+ }
347
349
  }
348
350
  const append = (type, id) => {
349
351
  const arr = out.get(type);
350
- out.set(type, arr ? [...arr, id] : [id]);
352
+ if (arr && owned.has(type))
353
+ arr.push(id);
354
+ else {
355
+ out.set(type, arr ? [...arr, id] : [id]);
356
+ owned.add(type);
357
+ }
351
358
  };
352
359
  for (const id of this.created.keys()) {
353
360
  const type = this.typeOf(id);