@ifc-lite/export 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +34 -0
  2. package/dist/anonymize-export.d.ts +60 -0
  3. package/dist/anonymize-export.d.ts.map +1 -0
  4. package/dist/anonymize-export.js +117 -0
  5. package/dist/anonymize-export.js.map +1 -0
  6. package/dist/anonymize-placement.d.ts +71 -0
  7. package/dist/anonymize-placement.d.ts.map +1 -0
  8. package/dist/anonymize-placement.js +266 -0
  9. package/dist/anonymize-placement.js.map +1 -0
  10. package/dist/anonymize-scrub.d.ts +64 -0
  11. package/dist/anonymize-scrub.d.ts.map +1 -0
  12. package/dist/anonymize-scrub.js +312 -0
  13. package/dist/anonymize-scrub.js.map +1 -0
  14. package/dist/anonymize-types.d.ts +212 -0
  15. package/dist/anonymize-types.d.ts.map +1 -0
  16. package/dist/anonymize-types.js +5 -0
  17. package/dist/anonymize-types.js.map +1 -0
  18. package/dist/entity-type-sets.d.ts +47 -0
  19. package/dist/entity-type-sets.d.ts.map +1 -0
  20. package/dist/entity-type-sets.js +91 -0
  21. package/dist/entity-type-sets.js.map +1 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +5 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/parquet-exporter.d.ts.map +1 -1
  27. package/dist/parquet-exporter.js +10 -10
  28. package/dist/parquet-exporter.js.map +1 -1
  29. package/dist/reference-collector.d.ts +47 -20
  30. package/dist/reference-collector.d.ts.map +1 -1
  31. package/dist/reference-collector.js +88 -89
  32. package/dist/reference-collector.js.map +1 -1
  33. package/dist/related-entities.d.ts +10 -0
  34. package/dist/related-entities.d.ts.map +1 -0
  35. package/dist/related-entities.js +259 -0
  36. package/dist/related-entities.js.map +1 -0
  37. package/dist/step-collection.d.ts.map +1 -1
  38. package/dist/step-collection.js +36 -7
  39. package/dist/step-collection.js.map +1 -1
  40. package/dist/step-export-types.d.ts +27 -0
  41. package/dist/step-export-types.d.ts.map +1 -1
  42. package/dist/step-export-types.js.map +1 -1
  43. package/dist/step-header.d.ts +1 -1
  44. package/dist/step-header.d.ts.map +1 -1
  45. package/dist/step-header.js +2 -2
  46. package/dist/step-header.js.map +1 -1
  47. package/dist/subset-entity-reader.d.ts +103 -0
  48. package/dist/subset-entity-reader.d.ts.map +1 -0
  49. package/dist/subset-entity-reader.js +102 -0
  50. package/dist/subset-entity-reader.js.map +1 -0
  51. package/dist/subset-roots.d.ts +58 -0
  52. package/dist/subset-roots.d.ts.map +1 -0
  53. package/dist/subset-roots.js +103 -0
  54. package/dist/subset-roots.js.map +1 -0
  55. package/package.json +4 -4
@@ -2,6 +2,7 @@
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
4
  import { collectReferencedEntityIds, getVisibleEntityIds, collectStyleEntities } from './reference-collector.js';
5
+ import { getSubsetEntityIds } from './subset-roots.js';
5
6
  import { buildRelDefinesByPropertiesIndex } from './step-property-set-index.js';
6
7
  import { collectPropertyAndQuantitySetMutations } from './step-property-set-collection.js';
7
8
  import { applyGeoreferencingMutations } from './step-georeferencing.js';
@@ -14,14 +15,22 @@ import { applyGeoreferencingMutations } from './step-georeferencing.js';
14
15
  * `options.georefMutations`.
15
16
  */
16
17
  export function collectModifications(pass, options, applyMutations, ctx) {
17
- if (options.visibleOnly && ctx.dataStore.source) {
18
+ if (options.subsetEntityIds && options.visibleOnly) {
19
+ throw new Error('StepExportOptions.subsetEntityIds and visibleOnly are mutually exclusive: '
20
+ + 'each computes its own root set and hiddenProductIds/allowedEntityIds pair, '
21
+ + 'so combining them would make one silently overwrite the other\'s closure.');
22
+ }
23
+ if (options.subsetEntityIds && ctx.dataStore.source) {
24
+ // Anonymized-subset export (#2934): the seed set is caller-supplied
25
+ // rather than derived from viewer visibility, but the CLOSURE mechanics —
26
+ // walk from roots, exclude everything else, collect style entities — are
27
+ // exactly `visibleOnly`'s, so both branches end in `applyExportClosure`.
28
+ const subset = getSubsetEntityIds(pass.effective, options.subsetEntityIds);
29
+ applyExportClosure(pass, ctx, subset.roots, subset.excludedIds);
30
+ }
31
+ else if (options.visibleOnly && ctx.dataStore.source) {
18
32
  const visible = getVisibleEntityIds(ctx.dataStore, options.hiddenEntityIds ?? new Set(), options.isolatedEntityIds ?? null, pass.effective);
19
- pass.hiddenProductIds = visible.hiddenProductIds;
20
- pass.allowedEntityIds = collectReferencedEntityIds(visible.roots, ctx.dataStore.source, pass.effective, visible.hiddenProductIds, pass.isRefExcludedDuringClosureWalk);
21
- // Second pass: collect IFCSTYLEDITEM entities that reference included
22
- // geometry. Styled items reference geometry items but nothing references
23
- // them back, so the forward closure misses them.
24
- collectStyleEntities(pass.allowedEntityIds, ctx.dataStore.source, { byId: pass.effective, byType: pass.effective.byType });
33
+ applyExportClosure(pass, ctx, visible.roots, visible.hiddenProductIds);
25
34
  }
26
35
  // Process mutations if we have a mutation view
27
36
  if (ctx.mutationView && applyMutations) {
@@ -123,4 +132,24 @@ export function collectModifications(pass, options, applyMutations, ctx) {
123
132
  applyGeoreferencingMutations(pass, options.georefMutations, ctx.georefContext(options.deltaOnly === true));
124
133
  }
125
134
  }
135
+ /**
136
+ * The closure tail shared by `visibleOnly` and `subsetEntityIds`: seed
137
+ * `pass.hiddenProductIds` with `excludeIds` (load-bearing BEFORE the walk —
138
+ * `pass.isRefExcludedDuringClosureWalk` reads it, per `step-pass-builder.ts`),
139
+ * walk the forward reference closure from `roots`, then collect the
140
+ * `IFCSTYLEDITEM`/`IFCSTYLEDREPRESENTATION` entities the forward walk cannot
141
+ * reach on its own (nothing references a styled item back).
142
+ *
143
+ * Extracted verbatim from the pre-#2934 `visibleOnly` branch — same three
144
+ * statements, same argument order — so that branch's output is byte-identical
145
+ * to before; the ONLY new caller is `subsetEntityIds`.
146
+ */
147
+ function applyExportClosure(pass, ctx, roots, excludeIds) {
148
+ pass.hiddenProductIds = excludeIds;
149
+ pass.allowedEntityIds = collectReferencedEntityIds(roots, ctx.dataStore.source, pass.effective, excludeIds, pass.isRefExcludedDuringClosureWalk);
150
+ // Second pass: collect IFCSTYLEDITEM entities that reference included
151
+ // geometry. Styled items reference geometry items but nothing references
152
+ // them back, so the forward closure misses them.
153
+ collectStyleEntities(pass.allowedEntityIds, ctx.dataStore.source, { byId: pass.effective, byType: pass.effective.byType });
154
+ }
126
155
  //# sourceMappingURL=step-collection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"step-collection.js","sourceRoot":"","sources":["../src/step-collection.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA6B/D,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACjH,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,sCAAsC,EAAE,MAAM,mCAAmC,CAAC;AAE3F,OAAO,EAAE,4BAA4B,EAAsB,MAAM,0BAA0B,CAAC;AAoB5F;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAgB,EAChB,OAA0B,EAC1B,cAAuB,EACvB,GAAsB;IAEtB,IAAI,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,mBAAmB,CACjC,GAAG,CAAC,SAAS,EACb,OAAO,CAAC,eAAe,IAAI,IAAI,GAAG,EAAE,EACpC,OAAO,CAAC,iBAAiB,IAAI,IAAI,EACjC,IAAI,CAAC,SAAS,CACf,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,0BAA0B,CAChD,OAAO,CAAC,KAAK,EACb,GAAG,CAAC,SAAS,CAAC,MAAM,EACpB,IAAI,CAAC,SAAS,EACd,OAAO,CAAC,gBAAgB,EACxB,IAAI,CAAC,8BAA8B,CACpC,CAAC;QACF,sEAAsE;QACtE,yEAAyE;QACzE,iDAAiD;QACjD,oBAAoB,CAClB,IAAI,CAAC,gBAAgB,EACrB,GAAG,CAAC,SAAS,CAAC,MAAM,EACpB,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CACxD,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,IAAI,GAAG,CAAC,YAAY,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;QACtC,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC;QAE9C,oEAAoE;QACpE,uEAAuE;QACvE,0EAA0E;QAC1E,wEAAwE;QACxE,yEAAyE;QACzE,sEAAsE;QACtE,8CAA8C;QAC9C,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,YAAY,CAAC,6BAA6B,EAAE,EAAE,CAAC;YAC7E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACnB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK;gBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QAED,uEAAuE;QACvE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC3D,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC5D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,gEAAgE;YAChE,qEAAqE;YACrE,mEAAmE;YACnE,qBAAqB;YACrB,IAAI,QAAQ,CAAC,IAAI,KAAK,kBAAkB;gBAAE,SAAS;YAEnD,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBAAE,SAAS;YAEjC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,KAAK,iBAAiB,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAiB;mBACxF,QAAQ,CAAC,IAAI,KAAK,iBAAiB,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAqB,CAAC;YACpF,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC;YAE1E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC;QAED,uEAAuE;QACvE,sEAAsE;QACtE,iEAAiE;QACjE,gEAAgE;QAChE,8DAA8D;QAC9D,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,gCAAgC,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAElH,oEAAoE;QACpE,uEAAuE;QACvE,0EAA0E;QAC1E,uEAAuE;QACvE,2EAA2E;QAC3E,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9E,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,sCAAsC,CACpC,IAAI,EACJ,OAAO,EACP,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,EACjE,GAAG,CAAC,kBAAkB,EAAE,CACzB,CAAC;QAEF,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjD,sEAAsE;YACtE,qEAAqE;YACrE,uEAAuE;YACvE,iCAAiC;YACjC,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAC9C,mEAAmE;YACnE,mEAAmE;YACnE,qCAAqC;YACrC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACpD,oEAAoE;YACpE,oEAAoE;YACpE,kEAAkE;YAClE,sEAAsE;YACtE,sEAAsE;YACtE,kEAAkE;YAClE,4CAA4C;YAC5C,EAAE;YACF,iEAAiE;YACjE,qEAAqE;YACrE,wEAAwE;YACxE,sEAAsE;YACtE,4DAA4D;YAC5D,EAAE;YACF,uEAAuE;YACvE,oEAAoE;YACpE,oEAAoE;YACpE,wEAAwE;YACxE,sEAAsE;YACtE,oCAAoC;YACpC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;gBAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,IAAI,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC9C,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"step-collection.js","sourceRoot":"","sources":["../src/step-collection.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,20 @@ export interface StepExportOptions {
33
33
  author?: string;
34
34
  /** Organization name */
35
35
  organization?: string;
36
+ /**
37
+ * FILE_NAME `authorization` slot override. Omitted = the source header's
38
+ * own authorization token, unchanged (see `buildStepHeader`); there was no
39
+ * caller-facing way to override or blank it before this (#2934, part of the
40
+ * anonymized-export header scrub — an unblanked authorization line would
41
+ * leak whatever the source file's steward wrote there).
42
+ */
43
+ authorization?: string;
44
+ /**
45
+ * FILE_NAME `originating_system` slot override. Omitted = the source
46
+ * header's own value, unchanged. The anonymized export blanks it: a vendor
47
+ * build string like `<tool> 26.0.0 NOR FULL` encodes the licence region.
48
+ */
49
+ originatingSystem?: string;
36
50
  /** Application name (defaults to 'ifc-lite') */
37
51
  application?: string;
38
52
  /** Output filename */
@@ -55,6 +69,19 @@ export interface StepExportOptions {
55
69
  hiddenEntityIds?: Set<number>;
56
70
  /** Isolated entity IDs (local expressIds, null = no isolation active) */
57
71
  isolatedEntityIds?: Set<number> | null;
72
+ /**
73
+ * Export exactly these `IfcRoot`-derived entities plus infrastructure and
74
+ * their forward closure; every other `IfcRoot` entity (and each
75
+ * `IDENTIFYING_TYPES` entity — postal/telecom address, georeferencing) is
76
+ * excluded and stripped from relationship lines by the same dangling-ref
77
+ * protection `visibleOnly` gets (`evaluateOmissionPredicates` +
78
+ * `filterHiddenRefsFromRelationshipLine`, both driven off
79
+ * `pass.allowedEntityIds`/`hiddenProductIds`). Mutually exclusive with
80
+ * `visibleOnly` — `collectModifications` throws if both are set. The seed
81
+ * set for the anonymized-subset export (#2934); see `subset-roots.ts`'s
82
+ * `getSubsetEntityIds`.
83
+ */
84
+ subsetEntityIds?: ReadonlySet<number>;
58
85
  /** Georeferencing mutations to apply (IfcProjectedCRS / IfcMapConversion edits) */
59
86
  georefMutations?: {
60
87
  projectedCRS?: Partial<ProjectedCRS>;
@@ -1 +1 @@
1
- {"version":3,"file":"step-export-types.d.ts","sourceRoot":"","sources":["../src/step-export-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"step-export-types.d.ts","sourceRoot":"","sources":["../src/step-export-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"step-export-types.js","sourceRoot":"","sources":["../src/step-export-types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkK/D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,SAAiB,EAAE,IAAY,EAAU,EAAE,CACrF,iBAAiB,SAAS,KAAK,IAAI,0SAA0S,CAAC"}
1
+ {"version":3,"file":"step-export-types.js","sourceRoot":"","sources":["../src/step-export-types.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA8L/D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,SAAiB,EAAE,IAAY,EAAU,EAAE,CACrF,iBAAiB,SAAS,KAAK,IAAI,0SAA0S,CAAC"}
@@ -42,7 +42,7 @@ import type { ExportPass, StepExportOptions, StepExportResult } from './step-exp
42
42
  * field — to spell out a value this function never consults. Spelled-out
43
43
  * values are how two implementations' defaults drift apart unnoticed.
44
44
  */
45
- export type StepHeaderOptions = Pick<StepExportOptions, 'description' | 'author' | 'organization' | 'application' | 'filename' | 'timeStamp'>;
45
+ export type StepHeaderOptions = Pick<StepExportOptions, 'description' | 'author' | 'organization' | 'authorization' | 'originatingSystem' | 'application' | 'filename' | 'timeStamp'>;
46
46
  export declare function buildStepHeader(options: StepHeaderOptions, sourceHeader: IfcSourceHeader | undefined, schemaToken: string, modifications: number): string;
47
47
  /**
48
48
  * Settle the delta ledger, build the header against the settled count, and
@@ -1 +1 @@
1
- {"version":3,"file":"step-header.d.ts","sourceRoot":"","sources":["../src/step-header.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1F;;;;;;GAMG;AACH;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,iBAAiB,EACjB,aAAa,GAAG,QAAQ,GAAG,cAAc,GAAG,aAAa,GAAG,UAAU,GAAG,WAAW,CACrF,CAAC;AAEF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,YAAY,EAAE,eAAe,GAAG,SAAS,EACzC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,MAAM,CA+BR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAwBvE"}
1
+ {"version":3,"file":"step-header.d.ts","sourceRoot":"","sources":["../src/step-header.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1F;;;;;;GAMG;AACH;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,iBAAiB,EACf,aAAa,GAAG,QAAQ,GAAG,cAAc,GAAG,eAAe,GAAG,mBAAmB,GACjF,aAAa,GAAG,UAAU,GAAG,WAAW,CAC3C,CAAC;AAEF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,iBAAiB,EAC1B,YAAY,EAAE,eAAe,GAAG,SAAS,EACzC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,MAAM,CA+BR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAwBvE"}
@@ -25,8 +25,8 @@ export function buildStepHeader(options, sourceHeader, schemaToken, modification
25
25
  // preprocessor_version = the tool that WROTE this file (ifc-lite);
26
26
  // originating_system keeps the source authoring tool so it isn't erased.
27
27
  preprocessorVersion: options.application ?? 'ifc-lite',
28
- originatingSystem: sourceHeader?.originatingSystem,
29
- authorization: sourceHeader?.authorization,
28
+ originatingSystem: options.originatingSystem ?? sourceHeader?.originatingSystem,
29
+ authorization: options.authorization ?? sourceHeader?.authorization,
30
30
  application: options.application ?? 'ifc-lite',
31
31
  filename: options.filename ?? 'export.ifc',
32
32
  timeStamp: options.timeStamp,
@@ -1 +1 @@
1
- {"version":3,"file":"step-header.js","sourceRoot":"","sources":["../src/step-header.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA8B/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAwB5D,MAAM,UAAU,eAAe,CAC7B,OAA0B,EAC1B,YAAyC,EACzC,WAAmB,EACnB,aAAqB;IAErB,yEAAyE;IACzE,sCAAsC;IACtC,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,KAAK,SAAS;QAC/B,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QACvB,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC;YAC/B,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACnC,wEAAwE;IACxE,+DAA+D;IAC/D,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,WAAW,CAAC,IAAI,CACd,4BAA4B,aAAa,gBAAgB,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAC1F,CAAC;IACJ,CAAC;IACD,OAAO,cAAc,CAAC;QACpB,MAAM,EAAE,WAAW;QACnB,WAAW;QACX,mBAAmB,EAAE,YAAY,EAAE,mBAAmB;QACtD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,YAAY,EAAE,MAAM;QAC9C,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE,YAAY;QAChE,mEAAmE;QACnE,yEAAyE;QACzE,mBAAmB,EAAE,OAAO,CAAC,WAAW,IAAI,UAAU;QACtD,iBAAiB,EAAE,YAAY,EAAE,iBAAiB;QAClD,aAAa,EAAE,YAAY,EAAE,aAAa;QAC1C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,UAAU;QAC9C,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,YAAY;QAC1C,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,yEAAyE;IACzE,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,6CAA6C;IAC7C,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IACrF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAErC,4EAA4E;IAC5E,2EAA2E;IAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEzD,OAAO;QACL,OAAO;QACP,KAAK,EAAE;YACL,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB;YACnB,QAAQ,EAAE,OAAO,CAAC,UAAU;YAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"step-header.js","sourceRoot":"","sources":["../src/step-header.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA8B/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAyB5D,MAAM,UAAU,eAAe,CAC7B,OAA0B,EAC1B,YAAyC,EACzC,WAAmB,EACnB,aAAqB;IAErB,yEAAyE;IACzE,sCAAsC;IACtC,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,KAAK,SAAS;QAC/B,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QACvB,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC;YAC/B,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;IACnC,wEAAwE;IACxE,+DAA+D;IAC/D,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,WAAW,CAAC,IAAI,CACd,4BAA4B,aAAa,gBAAgB,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAC1F,CAAC;IACJ,CAAC;IACD,OAAO,cAAc,CAAC;QACpB,MAAM,EAAE,WAAW;QACnB,WAAW;QACX,mBAAmB,EAAE,YAAY,EAAE,mBAAmB;QACtD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,YAAY,EAAE,MAAM;QAC9C,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE,YAAY;QAChE,mEAAmE;QACnE,yEAAyE;QACzE,mBAAmB,EAAE,OAAO,CAAC,WAAW,IAAI,UAAU;QACtD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,YAAY,EAAE,iBAAiB;QAC/E,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,YAAY,EAAE,aAAa;QACnE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,UAAU;QAC9C,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,YAAY;QAC1C,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,yEAAyE;IACzE,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,6CAA6C;IAC7C,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IACrF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAErC,4EAA4E;IAC5E,2EAA2E;IAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEzD,OAAO;QACL,OAAO;QACP,KAAK,EAAE;YACL,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB;YACnB,QAAQ,EAAE,OAAO,CAAC,UAAU;YAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Read one entity's parsed STEP arguments and resolve a named attribute to
3
+ * its positional slot — the two primitives `anonymize-placement.ts` and
4
+ * `anonymize-scrub.ts` (#2934) need to walk a placement chain and locate a
5
+ * `Name`/`LongName`/`GlobalId` slot by EXPRESS name rather than a hardcoded
6
+ * index that would silently drift from the schema.
7
+ *
8
+ * Deliberately thin: this module owns none of the parsing rules itself. It
9
+ * composes `decodeRange` (`source-ref-bounds.ts`, the same readability gate
10
+ * every other byte-range read in this package uses — #2491) with
11
+ * `splitTopLevelArgs` (`step-argument-parser.ts`, the same quote/paren-aware
12
+ * splitter `filterHiddenRefsFromRelationshipLine` uses) so a second,
13
+ * independent STEP-line parser cannot disagree with the ones the rest of the
14
+ * exporter already relies on.
15
+ */
16
+ import type { IfcSourceBytes } from '@ifc-lite/parser';
17
+ /** One entity's parsed STEP record: its type token and top-level arguments,
18
+ * in declaration order (still raw STEP tokens — `#N`, `'text'`, `$`, `.T.`,
19
+ * a nested `(...)` list — not decoded values). */
20
+ export interface SubsetEntityArgs {
21
+ /** UPPERCASE STEP type token, e.g. `IFCLOCALPLACEMENT`. */
22
+ readonly type: string;
23
+ readonly args: readonly string[];
24
+ }
25
+ /** The slice of an entity index this module reads: a byte-range lookup, same
26
+ * shape `collectReferencedEntityIds` and `collectStyleEntities` already take. */
27
+ export interface EntityByteRangeIndex {
28
+ get(id: number): {
29
+ byteOffset: number;
30
+ byteLength: number;
31
+ type?: string;
32
+ } | undefined;
33
+ }
34
+ /**
35
+ * Read entity `id`'s STEP record out of `store`'s source and split it into
36
+ * its type token and top-level argument list. Returns `null` when the id has
37
+ * no entry in `index`, or when `index`'s byte range cannot actually be read
38
+ * out of `store.source` (`createSourceRefReader` — the same gate
39
+ * `step-pass-builder.ts`'s `isReadableSourceRef` applies), or when the bytes
40
+ * at that range do not parse as a single `#N=TYPE(...);` record.
41
+ *
42
+ * Only reads SOURCE-backed records. An overlay-created entity (no bytes to
43
+ * decode) is out of scope for this module: `anonymize-placement.ts` and
44
+ * `anonymize-scrub.ts` only ever walk/mutate the entities a freshly-parsed
45
+ * source model contains, never ones the private `MutablePropertyView` they
46
+ * build has itself just created.
47
+ */
48
+ export declare function readEntityArgs(store: {
49
+ readonly source: IfcSourceBytes;
50
+ }, index: EntityByteRangeIndex, id: number): SubsetEntityArgs | null;
51
+ /**
52
+ * A STEP source schema `attrIndex` can resolve slots against DIRECTLY, one
53
+ * per bundled EXPRESS table (`@ifc-lite/data`'s `ENTITIES_IFC2X3` /
54
+ * `ENTITIES_IFC4` / `ENTITIES_IFC4X3`). `IFC5` (ifcx — JSON-native, no
55
+ * positional STEP records at all) never reaches this module, so it has no
56
+ * table and is deliberately not a member.
57
+ */
58
+ export type SourceStepSchema = 'IFC2X3' | 'IFC4' | 'IFC4X3';
59
+ /**
60
+ * Narrow an `IfcDataStore.schemaVersion` to a {@link SourceStepSchema}
61
+ * `attrIndex` can resolve against, or `undefined` for anything that isn't
62
+ * one of the three bundled STEP schemas (`IFC5`, or an absent/unrecognized
63
+ * value) — callers pass that straight through to `attrIndex`, which then
64
+ * falls back to the pinned-first cross-schema union exactly as it always did.
65
+ */
66
+ export declare function stepSourceSchema(schemaVersion: string | undefined): SourceStepSchema | undefined;
67
+ /**
68
+ * Zero-based positional index of attribute `name` on `type`, or `-1` when
69
+ * `type` declares no such attribute (an unknown type, or a genuine typo).
70
+ *
71
+ * When `schema` is given (the exported model's OWN schema, via
72
+ * {@link stepSourceSchema}), resolves against THAT schema's table first: the
73
+ * three bundled schemas do not always agree on a class's attribute order —
74
+ * e.g. IFC2X3's `IfcApprovalRelationship` puts `Name` at slot 3, IFC4 puts it
75
+ * at slot 0 — so a caller walking an arbitrary, non-fixed type (anything
76
+ * `pseudonymizeAllNames` reaches in `anonymize-scrub.ts`) has to resolve
77
+ * against the source model's actual schema or it silently reads/writes the
78
+ * wrong slot on every class the schemas disagree about. Falls back to
79
+ * `getAttributeNamesAcrossSchemas` — the pinned-IFC4-first cross-schema
80
+ * union this function always used before schema-aware resolution existed —
81
+ * when `schema` is omitted, or when `schema`'s own table doesn't know `type`
82
+ * (e.g. an IFC4X3-only class read out of an `IFC4` store).
83
+ *
84
+ * A caller that resolves a slot declared on a FIXED, verified-stable type —
85
+ * `IfcRoot.GlobalId` (slot 0 on every bundled schema), or a literal type
86
+ * token whose declared order was checked directly against all three
87
+ * `ENTITIES_*` tables — may omit `schema`: the union answers identically to
88
+ * a schema-specific lookup for those, and several call sites in
89
+ * `anonymize-placement.ts` and `anonymize-scrub.ts` do exactly that, each
90
+ * noting at the call site why its type is fixed rather than caller-supplied.
91
+ *
92
+ * WRITE-SIDE PITFALL a caller resolving a slot via this function must not
93
+ * fall into: `MutablePropertyView.setAttribute(id, name, value)` re-resolves
94
+ * `name` to a slot by ITS OWN lookup at STEP-serialize time
95
+ * (`step-attribute-mutations.ts`'s `applyAttributeMutations`), which is not
96
+ * schema-aware — so an edit queued that way can still land on the wrong slot
97
+ * even after reading the right one here. Write with
98
+ * `MutablePropertyView.setPositionalAttribute(id, index, value)` and this
99
+ * function's resolved `index` instead; `anonymize-scrub.ts` does exactly
100
+ * that for every slot it resolves through a `schema` argument (#3309).
101
+ */
102
+ export declare function attrIndex(type: string, name: string, schema?: SourceStepSchema): number;
103
+ //# sourceMappingURL=subset-entity-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subset-entity-reader.d.ts","sourceRoot":"","sources":["../src/subset-entity-reader.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD;;mDAEmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;kFACkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,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;CACxF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,EAC1C,KAAK,EAAE,oBAAoB,EAC3B,EAAE,EAAE,MAAM,GACT,gBAAgB,GAAG,IAAI,CAWzB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAc5D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAIhG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAMvF"}
@@ -0,0 +1,102 @@
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 { getAttributeNamesAcrossSchemas, resolveEntityNameAlias } from '@ifc-lite/parser';
5
+ import { ENTITIES_IFC2X3, ENTITIES_IFC4, ENTITIES_IFC4X3 } from '@ifc-lite/data';
6
+ import { createSourceRefReader, decodeRange } from './source-ref-bounds.js';
7
+ import { splitTopLevelArgs } from './step-argument-parser.js';
8
+ /**
9
+ * Read entity `id`'s STEP record out of `store`'s source and split it into
10
+ * its type token and top-level argument list. Returns `null` when the id has
11
+ * no entry in `index`, or when `index`'s byte range cannot actually be read
12
+ * out of `store.source` (`createSourceRefReader` — the same gate
13
+ * `step-pass-builder.ts`'s `isReadableSourceRef` applies), or when the bytes
14
+ * at that range do not parse as a single `#N=TYPE(...);` record.
15
+ *
16
+ * Only reads SOURCE-backed records. An overlay-created entity (no bytes to
17
+ * decode) is out of scope for this module: `anonymize-placement.ts` and
18
+ * `anonymize-scrub.ts` only ever walk/mutate the entities a freshly-parsed
19
+ * source model contains, never ones the private `MutablePropertyView` they
20
+ * build has itself just created.
21
+ */
22
+ export function readEntityArgs(store, index, id) {
23
+ const ref = index.get(id);
24
+ if (!ref)
25
+ return null;
26
+ const isReadable = createSourceRefReader(store.source);
27
+ if (!isReadable(ref))
28
+ return null;
29
+ const line = decodeRange(store.source, ref.byteOffset, ref.byteOffset + ref.byteLength);
30
+ const match = line.match(/^#\d+\s*=\s*(\w+)\(([\s\S]*)\)\s*;\s*$/);
31
+ if (!match)
32
+ return null;
33
+ const [, type, argsText] = match;
34
+ return { type: type.toUpperCase(), args: splitTopLevelArgs(argsText) };
35
+ }
36
+ const ATTRIBUTE_NAMES_BY_SCHEMA = {
37
+ IFC2X3: attributeTableByUpperName(ENTITIES_IFC2X3),
38
+ IFC4: attributeTableByUpperName(ENTITIES_IFC4),
39
+ IFC4X3: attributeTableByUpperName(ENTITIES_IFC4X3),
40
+ };
41
+ function attributeTableByUpperName(table) {
42
+ const map = new Map();
43
+ for (const entity of table)
44
+ map.set(entity.name.toUpperCase(), entity.attributes);
45
+ return map;
46
+ }
47
+ /**
48
+ * Narrow an `IfcDataStore.schemaVersion` to a {@link SourceStepSchema}
49
+ * `attrIndex` can resolve against, or `undefined` for anything that isn't
50
+ * one of the three bundled STEP schemas (`IFC5`, or an absent/unrecognized
51
+ * value) — callers pass that straight through to `attrIndex`, which then
52
+ * falls back to the pinned-first cross-schema union exactly as it always did.
53
+ */
54
+ export function stepSourceSchema(schemaVersion) {
55
+ return schemaVersion === 'IFC2X3' || schemaVersion === 'IFC4' || schemaVersion === 'IFC4X3'
56
+ ? schemaVersion
57
+ : undefined;
58
+ }
59
+ /**
60
+ * Zero-based positional index of attribute `name` on `type`, or `-1` when
61
+ * `type` declares no such attribute (an unknown type, or a genuine typo).
62
+ *
63
+ * When `schema` is given (the exported model's OWN schema, via
64
+ * {@link stepSourceSchema}), resolves against THAT schema's table first: the
65
+ * three bundled schemas do not always agree on a class's attribute order —
66
+ * e.g. IFC2X3's `IfcApprovalRelationship` puts `Name` at slot 3, IFC4 puts it
67
+ * at slot 0 — so a caller walking an arbitrary, non-fixed type (anything
68
+ * `pseudonymizeAllNames` reaches in `anonymize-scrub.ts`) has to resolve
69
+ * against the source model's actual schema or it silently reads/writes the
70
+ * wrong slot on every class the schemas disagree about. Falls back to
71
+ * `getAttributeNamesAcrossSchemas` — the pinned-IFC4-first cross-schema
72
+ * union this function always used before schema-aware resolution existed —
73
+ * when `schema` is omitted, or when `schema`'s own table doesn't know `type`
74
+ * (e.g. an IFC4X3-only class read out of an `IFC4` store).
75
+ *
76
+ * A caller that resolves a slot declared on a FIXED, verified-stable type —
77
+ * `IfcRoot.GlobalId` (slot 0 on every bundled schema), or a literal type
78
+ * token whose declared order was checked directly against all three
79
+ * `ENTITIES_*` tables — may omit `schema`: the union answers identically to
80
+ * a schema-specific lookup for those, and several call sites in
81
+ * `anonymize-placement.ts` and `anonymize-scrub.ts` do exactly that, each
82
+ * noting at the call site why its type is fixed rather than caller-supplied.
83
+ *
84
+ * WRITE-SIDE PITFALL a caller resolving a slot via this function must not
85
+ * fall into: `MutablePropertyView.setAttribute(id, name, value)` re-resolves
86
+ * `name` to a slot by ITS OWN lookup at STEP-serialize time
87
+ * (`step-attribute-mutations.ts`'s `applyAttributeMutations`), which is not
88
+ * schema-aware — so an edit queued that way can still land on the wrong slot
89
+ * even after reading the right one here. Write with
90
+ * `MutablePropertyView.setPositionalAttribute(id, index, value)` and this
91
+ * function's resolved `index` instead; `anonymize-scrub.ts` does exactly
92
+ * that for every slot it resolves through a `schema` argument (#3309).
93
+ */
94
+ export function attrIndex(type, name, schema) {
95
+ if (schema) {
96
+ const names = ATTRIBUTE_NAMES_BY_SCHEMA[schema].get(resolveEntityNameAlias(type).toUpperCase());
97
+ if (names)
98
+ return names.indexOf(name);
99
+ }
100
+ return getAttributeNamesAcrossSchemas(type).indexOf(name);
101
+ }
102
+ //# sourceMappingURL=subset-entity-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subset-entity-reader.js","sourceRoot":"","sources":["../src/subset-entity-reader.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAmB/D,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAiB9D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAC5B,KAA0C,EAC1C,KAA2B,EAC3B,EAAU;IAEV,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IACxF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;IACjC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzE,CAAC;AAWD,MAAM,yBAAyB,GAA+E;IAC5G,MAAM,EAAE,yBAAyB,CAAC,eAAe,CAAC;IAClD,IAAI,EAAE,yBAAyB,CAAC,aAAa,CAAC;IAC9C,MAAM,EAAE,yBAAyB,CAAC,eAAe,CAAC;CACnD,CAAC;AAEF,SAAS,yBAAyB,CAAC,KAA+B;IAChE,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6B,CAAC;IACjD,KAAK,MAAM,MAAM,IAAI,KAAK;QAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAClF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAAiC;IAChE,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,QAAQ;QACzF,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,MAAyB;IAC7E,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAChG,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,8BAA8B,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { EffectiveEntityIndex } from './effective-index.js';
2
+ /**
3
+ * Every `IfcRoot` descendant across the three bundled schemas (IFC2X3, IFC4,
4
+ * IFC4X3), UPPERCASE — the set of types a subset export ever needs to
5
+ * classify as "included" or "excluded". `IfcRoot` itself is abstract and
6
+ * never instantiated, so it is not a member (same convention as
7
+ * `PRODUCT_TYPES` not containing `IFCPRODUCT`).
8
+ *
9
+ * Derived from the generated schema tables via `collectDescendantNames`
10
+ * rather than hand-listed, for the same reason `PRODUCT_TYPES` is: a
11
+ * hand-written list silently stops matching the schema the day it changes,
12
+ * and a subset export that fails to classify a genuinely-rooted entity type
13
+ * would either leak it (never excluded) or drop it (never includable) with
14
+ * no error.
15
+ */
16
+ export declare const IFC_ROOT_TYPES: ReadonlySet<string>;
17
+ /**
18
+ * Entity types that identify the SOURCE model or its authoring context
19
+ * rather than the geometry a bug reproduction needs — addresses and
20
+ * georeferencing. None of these are `IfcRoot` descendants (they carry no
21
+ * `GlobalId`), so `IFC_ROOT_TYPES` alone would never exclude them; a subset
22
+ * export must name them separately or a caller's included wall still drags
23
+ * its `IfcSite`'s `IfcPostalAddress` / `IfcMapConversion` chain along for the
24
+ * ride purely because nothing else in the closure competes for that #id.
25
+ *
26
+ * `IFCACTORROLE` is here for the same reason, one level removed: it hangs
27
+ * off `IfcPerson`/`IfcOrganization` (owner history), not off a spatial
28
+ * entity, but it is exactly as identifying — a role like "Structural
29
+ * Engineer, ACME Consulting" — and equally unreachable through
30
+ * `IFC_ROOT_TYPES`.
31
+ */
32
+ export declare const IDENTIFYING_TYPES: ReadonlySet<string>;
33
+ /** What a `subsetEntityIds` export needs from `step-collection.ts`'s closure tail. */
34
+ export interface SubsetEntityIds {
35
+ /** Seed set for `collectReferencedEntityIds`: infrastructure plus every
36
+ * caller-included id that actually exists in `index`. */
37
+ readonly roots: Set<number>;
38
+ /** Every `IfcRoot`/`IDENTIFYING_TYPES` id NOT in `includedIds` — passed as
39
+ * `pass.hiddenProductIds` so the existing `visibleOnly` dangling-ref
40
+ * protection (`evaluateOmissionPredicates` +
41
+ * `filterHiddenRefsFromRelationshipLine`) covers a subset export too. */
42
+ readonly excludedIds: Set<number>;
43
+ }
44
+ /**
45
+ * Classify every entity in `index` for a `subsetEntityIds` export: a root
46
+ * (infrastructure, always; or a caller-included id), an excluded id (an
47
+ * `IfcRoot`/identifying-type id the caller did NOT include), or neither (left
48
+ * to the forward closure walk to decide, same as `visibleOnly`'s "all other
49
+ * entity types" fallthrough).
50
+ *
51
+ * Runs over the EFFECTIVE index — `pass.effective`, not `dataStore` — for the
52
+ * same reason `getVisibleEntityIds` does: an overlay-created entity has no
53
+ * source record for a dataStore-only scan to find, a retyped entity must be
54
+ * classified by its new class, and a tombstoned one must not appear at all
55
+ * (`EffectiveEntityIndex` iteration already skips it).
56
+ */
57
+ export declare function getSubsetEntityIds(index: EffectiveEntityIndex, includedIds: ReadonlySet<number>): SubsetEntityIds;
58
+ //# sourceMappingURL=subset-roots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subset-roots.d.ts","sourceRoot":"","sources":["../src/subset-roots.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAAoB,CAAC;AAUpE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAQhD,CAAC;AAEH,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B;8DAC0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B;;;8EAG0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACnC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,oBAAoB,EAC3B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAC/B,eAAe,CA2BjB"}
@@ -0,0 +1,103 @@
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
+ * The root classification for a `subsetEntityIds` STEP export (#2934, the
6
+ * "anonymized isolated export" feature): which entities the caller's
7
+ * `includedIds` selection may legally seed, and which entities must be
8
+ * excluded outright regardless of whether the closure walk would otherwise
9
+ * reach them.
10
+ *
11
+ * Mirrors `reference-collector.ts`'s `getVisibleEntityIds` in shape — both
12
+ * produce a `{ roots, excludeIds }` pair `step-collection.ts` feeds to the
13
+ * same `collectReferencedEntityIds` + `collectStyleEntities` tail — but the
14
+ * classification rule is the opposite of `visibleOnly`'s. `visibleOnly`
15
+ * starts from "everything is a root unless hidden"; a subset export starts
16
+ * from "nothing is a root unless named", because the caller is picking a
17
+ * handful of entities out of a whole model, not hiding a handful out of it.
18
+ */
19
+ import { ENTITIES_IFC2X3, ENTITIES_IFC4, ENTITIES_IFC4X3, } from '@ifc-lite/data';
20
+ import { INFRASTRUCTURE_TYPES, collectDescendantNames } from './reference-collector.js';
21
+ /**
22
+ * Every `IfcRoot` descendant across the three bundled schemas (IFC2X3, IFC4,
23
+ * IFC4X3), UPPERCASE — the set of types a subset export ever needs to
24
+ * classify as "included" or "excluded". `IfcRoot` itself is abstract and
25
+ * never instantiated, so it is not a member (same convention as
26
+ * `PRODUCT_TYPES` not containing `IFCPRODUCT`).
27
+ *
28
+ * Derived from the generated schema tables via `collectDescendantNames`
29
+ * rather than hand-listed, for the same reason `PRODUCT_TYPES` is: a
30
+ * hand-written list silently stops matching the schema the day it changes,
31
+ * and a subset export that fails to classify a genuinely-rooted entity type
32
+ * would either leak it (never excluded) or drop it (never includable) with
33
+ * no error.
34
+ */
35
+ export const IFC_ROOT_TYPES = buildRootTypes();
36
+ function buildRootTypes() {
37
+ const roots = new Set();
38
+ for (const table of [ENTITIES_IFC2X3, ENTITIES_IFC4, ENTITIES_IFC4X3]) {
39
+ collectDescendantNames(table, 'IfcRoot', roots);
40
+ }
41
+ return roots;
42
+ }
43
+ /**
44
+ * Entity types that identify the SOURCE model or its authoring context
45
+ * rather than the geometry a bug reproduction needs — addresses and
46
+ * georeferencing. None of these are `IfcRoot` descendants (they carry no
47
+ * `GlobalId`), so `IFC_ROOT_TYPES` alone would never exclude them; a subset
48
+ * export must name them separately or a caller's included wall still drags
49
+ * its `IfcSite`'s `IfcPostalAddress` / `IfcMapConversion` chain along for the
50
+ * ride purely because nothing else in the closure competes for that #id.
51
+ *
52
+ * `IFCACTORROLE` is here for the same reason, one level removed: it hangs
53
+ * off `IfcPerson`/`IfcOrganization` (owner history), not off a spatial
54
+ * entity, but it is exactly as identifying — a role like "Structural
55
+ * Engineer, ACME Consulting" — and equally unreachable through
56
+ * `IFC_ROOT_TYPES`.
57
+ */
58
+ export const IDENTIFYING_TYPES = new Set([
59
+ 'IFCPOSTALADDRESS',
60
+ 'IFCTELECOMADDRESS',
61
+ 'IFCMAPCONVERSION',
62
+ 'IFCMAPCONVERSIONSCALED',
63
+ 'IFCPROJECTEDCRS',
64
+ 'IFCGEOGRAPHICCRS',
65
+ 'IFCACTORROLE',
66
+ ]);
67
+ /**
68
+ * Classify every entity in `index` for a `subsetEntityIds` export: a root
69
+ * (infrastructure, always; or a caller-included id), an excluded id (an
70
+ * `IfcRoot`/identifying-type id the caller did NOT include), or neither (left
71
+ * to the forward closure walk to decide, same as `visibleOnly`'s "all other
72
+ * entity types" fallthrough).
73
+ *
74
+ * Runs over the EFFECTIVE index — `pass.effective`, not `dataStore` — for the
75
+ * same reason `getVisibleEntityIds` does: an overlay-created entity has no
76
+ * source record for a dataStore-only scan to find, a retyped entity must be
77
+ * classified by its new class, and a tombstoned one must not appear at all
78
+ * (`EffectiveEntityIndex` iteration already skips it).
79
+ */
80
+ export function getSubsetEntityIds(index, includedIds) {
81
+ const roots = new Set();
82
+ const excludedIds = new Set();
83
+ for (const [expressId, entityRef] of index) {
84
+ const typeUpper = index.effectiveType(expressId, entityRef.type);
85
+ if (INFRASTRUCTURE_TYPES.has(typeUpper)) {
86
+ roots.add(expressId);
87
+ continue;
88
+ }
89
+ if (includedIds.has(expressId)) {
90
+ roots.add(expressId);
91
+ continue;
92
+ }
93
+ if (IFC_ROOT_TYPES.has(typeUpper) || IDENTIFYING_TYPES.has(typeUpper)) {
94
+ excludedIds.add(expressId);
95
+ }
96
+ // Everything else (geometry, relationships, property atoms, materials,
97
+ // …) is neither a root nor excluded here — the forward closure walk from
98
+ // `roots` decides whether it survives, exactly as `visibleOnly`'s
99
+ // fallthrough does.
100
+ }
101
+ return { roots, excludedIds };
102
+ }
103
+ //# sourceMappingURL=subset-roots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subset-roots.js","sourceRoot":"","sources":["../src/subset-roots.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAExF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB,cAAc,EAAE,CAAC;AAEpE,SAAS,cAAc;IACrB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,CAAC,eAAe,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE,CAAC;QACtE,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IAC5D,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,wBAAwB;IACxB,iBAAiB;IACjB,kBAAkB;IAClB,cAAc;CACf,CAAC,CAAC;AAcH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAA2B,EAC3B,WAAgC;IAEhC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtC,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAEjE,IAAI,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACtE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QACD,uEAAuE;QACvE,yEAAyE;QACzE,kEAAkE;QAClE,oBAAoB;IACtB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ifc-lite/export",
3
- "version": "3.0.1",
3
+ "version": "3.1.0",
4
4
  "description": "Export formats for IFC-Lite",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,15 +16,15 @@
16
16
  "parquet-wasm": "^0.7.2",
17
17
  "apache-arrow": "^21.2.0",
18
18
  "jszip": "^3.10.0",
19
- "@ifc-lite/data": "^3.5.0",
19
+ "@ifc-lite/geometry": "^4.1.0",
20
20
  "@ifc-lite/encoding": "^2.1.0",
21
21
  "@ifc-lite/parser": "^4.3.2",
22
22
  "@ifc-lite/mutations": "^1.27.0",
23
- "@ifc-lite/geometry": "^4.1.0"
23
+ "@ifc-lite/data": "^3.5.1"
24
24
  },
25
25
  "devDependencies": {
26
26
  "typescript": "^6.0.3",
27
- "vitest": "^4.1.10",
27
+ "vitest": "^4.1.11",
28
28
  "@ifc-lite/ifcx": "^3.0.1"
29
29
  },
30
30
  "license": "MPL-2.0",