@ifc-lite/cli 0.27.0 → 0.28.1

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 (46) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/bcf.js +1 -1
  3. package/dist/commands/bcf.js.map +1 -1
  4. package/dist/commands/delivery-checks.d.ts +56 -0
  5. package/dist/commands/delivery-checks.d.ts.map +1 -0
  6. package/dist/commands/delivery-checks.js +222 -0
  7. package/dist/commands/delivery-checks.js.map +1 -0
  8. package/dist/commands/delivery-recipe.d.ts +23 -0
  9. package/dist/commands/delivery-recipe.d.ts.map +1 -0
  10. package/dist/commands/delivery-recipe.js +104 -0
  11. package/dist/commands/delivery-recipe.js.map +1 -0
  12. package/dist/commands/delivery-report.d.ts +51 -0
  13. package/dist/commands/delivery-report.d.ts.map +1 -0
  14. package/dist/commands/delivery-report.js +114 -0
  15. package/dist/commands/delivery-report.js.map +1 -0
  16. package/dist/commands/delivery.d.ts +2 -0
  17. package/dist/commands/delivery.d.ts.map +1 -0
  18. package/dist/commands/delivery.js +127 -0
  19. package/dist/commands/delivery.js.map +1 -0
  20. package/dist/commands/export-rust-formats.d.ts +11 -0
  21. package/dist/commands/export-rust-formats.d.ts.map +1 -0
  22. package/dist/commands/export-rust-formats.js +161 -0
  23. package/dist/commands/export-rust-formats.js.map +1 -0
  24. package/dist/commands/export.d.ts.map +1 -1
  25. package/dist/commands/export.js +31 -145
  26. package/dist/commands/export.js.map +1 -1
  27. package/dist/commands/extract-entities.d.ts +10 -17
  28. package/dist/commands/extract-entities.d.ts.map +1 -1
  29. package/dist/commands/extract-entities.js +34 -23
  30. package/dist/commands/extract-entities.js.map +1 -1
  31. package/dist/commands/gym.js +2 -2
  32. package/dist/commands/mutate.d.ts +16 -4
  33. package/dist/commands/mutate.d.ts.map +1 -1
  34. package/dist/commands/mutate.js +38 -46
  35. package/dist/commands/mutate.js.map +1 -1
  36. package/dist/commands/step-args.d.ts +114 -0
  37. package/dist/commands/step-args.d.ts.map +1 -0
  38. package/dist/commands/step-args.js +299 -0
  39. package/dist/commands/step-args.js.map +1 -0
  40. package/dist/commands/subset-relations.d.ts +124 -0
  41. package/dist/commands/subset-relations.d.ts.map +1 -0
  42. package/dist/commands/subset-relations.js +273 -0
  43. package/dist/commands/subset-relations.js.map +1 -0
  44. package/dist/index.js +7 -1
  45. package/dist/index.js.map +1 -1
  46. package/package.json +14 -14
@@ -0,0 +1,273 @@
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
+ * Spatial-structure relations, as `[relatingAttributeIndex,
6
+ * relatedAttributeIndex]`. `IfcRelAggregates` names the whole
7
+ * (`RelatingObject`) first; the two containment relations name the parts
8
+ * (`RelatedElements`) first. Same table as `STRUCTURE_RELATIONS` in
9
+ * `@ifc-lite/export`'s `merged-empty-containers.ts`, which reads the same three
10
+ * records, copied rather than imported because that module is internal to
11
+ * `@ifc-lite/export` and exporting it would widen a published API surface for a
12
+ * three-line constant.
13
+ *
14
+ * `IfcRelReferencedInSpatialStructure` is here for the same reason the other
15
+ * two are: same shape (one relating parent, one related SET), same
16
+ * one-per-storey authoring, same claim in the command's own docs that the
17
+ * output "parses and renders on its own". It used to be missing entirely, so a
18
+ * referenced-but-not-contained product was always orphaned.
19
+ */
20
+ const STRUCTURE_RELATIONS = {
21
+ IFCRELAGGREGATES: [4, 5],
22
+ IFCRELCONTAINEDINSPATIALSTRUCTURE: [5, 4],
23
+ IFCRELREFERENCEDINSPATIALSTRUCTURE: [5, 4],
24
+ };
25
+ /**
26
+ * All three are `GlobalId, OwnerHistory, Name, Description` plus the
27
+ * relating/related pair: exactly 6 attributes in every schema that defines
28
+ * them. A record that does not split into 6 was mis-scanned (or is not the
29
+ * entity the type name claims), so it falls back to keep-whole-or-drop-whole
30
+ * rather than having a slot index written into whatever it did split into.
31
+ *
32
+ * A relation type with a different attribute COUNT (`IfcRelAssignsToGroup` has
33
+ * 7) therefore cannot simply be added as a row above: it would fail this check
34
+ * on every record and fall silently back to keep-whole-or-drop-whole, which is
35
+ * the bug this module exists to fix. Such a type needs the count moved into the
36
+ * table value first, or the whole table derived from the schema registry, which
37
+ * returns 7 for that entity and would make row four safe rather than forbidden.
38
+ * Filed as #4123.
39
+ */
40
+ const STRUCTURE_RELATION_ATTRS = 6;
41
+ /** A single `#id` and nothing else: an object reference in one slot. */
42
+ const SINGLE_REF_RE = /^#(\d+)$/;
43
+ /**
44
+ * Decide every spatial-structure relation against a kept-id set.
45
+ *
46
+ * Pure in both arguments: adding relation ids to `keep` afterwards cannot
47
+ * change any verdict, because a relation of these types references products,
48
+ * spatial containers and an OwnerHistory, never another relation.
49
+ */
50
+ export function planSpatialRelations(instances, keep) {
51
+ const add = [];
52
+ const rewritten = new Map();
53
+ const blockedOn = [];
54
+ for (const inst of instances) {
55
+ const slots = STRUCTURE_RELATIONS[inst.type];
56
+ if (slots === undefined)
57
+ continue;
58
+ const line = relationLine(inst, slots, keep, blockedOn);
59
+ if (line === null)
60
+ continue;
61
+ add.push(inst.id);
62
+ if (line !== inst.full)
63
+ rewritten.set(inst.id, line);
64
+ }
65
+ return { add, rewritten, blockedOn };
66
+ }
67
+ /**
68
+ * The record text this relation contributes to the subset, or null to drop it.
69
+ * Returns `inst.full` unchanged when nothing was filtered out. Appends to
70
+ * `blocked` when the ONLY thing standing in the way is an unkept non-SET
71
+ * reference; see {@link SpatialRelationPlan.blockedOn}.
72
+ */
73
+ function relationLine(inst, [relatingIdx, relatedIdx], keep, blocked) {
74
+ // A null is a REJECTED scan, not an empty list: its parts are wherever the
75
+ // scanner happened to be, so reading `args[relatingIdx]` or writing
76
+ // `args[relatedIdx]` by index would land on the wrong attribute (#2470).
77
+ const args = splitTopLevelArgs(inst.body);
78
+ if (args === null || args.length !== STRUCTURE_RELATION_ATTRS)
79
+ return keepWhole(inst, keep);
80
+ const setText = args[relatedIdx];
81
+ if (!setText.startsWith('(') || !setText.endsWith(')'))
82
+ return keepWhole(inst, keep);
83
+ const members = splitTopLevelArgs(setText.slice(1, -1));
84
+ if (members === null)
85
+ return keepWhole(inst, keep);
86
+ const memberIds = [];
87
+ for (const member of members) {
88
+ const ref = SINGLE_REF_RE.exec(member);
89
+ // A SET member that is not a plain object reference is not something this
90
+ // rewrite understands; fall back rather than guess at it.
91
+ if (ref === null)
92
+ return keepWhole(inst, keep);
93
+ memberIds.push(Number(ref[1]));
94
+ }
95
+ // The relating parent must be a real, kept reference. The `every reference
96
+ // outside the SET is kept` loop below would pass VACUOUSLY on a `$` here,
97
+ // emitting a containment with no parent.
98
+ const relating = SINGLE_REF_RE.exec(args[relatingIdx]);
99
+ if (relating === null || !keep.has(Number(relating[1])))
100
+ return null;
101
+ const kept = memberIds.filter((id) => keep.has(id));
102
+ if (kept.length === 0)
103
+ return null;
104
+ // Every other non-set reference (OwnerHistory) must be kept or the emitted
105
+ // record dangles. Ordered AFTER the intersection so `blocked` names only the
106
+ // references of a relation that would OTHERWISE survive; both checks drop the
107
+ // relation, so which one runs first changes no verdict.
108
+ const unkept = [];
109
+ for (let i = 0; i < args.length; i++) {
110
+ if (i === relatedIdx)
111
+ continue;
112
+ for (const id of refsOutsideStrings(args[i])) {
113
+ if (!keep.has(id))
114
+ unkept.push(id);
115
+ }
116
+ }
117
+ if (unkept.length > 0) {
118
+ blocked.push(...unkept);
119
+ return null;
120
+ }
121
+ if (kept.length === memberIds.length)
122
+ return inst.full;
123
+ return spliceArgument(inst, args, relatedIdx, `(${kept.map((id) => `#${id}`).join(',')})`);
124
+ }
125
+ /**
126
+ * The `#id` object references in one argument, ignoring any that sit inside a
127
+ * STEP string literal.
128
+ *
129
+ * A relation's `Name` and `Description` are free TEXT, and free text contains
130
+ * `#`; `parseStep` tokenizes rather than regexes precisely because Revit
131
+ * writes names like that. Read raw, the `#99` in `'Level #99 contents'` looks
132
+ * like a reference to entity 99, and one unkept lookalike drops the WHOLE
133
+ * relation: the orphaned-storey bug this module exists to fix, re-created for
134
+ * any model that names a relation that way.
135
+ *
136
+ * Correct only on an argument whose split VALIDATED, so the quote boundaries
137
+ * are the record's own. {@link keepWhole} deliberately does NOT use this. It
138
+ * runs when the split FAILED, and also when it succeeded but the record is not
139
+ * the six-attribute shape this module rewrites, so its boundaries are not
140
+ * established in general. There, over-counting references (drop the record) is
141
+ * the safe error, while under-counting (emit a dangling `#id`) is not.
142
+ */
143
+ function refsOutsideStrings(arg) {
144
+ const ids = [];
145
+ let inString = false;
146
+ for (let i = 0; i < arg.length; i++) {
147
+ const char = arg[i];
148
+ if (inString) {
149
+ if (char === "'") {
150
+ if (arg[i + 1] === "'")
151
+ i++;
152
+ else
153
+ inString = false;
154
+ }
155
+ continue;
156
+ }
157
+ if (char === "'") {
158
+ inString = true;
159
+ }
160
+ else if (char === '#') {
161
+ let end = i + 1;
162
+ while (end < arg.length && arg[end] >= '0' && arg[end] <= '9')
163
+ end++;
164
+ if (end > i + 1)
165
+ ids.push(Number(arg.slice(i + 1, end)));
166
+ i = end - 1;
167
+ }
168
+ }
169
+ return ids;
170
+ }
171
+ /**
172
+ * Keep-whole-or-drop-whole, for a record this module could not scan, or could
173
+ * not read as its six attributes. Reads references straight off the raw body,
174
+ * so it needs no argument boundaries to be correct. Same no-dangling guarantee,
175
+ * no rewriting.
176
+ */
177
+ function keepWhole(inst, keep) {
178
+ const refs = [...inst.body.matchAll(/#(\d+)/g)].map((m) => Number(m[1]));
179
+ return refs.length > 0 && refs.every((r) => keep.has(r)) ? inst.full : null;
180
+ }
181
+ /**
182
+ * Re-emit the record with ONE top-level argument replaced. Rejoining the split
183
+ * arguments normalizes only the whitespace BETWEEN them (each argument's own
184
+ * text is untouched), and this runs only for a relation that actually lost a
185
+ * member, so an unfiltered subset stays byte-identical.
186
+ */
187
+ function spliceArgument(inst, args, index, replacement) {
188
+ const open = inst.full.indexOf('(');
189
+ // `body` is by construction the slice of `full` between its first `(` and the
190
+ // matching `)`: the id and type name that precede it hold no parenthesis. A
191
+ // mismatch would mean the parser and this module disagree about where the
192
+ // arguments are, and splicing on that offset corrupts the record, so drop it
193
+ // instead of emitting something malformed.
194
+ if (open < 0 || inst.full.slice(open + 1, open + 1 + inst.body.length) !== inst.body)
195
+ return null;
196
+ const next = [...args];
197
+ next[index] = replacement;
198
+ return inst.full.slice(0, open + 1) + next.join(',') + inst.full.slice(open + 1 + inst.body.length);
199
+ }
200
+ /**
201
+ * Split a STEP argument list on top-level commas, respecting nested
202
+ * parentheses, quoted strings and doubled-quote escapes. Returns null when the
203
+ * text is not a well-formed argument list.
204
+ *
205
+ * It VALIDATES rather than accepting whatever it accumulated, because
206
+ * {@link relationLine} reads `RelatingStructure` by index and writes
207
+ * `RelatedElements` by index, the situation #2470 names, where a mis-scanned
208
+ * list still produces parts and a slot written into those parts lands on the
209
+ * wrong argument while reporting success.
210
+ *
211
+ * Rejected, because after any of these the parts are no longer the record's
212
+ * attributes: commas were swallowed and everything past them shifted:
213
+ * - a quote still open at the end (unterminated string);
214
+ * - a paren depth that does not return to zero at the end (unbalanced list);
215
+ * - a depth that ever goes NEGATIVE (stray closing paren). Both ends matter:
216
+ * a depth that dips below zero and climbs back looks balanced at the end
217
+ * while every comma in between was read as nested.
218
+ *
219
+ * An EMPTY INTERIOR slot (`a,,b`) is deliberately NOT rejected: it is one part,
220
+ * exactly as an entity parser counts it, so every later index still names the
221
+ * attribute it is meant to.
222
+ *
223
+ * Near-twin, not a copy, of `@ifc-lite/export`'s `splitTopLevelStepArguments`
224
+ * (see the module header for why it is not imported). Two MEASURED differences,
225
+ * both wanted here and neither shared with that function:
226
+ * - each part is `trim`med, because {@link SINGLE_REF_RE} is anchored;
227
+ * - a TRAILING empty slot (`a,b,`) yields 2 parts, not 3. So a SIX-attribute
228
+ * record with a stray trailing comma still counts as six, is rewritten, and
229
+ * loses that comma in the output; a five-attribute one is rejected by the
230
+ * attribute-count check instead. Invalid STEP in, valid STEP out, and the
231
+ * slot indices are the ones the record meant either way.
232
+ */
233
+ function splitTopLevelArgs(text) {
234
+ const parts = [];
235
+ let start = 0;
236
+ let depth = 0;
237
+ let inString = false;
238
+ for (let i = 0; i < text.length; i++) {
239
+ const char = text[i];
240
+ if (inString) {
241
+ if (char === "'") {
242
+ // A doubled quote is an escaped quote, not the end of the string.
243
+ if (text[i + 1] === "'")
244
+ i++;
245
+ else
246
+ inString = false;
247
+ }
248
+ continue;
249
+ }
250
+ if (char === "'") {
251
+ inString = true;
252
+ }
253
+ else if (char === '(') {
254
+ depth++;
255
+ }
256
+ else if (char === ')') {
257
+ depth--;
258
+ if (depth < 0)
259
+ return null;
260
+ }
261
+ else if (char === ',' && depth === 0) {
262
+ parts.push(text.slice(start, i).trim());
263
+ start = i + 1;
264
+ }
265
+ }
266
+ if (inString || depth !== 0)
267
+ return null;
268
+ const tail = text.slice(start).trim();
269
+ if (tail)
270
+ parts.push(tail);
271
+ return parts;
272
+ }
273
+ //# sourceMappingURL=subset-relations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subset-relations.js","sourceRoot":"","sources":["../../src/commands/subset-relations.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -42,6 +42,7 @@ import { extCommand } from './commands/ext.js';
42
42
  import { layerCommand } from './commands/layer.js';
43
43
  import { refCommand } from './commands/ref.js';
44
44
  import { gymCommand } from './commands/gym.js';
45
+ import { deliveryCommand } from './commands/delivery.js';
45
46
  import { fileURLToPath } from 'node:url';
46
47
  import { dirname, join } from 'node:path';
47
48
  import { readCliVersion } from './version.js';
@@ -104,6 +105,8 @@ const HELP = `
104
105
  layer <publish|diff|merge|log|bake|...> Layered change tracking over a local store (.ifc-lite/)
105
106
  ref <list|create|move|protect> Manage named refs in the layer store
106
107
  gym --model <file.ifc> | --seed <n> reset/step/reward environment loop (JSONL over stdin/stdout)
108
+ delivery <recipe.json> [--json] [--out F] [--html F] Repeatable delivery check (structural + IDS) from a saved recipe
109
+ recipe: {"models":["m.ifc"],"structural":true,"ids":["rules.ids"]}, paths relative to the recipe file
107
110
 
108
111
  Options:
109
112
  --help, -h Show help
@@ -142,7 +145,7 @@ const HELP = `
142
145
  ifc-lite diagnose-geometry model.ifc --type IfcWall
143
146
  ifc-lite diagnose-geometry model.ifc --product 0YvCT2_$X3_xJG3rzD8L_8
144
147
  ifc-lite ids model.ifc requirements.ids --json
145
- ifc-lite bcf create --title "Missing door" --out issue.bcf
148
+ ifc-lite bcf create --title "Missing door" --out topic.bcf
146
149
  ifc-lite clash model.ifc --matrix --json
147
150
  ifc-lite clash model.ifc --a "IfcDuct*|IfcPipe*" --b "IfcWall*" --mode clearance --clearance 0.05
148
151
  ifc-lite clash model.ifc --matrix --bcf clashes.bcfzip
@@ -345,6 +348,9 @@ async function main() {
345
348
  case 'gym':
346
349
  await gymCommand(commandArgs);
347
350
  break;
351
+ case 'delivery':
352
+ await deliveryCommand(commandArgs);
353
+ break;
348
354
  default:
349
355
  process.stderr.write(`Unknown command: ${command}\n`);
350
356
  process.stderr.write(`Run 'ifc-lite --help' for usage.\n`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ifc-lite/cli",
3
- "version": "0.27.0",
3
+ "version": "0.28.1",
4
4
  "description": "CLI toolkit for IFC files — query, validate, export, create, and script BIM data",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,28 +20,28 @@
20
20
  "README.md"
21
21
  ],
22
22
  "dependencies": {
23
- "@ifc-lite/clash": "^2.0.0",
23
+ "@ifc-lite/bcf": "^3.0.1",
24
24
  "@ifc-lite/create": "^2.2.1",
25
25
  "@ifc-lite/data": "^4.0.0",
26
- "@ifc-lite/bcf": "^3.0.0",
27
26
  "@ifc-lite/diff": "^0.8.0",
27
+ "@ifc-lite/clash": "^2.1.0",
28
+ "@ifc-lite/export": "^4.0.1",
28
29
  "@ifc-lite/extensions": "^0.6.0",
29
- "@ifc-lite/export": "^4.0.0",
30
- "@ifc-lite/geometry": "^4.2.0",
31
- "@ifc-lite/ids": "^1.15.53",
30
+ "@ifc-lite/ids": "^1.16.0",
31
+ "@ifc-lite/geometry": "^4.3.0",
32
32
  "@ifc-lite/ifcx": "^4.0.0",
33
- "@ifc-lite/mcp": "^0.13.0",
34
- "@ifc-lite/mutations": "^2.0.0",
35
33
  "@ifc-lite/merge": "^0.4.5",
36
- "@ifc-lite/parser": "^5.0.0",
37
- "@ifc-lite/sandbox": "^2.2.2",
34
+ "@ifc-lite/mcp": "^0.13.1",
35
+ "@ifc-lite/mutations": "^2.1.0",
36
+ "@ifc-lite/parser": "^5.2.0",
37
+ "@ifc-lite/query": "^2.2.0",
38
+ "@ifc-lite/sandbox": "^2.2.3",
38
39
  "@ifc-lite/viewer-core": "^0.2.15",
39
- "@ifc-lite/sdk": "^4.0.0",
40
- "@ifc-lite/query": "^2.1.0",
41
- "@ifc-lite/wasm": "^6.2.0"
40
+ "@ifc-lite/sdk": "^4.0.2",
41
+ "@ifc-lite/wasm": "^6.4.0"
42
42
  },
43
43
  "devDependencies": {
44
- "@types/node": "^26.4.0",
44
+ "@types/node": "^26.4.1",
45
45
  "typescript": "^6.0.3",
46
46
  "vitest": "^4.1.11"
47
47
  },