@ifc-lite/parser 7.1.0 → 8.2.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 (139) hide show
  1. package/dist/attribute-helpers.d.ts +23 -5
  2. package/dist/attribute-helpers.d.ts.map +1 -1
  3. package/dist/attribute-helpers.js +74 -13
  4. package/dist/attribute-helpers.js.map +1 -1
  5. package/dist/classification-resolver.d.ts.map +1 -1
  6. package/dist/classification-resolver.js +42 -6
  7. package/dist/classification-resolver.js.map +1 -1
  8. package/dist/columnar-parser-attributes.d.ts +1 -1
  9. package/dist/columnar-parser-attributes.d.ts.map +1 -1
  10. package/dist/columnar-parser-attributes.js +36 -1
  11. package/dist/columnar-parser-attributes.js.map +1 -1
  12. package/dist/columnar-parser-indexes.d.ts.map +1 -1
  13. package/dist/columnar-parser-indexes.js +24 -1
  14. package/dist/columnar-parser-indexes.js.map +1 -1
  15. package/dist/columnar-parser-relationships.d.ts +2 -1
  16. package/dist/columnar-parser-relationships.d.ts.map +1 -1
  17. package/dist/columnar-parser-relationships.js +2 -2
  18. package/dist/columnar-parser-relationships.js.map +1 -1
  19. package/dist/columnar-parser-root-attributes.d.ts.map +1 -1
  20. package/dist/columnar-parser-root-attributes.js +3 -0
  21. package/dist/columnar-parser-root-attributes.js.map +1 -1
  22. package/dist/columnar-parser.d.ts +4 -11
  23. package/dist/columnar-parser.d.ts.map +1 -1
  24. package/dist/columnar-parser.js +24 -11
  25. package/dist/columnar-parser.js.map +1 -1
  26. package/dist/cost-extractor.js +2 -2
  27. package/dist/cost-extractor.js.map +1 -1
  28. package/dist/cost-overlay.d.ts +34 -2
  29. package/dist/cost-overlay.d.ts.map +1 -1
  30. package/dist/cost-reader.d.ts +10 -0
  31. package/dist/cost-reader.d.ts.map +1 -1
  32. package/dist/cost-reader.js +82 -17
  33. package/dist/cost-reader.js.map +1 -1
  34. package/dist/cost.d.ts +1 -1
  35. package/dist/cost.d.ts.map +1 -1
  36. package/dist/data-store-transport.d.ts.map +1 -1
  37. package/dist/data-store-transport.js +8 -0
  38. package/dist/data-store-transport.js.map +1 -1
  39. package/dist/effective-entity-record.d.ts +35 -0
  40. package/dist/effective-entity-record.d.ts.map +1 -0
  41. package/dist/effective-entity-record.js +43 -0
  42. package/dist/effective-entity-record.js.map +1 -0
  43. package/dist/effective-relationship-overlay.d.ts +31 -0
  44. package/dist/effective-relationship-overlay.d.ts.map +1 -0
  45. package/dist/effective-relationship-overlay.js +111 -0
  46. package/dist/effective-relationship-overlay.js.map +1 -0
  47. package/dist/entity-extractor.d.ts.map +1 -1
  48. package/dist/entity-extractor.js +33 -15
  49. package/dist/entity-extractor.js.map +1 -1
  50. package/dist/exact-relationship-edges.d.ts +46 -0
  51. package/dist/exact-relationship-edges.d.ts.map +1 -0
  52. package/dist/exact-relationship-edges.js +89 -0
  53. package/dist/exact-relationship-edges.js.map +1 -0
  54. package/dist/identity-hints.d.ts +32 -0
  55. package/dist/identity-hints.d.ts.map +1 -0
  56. package/dist/identity-hints.js +131 -0
  57. package/dist/identity-hints.js.map +1 -0
  58. package/dist/ifc-schema.d.ts +9 -0
  59. package/dist/ifc-schema.d.ts.map +1 -1
  60. package/dist/ifc-schema.js +37 -2
  61. package/dist/ifc-schema.js.map +1 -1
  62. package/dist/index.d.ts +6 -3
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +9 -4
  65. package/dist/index.js.map +1 -1
  66. package/dist/material-resolver.d.ts +3 -0
  67. package/dist/material-resolver.d.ts.map +1 -1
  68. package/dist/material-resolver.js +6 -2
  69. package/dist/material-resolver.js.map +1 -1
  70. package/dist/on-demand-extractors.d.ts +11 -37
  71. package/dist/on-demand-extractors.d.ts.map +1 -1
  72. package/dist/on-demand-extractors.js +13 -5
  73. package/dist/on-demand-extractors.js.map +1 -1
  74. package/dist/parser.worker.d.ts.map +1 -1
  75. package/dist/parser.worker.js +3 -1
  76. package/dist/parser.worker.js.map +1 -1
  77. package/dist/project-units.d.ts.map +1 -1
  78. package/dist/project-units.js +7 -0
  79. package/dist/project-units.js.map +1 -1
  80. package/dist/property-unit.d.ts.map +1 -1
  81. package/dist/property-unit.js +1 -0
  82. package/dist/property-unit.js.map +1 -1
  83. package/dist/property-value-parser.d.ts +14 -18
  84. package/dist/property-value-parser.d.ts.map +1 -1
  85. package/dist/property-value-parser.js +26 -11
  86. package/dist/property-value-parser.js.map +1 -1
  87. package/dist/quantity-collect.d.ts +2 -0
  88. package/dist/quantity-collect.d.ts.map +1 -1
  89. package/dist/quantity-collect.js +2 -1
  90. package/dist/quantity-collect.js.map +1 -1
  91. package/dist/quantity-extractor.d.ts.map +1 -1
  92. package/dist/quantity-extractor.js +7 -5
  93. package/dist/quantity-extractor.js.map +1 -1
  94. package/dist/query-backend-maps.d.ts +5 -8
  95. package/dist/query-backend-maps.d.ts.map +1 -1
  96. package/dist/query-backend-maps.js +8 -15
  97. package/dist/query-backend-maps.js.map +1 -1
  98. package/dist/relationship-extractor.d.ts.map +1 -1
  99. package/dist/relationship-extractor.js +6 -4
  100. package/dist/relationship-extractor.js.map +1 -1
  101. package/dist/relationship-schema-slots.d.ts +8 -8
  102. package/dist/relationship-schema-slots.d.ts.map +1 -1
  103. package/dist/relationship-schema-slots.js +31 -18
  104. package/dist/relationship-schema-slots.js.map +1 -1
  105. package/dist/schedule-calendar-types.d.ts +2 -3
  106. package/dist/schedule-calendar-types.d.ts.map +1 -1
  107. package/dist/schedule-calendar-types.js +12 -24
  108. package/dist/schedule-calendar-types.js.map +1 -1
  109. package/dist/schedule-control-extractor.d.ts +3 -4
  110. package/dist/schedule-control-extractor.d.ts.map +1 -1
  111. package/dist/schedule-control-extractor.js +4 -7
  112. package/dist/schedule-control-extractor.js.map +1 -1
  113. package/dist/schedule-extractor.d.ts +4 -1
  114. package/dist/schedule-extractor.d.ts.map +1 -1
  115. package/dist/schedule-extractor.js +26 -43
  116. package/dist/schedule-extractor.js.map +1 -1
  117. package/dist/schedule-types.d.ts +3 -4
  118. package/dist/schedule-types.d.ts.map +1 -1
  119. package/dist/schedule-types.js +4 -10
  120. package/dist/schedule-types.js.map +1 -1
  121. package/dist/spatial-hierarchy-attributes.d.ts.map +1 -1
  122. package/dist/spatial-hierarchy-attributes.js +3 -0
  123. package/dist/spatial-hierarchy-attributes.js.map +1 -1
  124. package/dist/spatial-hierarchy-builder.d.ts.map +1 -1
  125. package/dist/spatial-hierarchy-builder.js +1 -0
  126. package/dist/spatial-hierarchy-builder.js.map +1 -1
  127. package/dist/structural-load-extractor.d.ts.map +1 -1
  128. package/dist/structural-load-extractor.js +2 -0
  129. package/dist/structural-load-extractor.js.map +1 -1
  130. package/dist/structural-step-values.d.ts.map +1 -1
  131. package/dist/structural-step-values.js +1 -0
  132. package/dist/structural-step-values.js.map +1 -1
  133. package/dist/unit-extractor.d.ts.map +1 -1
  134. package/dist/unit-extractor.js +6 -0
  135. package/dist/unit-extractor.js.map +1 -1
  136. package/dist/worker-index-publication.d.ts.map +1 -1
  137. package/dist/worker-index-publication.js +7 -0
  138. package/dist/worker-index-publication.js.map +1 -1
  139. package/package.json +6 -6
@@ -4,7 +4,7 @@
4
4
  /**
5
5
  * Entity extractor - parses full entity content from STEP format
6
6
  */
7
- import { createLogger } from '@ifc-lite/data';
7
+ import { createLogger, isCompleteStepNumericLiteral } from '@ifc-lite/data';
8
8
  import { decodeIfcString } from '@ifc-lite/encoding';
9
9
  import { isIndexableExpressId } from './express-id.js';
10
10
  import { entityParameters } from './step-entity-parameters.js';
@@ -320,17 +320,29 @@ export class EntityExtractor {
320
320
  //
321
321
  // Number.isFinite, not !isNaN: a STEP real whose exponent overflows the
322
322
  // IEEE-754 double range (`1.0E400`) parses to `Infinity`, and
323
- // `isNaN(Infinity)` is `false`, so the old guard admitted it. From the
324
- // property table a non-finite number reaches every writer, where
325
- // `JSON.stringify(Infinity)` is `null` — the file loses the value with no
326
- // diagnostic anywhere along the way.
323
+ // `isNaN(Infinity)` is `false`, so a guard of only `!isNaN` would admit
324
+ // it. From the property table a non-finite number reaches every writer,
325
+ // where `JSON.stringify(Infinity)` is `null` — the file loses the value
326
+ // with no diagnostic anywhere along the way.
327
+ //
328
+ // `isCompleteStepNumericLiteral`, not just `parseFloat`: `parseFloat`
329
+ // accepts any leading numeric prefix and silently discards the rest, so a
330
+ // corrupted literal with a dropped comma between two reals — `1.52.3` —
331
+ // parses as `1.52` with no error, and `1.5abc` parses as `1.5`. The
332
+ // overflow guard above catches a token that is a complete, valid literal
333
+ // naming an unrepresentable number; it says nothing about a token that
334
+ // was never a complete literal to begin with. Requiring the STEP
335
+ // REAL/INTEGER grammar match cover the *whole* token, not just yield a
336
+ // finite prefix, closes that second hole without disturbing the first.
327
337
  //
328
338
  // Falling through preserves the literal as the raw token (the branch
329
339
  // below), which is what this function already does for every other token
330
340
  // it cannot represent as a number. That keeps the data the file actually
331
- // contained — a reader can still see `1.0E400`. Rejecting the attribute
332
- // outright would drop data the file did contain; clamping would invent a
333
- // value.
341
+ // contained — a reader can still see `1.0E400` or `1.52.3`. Rejecting the
342
+ // attribute outright would drop data the file did contain; clamping would
343
+ // invent a value; truncating to the parseable prefix (`1.52.3` -> `1.52`)
344
+ // would invent a DIFFERENT value indistinguishable downstream from a real
345
+ // one — the exact failure this branch exists to avoid.
334
346
  //
335
347
  // This is NOT by itself enough to say "nothing is silently dropped".
336
348
  // Preserving the string only helps consumers whose value type admits a
@@ -340,14 +352,20 @@ export class EntityExtractor {
340
352
  // which is how `quantity-collect` and `georef-extractor` turned an
341
353
  // unreadable value into a plausible `0`. Absence is detectable; a zero
342
354
  // easting is a coordinate. Both now refuse and warn instead of
343
- // substituting — see `isOverflowingNumericLiteral` in
344
- // `attribute-helpers.ts` and its two call sites. Any NEW `number`-typed
345
- // consumer of this function's output owes the same decision.
346
- const num = parseFloat(value);
347
- if (Number.isFinite(num)) {
348
- return num;
355
+ // substituting — see `isOverflowingNumericLiteral` and
356
+ // `isMalformedNumericLiteral` in `attribute-helpers.ts`, combined in
357
+ // `isUnrepresentableNumericValue`, and its call sites. Any NEW
358
+ // `number`-typed consumer of this function's output owes the same
359
+ // decision, for BOTH hazards this comment now describes, not just the
360
+ // overflow one it used to describe alone.
361
+ if (isCompleteStepNumericLiteral(value)) {
362
+ const num = parseFloat(value);
363
+ if (Number.isFinite(num)) {
364
+ return num;
365
+ }
349
366
  }
350
- // Enumeration, non-finite numeric literal, or other identifier: the raw token.
367
+ // Enumeration, non-finite numeric literal, malformed numeric literal, or
368
+ // other identifier: the raw token.
351
369
  return value;
352
370
  }
353
371
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entity-extractor.js","sourceRoot":"","sources":["../src/entity-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-extractor.js","sourceRoot":"","sources":["../src/entity-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { IfcDataStore } from './columnar-parser.js';
2
+ /** One exact-class edge touching an entity (#4205). */
3
+ export interface ExactRelationshipEdge {
4
+ relationshipId: number;
5
+ relationshipType: string;
6
+ direction: 'forward' | 'inverse';
7
+ entity: {
8
+ id: number;
9
+ name?: string;
10
+ type: string;
11
+ };
12
+ }
13
+ /** Structured relationship information for one entity. */
14
+ export interface EntityRelationships {
15
+ voids: Array<{
16
+ id: number;
17
+ name?: string;
18
+ type: string;
19
+ }>;
20
+ fills: Array<{
21
+ id: number;
22
+ name?: string;
23
+ type: string;
24
+ }>;
25
+ groups: Array<{
26
+ id: number;
27
+ name?: string;
28
+ type: string;
29
+ }>;
30
+ connections: Array<{
31
+ id: number;
32
+ name?: string;
33
+ type: string;
34
+ }>;
35
+ /** Optional for consumers/backends compiled against the pre-#4205 shape. */
36
+ relations?: ExactRelationshipEdge[];
37
+ }
38
+ /**
39
+ * Return every graph edge touching `entityId`, preserving the exact IfcRel*
40
+ * STEP class. Compatibility aliases such as IfcRelNests occupy two enum
41
+ * buckets, so the result is deduplicated by relationship record and target.
42
+ */
43
+ export declare function extractExactRelationshipEdges(store: IfcDataStore, entityId: number): ExactRelationshipEdge[];
44
+ /** Return unique opposite-end ids for one exact EXPRESS relationship class. */
45
+ export declare function extractExactRelatedIds(store: IfcDataStore, entityId: number, relationshipType: string, direction: 'forward' | 'inverse', isDeletedRelationship?: (relationshipId: number) => boolean): number[];
46
+ //# sourceMappingURL=exact-relationship-edges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exact-relationship-edges.d.ts","sourceRoot":"","sources":["../src/exact-relationship-edges.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,4EAA4E;IAC5E,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CACzC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACjB,qBAAqB,EAAE,CA6DzB;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,qBAAqB,GAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAqB,GACzE,MAAM,EAAE,CAUV"}
@@ -0,0 +1,89 @@
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 { exactTypeName, RelationshipType, relationshipTypeName, resolvedTypeName } from '@ifc-lite/data';
5
+ import { normalizeIfcTypeName } from './ifc-schema.js';
6
+ /**
7
+ * Return every graph edge touching `entityId`, preserving the exact IfcRel*
8
+ * STEP class. Compatibility aliases such as IfcRelNests occupy two enum
9
+ * buckets, so the result is deduplicated by relationship record and target.
10
+ */
11
+ export function extractExactRelationshipEdges(store, entityId) {
12
+ const result = [];
13
+ const seen = new Set();
14
+ const entityInfo = (id) => {
15
+ // @raw-entity-enumeration-ok graph edge already chose this target; the source index only supplies its exact STEP class fallback
16
+ const ref = store.entityIndex.byId.get(id);
17
+ const exactType = exactTypeName(store.entities, id);
18
+ const type = (exactType !== 'Unknown' ? exactType : undefined)
19
+ ?? resolvedTypeName(store.entities, id)
20
+ ?? (ref ? normalizeIfcTypeName(ref.type) : undefined)
21
+ ?? 'Unknown';
22
+ const name = store.entities.getName(id);
23
+ return { id, name: name || undefined, type };
24
+ };
25
+ const append = (direction) => {
26
+ const edges = direction === 'forward' ? store.relationships.forward : store.relationships.inverse;
27
+ const touchingEdges = edges.getEdges(entityId);
28
+ // Compatibility pairs occupy both a broad traversal bucket and an
29
+ // exact bucket. Reserve each broad record represented by an exact
30
+ // bucket before deduplicating by record id. This also covers server
31
+ // payloads whose entity table omits the IfcRel* row, where the graph
32
+ // buckets are the only source of the exact class.
33
+ const aliasRecords = new Map();
34
+ for (const edge of touchingEdges) {
35
+ const primaryType = edge.type === RelationshipType.Nests
36
+ ? RelationshipType.Aggregates
37
+ : edge.type === RelationshipType.AssignsToGroupByFactor
38
+ ? RelationshipType.AssignsToGroup
39
+ : undefined;
40
+ if (primaryType === undefined)
41
+ continue;
42
+ for (const relationshipId of [edge.relationshipId, ...(edge.shadowedRelationshipIds ?? [])]) {
43
+ const key = `${edge.target}:${primaryType}:${relationshipId}`;
44
+ aliasRecords.set(key, (aliasRecords.get(key) ?? 0) + 1);
45
+ }
46
+ }
47
+ for (const edge of touchingEdges) {
48
+ for (const relationshipId of [edge.relationshipId, ...(edge.shadowedRelationshipIds ?? [])]) {
49
+ const aliasKey = `${edge.target}:${edge.type}:${relationshipId}`;
50
+ const aliasesRemaining = aliasRecords.get(aliasKey) ?? 0;
51
+ if (aliasesRemaining > 0) {
52
+ aliasRecords.set(aliasKey, aliasesRemaining - 1);
53
+ continue;
54
+ }
55
+ if (relationshipId !== 0) {
56
+ const key = `${direction}:${relationshipId}:${edge.target}`;
57
+ if (seen.has(key))
58
+ continue;
59
+ seen.add(key);
60
+ }
61
+ result.push({
62
+ relationshipId,
63
+ relationshipType: resolvedTypeName(store.entities, relationshipId)
64
+ ?? relationshipTypeName(edge.type),
65
+ direction,
66
+ entity: entityInfo(edge.target),
67
+ });
68
+ }
69
+ }
70
+ };
71
+ append('forward');
72
+ append('inverse');
73
+ return result;
74
+ }
75
+ /** Return unique opposite-end ids for one exact EXPRESS relationship class. */
76
+ export function extractExactRelatedIds(store, entityId, relationshipType, direction, isDeletedRelationship = () => false) {
77
+ const result = [];
78
+ const seen = new Set();
79
+ for (const edge of extractExactRelationshipEdges(store, entityId)) {
80
+ if (edge.direction !== direction || edge.relationshipType !== relationshipType)
81
+ continue;
82
+ if (isDeletedRelationship(edge.relationshipId) || seen.has(edge.entity.id))
83
+ continue;
84
+ seen.add(edge.entity.id);
85
+ result.push(edge.entity.id);
86
+ }
87
+ return result;
88
+ }
89
+ //# sourceMappingURL=exact-relationship-edges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exact-relationship-edges.js","sourceRoot":"","sources":["../src/exact-relationship-edges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type IfcDataStore } from './columnar-parser.js';
2
+ import { EntityExtractor } from './entity-extractor.js';
3
+ /**
4
+ * The name path of the nearest spatial container of an element (`Project/
5
+ * Building/Level 2/Room 204`), or `undefined` when the element is not
6
+ * contained anywhere the hierarchy knows about. Prefers the finest container
7
+ * (`elementToContainer`: a space or zone) over the storey.
8
+ *
9
+ * An unnamed node contributes its `LongName`, else its IFC class name, so the
10
+ * path stays stable across exports. Names are trimmed so trailing whitespace
11
+ * an authoring tool leaves behind does not split one storey into two.
12
+ */
13
+ export declare function spatialContainerPath(store: IfcDataStore, expressId: number): string | undefined;
14
+ /** How an authored key is spelled: `Tag`, or `<PsetName>.<PropertyName>`. */
15
+ export interface AuthoredKeySpec {
16
+ kind: 'tag' | 'property';
17
+ pset?: string;
18
+ property?: string;
19
+ }
20
+ /**
21
+ * Parse a `--key-from` style spec. `Tag` (case-insensitive) reads the IfcElement
22
+ * `Tag` attribute; anything containing a dot is `Pset.Property`. Returns
23
+ * `undefined` for a spec that names neither.
24
+ */
25
+ export declare function parseAuthoredKeySpec(spec: string): AuthoredKeySpec | undefined;
26
+ /**
27
+ * The authored key of one entity under a spec, or `undefined` when the entity
28
+ * carries none (empty and whitespace-only values count as none — an empty
29
+ * `Tag` is the schema's default, not an identity).
30
+ */
31
+ export declare function authoredKeyValue(store: IfcDataStore, expressId: number, spec: AuthoredKeySpec, extractor?: EntityExtractor): string | undefined;
32
+ //# sourceMappingURL=identity-hints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-hints.d.ts","sourceRoot":"","sources":["../src/identity-hints.ts"],"names":[],"mappings":"AAoBA,OAAO,EAA6B,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA6CxD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO/F;AAED,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAM9E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,EACrB,SAAS,GAAE,eAAmD,GAC7D,MAAM,GAAG,SAAS,CAsBpB"}
@@ -0,0 +1,131 @@
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
+ * Two store queries every diff adapter (CLI, MCP, viewer) needs identically
6
+ * (issue #4955), kept here so three copies cannot drift:
7
+ *
8
+ * - {@link spatialContainerPath}: WHERE an element sits, as a stable NAME
9
+ * path from the project down to its nearest spatial container. Names, never
10
+ * GlobalIds — a from-scratch re-export re-GUIDs the storeys too.
11
+ * - {@link authoredKeyValue}: an AUTHORED identifier the model maintains on
12
+ * purpose (`Tag`, or a property such as `Pset_Asset.AssetId`), which a
13
+ * downstream party may prefer over GlobalId as the cross-revision key.
14
+ *
15
+ * Neither knows anything about diffing. They answer "where is this" and
16
+ * "what does this property say", which is what a parser is for.
17
+ */
18
+ import { IfcTypeEnumToString } from '@ifc-lite/data';
19
+ import { extractPropertiesOnDemand } from './columnar-parser.js';
20
+ import { EntityExtractor } from './entity-extractor.js';
21
+ import { getAttributeNamesAcrossSchemas } from './ifc-schema.js';
22
+ /** Per-hierarchy cache of node id → full name path, built on first use. */
23
+ const PATH_CACHE = new WeakMap();
24
+ /**
25
+ * A node's label in the path: its trimmed `Name`, else its `LongName`, else
26
+ * its IFC class (`IfcBuilding`). Never the express id — that is reassigned on
27
+ * every export, and Duplex's unnamed IfcBuilding put a `#36` into every path
28
+ * so no two revisions ever agreed (issue #4955, xmatch finding F4). A class
29
+ * label is coarse but stable, and two unnamed buildings under one site are
30
+ * rare enough to accept the tie.
31
+ */
32
+ function nodeLabel(node) {
33
+ const name = node.name.trim();
34
+ if (name.length > 0)
35
+ return name;
36
+ const longName = node.longName?.trim() ?? '';
37
+ if (longName.length > 0)
38
+ return longName;
39
+ return IfcTypeEnumToString(node.type);
40
+ }
41
+ function pathsOf(hierarchy) {
42
+ const cached = PATH_CACHE.get(hierarchy);
43
+ if (cached)
44
+ return cached;
45
+ const paths = new Map();
46
+ // An explicit worklist rather than recursion: the hierarchy is file-supplied
47
+ // (or transported from a worker), so a very deep chain must not exhaust the
48
+ // stack and a cycle must not spin. First visit wins, which also means the
49
+ // first-declared parent names the path for a node reachable twice.
50
+ const stack = [{ node: hierarchy.project, prefix: '' }];
51
+ while (stack.length > 0) {
52
+ const { node, prefix } = stack.pop();
53
+ if (paths.has(node.expressId))
54
+ continue;
55
+ const path = prefix ? `${prefix}/${nodeLabel(node)}` : nodeLabel(node);
56
+ paths.set(node.expressId, path);
57
+ for (let i = node.children.length - 1; i >= 0; i--) {
58
+ const child = node.children[i];
59
+ if (!paths.has(child.expressId))
60
+ stack.push({ node: child, prefix: path });
61
+ }
62
+ }
63
+ PATH_CACHE.set(hierarchy, paths);
64
+ return paths;
65
+ }
66
+ /**
67
+ * The name path of the nearest spatial container of an element (`Project/
68
+ * Building/Level 2/Room 204`), or `undefined` when the element is not
69
+ * contained anywhere the hierarchy knows about. Prefers the finest container
70
+ * (`elementToContainer`: a space or zone) over the storey.
71
+ *
72
+ * An unnamed node contributes its `LongName`, else its IFC class name, so the
73
+ * path stays stable across exports. Names are trimmed so trailing whitespace
74
+ * an authoring tool leaves behind does not split one storey into two.
75
+ */
76
+ export function spatialContainerPath(store, expressId) {
77
+ const hierarchy = store.spatialHierarchy;
78
+ if (!hierarchy)
79
+ return undefined;
80
+ const container = hierarchy.elementToContainer?.get(expressId) ?? hierarchy.elementToStorey.get(expressId);
81
+ if (container === undefined)
82
+ return undefined;
83
+ return pathsOf(hierarchy).get(container);
84
+ }
85
+ /**
86
+ * Parse a `--key-from` style spec. `Tag` (case-insensitive) reads the IfcElement
87
+ * `Tag` attribute; anything containing a dot is `Pset.Property`. Returns
88
+ * `undefined` for a spec that names neither.
89
+ */
90
+ export function parseAuthoredKeySpec(spec) {
91
+ const trimmed = spec.trim();
92
+ if (trimmed.toLowerCase() === 'tag')
93
+ return { kind: 'tag' };
94
+ const dot = trimmed.indexOf('.');
95
+ if (dot <= 0 || dot === trimmed.length - 1)
96
+ return undefined;
97
+ return { kind: 'property', pset: trimmed.slice(0, dot), property: trimmed.slice(dot + 1) };
98
+ }
99
+ /**
100
+ * The authored key of one entity under a spec, or `undefined` when the entity
101
+ * carries none (empty and whitespace-only values count as none — an empty
102
+ * `Tag` is the schema's default, not an identity).
103
+ */
104
+ export function authoredKeyValue(store, expressId, spec, extractor = new EntityExtractor(store.source)) {
105
+ let raw;
106
+ if (spec.kind === 'tag') {
107
+ const ifcType = store.entities.getTypeName(expressId);
108
+ const index = getAttributeNamesAcrossSchemas(ifcType).indexOf('Tag');
109
+ // @raw-entity-enumeration-ok authored-key lookup reads the specified entity's source Tag slot, not an entity set
110
+ const ref = store.entityIndex.byId.get(expressId);
111
+ if (index < 0 || !ref)
112
+ return undefined;
113
+ raw = extractor.extractEntity(ref)?.attributes?.[index];
114
+ }
115
+ else {
116
+ for (const set of extractPropertiesOnDemand(store, expressId)) {
117
+ if (set.name !== spec.pset)
118
+ continue;
119
+ const property = set.properties.find((candidate) => candidate.name === spec.property);
120
+ if (property) {
121
+ raw = property.value;
122
+ break;
123
+ }
124
+ }
125
+ }
126
+ if (raw === null || raw === undefined)
127
+ return undefined;
128
+ const value = typeof raw === 'object' ? JSON.stringify(raw) : String(raw);
129
+ return value.trim().length > 0 ? value.trim() : undefined;
130
+ }
131
+ //# sourceMappingURL=identity-hints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-hints.js","sourceRoot":"","sources":["../src/identity-hints.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,15 @@ export declare function getAttributeNames(type: string): string[];
28
28
  * `getAttributeNames`); only otherwise-empty lookups consult the union.
29
29
  */
30
30
  export declare function getAttributeNamesAcrossSchemas(type: string): string[];
31
+ /** Attribute names in one model schema, falling back to the bundled union. */
32
+ export declare function getAttributeNamesForSchema(type: string, schema: string | undefined): string[];
33
+ /**
34
+ * The declared EXPRESS type of one attribute (`IfcDoorPanelProperties.PanelOperation`
35
+ * → `IfcDoorPanelOperationEnum`) in one model schema, falling back to the IFC4
36
+ * pin. `undefined` when the entity or attribute is unknown. IDS reads a
37
+ * predefined property set's attributes as properties, and this is their dataType.
38
+ */
39
+ export declare function getAttributeTypeForSchema(type: string, attribute: string, schema: string | undefined): string | undefined;
31
40
  /**
32
41
  * Check if a type is a real IFC entity class in any bundled schema.
33
42
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ifc-schema.d.ts","sourceRoot":"","sources":["../src/ifc-schema.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBtD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAoED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMrE;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3D"}
1
+ {"version":3,"file":"ifc-schema.d.ts","sourceRoot":"","sources":["../src/ifc-schema.ts"],"names":[],"mappings":"AAoDA,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBtD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAoED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMrE;AAED,8EAA8E;AAC9E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAS7F;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAUzH;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3D"}
@@ -8,15 +8,21 @@
8
8
  * Do NOT hardcode entity types or attributes here; regenerate instead.
9
9
  */
10
10
  import { SCHEMA_REGISTRY, getAllAttributesForEntity, isKnownEntity, getInheritanceChainForEntity, getEntityMetadata } from './generated/schema-registry.js';
11
- import { ENTITIES_IFC2X3, ENTITIES_IFC4, ENTITIES_IFC4X3, IFC_DATA_TYPES } from '@ifc-lite/data';
11
+ import { getSchemaRegistryForVersion } from './generated/schema-registry-by-version.js';
12
+ import { ENTITIES_IFC2X3, ENTITIES_IFC4_EXPRESS, ENTITIES_IFC4X3, IFC_DATA_TYPES } from '@ifc-lite/data';
12
13
  // Union map across every bundled IFC schema (2X3 + 4 + 4X3). The parser
13
14
  // has to categorize entities from ANY schema the user loads — so the
14
15
  // inheritance walk must consult more than the IFC4 registry the parser's
15
16
  // codegen pinned. Later schemas win on name collision (a non-issue in
16
17
  // practice because the modern schemas are supersets).
18
+ //
19
+ // The IFC4 table is `ENTITIES_IFC4_EXPRESS`, not the raw `ENTITIES_IFC4`: the
20
+ // raw table carries alignment-extension entities IFC4 does not declare
21
+ // (#5204), and folding them in made `isKnownType` answer `true` for names no
22
+ // bundled schema has.
17
23
  const ENTITY_INFO_BY_UPPER = (() => {
18
24
  const map = new Map();
19
- for (const list of [ENTITIES_IFC2X3, ENTITIES_IFC4, ENTITIES_IFC4X3]) {
25
+ for (const list of [ENTITIES_IFC2X3, ENTITIES_IFC4_EXPRESS, ENTITIES_IFC4X3]) {
20
26
  for (const entity of list) {
21
27
  map.set(entity.name.toUpperCase(), entity);
22
28
  }
@@ -164,6 +170,35 @@ export function getAttributeNamesAcrossSchemas(type) {
164
170
  const info = ENTITY_INFO_BY_UPPER.get(canonical.toUpperCase());
165
171
  return info ? [...info.attributes] : [];
166
172
  }
173
+ /** Attribute names in one model schema, falling back to the bundled union. */
174
+ export function getAttributeNamesForSchema(type, schema) {
175
+ const normalized = schema?.toUpperCase().replace(/[^A-Z0-9]/g, '');
176
+ if (normalized === 'IFC2X3' || normalized === 'IFC4' || normalized === 'IFC4X3') {
177
+ const registry = getSchemaRegistryForVersion(normalized);
178
+ const canonical = Object.keys(registry.entities).find(name => name.toUpperCase() === type.toUpperCase());
179
+ const attributes = canonical ? registry.entities[canonical]?.allAttributes : undefined;
180
+ if (attributes)
181
+ return attributes.map(attribute => attribute.name);
182
+ }
183
+ return getAttributeNamesAcrossSchemas(type);
184
+ }
185
+ /**
186
+ * The declared EXPRESS type of one attribute (`IfcDoorPanelProperties.PanelOperation`
187
+ * → `IfcDoorPanelOperationEnum`) in one model schema, falling back to the IFC4
188
+ * pin. `undefined` when the entity or attribute is unknown. IDS reads a
189
+ * predefined property set's attributes as properties, and this is their dataType.
190
+ */
191
+ export function getAttributeTypeForSchema(type, attribute, schema) {
192
+ const normalized = schema?.toUpperCase().replace(/[^A-Z0-9]/g, '');
193
+ let attributes;
194
+ if (normalized === 'IFC2X3' || normalized === 'IFC4' || normalized === 'IFC4X3') {
195
+ const registry = getSchemaRegistryForVersion(normalized);
196
+ const canonical = Object.keys(registry.entities).find(name => name.toUpperCase() === type.toUpperCase());
197
+ attributes = canonical ? registry.entities[canonical]?.allAttributes : undefined;
198
+ }
199
+ attributes ??= getAllAttributesForEntity(type);
200
+ return attributes.find(a => a.name === attribute)?.type;
201
+ }
167
202
  /**
168
203
  * Check if a type is a real IFC entity class in any bundled schema.
169
204
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ifc-schema.js","sourceRoot":"","sources":["../src/ifc-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ifc-schema.js","sourceRoot":"","sources":["../src/ifc-schema.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export type { IfcZipContents } from './ifczip.js';
3
3
  export { StepTokenizer } from './tokenizer.js';
4
4
  export { EntityIndexBuilder } from './entity-index.js';
5
5
  export { EntityExtractor } from './entity-extractor.js';
6
+ export { spatialContainerPath, authoredKeyValue, parseAuthoredKeySpec, type AuthoredKeySpec } from './identity-hints.js';
6
7
  export { STEP_TRIVIA } from './step-trivia.js';
7
8
  export { asSourceBytes, contiguousSourceBytes, isSourceBytes, sourceBytesFromTransferable, compressSourceInPlace, sourceBlockStats, EMPTY_SOURCE_BYTES, } from './source-bytes.js';
8
9
  export { compressSource, shouldCompressSource, COMPRESSION_MIN_BYTES, type CompressedSource, } from './source-compress.js';
@@ -11,7 +12,7 @@ export type { IfcSourceBytes, IfcSourceTransfer } from './source-bytes.js';
11
12
  export { CompactEntityIndex, CompactEntityIndexBuilder, buildCompactEntityIndex } from './compact-entity-index.js';
12
13
  export { scanIfcEntities } from './entity-scanner.js';
13
14
  export type { EntityScanPath, EntityScanResult, PreScannedEntityIndex, WasmScanApi } from './entity-scanner.js';
14
- export { REL_TYPE_MAP, isIfcTypeLikeEntity } from './columnar-parser-indexes.js';
15
+ export { REL_TYPE_MAP, SECONDARY_REL_TYPE_MAP, isIfcTypeLikeEntity } from './columnar-parser-indexes.js';
15
16
  export { IFC_SUBTYPES, expandTypes, QUERY_REL_TYPE_MAP } from './query-backend-maps.js';
16
17
  export { PropertyExtractor } from './property-extractor.js';
17
18
  export { QuantityExtractor } from './quantity-extractor.js';
@@ -21,7 +22,7 @@ export { extractLengthUnitScale, resolveEntityLengthUnitScale, resolveOwningIfcP
21
22
  export { extractProjectUnits, measureUnit, ProjectUnits, type ResolvedUnit, type MeasureUnit, } from './project-units.js';
22
23
  export { quantitySiScale } from './quantity-collect.js';
23
24
  export { scaleMeasureValue, scaledPropertyValue, roundToScale } from './measure-unit-scale.js';
24
- export { ColumnarParser, type IfcDataStore, type EntityByIdIndex, extractPropertiesOnDemand, extractQuantitiesOnDemand, extractEntityAttributesOnDemand, extractAllEntityAttributes, getRawNamedAttributes, extractRootAttributesFromEntity, extractClassificationsOnDemand, extractClassificationSystemsOnDemand, extractMaterialsOnDemand, extractAllMaterialsOnDemand, extractMaterialPropertiesOnDemand, extractMaterialPropertiesForMaterialId, resolveMaterialDefId, resolveAllMaterialDefIds, collectMaterialLeaves, buildMaterialUsageIndex, getMaterialDisplay, extractTypePropertiesOnDemand, extractTypeEntityOwnProperties, extractTypeQuantitiesOnDemand, mergeInheritedPropertySets, mergeInheritedQuantitySets, extractDocumentsOnDemand, extractRelationshipsOnDemand, extractGroupMembersOnDemand, extractGroupAssignmentFactorOnDemand, extractGeoreferencingOnDemand, type ClassificationInfo, type ClassificationSystemNames, type MaterialInfo, type MaterialLayerInfo, type MaterialProfileInfo, type MaterialConstituentInfo, type MaterialPsetGroup, type MaterialLeaf, type MaterialUsage, type TypePropertyInfo, type TypeQuantityInfo, type DocumentInfo, type EntityRelationships, type GroupMember } from './columnar-parser.js';
25
+ export { ColumnarParser, type IfcDataStore, type EntityByIdIndex, extractPropertiesOnDemand, extractQuantitiesOnDemand, extractEntityAttributesOnDemand, extractAllEntityAttributes, getRawNamedAttributes, extractRootAttributesFromEntity, extractClassificationsOnDemand, extractClassificationSystemsOnDemand, extractMaterialsOnDemand, extractAllMaterialsOnDemand, extractMaterialPropertiesOnDemand, extractMaterialPropertiesForMaterialId, resolveMaterialDefId, resolveAllMaterialDefIds, collectMaterialLeaves, buildMaterialUsageIndex, getMaterialDisplay, extractTypePropertiesOnDemand, extractTypeEntityOwnProperties, extractTypeQuantitiesOnDemand, mergeInheritedPropertySets, mergeInheritedQuantitySets, extractDocumentsOnDemand, extractRelationshipsOnDemand, extractExactRelatedIds, extractGroupMembersOnDemand, extractGroupAssignmentFactorOnDemand, extractGeoreferencingOnDemand, type ClassificationInfo, type ClassificationSystemNames, type MaterialInfo, type MaterialLayerInfo, type MaterialProfileInfo, type MaterialConstituentInfo, type MaterialPsetGroup, type MaterialLeaf, type MaterialUsage, type TypePropertyInfo, type TypeQuantityInfo, type DocumentInfo, type EntityRelationships, type GroupMember } from './columnar-parser.js';
25
26
  export type { IfcStoreBase, IfcSourceHeader, SpatialHierarchy, EntityTable } from '@ifc-lite/data';
26
27
  export { parseSourceHeader } from './source-header.js';
27
28
  export { attachDataStoreAccessors, type IfcStoreData } from './data-store-accessors.js';
@@ -43,7 +44,9 @@ export type * from './generated/entities.js';
43
44
  export * from './generated/enums.js';
44
45
  export { serializeValue, toStepLine, generateHeader, generateStepFile, parseStepValue, ref, enumVal, isEntityRef, isEnumValue, type StepValue, type StepEntity, type EntityRef as StepEntityRef, type EnumValue, } from './generated/serializers.js';
45
46
  export * from './types.js';
46
- export { getAttributeNames, getAttributeNamesAcrossSchemas, getAttributeNameAt, isKnownType, isInstantiable, isQueryableObjectType, normalizeIfcTypeName, resolveEntityNameAlias, getInheritanceChain as getInheritanceChainAcrossSchemas } from './ifc-schema.js';
47
+ export { getAttributeNames, getAttributeNamesAcrossSchemas, getAttributeNamesForSchema, getAttributeTypeForSchema, getAttributeNameAt, isKnownType, isInstantiable, isQueryableObjectType, normalizeIfcTypeName, resolveEntityNameAlias, getInheritanceChain as getInheritanceChainAcrossSchemas } from './ifc-schema.js';
48
+ export { resolveEffectiveEntityRecord, type EffectiveEntityRecord, type EntityRecordEdits } from './effective-entity-record.js';
49
+ export { resolveEffectiveRelationshipOverlay, effectiveRelationshipEdges, type EffectiveRelationship, type EffectiveRelationshipOverlay, type RelationshipOverlayReader } from './effective-relationship-overlay.js';
47
50
  import type { ParseResult } from './types.js';
48
51
  import { type IfcDataStore } from './columnar-parser.js';
49
52
  import { type PreScannedEntityIndex, type WasmScanApi } from './entity-scanner.js';