@ifc-lite/parser 7.0.0 → 8.0.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 (87) hide show
  1. package/dist/columnar-parser-attributes.d.ts +1 -1
  2. package/dist/columnar-parser-attributes.d.ts.map +1 -1
  3. package/dist/columnar-parser-attributes.js +36 -1
  4. package/dist/columnar-parser-attributes.js.map +1 -1
  5. package/dist/columnar-parser-indexes.d.ts.map +1 -1
  6. package/dist/columnar-parser-indexes.js +24 -1
  7. package/dist/columnar-parser-indexes.js.map +1 -1
  8. package/dist/columnar-parser-relationships.d.ts +2 -1
  9. package/dist/columnar-parser-relationships.d.ts.map +1 -1
  10. package/dist/columnar-parser-relationships.js +2 -2
  11. package/dist/columnar-parser-relationships.js.map +1 -1
  12. package/dist/columnar-parser-root-attributes.d.ts +2 -5
  13. package/dist/columnar-parser-root-attributes.d.ts.map +1 -1
  14. package/dist/columnar-parser-root-attributes.js +22 -2
  15. package/dist/columnar-parser-root-attributes.js.map +1 -1
  16. package/dist/columnar-parser.d.ts +5 -1
  17. package/dist/columnar-parser.d.ts.map +1 -1
  18. package/dist/columnar-parser.js +19 -56
  19. package/dist/columnar-parser.js.map +1 -1
  20. package/dist/cost-evaluator.d.ts.map +1 -1
  21. package/dist/cost-evaluator.js +6 -4
  22. package/dist/cost-evaluator.js.map +1 -1
  23. package/dist/cost-extractor.d.ts +2 -1
  24. package/dist/cost-extractor.d.ts.map +1 -1
  25. package/dist/cost-extractor.js +22 -5
  26. package/dist/cost-extractor.js.map +1 -1
  27. package/dist/cost-overlay.d.ts +104 -0
  28. package/dist/cost-overlay.d.ts.map +1 -0
  29. package/dist/cost-overlay.js +5 -0
  30. package/dist/cost-overlay.js.map +1 -0
  31. package/dist/cost-reader.d.ts +45 -2
  32. package/dist/cost-reader.d.ts.map +1 -1
  33. package/dist/cost-reader.js +168 -11
  34. package/dist/cost-reader.js.map +1 -1
  35. package/dist/cost-types.d.ts +9 -1
  36. package/dist/cost-types.d.ts.map +1 -1
  37. package/dist/cost.d.ts +1 -0
  38. package/dist/cost.d.ts.map +1 -1
  39. package/dist/cost.js.map +1 -1
  40. package/dist/effective-entity-record.d.ts +35 -0
  41. package/dist/effective-entity-record.d.ts.map +1 -0
  42. package/dist/effective-entity-record.js +43 -0
  43. package/dist/effective-entity-record.js.map +1 -0
  44. package/dist/effective-relationship-overlay.d.ts +31 -0
  45. package/dist/effective-relationship-overlay.d.ts.map +1 -0
  46. package/dist/effective-relationship-overlay.js +111 -0
  47. package/dist/effective-relationship-overlay.js.map +1 -0
  48. package/dist/exact-relationship-edges.d.ts +46 -0
  49. package/dist/exact-relationship-edges.d.ts.map +1 -0
  50. package/dist/exact-relationship-edges.js +88 -0
  51. package/dist/exact-relationship-edges.js.map +1 -0
  52. package/dist/identity-hints.d.ts +32 -0
  53. package/dist/identity-hints.d.ts.map +1 -0
  54. package/dist/identity-hints.js +130 -0
  55. package/dist/identity-hints.js.map +1 -0
  56. package/dist/ifc-schema.d.ts +2 -0
  57. package/dist/ifc-schema.d.ts.map +1 -1
  58. package/dist/ifc-schema.js +13 -0
  59. package/dist/ifc-schema.js.map +1 -1
  60. package/dist/index.d.ts +6 -3
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +6 -3
  63. package/dist/index.js.map +1 -1
  64. package/dist/on-demand-extractors.d.ts +6 -31
  65. package/dist/on-demand-extractors.d.ts.map +1 -1
  66. package/dist/on-demand-extractors.js +18 -11
  67. package/dist/on-demand-extractors.js.map +1 -1
  68. package/dist/project-units.d.ts.map +1 -1
  69. package/dist/project-units.js +8 -2
  70. package/dist/project-units.js.map +1 -1
  71. package/dist/property-unit.d.ts +24 -0
  72. package/dist/property-unit.d.ts.map +1 -0
  73. package/dist/property-unit.js +29 -0
  74. package/dist/property-unit.js.map +1 -0
  75. package/dist/query-backend-maps.d.ts +5 -8
  76. package/dist/query-backend-maps.d.ts.map +1 -1
  77. package/dist/query-backend-maps.js +8 -15
  78. package/dist/query-backend-maps.js.map +1 -1
  79. package/dist/relationship-schema-slots.d.ts +8 -8
  80. package/dist/relationship-schema-slots.d.ts.map +1 -1
  81. package/dist/relationship-schema-slots.js +31 -18
  82. package/dist/relationship-schema-slots.js.map +1 -1
  83. package/dist/worker-parser.d.ts +29 -1
  84. package/dist/worker-parser.d.ts.map +1 -1
  85. package/dist/worker-parser.js +80 -7
  86. package/dist/worker-parser.js.map +1 -1
  87. package/package.json +7 -7
@@ -32,20 +32,132 @@ class CostSourceCache {
32
32
  }
33
33
  toTransferable() { return this.source.toTransferable(); }
34
34
  }
35
- /** Memoized source reader used once per cost extraction. */
35
+ /**
36
+ * Memoized source reader used once per cost extraction.
37
+ *
38
+ * When an {@link CostMutationOverlay} is supplied, every read goes through it
39
+ * first: a tombstoned entity does not exist (no id, no type, no record), a
40
+ * retyped entity is listed under and reports its pending class, and a record
41
+ * any pending edit reaches is read from the text the exporter will write for
42
+ * it. This is the one place the overlay is applied — see `cost-overlay.ts`
43
+ * for why it is here and not on the finished graph. The caches below are
44
+ * per-reader and a reader is built per extraction, so an overlaid read never
45
+ * reuses an unoverlaid entry.
46
+ */
36
47
  export class CostEntityReader {
37
48
  store;
49
+ overlay;
50
+ diagnostics;
38
51
  extractor;
39
52
  source;
40
53
  cache = new Map();
41
54
  lexemeCache = new Map();
42
- constructor(store) {
55
+ recordCache = new Map();
56
+ retyped;
57
+ created;
58
+ constructor(store, overlay, diagnostics) {
43
59
  this.store = store;
60
+ this.overlay = overlay;
61
+ this.diagnostics = diagnostics;
44
62
  this.source = new CostSourceCache(asSourceBytes(store.source));
45
63
  this.extractor = new EntityExtractor(this.source);
46
64
  }
65
+ /** GlobalId from the effective overlay record, then the immutable source table. */
66
+ globalId(expressId) {
67
+ return asString(this.get(expressId)?.attributes?.[0])
68
+ ?? this.store.entities?.getGlobalId?.(expressId) ?? '';
69
+ }
70
+ /** True when a pending edit has deleted `expressId` from the loaded model. */
71
+ isDeleted(expressId) {
72
+ return this.overlay?.isDeleted(expressId) === true;
73
+ }
74
+ /** Pending retypes, UPPERCASE, restricted to entities the source actually has. */
75
+ retypes() {
76
+ if (!this.retyped) {
77
+ const retyped = new Map();
78
+ for (const [id, type] of this.overlay?.retypes() ?? []) {
79
+ if (getEntityRefFromStore(this.store, id))
80
+ retyped.set(id, type.toUpperCase());
81
+ }
82
+ this.retyped = retyped;
83
+ }
84
+ return this.retyped;
85
+ }
86
+ /**
87
+ * Overlay-CREATED entities (#4857 PR A), keyed by expressId, UPPERCASE
88
+ * class. An entry the overlay could not lay out (`error` set instead of
89
+ * `type`/`text`) surfaces as a `PENDING_EDIT_NOT_APPLIED` diagnostic here,
90
+ * once, rather than at every call site that would otherwise re-check it.
91
+ */
92
+ createdEntities() {
93
+ if (!this.created) {
94
+ const created = new Map();
95
+ // A pre-authoring overlay may omit the optional `created()` capability.
96
+ const entries = this.overlay?.created?.() ?? [];
97
+ for (const entry of entries) {
98
+ if (entry.error !== undefined) {
99
+ this.diagnostics?.push({
100
+ Code: 'PENDING_EDIT_NOT_APPLIED', Severity: 'warning', expressId: entry.expressId,
101
+ Message: `Newly authored entity #${entry.expressId} is not readable here: ${entry.error}`,
102
+ });
103
+ continue;
104
+ }
105
+ if (entry.type !== undefined && entry.text !== undefined) {
106
+ created.set(entry.expressId, { type: entry.type.toUpperCase(), text: entry.text });
107
+ for (const reason of entry.notWritten ?? []) {
108
+ this.diagnostics?.push({
109
+ Code: 'PENDING_EDIT_NOT_APPLIED', Severity: 'warning', expressId: entry.expressId,
110
+ Message: `A pending edit to newly authored #${entry.expressId} is not written on export and is not reflected here: ${reason}`,
111
+ });
112
+ }
113
+ }
114
+ }
115
+ this.created = created;
116
+ }
117
+ return this.created;
118
+ }
119
+ /**
120
+ * The record text an overlaid read sees, or `undefined` when the record
121
+ * reads exactly as the source states it (no overlay, or no edit reaches it)
122
+ * and the unoverlaid source path applies. `null` means no record at all.
123
+ */
124
+ overlaidRecord(expressId) {
125
+ if (!this.overlay)
126
+ return undefined;
127
+ if (this.recordCache.has(expressId))
128
+ return this.recordCache.get(expressId);
129
+ const ref = this.isDeleted(expressId) ? null : getEntityRefFromStore(this.store, expressId);
130
+ let text = null;
131
+ if (ref) {
132
+ const sourceText = this.source.decodeUtf8(ref.byteOffset, ref.byteOffset + ref.byteLength);
133
+ const effective = this.overlay.effectiveRecord(expressId, sourceText, ref.type);
134
+ // Unchanged text reads through the shared source extractor and caches.
135
+ text = effective.text === sourceText ? undefined : effective.text;
136
+ for (const reason of effective.notWritten) {
137
+ this.diagnostics?.push({
138
+ Code: 'PENDING_EDIT_NOT_APPLIED', Severity: 'warning', expressId,
139
+ Message: `A pending edit to #${expressId} is not written on export and is not reflected here: ${reason}`,
140
+ });
141
+ }
142
+ }
143
+ this.recordCache.set(expressId, text);
144
+ return text;
145
+ }
47
146
  ids(type) {
48
- return this.store.entityIndex.byType.get(type.toUpperCase()) ?? [];
147
+ const wanted = type.toUpperCase();
148
+ const ids = this.store.entityIndex.byType.get(wanted) ?? [];
149
+ if (!this.overlay)
150
+ return ids;
151
+ const retyped = this.retypes();
152
+ const kept = ids.filter(id => !this.isDeleted(id) && (retyped.get(id) ?? wanted) === wanted);
153
+ const createdIds = new Set(this.createdEntities().keys());
154
+ const retypedIn = [...retyped].filter(([id, newType]) => newType === wanted && !this.isDeleted(id) && !ids.includes(id) && !createdIds.has(id));
155
+ const createdIn = [...this.createdEntities()]
156
+ .filter(([id, entry]) => entry.type === wanted && !this.isDeleted(id))
157
+ .map(([id]) => id);
158
+ if (retypedIn.length === 0 && createdIn.length === 0)
159
+ return kept;
160
+ return [...kept, ...retypedIn.map(([id]) => id), ...createdIn].sort((a, b) => a - b);
49
161
  }
50
162
  get schemaVersion() {
51
163
  return this.store.schemaVersion;
@@ -54,21 +166,60 @@ export class CostEntityReader {
54
166
  const cached = this.cache.get(expressId);
55
167
  if (cached !== undefined)
56
168
  return cached;
57
- const ref = getEntityRefFromStore(this.store, expressId);
58
- const entity = ref ? this.extractor.extractEntity(ref) : null;
169
+ const createdEntry = this.isDeleted(expressId) ? undefined : this.createdEntities().get(expressId);
170
+ let entity;
171
+ if (createdEntry) {
172
+ const bytes = new TextEncoder().encode(createdEntry.text);
173
+ entity = new EntityExtractor(bytes).extractEntity({
174
+ expressId, type: createdEntry.type, byteOffset: 0, byteLength: bytes.byteLength, lineNumber: 0,
175
+ });
176
+ }
177
+ else {
178
+ const record = this.overlaidRecord(expressId);
179
+ if (record === undefined) {
180
+ const ref = getEntityRefFromStore(this.store, expressId);
181
+ entity = ref ? this.extractor.extractEntity(ref) : null;
182
+ }
183
+ else if (record === null) {
184
+ entity = null;
185
+ }
186
+ else {
187
+ const bytes = new TextEncoder().encode(record);
188
+ entity = new EntityExtractor(bytes).extractEntity({
189
+ expressId, type: this.typeOf(expressId) ?? '', byteOffset: 0, byteLength: bytes.byteLength, lineNumber: 0,
190
+ });
191
+ }
192
+ }
59
193
  this.cache.set(expressId, entity);
60
194
  return entity;
61
195
  }
62
196
  typeOf(expressId) {
63
- return getEntityRefFromStore(this.store, expressId)?.type.toUpperCase();
197
+ if (this.isDeleted(expressId))
198
+ return undefined;
199
+ if (this.overlay) {
200
+ const created = this.createdEntities().get(expressId);
201
+ if (created)
202
+ return created.type;
203
+ }
204
+ const type = getEntityRefFromStore(this.store, expressId)?.type.toUpperCase();
205
+ if (type === undefined || !this.overlay)
206
+ return type;
207
+ return this.retypes().get(expressId) ?? type;
64
208
  }
65
209
  attributeLexeme(expressId, index) {
66
210
  let lexemes = this.lexemeCache.get(expressId);
67
211
  if (!lexemes) {
68
- const ref = getEntityRefFromStore(this.store, expressId);
69
- lexemes = ref
70
- ? splitCostAttributeLexemes(this.source.decodeUtf8(ref.byteOffset, ref.byteOffset + ref.byteLength))
71
- : [];
212
+ const createdEntry = this.isDeleted(expressId) ? undefined : this.createdEntities().get(expressId);
213
+ let text;
214
+ if (createdEntry) {
215
+ text = createdEntry.text;
216
+ }
217
+ else {
218
+ const record = this.overlaidRecord(expressId);
219
+ const ref = record === undefined ? getEntityRefFromStore(this.store, expressId) : undefined;
220
+ text = record ?? (ref ? this.source.decodeUtf8(ref.byteOffset, ref.byteOffset + ref.byteLength) : undefined);
221
+ }
222
+ lexemes = text === undefined ? [] : splitCostAttributeLexemes(text);
72
223
  this.lexemeCache.set(expressId, lexemes);
73
224
  }
74
225
  return lexemes[index];
@@ -89,8 +240,14 @@ export class CostEntityReader {
89
240
  return costAttributePresent(this.attributeLexeme(expressId, index));
90
241
  }
91
242
  }
243
+ /**
244
+ * Read a STEP string attribute (IfcLabel/IfcText/IfcIdentifier) as-is,
245
+ * keeping an explicit `''` distinct from an absent (`$`) attribute — both
246
+ * are legal `IfcLabel` values per the schema, and IfcOpenShell keeps them
247
+ * distinct too (see #4881). Only `undefined` means "not a string at all".
248
+ */
92
249
  export function asString(value) {
93
- return typeof value === 'string' && value.length > 0 ? value : undefined;
250
+ return typeof value === 'string' ? value : undefined;
94
251
  }
95
252
  export function asEnum(value) {
96
253
  if (typeof value !== 'string')
@@ -1 +1 @@
1
- {"version":3,"file":"cost-reader.js","sourceRoot":"","sources":["../src/cost-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost-reader.js","sourceRoot":"","sources":["../src/cost-reader.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  import type { CollectedQuantity } from './quantity-collect.js';
3
3
  export type { CollectedQuantity };
4
4
  export type CostSchemaVersion = 'IFC2X3' | 'IFC4' | 'IFC4X3' | 'IFC5';
5
- export type CostDiagnosticCode = 'IFC2X3_PARTIAL_READ' | 'UNSUPPORTED_SCHEMA' | 'MISSING_REFERENCE' | 'INVALID_LIST' | 'MULTIPLE_NESTING_PARENTS' | 'NESTING_CYCLE' | 'QUANTITY_CYCLE' | 'VALUE_CYCLE' | 'MISSING_VALUE' | 'INVALID_NUMBER' | 'UNSUPPORTED_APPLIED_VALUE' | 'UNSUPPORTED_CONDITION' | 'UNSUPPORTED_UNIT' | 'INCOMPATIBLE_UNIT' | 'MISSING_CURRENCY' | 'MIXED_CURRENCY' | 'DIVISION_BY_ZERO';
5
+ export type CostDiagnosticCode = 'IFC2X3_PARTIAL_READ' | 'UNSUPPORTED_SCHEMA' | 'MISSING_REFERENCE' | 'INVALID_LIST' | 'MULTIPLE_NESTING_PARENTS' | 'NESTING_CYCLE' | 'QUANTITY_CYCLE' | 'VALUE_CYCLE' | 'MISSING_VALUE' | 'INVALID_NUMBER' | 'UNSUPPORTED_APPLIED_VALUE' | 'UNSUPPORTED_CONDITION' | 'UNSUPPORTED_UNIT' | 'INCOMPATIBLE_UNIT' | 'MISSING_CURRENCY' | 'MIXED_CURRENCY' | 'DIVISION_BY_ZERO' | 'PENDING_EDIT_NOT_APPLIED';
6
6
  export interface CostDiagnostic {
7
7
  Code: CostDiagnosticCode;
8
8
  Message: string;
@@ -62,7 +62,15 @@ export interface CostItemInfo {
62
62
  costValues?: CostValueInfo[];
63
63
  parentGlobalId?: string;
64
64
  childGlobalIds: string[];
65
+ /**
66
+ * Express IDs of the `IfcProduct` instances assigned to this cost item,
67
+ * via either `IfcRelAssignsToProduct` or `IfcRelAssignsToControl`. Tasks,
68
+ * resources and actors assigned via `IfcRelAssignsToControl` are excluded
69
+ * — that relationship also legitimately binds those, but this field is
70
+ * a products-only view (#4877).
71
+ */
65
72
  productExpressIds: number[];
73
+ /** GlobalIds parallel to {@link productExpressIds}, same filtering. */
66
74
  productGlobalIds: string[];
67
75
  controllingScheduleGlobalIds: string[];
68
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cost-types.d.ts","sourceRoot":"","sources":["../src/cost-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost-types.d.ts","sourceRoot":"","sources":["../src/cost-types.ts"],"names":[],"mappings":"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"}
package/dist/cost.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { extractCostOnDemand } from './cost-extractor.js';
2
+ export type { CostExtractionOptions, CostMutationOverlay, CostCreatedRecord } from './cost-overlay.js';
2
3
  export { evaluateCostItem, evaluateCostValue } from './cost-evaluator.js';
3
4
  export type { CostAppliedValue, CostDiagnostic, CostDiagnosticCode, CostEvaluationOptions, CostEvaluationResult, CostExtraction, CostGraphExtraction, CostItemInfo, CostMeasureWithUnitInfo, CostQuantityDimension, CostQuantityInfo, CostRelationshipInfo, CostRelationshipType, CostScheduleInfo, CostSchemaVersion, CostUnitInfo, CostValueInfo, CostValueUnitBasis, } from './cost-types.js';
4
5
  //# sourceMappingURL=cost.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
package/dist/cost.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../src/cost.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { IfcAttributeValue } from '@ifc-lite/data';
2
+ /** The pending edits a read model must fold into one entity record. */
3
+ export interface EntityRecordEdits {
4
+ /** Class a queued `setEntityType` gives the entity, when present. */
5
+ retype?: string;
6
+ named: Iterable<readonly [string, unknown]>;
7
+ positional: Iterable<readonly [number, IfcAttributeValue | unknown]>;
8
+ }
9
+ export interface EffectiveEntityRecord {
10
+ /** `IfcWall` spelling of the effective class. */
11
+ type: string;
12
+ attributes: unknown[];
13
+ /** Attribute names of the effective class, positionally aligned with `attributes`. */
14
+ names: string[];
15
+ }
16
+ /**
17
+ * Re-lay authored attributes out by NAME into the target class's layout, as
18
+ * `retypeArgTokens` does on export: a slot the target class does not share
19
+ * is unset, never the value that happened to sit at the same index. Without
20
+ * a resolvable source layout export keeps the list verbatim (keyword-only
21
+ * swap), and so does this.
22
+ */
23
+ export declare function retypedAttributes(sourceType: string, attributes: readonly unknown[], effectiveType: string, targetNames: readonly string[], schemaVersion: string | undefined): unknown[];
24
+ /**
25
+ * One entity record as export will write it: retype first (name-based
26
+ * re-layout), then named edits resolved against the effective class, then
27
+ * positional edits (which win over a named edit to the same slot). Every read
28
+ * surface (CLI, MCP, viewer) must describe a created or edited entity
29
+ * through this, or it disagrees with the saved file (#5009 review).
30
+ */
31
+ export declare function resolveEffectiveEntityRecord(entity: {
32
+ type: string;
33
+ attributes: readonly unknown[];
34
+ }, edits: EntityRecordEdits, schemaVersion: string | undefined): EffectiveEntityRecord;
35
+ //# sourceMappingURL=effective-entity-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-entity-record.d.ts","sourceRoot":"","sources":["../src/effective-entity-record.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,sFAAsF;IACtF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,SAAS,OAAO,EAAE,EAC9B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,OAAO,EAAE,CAMX;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,EACxD,KAAK,EAAE,iBAAiB,EACxB,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,qBAAqB,CAYvB"}
@@ -0,0 +1,43 @@
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 { getAttributeNamesForSchema, normalizeIfcTypeName } from './ifc-schema.js';
5
+ /**
6
+ * Re-lay authored attributes out by NAME into the target class's layout, as
7
+ * `retypeArgTokens` does on export: a slot the target class does not share
8
+ * is unset, never the value that happened to sit at the same index. Without
9
+ * a resolvable source layout export keeps the list verbatim (keyword-only
10
+ * swap), and so does this.
11
+ */
12
+ export function retypedAttributes(sourceType, attributes, effectiveType, targetNames, schemaVersion) {
13
+ if (effectiveType.toUpperCase() === sourceType.toUpperCase())
14
+ return [...attributes];
15
+ const sourceNames = getAttributeNamesForSchema(sourceType, schemaVersion);
16
+ if (sourceNames.length === 0)
17
+ return [...attributes];
18
+ const byName = new Map(sourceNames.map((name, index) => [name, attributes[index]]));
19
+ return targetNames.map((name) => byName.get(name) ?? null);
20
+ }
21
+ /**
22
+ * One entity record as export will write it: retype first (name-based
23
+ * re-layout), then named edits resolved against the effective class, then
24
+ * positional edits (which win over a named edit to the same slot). Every read
25
+ * surface (CLI, MCP, viewer) must describe a created or edited entity
26
+ * through this, or it disagrees with the saved file (#5009 review).
27
+ */
28
+ export function resolveEffectiveEntityRecord(entity, edits, schemaVersion) {
29
+ const type = edits.retype ? normalizeIfcTypeName(edits.retype) : entity.type;
30
+ const names = getAttributeNamesForSchema(type, schemaVersion);
31
+ const attributes = names.length > 0
32
+ ? retypedAttributes(entity.type, entity.attributes, type, names, schemaVersion)
33
+ : [...entity.attributes];
34
+ for (const [name, value] of edits.named) {
35
+ const index = names.indexOf(name);
36
+ if (index >= 0)
37
+ attributes[index] = value;
38
+ }
39
+ for (const [index, value] of edits.positional)
40
+ attributes[index] = value;
41
+ return { type, attributes, names };
42
+ }
43
+ //# sourceMappingURL=effective-entity-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-entity-record.js","sourceRoot":"","sources":["../src/effective-entity-record.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAG/D,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAkBnF;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,UAA8B,EAC9B,aAAqB,EACrB,WAA8B,EAC9B,aAAiC;IAEjC,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE;QAAE,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;IACrF,MAAM,WAAW,GAAG,0BAA0B,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAC1E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAwD,EACxD,KAAwB,EACxB,aAAiC;IAEjC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IAC7E,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC;QAC/E,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,IAAI,CAAC;YAAE,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC5C,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU;QAAE,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACzE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { IfcAttributeValue, IfcEntity } from '@ifc-lite/data';
2
+ import type { IfcDataStore } from './columnar-parser.js';
3
+ export interface EffectiveRelationship {
4
+ relationshipId: number;
5
+ relationshipType: string;
6
+ relating: readonly number[];
7
+ related: readonly number[];
8
+ }
9
+ export interface RelationshipOverlayReader {
10
+ createdEntities(): readonly IfcEntity[];
11
+ mutatedEntityIds(): Iterable<number>;
12
+ namedAttributes(expressId: number): Iterable<readonly [string, unknown]>;
13
+ positionalAttributes(expressId: number): Iterable<readonly [number, IfcAttributeValue]>;
14
+ /** Effective class after a queued `setEntityType`, when present. */
15
+ entityType?(expressId: number): string | undefined;
16
+ isDeleted(expressId: number): boolean;
17
+ }
18
+ export interface EffectiveRelationshipOverlay {
19
+ relationships: readonly EffectiveRelationship[];
20
+ /** Parsed relationship rows whose base graph edges must be suppressed. */
21
+ supersededSourceIds: ReadonlySet<number>;
22
+ }
23
+ /** Resolve created and endpoint-mutated relationship records as one effective graph. */
24
+ export declare function resolveEffectiveRelationshipOverlay(store: IfcDataStore, overlay: RelationshipOverlayReader): EffectiveRelationshipOverlay;
25
+ export declare function effectiveRelationshipEdges(overlay: EffectiveRelationshipOverlay, isDeleted: (expressId: number) => boolean, expressId: number, relationshipType?: string): Array<{
26
+ relationshipId: number;
27
+ relationshipType: string;
28
+ direction: 'forward' | 'inverse';
29
+ targetId: number;
30
+ }>;
31
+ //# sourceMappingURL=effective-relationship-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-relationship-overlay.d.ts","sourceRoot":"","sources":["../src/effective-relationship-overlay.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKzD,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACxC,eAAe,IAAI,SAAS,SAAS,EAAE,CAAC;IACxC,gBAAgB,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzE,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACxF,oEAAoE;IACpE,UAAU,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnD,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,0EAA0E;IAC1E,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C;AA+CD,wFAAwF;AACxF,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,yBAAyB,GACjC,4BAA4B,CAqB9B;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,4BAA4B,EACrC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EACzC,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,KAAK,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBjH"}
@@ -0,0 +1,111 @@
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 { getAttributeNamesForSchema, normalizeIfcTypeName } from './ifc-schema.js';
5
+ import { getRelationshipSlotPlan } from './relationship-schema-slots.js';
6
+ import { retypedAttributes } from './effective-entity-record.js';
7
+ function refIds(value) {
8
+ if (typeof value === 'number')
9
+ return Number.isSafeInteger(value) ? [value] : [];
10
+ if (typeof value === 'string') {
11
+ const match = /^#(\d+)$/.exec(value.trim());
12
+ if (!match)
13
+ return [];
14
+ const id = Number(match[1]);
15
+ return Number.isSafeInteger(id) ? [id] : [];
16
+ }
17
+ return Array.isArray(value) ? value.flatMap(refIds) : [];
18
+ }
19
+ function resolveRelationship(store, entity, overlay) {
20
+ const effectiveType = overlay.entityType?.(entity.expressId) ?? entity.type;
21
+ if (!effectiveType.toUpperCase().startsWith('IFCREL') || overlay.isDeleted(entity.expressId))
22
+ return null;
23
+ const names = getAttributeNamesForSchema(effectiveType, store.schemaVersion);
24
+ if (names.length === 0)
25
+ return null;
26
+ const attributes = retypedAttributes(entity.type, entity.attributes, effectiveType, names, store.schemaVersion);
27
+ const named = new Map(overlay.namedAttributes(entity.expressId));
28
+ const positional = new Map(overlay.positionalAttributes(entity.expressId));
29
+ // Match both STEP export pipelines: named edits resolve first, then a
30
+ // positional edit to the same slot wins. Querying a pending relationship
31
+ // must describe the file that saving that pending overlay will produce.
32
+ for (const [name] of named) {
33
+ const index = names.indexOf(name);
34
+ if (index >= 0)
35
+ attributes[index] = named.get(name);
36
+ }
37
+ for (const [index, value] of positional)
38
+ attributes[index] = value;
39
+ const plan = getRelationshipSlotPlan(effectiveType.toUpperCase(), store.schemaVersion);
40
+ if (!plan)
41
+ return null;
42
+ const relating = refIds(attributes[4 + plan.relating.index]);
43
+ const related = refIds(attributes[4 + plan.related.index]);
44
+ if (!relating.length || !related.length)
45
+ return null;
46
+ return {
47
+ relationshipId: entity.expressId,
48
+ relationshipType: normalizeIfcTypeName(effectiveType),
49
+ relating,
50
+ related,
51
+ };
52
+ }
53
+ /** Resolve created and endpoint-mutated relationship records as one effective graph. */
54
+ export function resolveEffectiveRelationshipOverlay(store, overlay) {
55
+ const relationships = [];
56
+ const supersededSourceIds = new Set();
57
+ const createdIds = new Set();
58
+ for (const entity of overlay.createdEntities()) {
59
+ createdIds.add(entity.expressId);
60
+ const relation = resolveRelationship(store, entity, overlay);
61
+ if (relation)
62
+ relationships.push(relation);
63
+ }
64
+ for (const expressId of new Set(overlay.mutatedEntityIds())) {
65
+ if (createdIds.has(expressId))
66
+ continue;
67
+ const entity = store.getEntity(expressId);
68
+ if (!entity)
69
+ continue;
70
+ const authoredRelationship = entity.type.toUpperCase().startsWith('IFCREL');
71
+ const effectiveType = overlay.entityType?.(expressId) ?? entity.type;
72
+ if (!authoredRelationship && !effectiveType.toUpperCase().startsWith('IFCREL'))
73
+ continue;
74
+ if (authoredRelationship)
75
+ supersededSourceIds.add(expressId);
76
+ const relation = resolveRelationship(store, entity, overlay);
77
+ if (relation)
78
+ relationships.push(relation);
79
+ }
80
+ return { relationships, supersededSourceIds };
81
+ }
82
+ export function effectiveRelationshipEdges(overlay, isDeleted, expressId, relationshipType) {
83
+ const upper = relationshipType?.toUpperCase();
84
+ const out = [];
85
+ for (const relation of overlay.relationships) {
86
+ if (upper && relation.relationshipType.toUpperCase() !== upper)
87
+ continue;
88
+ if (relation.relating.includes(expressId)) {
89
+ for (const targetId of relation.related)
90
+ if (!isDeleted(targetId))
91
+ out.push({
92
+ relationshipId: relation.relationshipId,
93
+ relationshipType: relation.relationshipType,
94
+ direction: 'forward',
95
+ targetId,
96
+ });
97
+ }
98
+ if (relation.related.includes(expressId)) {
99
+ for (const targetId of relation.relating)
100
+ if (!isDeleted(targetId))
101
+ out.push({
102
+ relationshipId: relation.relationshipId,
103
+ relationshipType: relation.relationshipType,
104
+ direction: 'inverse',
105
+ targetId,
106
+ });
107
+ }
108
+ }
109
+ return out;
110
+ }
111
+ //# sourceMappingURL=effective-relationship-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-relationship-overlay.js","sourceRoot":"","sources":["../src/effective-relationship-overlay.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,CA4DzB;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"}