@ifc-lite/export 4.5.0 → 4.7.2

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 (188) hide show
  1. package/README.md +5 -5
  2. package/dist/appearance-dependencies.d.ts.map +1 -1
  3. package/dist/appearance-dependencies.js +1 -0
  4. package/dist/appearance-dependencies.js.map +1 -1
  5. package/dist/attribute-real-slots.d.ts.map +1 -1
  6. package/dist/attribute-real-slots.js +7 -1
  7. package/dist/attribute-real-slots.js.map +1 -1
  8. package/dist/attribute-slot-types.js +2 -2
  9. package/dist/attribute-slot-types.js.map +1 -1
  10. package/dist/demesh-prune.d.ts.map +1 -1
  11. package/dist/demesh-prune.js +1 -0
  12. package/dist/demesh-prune.js.map +1 -1
  13. package/dist/demesh-writer.d.ts.map +1 -1
  14. package/dist/demesh-writer.js +1 -0
  15. package/dist/demesh-writer.js.map +1 -1
  16. package/dist/effective-index.d.ts.map +1 -1
  17. package/dist/effective-index.js +2 -0
  18. package/dist/effective-index.js.map +1 -1
  19. package/dist/entity-iteration.d.ts.map +1 -1
  20. package/dist/entity-iteration.js +1 -0
  21. package/dist/entity-iteration.js.map +1 -1
  22. package/dist/entity-type-sets.js +2 -2
  23. package/dist/entity-type-sets.js.map +1 -1
  24. package/dist/generated/ifc4-required-slots.d.ts +17 -0
  25. package/dist/generated/ifc4-required-slots.d.ts.map +1 -0
  26. package/dist/generated/ifc4-required-slots.js +619 -0
  27. package/dist/generated/ifc4-required-slots.js.map +1 -0
  28. package/dist/georef-closure.d.ts.map +1 -1
  29. package/dist/georef-closure.js +5 -0
  30. package/dist/georef-closure.js.map +1 -1
  31. package/dist/ifc5-effective-rows.d.ts +16 -0
  32. package/dist/ifc5-effective-rows.d.ts.map +1 -0
  33. package/dist/ifc5-effective-rows.js +90 -0
  34. package/dist/ifc5-effective-rows.js.map +1 -0
  35. package/dist/ifc5-export-helpers.d.ts +19 -0
  36. package/dist/ifc5-export-helpers.d.ts.map +1 -1
  37. package/dist/ifc5-export-helpers.js +16 -0
  38. package/dist/ifc5-export-helpers.js.map +1 -1
  39. package/dist/ifc5-exporter.d.ts +9 -11
  40. package/dist/ifc5-exporter.d.ts.map +1 -1
  41. package/dist/ifc5-exporter.js +38 -95
  42. package/dist/ifc5-exporter.js.map +1 -1
  43. package/dist/ifc5-pset-properties.d.ts +61 -0
  44. package/dist/ifc5-pset-properties.d.ts.map +1 -0
  45. package/dist/ifc5-pset-properties.js +100 -0
  46. package/dist/ifc5-pset-properties.js.map +1 -0
  47. package/dist/ifc5-tree-scope.js +3 -0
  48. package/dist/ifc5-tree-scope.js.map +1 -1
  49. package/dist/index.d.ts +1 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/lod0-generator.d.ts.map +1 -1
  54. package/dist/lod0-generator.js +2 -0
  55. package/dist/lod0-generator.js.map +1 -1
  56. package/dist/merged-context.d.ts.map +1 -1
  57. package/dist/merged-context.js +3 -0
  58. package/dist/merged-context.js.map +1 -1
  59. package/dist/merged-exporter.d.ts +3 -17
  60. package/dist/merged-exporter.d.ts.map +1 -1
  61. package/dist/merged-exporter.js +50 -46
  62. package/dist/merged-exporter.js.map +1 -1
  63. package/dist/merged-header.d.ts +11 -0
  64. package/dist/merged-header.d.ts.map +1 -0
  65. package/dist/merged-header.js +23 -0
  66. package/dist/merged-header.js.map +1 -0
  67. package/dist/nonrel-positional-ref-narrowing.d.ts +3 -0
  68. package/dist/nonrel-positional-ref-narrowing.d.ts.map +1 -0
  69. package/dist/nonrel-positional-ref-narrowing.js +194 -0
  70. package/dist/nonrel-positional-ref-narrowing.js.map +1 -0
  71. package/dist/nonrel-ref-list-types.d.ts +13 -0
  72. package/dist/nonrel-ref-list-types.d.ts.map +1 -0
  73. package/dist/nonrel-ref-list-types.js +162 -0
  74. package/dist/nonrel-ref-list-types.js.map +1 -0
  75. package/dist/parquet-created-entity-rows.d.ts +20 -0
  76. package/dist/parquet-created-entity-rows.d.ts.map +1 -0
  77. package/dist/parquet-created-entity-rows.js +40 -0
  78. package/dist/parquet-created-entity-rows.js.map +1 -0
  79. package/dist/parquet-exporter-ondemand.d.ts +3 -2
  80. package/dist/parquet-exporter-ondemand.d.ts.map +1 -1
  81. package/dist/parquet-exporter-ondemand.js +15 -6
  82. package/dist/parquet-exporter-ondemand.js.map +1 -1
  83. package/dist/parquet-exporter.d.ts +5 -12
  84. package/dist/parquet-exporter.d.ts.map +1 -1
  85. package/dist/parquet-exporter.js +35 -62
  86. package/dist/parquet-exporter.js.map +1 -1
  87. package/dist/parquet-relationship-rows.d.ts +11 -0
  88. package/dist/parquet-relationship-rows.d.ts.map +1 -0
  89. package/dist/parquet-relationship-rows.js +57 -0
  90. package/dist/parquet-relationship-rows.js.map +1 -0
  91. package/dist/reference-collector.d.ts +17 -1
  92. package/dist/reference-collector.d.ts.map +1 -1
  93. package/dist/reference-collector.js +30 -1
  94. package/dist/reference-collector.js.map +1 -1
  95. package/dist/registry-entity-names.d.ts +3 -0
  96. package/dist/registry-entity-names.d.ts.map +1 -0
  97. package/dist/registry-entity-names.js +38 -0
  98. package/dist/registry-entity-names.js.map +1 -0
  99. package/dist/relationship-slot-bounds.d.ts +14 -0
  100. package/dist/relationship-slot-bounds.d.ts.map +1 -0
  101. package/dist/relationship-slot-bounds.js +64 -0
  102. package/dist/relationship-slot-bounds.js.map +1 -0
  103. package/dist/retype.d.ts.map +1 -1
  104. package/dist/retype.js +5 -2
  105. package/dist/retype.js.map +1 -1
  106. package/dist/schema-conversion-loss-report.d.ts +97 -0
  107. package/dist/schema-conversion-loss-report.d.ts.map +1 -0
  108. package/dist/schema-conversion-loss-report.js +116 -0
  109. package/dist/schema-conversion-loss-report.js.map +1 -0
  110. package/dist/schema-converter-attr-remap.d.ts +8 -0
  111. package/dist/schema-converter-attr-remap.d.ts.map +1 -1
  112. package/dist/schema-converter-attr-remap.js +14 -1
  113. package/dist/schema-converter-attr-remap.js.map +1 -1
  114. package/dist/schema-converter-enums.d.ts +27 -0
  115. package/dist/schema-converter-enums.d.ts.map +1 -0
  116. package/dist/schema-converter-enums.js +117 -0
  117. package/dist/schema-converter-enums.js.map +1 -0
  118. package/dist/schema-converter-ifc4-slots.d.ts +36 -0
  119. package/dist/schema-converter-ifc4-slots.d.ts.map +1 -0
  120. package/dist/schema-converter-ifc4-slots.js +70 -0
  121. package/dist/schema-converter-ifc4-slots.js.map +1 -0
  122. package/dist/schema-converter.d.ts +41 -19
  123. package/dist/schema-converter.d.ts.map +1 -1
  124. package/dist/schema-converter.js +73 -42
  125. package/dist/schema-converter.js.map +1 -1
  126. package/dist/schema-enum-policy.d.ts +48 -0
  127. package/dist/schema-enum-policy.d.ts.map +1 -0
  128. package/dist/schema-enum-policy.js +26 -0
  129. package/dist/schema-enum-policy.js.map +1 -0
  130. package/dist/schema-untranslatable.d.ts +84 -2
  131. package/dist/schema-untranslatable.d.ts.map +1 -1
  132. package/dist/schema-untranslatable.js +98 -3
  133. package/dist/schema-untranslatable.js.map +1 -1
  134. package/dist/step-collection.js +1 -1
  135. package/dist/step-collection.js.map +1 -1
  136. package/dist/step-export-types.d.ts +13 -3
  137. package/dist/step-export-types.d.ts.map +1 -1
  138. package/dist/step-exporter.d.ts.map +1 -1
  139. package/dist/step-exporter.js +4 -2
  140. package/dist/step-exporter.js.map +1 -1
  141. package/dist/step-georeferencing.js +2 -0
  142. package/dist/step-georeferencing.js.map +1 -1
  143. package/dist/step-header.d.ts.map +1 -1
  144. package/dist/step-header.js +1 -0
  145. package/dist/step-header.js.map +1 -1
  146. package/dist/step-map-unit.d.ts.map +1 -1
  147. package/dist/step-map-unit.js +4 -0
  148. package/dist/step-map-unit.js.map +1 -1
  149. package/dist/step-overlay-entities.d.ts.map +1 -1
  150. package/dist/step-overlay-entities.js +5 -1
  151. package/dist/step-overlay-entities.js.map +1 -1
  152. package/dist/step-pass-builder.d.ts.map +1 -1
  153. package/dist/step-pass-builder.js +8 -1
  154. package/dist/step-pass-builder.js.map +1 -1
  155. package/dist/step-property-set-generators.d.ts.map +1 -1
  156. package/dist/step-property-set-generators.js +17 -0
  157. package/dist/step-property-set-generators.js.map +1 -1
  158. package/dist/step-property-set-index.d.ts +4 -10
  159. package/dist/step-property-set-index.d.ts.map +1 -1
  160. package/dist/step-property-set-index.js +52 -8
  161. package/dist/step-property-set-index.js.map +1 -1
  162. package/dist/step-property-set-readers.d.ts.map +1 -1
  163. package/dist/step-property-set-readers.js +4 -0
  164. package/dist/step-property-set-readers.js.map +1 -1
  165. package/dist/step-ref-scan.d.ts +6 -0
  166. package/dist/step-ref-scan.d.ts.map +1 -0
  167. package/dist/step-ref-scan.js +52 -0
  168. package/dist/step-ref-scan.js.map +1 -0
  169. package/dist/step-serialization.d.ts.map +1 -1
  170. package/dist/step-serialization.js +18 -2
  171. package/dist/step-serialization.js.map +1 -1
  172. package/dist/step-shared-atom-retention.d.ts +5 -0
  173. package/dist/step-shared-atom-retention.d.ts.map +1 -0
  174. package/dist/step-shared-atom-retention.js +60 -0
  175. package/dist/step-shared-atom-retention.js.map +1 -0
  176. package/dist/step-source-iteration.d.ts +1 -1
  177. package/dist/step-source-iteration.d.ts.map +1 -1
  178. package/dist/step-source-iteration.js +50 -45
  179. package/dist/step-source-iteration.js.map +1 -1
  180. package/dist/style-closure.d.ts.map +1 -1
  181. package/dist/style-closure.js +11 -0
  182. package/dist/style-closure.js.map +1 -1
  183. package/dist/subset-entity-reader.d.ts.map +1 -1
  184. package/dist/subset-entity-reader.js +3 -2
  185. package/dist/subset-entity-reader.js.map +1 -1
  186. package/dist/subset-roots.js +2 -2
  187. package/dist/subset-roots.js.map +1 -1
  188. package/package.json +9 -9
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Enum-member reconciliation on schema conversion (#5365).
3
+ *
4
+ * `convertStepLine` renames entities and reconciles attribute counts, but no
5
+ * pass read an enum VALUE: `.TURNSTILE.` (IFC4X3 `IfcDoorTypeEnum`) rode into
6
+ * an IFC4 file and `.LOUVRE.` (IFC4 `IfcAirTerminalTypeEnum`) into IFC2X3,
7
+ * invalid against each file's own header, with no report. This pass reads
8
+ * every enum-typed slot of an already-converted record against the TARGET
9
+ * schema's registry and resolves a member the target does not define by the
10
+ * policy in `schema-enum-policy.ts`. It counts every resolution that loses
11
+ * information, and every refusal.
12
+ *
13
+ * Runs on the converted record, so the target's attribute list applies; a
14
+ * record whose arity is not the target's is left alone, the same guard the
15
+ * required-slot passes use (position `i` need not be attribute `i`).
16
+ */
17
+ import { type SchemaVersionWithRegistry } from '@ifc-lite/parser';
18
+ /** Enum reconciliation for one export: rewrites, and counts what it lost. */
19
+ export declare class EnumReconciliation {
20
+ private readonly losses;
21
+ /** Reconcile `line`, already converted to `toSchema`. */
22
+ apply(line: string, toSchema: SchemaVersionWithRegistry): string;
23
+ /** One warning per loss kind, naming what it happened to (#5365). */
24
+ warnings(): string[];
25
+ private record;
26
+ }
27
+ //# sourceMappingURL=schema-converter-enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter-enums.d.ts","sourceRoot":"","sources":["../src/schema-converter-enums.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAA+B,KAAK,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AA2C/F,6EAA6E;AAC7E,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAE/D,yDAAyD;IACzD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,yBAAyB,GAAG,MAAM;IAyChE,qEAAqE;IACrE,QAAQ,IAAI,MAAM,EAAE;IAUpB,OAAO,CAAC,MAAM;CAKf"}
@@ -0,0 +1,117 @@
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
+ * Enum-member reconciliation on schema conversion (#5365).
6
+ *
7
+ * `convertStepLine` renames entities and reconciles attribute counts, but no
8
+ * pass read an enum VALUE: `.TURNSTILE.` (IFC4X3 `IfcDoorTypeEnum`) rode into
9
+ * an IFC4 file and `.LOUVRE.` (IFC4 `IfcAirTerminalTypeEnum`) into IFC2X3,
10
+ * invalid against each file's own header, with no report. This pass reads
11
+ * every enum-typed slot of an already-converted record against the TARGET
12
+ * schema's registry and resolves a member the target does not define by the
13
+ * policy in `schema-enum-policy.ts`. It counts every resolution that loses
14
+ * information, and every refusal.
15
+ *
16
+ * Runs on the converted record, so the target's attribute list applies; a
17
+ * record whose arity is not the target's is left alone, the same guard the
18
+ * required-slot passes use (position `i` need not be attribute `i`).
19
+ */
20
+ import { getSchemaRegistryForVersion } from '@ifc-lite/parser';
21
+ import { escapeStepString } from './step-serialization.js';
22
+ import { splitTopLevelStepArguments } from './step-argument-parser.js';
23
+ import { resolveMissingEnumMember } from './schema-enum-policy.js';
24
+ const TARGETS = new Map();
25
+ function targetEntities(schema) {
26
+ let table = TARGETS.get(schema);
27
+ if (table)
28
+ return table;
29
+ const registry = getSchemaRegistryForVersion(schema);
30
+ const built = new Map();
31
+ for (const [name, meta] of Object.entries(registry.entities)) {
32
+ const attributes = meta.allAttributes ?? meta.attributes;
33
+ const enumSlots = attributes.flatMap((a, index) => {
34
+ const members = Object.hasOwn(registry.enums, a.type) ? registry.enums[a.type] : undefined;
35
+ return members ? [{ index, members }] : [];
36
+ });
37
+ if (enumSlots.length > 0)
38
+ built.set(name.toUpperCase(), { attributes, enumSlots });
39
+ }
40
+ table = built;
41
+ TARGETS.set(schema, table);
42
+ return table;
43
+ }
44
+ const ENUM_TOKEN = /^\s*\.([A-Z0-9_]+)\.\s*$/i;
45
+ const LOSS_TEXT = {
46
+ 'userdefined-label-occupied': 'written as .USERDEFINED. but the label slot already held a value, so the member name was not kept',
47
+ notdefined: 'written as .NOTDEFINED.',
48
+ omit: 'written as $ (the attribute is optional in the target)',
49
+ refuse: 'KEPT as written, so the file is not valid against its header; the target schema offers no value for it',
50
+ };
51
+ /** Enum reconciliation for one export: rewrites, and counts what it lost. */
52
+ export class EnumReconciliation {
53
+ losses = new Map();
54
+ /** Reconcile `line`, already converted to `toSchema`. */
55
+ apply(line, toSchema) {
56
+ const open = line.indexOf('(');
57
+ const close = line.lastIndexOf(')');
58
+ const eq = line.indexOf('=');
59
+ if (eq < 0 || open <= eq || close <= open)
60
+ return line;
61
+ const type = line.slice(eq + 1, open).trim().toUpperCase();
62
+ const entity = targetEntities(toSchema).get(type);
63
+ if (!entity)
64
+ return line;
65
+ const values = splitTopLevelStepArguments(line.slice(open + 1, close));
66
+ if (values === null || values.length !== entity.attributes.length)
67
+ return line;
68
+ let changed = false;
69
+ for (const { index, members } of entity.enumSlots) {
70
+ const member = ENUM_TOKEN.exec(values[index])?.[1]?.toUpperCase();
71
+ if (member === undefined || members.includes(member))
72
+ continue;
73
+ const resolution = resolveMissingEnumMember(entity.attributes, index, members);
74
+ const where = `${type}.${entity.attributes[index].name} .${member}.`;
75
+ switch (resolution.kind) {
76
+ case 'userdefined':
77
+ values[index] = '.USERDEFINED.';
78
+ if (values[resolution.labelIndex].trim() === '$')
79
+ values[resolution.labelIndex] = `'${escapeStepString(member)}'`;
80
+ else
81
+ this.record('userdefined-label-occupied', where);
82
+ changed = true;
83
+ break;
84
+ case 'notdefined':
85
+ values[index] = '.NOTDEFINED.';
86
+ this.record('notdefined', where);
87
+ changed = true;
88
+ break;
89
+ case 'omit':
90
+ values[index] = '$';
91
+ this.record('omit', where);
92
+ changed = true;
93
+ break;
94
+ case 'refuse':
95
+ this.record('refuse', where);
96
+ break;
97
+ }
98
+ }
99
+ return changed ? `${line.slice(0, open + 1)}${values.join(',')}${line.slice(close)}` : line;
100
+ }
101
+ /** One warning per loss kind, naming what it happened to (#5365). */
102
+ warnings() {
103
+ const out = [];
104
+ for (const [loss, where] of this.losses) {
105
+ // Every site is named: distinct sites are bounded by the ledger, so none is elided.
106
+ const total = [...where.values()].reduce((a, b) => a + b, 0);
107
+ out.push(`${total} enum value(s) the target schema does not define were ${LOSS_TEXT[loss]}: ${[...where.keys()].join(', ')} (#5365).`);
108
+ }
109
+ return out;
110
+ }
111
+ record(loss, where) {
112
+ const bucket = this.losses.get(loss) ?? new Map();
113
+ bucket.set(where, (bucket.get(where) ?? 0) + 1);
114
+ this.losses.set(loss, bucket);
115
+ }
116
+ }
117
+ //# sourceMappingURL=schema-converter-enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter-enums.js","sourceRoot":"","sources":["../src/schema-converter-enums.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Counts slots IFC4 requires a value in that a downgrade from IFC4X3 or IFC5
3
+ * leaves `$` (#5202).
4
+ *
5
+ * `schema-converter.ts` only guarded cardinality for `toSchema === 'IFC2X3'`
6
+ * (`Ifc2x3SlotFill`, #4714). IFC4X3 made some attributes optional that IFC4
7
+ * declares mandatory, e.g. `IfcProjectedCRS.Name` at position 0, so a valid
8
+ * IFC4X3 (or IFC5) record legitimately carries `$` where IFC4 requires a value.
9
+ *
10
+ * Unlike {@link Ifc2x3SlotFill} this never writes a value. None of these
11
+ * slots has an honest default: the only candidates were BOOLEANs, and every
12
+ * BOOLEAN slot IFC4 requires is required in IFC4X3 too (`SameSense`,
13
+ * `Orientation`, …), where `.F.` would flip geometry rather than claim
14
+ * nothing. Enums stay unfilled because enum reconciliation is a separate
15
+ * problem (#5202 finding 1). The count surfaces as one warning, so the caller
16
+ * learns the file is not valid IFC4 instead of receiving an invented value.
17
+ *
18
+ * `convertStepLine` only consults this for `fromSchema` `'IFC4X3'`/`'IFC5'`.
19
+ * IFC2X3 → IFC4 is a separately audited upgrade path, pinned byte-for-byte by
20
+ * `schema-converter-door-window-type.test.ts`.
21
+ */
22
+ export declare class Ifc4SlotCheck {
23
+ /** Required slots left `$`. Counted per SLOT: one record can leave several. */
24
+ private requiredUnfilled;
25
+ /** One warning when any slot was left `$`, in the exporters' warning channel. */
26
+ warnings(): string[];
27
+ /**
28
+ * Count every required slot of an already-converted `line` that holds `$`,
29
+ * and return the line unchanged. A line that does not parse, whose type IFC4
30
+ * gives no required slot, or whose ARITY is not IFC4's is not counted: its
31
+ * position `i` need not be attribute `i` (the same guard
32
+ * {@link Ifc2x3SlotFill} uses).
33
+ */
34
+ apply(line: string): string;
35
+ }
36
+ //# sourceMappingURL=schema-converter-ifc4-slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter-ifc4-slots.d.ts","sourceRoot":"","sources":["../src/schema-converter-ifc4-slots.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAa;IACxB,+EAA+E;IAC/E,OAAO,CAAC,gBAAgB,CAAK;IAE7B,iFAAiF;IACjF,QAAQ,IAAI,MAAM,EAAE;IASpB;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAc5B"}
@@ -0,0 +1,70 @@
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 { splitTopLevelStepArguments } from './step-argument-parser.js';
5
+ import { IFC4_REQUIRED_SLOTS } from './generated/ifc4-required-slots.js';
6
+ /** The generated rows keyed by UPPERCASE entity type, built once. */
7
+ const BY_TYPE = new Map(IFC4_REQUIRED_SLOTS.map(([type, arity, slots]) => [type, { arity, slots }]));
8
+ /** `$`, possibly wrapped in whitespace and STEP block comments. */
9
+ const NULL_TOKEN = /^(?:\s|\/\*[\s\S]*?\*\/)*\$(?:\s|\/\*[\s\S]*?\*\/)*$/;
10
+ /**
11
+ * Counts slots IFC4 requires a value in that a downgrade from IFC4X3 or IFC5
12
+ * leaves `$` (#5202).
13
+ *
14
+ * `schema-converter.ts` only guarded cardinality for `toSchema === 'IFC2X3'`
15
+ * (`Ifc2x3SlotFill`, #4714). IFC4X3 made some attributes optional that IFC4
16
+ * declares mandatory, e.g. `IfcProjectedCRS.Name` at position 0, so a valid
17
+ * IFC4X3 (or IFC5) record legitimately carries `$` where IFC4 requires a value.
18
+ *
19
+ * Unlike {@link Ifc2x3SlotFill} this never writes a value. None of these
20
+ * slots has an honest default: the only candidates were BOOLEANs, and every
21
+ * BOOLEAN slot IFC4 requires is required in IFC4X3 too (`SameSense`,
22
+ * `Orientation`, …), where `.F.` would flip geometry rather than claim
23
+ * nothing. Enums stay unfilled because enum reconciliation is a separate
24
+ * problem (#5202 finding 1). The count surfaces as one warning, so the caller
25
+ * learns the file is not valid IFC4 instead of receiving an invented value.
26
+ *
27
+ * `convertStepLine` only consults this for `fromSchema` `'IFC4X3'`/`'IFC5'`.
28
+ * IFC2X3 → IFC4 is a separately audited upgrade path, pinned byte-for-byte by
29
+ * `schema-converter-door-window-type.test.ts`.
30
+ */
31
+ export class Ifc4SlotCheck {
32
+ /** Required slots left `$`. Counted per SLOT: one record can leave several. */
33
+ requiredUnfilled = 0;
34
+ /** One warning when any slot was left `$`, in the exporters' warning channel. */
35
+ warnings() {
36
+ if (this.requiredUnfilled === 0)
37
+ return [];
38
+ return [
39
+ `${this.requiredUnfilled} slot(s) keep $ where IFC4 requires a value and the source offers none ` +
40
+ '(the converter does not invent measures, labels, identifiers, references, flags or enums); ' +
41
+ 'the file is not valid IFC4 (#5202).',
42
+ ];
43
+ }
44
+ /**
45
+ * Count every required slot of an already-converted `line` that holds `$`,
46
+ * and return the line unchanged. A line that does not parse, whose type IFC4
47
+ * gives no required slot, or whose ARITY is not IFC4's is not counted: its
48
+ * position `i` need not be attribute `i` (the same guard
49
+ * {@link Ifc2x3SlotFill} uses).
50
+ */
51
+ apply(line) {
52
+ const open = line.indexOf('(');
53
+ const close = line.lastIndexOf(')');
54
+ const eq = line.indexOf('=');
55
+ if (eq < 0 || open <= eq || close <= open)
56
+ return line;
57
+ const row = BY_TYPE.get(line.slice(eq + 1, open).trim().toUpperCase());
58
+ if (row === undefined)
59
+ return line;
60
+ const values = splitTopLevelStepArguments(line.slice(open + 1, close));
61
+ if (values === null || values.length !== row.arity)
62
+ return line;
63
+ for (const [index] of row.slots) {
64
+ if (NULL_TOKEN.test(values[index]))
65
+ this.requiredUnfilled++;
66
+ }
67
+ return line;
68
+ }
69
+ }
70
+ //# sourceMappingURL=schema-converter-ifc4-slots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter-ifc4-slots.js","sourceRoot":"","sources":["../src/schema-converter-ifc4-slots.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAyB,MAAM,oCAAoC,CAAC;AAEhG,qEAAqE;AACrE,MAAM,OAAO,GACX,IAAI,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAEvF,mEAAmE;AACnE,MAAM,UAAU,GAAG,sDAAsD,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,aAAa;IACxB,+EAA+E;IACvE,gBAAgB,GAAG,CAAC,CAAC;IAE7B,iFAAiF;IACjF,QAAQ;QACN,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,OAAO;YACL,GAAG,IAAI,CAAC,gBAAgB,yEAAyE;gBACjG,6FAA6F;gBAC7F,qCAAqC;SACtC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAY;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACvE,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAChE,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -4,19 +4,14 @@
4
4
  * Handles entity type renaming and attribute rewriting when converting
5
5
  * between IFC schema versions (IFC2X3, IFC4, IFC4X3, IFC5).
6
6
  *
7
- * Key differences between schemas:
8
- * - IFC2X3 → IFC4: IfcWallStandardCase → IfcWall (with PredefinedType),
9
- * spatial hierarchy changes, removed/renamed entity types
10
- * - IFC4 → IFC4X3: New facility types (bridge, road, railway, marine),
11
- * IfcBuiltElement replaces IfcBuildingElement in some cases
12
- * - IFC5: Alpha spec — STEP-based with different attribute ordering,
13
- * entity names largely aligned with IFC4X3 but schema header is 'IFC5'
14
- *
15
7
  * This module works at the STEP text level: it rewrites entity type names
16
8
  * and adjusts attribute counts via regex replacement on raw STEP lines.
17
9
  */
18
10
  import { type RandomSource } from '@ifc-lite/encoding';
19
11
  import { Ifc2x3SlotFill } from './schema-converter-ifc2x3-slots.js';
12
+ import type { Ifc4SlotCheck } from './schema-converter-ifc4-slots.js';
13
+ import type { EnumReconciliation } from './schema-converter-enums.js';
14
+ export { computeWithheldRefIds } from './schema-untranslatable.js';
20
15
  export type IfcSchemaVersion = 'IFC2X3' | 'IFC4' | 'IFC4X3' | 'IFC5';
21
16
  /**
22
17
  * Convert an entity type name from one IFC schema version to another.
@@ -27,29 +22,56 @@ export type IfcSchemaVersion = 'IFC2X3' | 'IFC4' | 'IFC4X3' | 'IFC5';
27
22
  * @returns The mapped entity type name, or the original if no mapping needed
28
23
  */
29
24
  export declare function convertEntityType(entityType: string, fromSchema: IfcSchemaVersion, toSchema: IfcSchemaVersion): string;
25
+ export declare function attrNameTable(schema: IfcSchemaVersion): Map<string, readonly string[]> | null;
26
+ /**
27
+ * True when `shorter` is a STRICT prefix of `longer` by attribute name — i.e.
28
+ * the longer form only *appended* attributes to the shorter one. Both the
29
+ * trailing-`$` padding (upgrade) and the tail trim (downgrade) are only safe
30
+ * then; many entities insert/reorder attributes mid-list (e.g.
31
+ * IfcMaterialProperties, IfcApproval, IfcTask), where padding or trimming would
32
+ * shift values into the wrong slots.
33
+ *
34
+ * Callers pass the shorter schema's list first, whichever direction they run in.
35
+ */
36
+ export declare function isStrictAttrPrefix(shorter: readonly string[], longer: readonly string[]): boolean;
30
37
  /**
31
38
  * Convert a raw STEP entity line from one schema version to another.
32
39
  *
33
- * Handles:
34
- * 1. Entity type name conversion
35
- * 2. Attribute count adjustment: trimming trailing attrs for older schemas, and
36
- * padding trailing `$` for newer schemas that ADDED attributes (e.g. the
37
- * PredefinedType IFC4 introduced on IfcWall/IfcBeam/IfcOpeningElement/…).
38
- * 3. Skipping entities that have no valid representation in the target schema
40
+ * Handles: 1. entity type names; 2. attribute counts (trim for older schemas,
41
+ * pad trailing `$` for attributes a newer schema APPENDED, e.g. IFC4's
42
+ * PredefinedType on IfcWall); 3. entities with no target representation;
43
+ * 4. enum members the target lacks (`enums`, #5365).
39
44
  *
40
45
  * @param line - Raw STEP entity line (e.g., "#1=IFCWALL('guid',...);")
41
46
  * @param fromSchema - Source schema version
42
47
  * @param toSchema - Target schema version
43
- * @param random - Optional seeded `RandomSource` for the GlobalId of any
44
- * IFCPROXY placeholder minted here. Omit for the default random path; pass
45
- * a seeded source when the caller needs byte-reproducible output.
48
+ * @param random - Optional seeded `RandomSource` for the GlobalId of any IFCPROXY
49
+ * placeholder minted here; pass one when output must be byte-reproducible.
46
50
  * @param slots - This package's exporters pass one; it carries the owner
47
51
  * history they reuse (#4686) and collects what they could not settle.
48
52
  * Omitted, a throwaway stands in, so the generated table's own defaults are
49
53
  * still written but the OwnerHistory reuse and both counts are lost.
50
- * @returns Converted line (entities without valid target representation become IFCPROXY placeholders)
54
+ * @param ifc4Slots - Counts IFC4-required slots left `$` (IFC4X3/IFC5 → IFC4 only, #5202).
55
+ * @param enums - Resolves enum members the target lacks and reports losses (#5365).
56
+ * @param withheldRefIds - Express ids this export is OMITTING outright
57
+ * ({@link computeWithheldRefIds}, #4206) — a record whose attributes name
58
+ * one is redirected to the same "no representation" resolution as its own
59
+ * unmapped type would get, so it cannot ship a now-dangling `#N`.
60
+ * @returns Converted line (entities without valid target representation become
61
+ * IFCPROXY placeholders), or `null` when this record itself is one of the
62
+ * narrow set `resolveUnrepresentedEntity` can safely OMIT rather than throw
63
+ * for — the caller must not write a `null` result.
64
+ */
65
+ export declare function convertStepLine(line: string, fromSchema: IfcSchemaVersion, toSchema: IfcSchemaVersion, random?: RandomSource, slots?: Ifc2x3SlotFill, withheldRefIds?: ReadonlySet<number>, ifc4Slots?: Ifc4SlotCheck, enums?: EnumReconciliation): string | null;
66
+ /**
67
+ * Check if an entity type should be skipped for the target schema.
68
+ * Some IFC4X3 types (alignment, positioning) have no valid STEP representation
69
+ * in older schemas even as proxies.
70
+ *
71
+ * Alignment entities are valid in IFC4X3 and IFC5, so they are only skipped
72
+ * when targeting older schemas (IFC2X3, IFC4).
51
73
  */
52
- export declare function convertStepLine(line: string, fromSchema: IfcSchemaVersion, toSchema: IfcSchemaVersion, random?: RandomSource, slots?: Ifc2x3SlotFill): string;
74
+ export declare function shouldSkipEntity(entityType: string, toSchema: IfcSchemaVersion): boolean;
53
75
  /**
54
76
  * Check if a conversion between two schema versions requires entity type changes.
55
77
  */
@@ -1 +1 @@
1
- {"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../src/schema-converter.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMxE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AA4GrE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,gBAAgB,GACzB,MAAM,CAQR;AAwGD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,CAAC,EAAE,YAAY,EACrB,KAAK,CAAC,EAAE,cAAc,GACrB,MAAM,CAIR;AA0JD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,gBAAgB,GACzB,MAAM,CAqBR"}
1
+ {"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../src/schema-converter.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKxE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAgIrE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,gBAAgB,GACzB,MAAM,CAQR;AAiED,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAU7F;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAMjG;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,CAAC,EAAE,YAAY,EACrB,KAAK,CAAC,EAAE,cAAc,EACtB,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EACpC,SAAS,CAAC,EAAE,aAAa,EACzB,KAAK,CAAC,EAAE,kBAAkB,GACzB,MAAM,GAAG,IAAI,CAQf;AA4HD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAexF;AAkBD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,gBAAgB,GACzB,MAAM,CAqBR"}
@@ -7,24 +7,17 @@
7
7
  * Handles entity type renaming and attribute rewriting when converting
8
8
  * between IFC schema versions (IFC2X3, IFC4, IFC4X3, IFC5).
9
9
  *
10
- * Key differences between schemas:
11
- * - IFC2X3 → IFC4: IfcWallStandardCase → IfcWall (with PredefinedType),
12
- * spatial hierarchy changes, removed/renamed entity types
13
- * - IFC4 → IFC4X3: New facility types (bridge, road, railway, marine),
14
- * IfcBuiltElement replaces IfcBuildingElement in some cases
15
- * - IFC5: Alpha spec — STEP-based with different attribute ordering,
16
- * entity names largely aligned with IFC4X3 but schema header is 'IFC5'
17
- *
18
10
  * This module works at the STEP text level: it rewrites entity type names
19
11
  * and adjusts attribute counts via regex replacement on raw STEP lines.
20
12
  */
21
13
  import { generateIfcGuid } from '@ifc-lite/encoding';
22
- import { deterministicGlobalId } from '@ifc-lite/parser';
23
- import { ENTITIES_IFC2X3, ENTITIES_IFC4, ENTITIES_IFC4X3 } from '@ifc-lite/data';
14
+ import { deterministicGlobalId, getSchemaRegistryForVersion } from '@ifc-lite/parser';
24
15
  import { resolveUnrepresentedEntity } from './schema-untranslatable.js';
25
16
  import { BY_NAME_ATTR_REMAP_TYPES, remapRenamedAttributesByName } from './schema-converter-attr-remap.js';
26
17
  import { splitTopLevelStepArguments } from './step-argument-parser.js';
27
18
  import { Ifc2x3SlotFill } from './schema-converter-ifc2x3-slots.js';
19
+ import { referencesAnyExpressId } from './step-ref-scan.js';
20
+ export { computeWithheldRefIds } from './schema-untranslatable.js';
28
21
  /**
29
22
  * Entity type name mappings between schema versions.
30
23
  *
@@ -66,6 +59,26 @@ const IFC4_TO_IFC2X3 = new Map([
66
59
  // (schema-converter-attr-remap.ts) also reconciles them by name.
67
60
  ['IFCDOORTYPE', 'IFCDOORSTYLE'],
68
61
  ['IFCWINDOWTYPE', 'IFCWINDOWSTYLE'],
62
+ // Structural analysis domain (#4206): IfcStructuralLoadCase, IfcStructuralCurveAction
63
+ // and IfcStructuralSurfaceAction are all IfcRoot subtypes with a real IFC2X3
64
+ // target under a DIFFERENT name. Left unmapped, `resolveUnrepresentedEntity`
65
+ // silently replaced every one with an IFCPROXY — losing the GlobalId, the
66
+ // applied load reference and the load/action classification even though
67
+ // IFC2X3 has a real (if differently shaped) target for each.
68
+ // IfcStructuralLoadCase(IFC4) has no IFC2X3 counterpart of its own name;
69
+ // IFC2X3 folds load cases into `IfcStructuralLoadGroup` with
70
+ // `PredefinedType=.LOAD_CASE.` and no `SelfWeightCoefficients` slot — a
71
+ // strict attribute-name prefix, so the trim path below reconciles it
72
+ // without help from `BY_NAME_ATTR_REMAP_TYPES`.
73
+ ['IFCSTRUCTURALLOADCASE', 'IFCSTRUCTURALLOADGROUP'],
74
+ // IfcStructuralCurveAction/SurfaceAction(IFC4) rename to
75
+ // IfcStructuralLinearAction/PlanarAction(IFC2X3): both carry the same
76
+ // attributes through `GlobalOrLocal`/`DestabilizingLoad`, but IFC2X3 then
77
+ // inserts an optional `CausedBy` before `ProjectedOrTrue` where IFC4
78
+ // appends `PredefinedType` instead, so neither list is a positional prefix
79
+ // of the other — `BY_NAME_ATTR_REMAP_TYPES` reconciles both by name.
80
+ ['IFCSTRUCTURALCURVEACTION', 'IFCSTRUCTURALLINEARACTION'],
81
+ ['IFCSTRUCTURALSURFACEACTION', 'IFCSTRUCTURALPLANARACTION'],
69
82
  // IFC4X3 spatial structure → IFC2X3 equivalents
70
83
  ['IFCFACILITY', 'IFCBUILDING'],
71
84
  ['IFCFACILITYPART', 'IFCBUILDINGSTOREY'],
@@ -193,26 +206,21 @@ function chainMaps(map1, map2) {
193
206
  return result;
194
207
  }
195
208
  // Lazily-built UPPERCASE entity name → ordered positional attribute NAMES, per
196
- // schema, from the generated buildingSMART tables. `IfcEntityInfo.attributes` is
197
- // the full inherited+direct positional list (verified to match STEP counts:
198
- // IfcWall 8→9, IfcDoor 10→13, IfcMaterial 1→3, …).
209
+ // schema, from the EXPRESS-derived registries: present iff the schema declares
210
+ // it. `@ifc-lite/data`'s C# tables put 24 IFC4X3-only entities (and `TagList`)
211
+ // under IFC4, which kept both the `IFCPROXY` route and the trim from firing
212
+ // (#5204). IFC5 has no EXPRESS registry: `null` skips count adjustment.
199
213
  const ATTR_NAME_TABLES = new Map();
200
- function attrNameTable(schema) {
214
+ export function attrNameTable(schema) {
201
215
  let table = ATTR_NAME_TABLES.get(schema);
202
216
  if (table)
203
217
  return table;
204
- let entities = null;
205
- if (schema === 'IFC2X3')
206
- entities = ENTITIES_IFC2X3;
207
- else if (schema === 'IFC4')
208
- entities = ENTITIES_IFC4;
209
- else if (schema === 'IFC4X3')
210
- entities = ENTITIES_IFC4X3;
211
- else
212
- return null; // IFC5 has no generated table — skip count adjustment
218
+ if (schema !== 'IFC2X3' && schema !== 'IFC4' && schema !== 'IFC4X3')
219
+ return null;
213
220
  table = new Map();
214
- for (const e of entities)
215
- table.set(e.name.toUpperCase(), e.attributes);
221
+ for (const [name, meta] of Object.entries(getSchemaRegistryForVersion(schema).entities)) {
222
+ table.set(name.toUpperCase(), (meta.allAttributes ?? meta.attributes).map((a) => a.name));
223
+ }
216
224
  ATTR_NAME_TABLES.set(schema, table);
217
225
  return table;
218
226
  }
@@ -226,7 +234,7 @@ function attrNameTable(schema) {
226
234
  *
227
235
  * Callers pass the shorter schema's list first, whichever direction they run in.
228
236
  */
229
- function isStrictAttrPrefix(shorter, longer) {
237
+ export function isStrictAttrPrefix(shorter, longer) {
230
238
  if (shorter.length >= longer.length)
231
239
  return false;
232
240
  for (let i = 0; i < shorter.length; i++) {
@@ -246,34 +254,48 @@ function requireTopLevelAttributes(attrsRaw) {
246
254
  /**
247
255
  * Convert a raw STEP entity line from one schema version to another.
248
256
  *
249
- * Handles:
250
- * 1. Entity type name conversion
251
- * 2. Attribute count adjustment: trimming trailing attrs for older schemas, and
252
- * padding trailing `$` for newer schemas that ADDED attributes (e.g. the
253
- * PredefinedType IFC4 introduced on IfcWall/IfcBeam/IfcOpeningElement/…).
254
- * 3. Skipping entities that have no valid representation in the target schema
257
+ * Handles: 1. entity type names; 2. attribute counts (trim for older schemas,
258
+ * pad trailing `$` for attributes a newer schema APPENDED, e.g. IFC4's
259
+ * PredefinedType on IfcWall); 3. entities with no target representation;
260
+ * 4. enum members the target lacks (`enums`, #5365).
255
261
  *
256
262
  * @param line - Raw STEP entity line (e.g., "#1=IFCWALL('guid',...);")
257
263
  * @param fromSchema - Source schema version
258
264
  * @param toSchema - Target schema version
259
- * @param random - Optional seeded `RandomSource` for the GlobalId of any
260
- * IFCPROXY placeholder minted here. Omit for the default random path; pass
261
- * a seeded source when the caller needs byte-reproducible output.
265
+ * @param random - Optional seeded `RandomSource` for the GlobalId of any IFCPROXY
266
+ * placeholder minted here; pass one when output must be byte-reproducible.
262
267
  * @param slots - This package's exporters pass one; it carries the owner
263
268
  * history they reuse (#4686) and collects what they could not settle.
264
269
  * Omitted, a throwaway stands in, so the generated table's own defaults are
265
270
  * still written but the OwnerHistory reuse and both counts are lost.
266
- * @returns Converted line (entities without valid target representation become IFCPROXY placeholders)
271
+ * @param ifc4Slots - Counts IFC4-required slots left `$` (IFC4X3/IFC5 → IFC4 only, #5202).
272
+ * @param enums - Resolves enum members the target lacks and reports losses (#5365).
273
+ * @param withheldRefIds - Express ids this export is OMITTING outright
274
+ * ({@link computeWithheldRefIds}, #4206) — a record whose attributes name
275
+ * one is redirected to the same "no representation" resolution as its own
276
+ * unmapped type would get, so it cannot ship a now-dangling `#N`.
277
+ * @returns Converted line (entities without valid target representation become
278
+ * IFCPROXY placeholders), or `null` when this record itself is one of the
279
+ * narrow set `resolveUnrepresentedEntity` can safely OMIT rather than throw
280
+ * for — the caller must not write a `null` result.
267
281
  */
268
- export function convertStepLine(line, fromSchema, toSchema, random, slots) {
282
+ export function convertStepLine(line, fromSchema, toSchema, random, slots, withheldRefIds, ifc4Slots, enums) {
269
283
  if (fromSchema === toSchema)
270
284
  return line;
271
- const converted = convertRecord(line, fromSchema, toSchema, random);
272
- return toSchema === 'IFC2X3' ? (slots ?? new Ifc2x3SlotFill()).apply(converted) : converted;
285
+ let converted = convertRecord(line, fromSchema, toSchema, random, withheldRefIds);
286
+ if (converted === null)
287
+ return null;
288
+ if (enums && toSchema !== 'IFC5')
289
+ converted = enums.apply(converted, toSchema);
290
+ if (toSchema === 'IFC2X3')
291
+ return (slots ?? new Ifc2x3SlotFill()).apply(converted);
292
+ if (toSchema === 'IFC4' && (fromSchema === 'IFC4X3' || fromSchema === 'IFC5'))
293
+ ifc4Slots?.apply(converted);
294
+ return converted;
273
295
  }
274
296
  /** {@link convertStepLine} before the IFC2X3 required-slot fills, between two
275
297
  * different schemas. */
276
- function convertRecord(line, fromSchema, toSchema, random) {
298
+ function convertRecord(line, fromSchema, toSchema, random, withheldRefIds) {
277
299
  // Parse: #ID=TYPE(attrs); — tolerate whitespace around `=` and before the
278
300
  // type (some exporters, e.g. Tekla, write `#34498= IFCOPENINGELEMENT(...)`).
279
301
  // Without this those lines passed through unconverted, so neither type renames
@@ -290,6 +312,15 @@ function convertRecord(line, fromSchema, toSchema, random) {
290
312
  requireTopLevelAttributes(attrsRaw);
291
313
  // Convert entity type
292
314
  const newType = convertEntityType(entityType, fromSchema, toSchema);
315
+ // A record whose attribute list references an id this export is OMITTING
316
+ // (`withheldRefIds`, #4206) cannot carry that reference forward, no matter
317
+ // how cleanly this record's OWN type would otherwise convert — a renamed
318
+ // record left pointing at a `#N` with no line is worse than an honest
319
+ // proxy. Checked before `shouldSkipEntity` and the attribute-table lookup
320
+ // below so it wins over both.
321
+ if (withheldRefIds && withheldRefIds.size > 0 && referencesAnyExpressId(attrsRaw, withheldRefIds)) {
322
+ return resolveUnrepresentedEntity(prefix, entityType, attrsRaw, toSchema, random, withheldRefIds !== undefined);
323
+ }
293
324
  // Replace entities that have no valid representation in the target schema
294
325
  // with IFCPROXY placeholders to preserve EXPRESS IDs and prevent dangling references
295
326
  if (shouldSkipEntity(newType, toSchema)) {
@@ -352,7 +383,7 @@ function convertRecord(line, fromSchema, toSchema, random) {
352
383
  // attribute mismatch, handled below) has no representation in `toSchema` at
353
384
  // all — see `resolveUnrepresentedEntity` for why it can't just pass through.
354
385
  if (srcAttrs && targetTable && !tgtAttrs) {
355
- return resolveUnrepresentedEntity(prefix, entityType, attrsRaw, toSchema, random);
386
+ return resolveUnrepresentedEntity(prefix, entityType, attrsRaw, toSchema, random, withheldRefIds !== undefined);
356
387
  }
357
388
  if (srcAttrs && tgtAttrs) {
358
389
  if (isStrictAttrPrefix(tgtAttrs, srcAttrs)) {
@@ -382,7 +413,7 @@ function convertRecord(line, fromSchema, toSchema, random) {
382
413
  * Alignment entities are valid in IFC4X3 and IFC5, so they are only skipped
383
414
  * when targeting older schemas (IFC2X3, IFC4).
384
415
  */
385
- function shouldSkipEntity(entityType, toSchema) {
416
+ export function shouldSkipEntity(entityType, toSchema) {
386
417
  // Alignment entities are native to IFC4X3 and IFC5 — preserve them
387
418
  if (toSchema === 'IFC4X3' || toSchema === 'IFC5') {
388
419
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"schema-converter.js","sourceRoot":"","sources":["../src/schema-converter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-converter.js","sourceRoot":"","sources":["../src/schema-converter.ts"],"names":[],"mappings":"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"}