@ifc-lite/cli 0.28.1 → 0.29.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 (53) hide show
  1. package/dist/commands/analyze.d.ts.map +1 -1
  2. package/dist/commands/analyze.js +9 -2
  3. package/dist/commands/analyze.js.map +1 -1
  4. package/dist/commands/diff-test-helpers.d.ts +7 -4
  5. package/dist/commands/diff-test-helpers.d.ts.map +1 -1
  6. package/dist/commands/diff-test-helpers.js +7 -4
  7. package/dist/commands/diff-test-helpers.js.map +1 -1
  8. package/dist/commands/export-rust-formats.d.ts.map +1 -1
  9. package/dist/commands/export-rust-formats.js +27 -3
  10. package/dist/commands/export-rust-formats.js.map +1 -1
  11. package/dist/commands/export.d.ts +9 -0
  12. package/dist/commands/export.d.ts.map +1 -1
  13. package/dist/commands/export.js +5 -3
  14. package/dist/commands/export.js.map +1 -1
  15. package/dist/commands/extract-entities.d.ts +17 -5
  16. package/dist/commands/extract-entities.d.ts.map +1 -1
  17. package/dist/commands/extract-entities.js +68 -126
  18. package/dist/commands/extract-entities.js.map +1 -1
  19. package/dist/commands/info.d.ts.map +1 -1
  20. package/dist/commands/info.js +56 -0
  21. package/dist/commands/info.js.map +1 -1
  22. package/dist/commands/mutate-step-record.d.ts +33 -0
  23. package/dist/commands/mutate-step-record.d.ts.map +1 -0
  24. package/dist/commands/mutate-step-record.js +267 -0
  25. package/dist/commands/mutate-step-record.js.map +1 -0
  26. package/dist/commands/mutate.d.ts +2 -25
  27. package/dist/commands/mutate.d.ts.map +1 -1
  28. package/dist/commands/mutate.js +4 -97
  29. package/dist/commands/mutate.js.map +1 -1
  30. package/dist/commands/query-output.d.ts.map +1 -1
  31. package/dist/commands/query-output.js +33 -6
  32. package/dist/commands/query-output.js.map +1 -1
  33. package/dist/commands/spatial-ancestors.d.ts +26 -0
  34. package/dist/commands/spatial-ancestors.d.ts.map +1 -0
  35. package/dist/commands/spatial-ancestors.js +102 -0
  36. package/dist/commands/spatial-ancestors.js.map +1 -0
  37. package/dist/commands/step-args.d.ts +33 -7
  38. package/dist/commands/step-args.d.ts.map +1 -1
  39. package/dist/commands/step-args.js +60 -26
  40. package/dist/commands/step-args.js.map +1 -1
  41. package/dist/commands/storey-selection.d.ts +6 -0
  42. package/dist/commands/storey-selection.d.ts.map +1 -0
  43. package/dist/commands/storey-selection.js +90 -0
  44. package/dist/commands/storey-selection.js.map +1 -0
  45. package/dist/commands/subset-relations.d.ts +88 -11
  46. package/dist/commands/subset-relations.d.ts.map +1 -1
  47. package/dist/commands/subset-relations.js +66 -62
  48. package/dist/commands/subset-relations.js.map +1 -1
  49. package/dist/commands/where-filter.d.ts +1 -0
  50. package/dist/commands/where-filter.d.ts.map +1 -1
  51. package/dist/commands/where-filter.js +7 -3
  52. package/dist/commands/where-filter.js.map +1 -1
  53. package/package.json +18 -18
@@ -37,8 +37,8 @@
37
37
  * and dropping there was the orphaned-storey symptom again (#4126). This
38
38
  * function still takes no `parsed`, so it cannot close over such a
39
39
  * reference; it REPORTS it in {@link SpatialRelationPlan.blockedOn} and the
40
- * caller, which does have `parsed`, keeps it and replans. Purity is intact:
41
- * `blockedOn` is a finding, not a mutation.
40
+ * caller, which does have `parsed`, decides whether to keep it and replan.
41
+ * Purity is intact: `blockedOn` is a finding, not a mutation.
42
42
  *
43
43
  * A KNOWN gap: {@link keepWhole}, the fallback for a record this module could
44
44
  * not read as its six attributes, still drops on the same private
@@ -69,8 +69,8 @@
69
69
  * picks which lines it sees. Widening the type set is the separate decision,
70
70
  * and that is the one that changes which relations survive an extraction.
71
71
  * Consolidation follow-up: #4125.
72
- * - `splitTopLevelStepArguments` (`step-argument-parser.ts`): see
73
- * {@link splitTopLevelArgs}.
72
+ * - `splitTopLevelStepArguments` (`step-argument-parser.ts`) and
73
+ * `skipStepComment` (`step-comment-skip.ts`): see {@link splitTopLevelArgs}.
74
74
  * - `STRUCTURE_RELATIONS` (`merged-empty-containers.ts`): three lines, see
75
75
  * below.
76
76
  */
@@ -104,15 +104,48 @@ export interface SpatialRelationPlan {
104
104
  /** Relation id → rewritten record text, for the ones that lost a member. */
105
105
  rewritten: Map<number, string>;
106
106
  /**
107
- * Unkept non-SET references, in practice a relation-private `OwnerHistory`,
108
- * of the relations that this plan dropped for THAT reason alone: their
109
- * relating parent is kept and their member intersection is non-empty, so
110
- * keeping these ids is all that stands between them and surviving. A caller
111
- * holding the parsed model can close over them and replan (#4126). Every
112
- * other drop is final and reports nothing here.
107
+ * One entry per relation this plan dropped for ONE reason alone: unkept non-SET references,
108
+ * in practice a relation-private `OwnerHistory`. Its relating parent is kept and its member
109
+ * intersection is non-empty, so keeping EVERY id in the entry is all that stands between it
110
+ * and surviving. Grouped per relation, because keeping only SOME of one relation's blockers
111
+ * leaves it dropped and those ids orphaned (#4150). A caller with the parsed model closes
112
+ * over a group and replans (#4126). Every other drop is final and reports nothing here.
113
113
  */
114
- blockedOn: number[];
114
+ blockedOn: number[][];
115
115
  }
116
+ /**
117
+ * Spatial-structure relations, as `[relatingAttributeIndex, relatedAttributeIndex]`.
118
+ * `IfcRelAggregates` names the whole (`RelatingObject`) first; the two containment
119
+ * relations name the parts (`RelatedElements`) first. Same table as `STRUCTURE_RELATIONS`
120
+ * in `@ifc-lite/export`'s `merged-empty-containers.ts`, which reads the same three
121
+ * records, copied rather than imported because that module is internal to
122
+ * `@ifc-lite/export` and exporting it would widen a published API surface for a
123
+ * three-line constant.
124
+ *
125
+ * `IfcRelReferencedInSpatialStructure` is here for the same reason the other two are:
126
+ * same shape (one relating parent, one related SET), same one-per-storey authoring,
127
+ * same claim in the command's own docs that the output "parses and renders on its
128
+ * own". It used to be missing entirely, so a referenced-but-not-contained product was
129
+ * always orphaned.
130
+ */
131
+ export declare const STRUCTURE_RELATIONS: Record<string, [number, number]>;
132
+ /**
133
+ * All three are `GlobalId, OwnerHistory, Name, Description` plus the relating/related
134
+ * pair: exactly 6 attributes in every schema that defines them. A record that does not
135
+ * split into 6 was mis-scanned (or is not the entity the type name claims), so it falls
136
+ * back to keep-whole-or-drop-whole rather than having a slot index written into
137
+ * whatever it did split into.
138
+ *
139
+ * A relation type with a different attribute COUNT (`IfcRelAssignsToGroup` has 7)
140
+ * therefore cannot simply be added as a row above: it would fail this check on every
141
+ * record and fall silently back to keep-whole-or-drop-whole, which is the bug this
142
+ * module exists to fix. Such a type needs the count moved into the table value first,
143
+ * or the whole table derived from the schema registry, which returns 7 for that entity
144
+ * and would make row four safe rather than forbidden. Filed as #4123.
145
+ */
146
+ export declare const STRUCTURE_RELATION_ATTRS = 6;
147
+ /** A single `#id` and nothing else: an object reference in one slot. */
148
+ export declare const SINGLE_REF_RE: RegExp;
116
149
  /**
117
150
  * Decide every spatial-structure relation against a kept-id set.
118
151
  *
@@ -121,4 +154,48 @@ export interface SpatialRelationPlan {
121
154
  * spatial containers and an OwnerHistory, never another relation.
122
155
  */
123
156
  export declare function planSpatialRelations(instances: Iterable<StepRecord>, keep: ReadonlySet<number>): SpatialRelationPlan;
157
+ /**
158
+ * The `#id` object references in one argument, ignoring any that sit inside a
159
+ * STEP string literal.
160
+ *
161
+ * A relation's `Name` and `Description` are free TEXT, and free text contains
162
+ * `#`; `parseStep` tokenizes rather than regexes precisely because Revit
163
+ * writes names like that. Read raw, the `#99` in `'Level #99 contents'` looks
164
+ * like a reference to entity 99, and one unkept lookalike drops the WHOLE
165
+ * relation: the orphaned-storey bug this module exists to fix, re-created for
166
+ * any model that names a relation that way.
167
+ *
168
+ * Correct only on an argument whose split VALIDATED, so the quote boundaries
169
+ * are the record's own. {@link keepWhole} deliberately does NOT use this. It
170
+ * runs when the split FAILED, and also when it succeeded but the record is not
171
+ * the six-attribute shape this module rewrites, so its boundaries are not
172
+ * established in general. There, over-counting references (drop the record) is
173
+ * the safe error, while under-counting (emit a dangling `#id`) is not.
174
+ *
175
+ * Exported for `extract-entities.ts`'s `forwardClosure`, which has the same
176
+ * hazard scanning a whole record body for its reference closure: nothing here
177
+ * assumes `arg` is one split ARGUMENT rather than a whole body, since a comma
178
+ * or `)` outside a string does not affect the in-string/out-of-string state
179
+ * this walks.
180
+ */
181
+ export declare function refsOutsideStrings(arg: string): number[];
182
+ /**
183
+ * Split a STEP argument list on top-level commas, respecting nested parens,
184
+ * quoted strings, doubled-quote escapes, and `/* ... *\/` comments (#4227).
185
+ * Returns null on an unterminated string, an unbalanced paren depth, or a
186
+ * depth that ever goes negative -- {@link relationLine} writes a slot by
187
+ * index (#2470), so a mis-scanned list must not hand back parts that look
188
+ * like success. A comma/paren/quote inside a comment is skipped with it (see
189
+ * {@link skipStepComment}): unskipped, its comma shifts every later slot
190
+ * boundary and `relationLine` either mis-splices a member or falls back to
191
+ * {@link keepWhole}, dropping a relation that should have survived -- the
192
+ * orphaned-storey symptom (#4126) this module exists to fix, by a different
193
+ * route. An EMPTY INTERIOR slot (`a,,b`) is one part, not rejected.
194
+ *
195
+ * Near-twin of `@ifc-lite/export`'s `splitTopLevelStepArguments` (see the
196
+ * module header). Two differences: each part is `trim`med (because
197
+ * {@link SINGLE_REF_RE} is anchored), and a TRAILING empty slot (`a,b,`)
198
+ * yields 2 parts, not 3.
199
+ */
200
+ export declare function splitTopLevelArgs(text: string): string[] | null;
124
201
  //# sourceMappingURL=subset-relations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subset-relations.d.ts","sourceRoot":"","sources":["../../src/commands/subset-relations.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,4EAA4E;IAC5E,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AA4CD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC/B,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GACxB,mBAAmB,CAarB"}
1
+ {"version":3,"file":"subset-relations.d.ts","sourceRoot":"","sources":["../../src/commands/subset-relations.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,4EAA4E;IAC5E,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAIhE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,wEAAwE;AACxE,eAAO,MAAM,aAAa,QAAa,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC/B,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GACxB,mBAAmB,CAarB;AA8DD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBxD;AAgDD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAuC/D"}
@@ -2,44 +2,42 @@
2
2
  // License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
  /**
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
5
+ * Spatial-structure relations, as `[relatingAttributeIndex, relatedAttributeIndex]`.
6
+ * `IfcRelAggregates` names the whole (`RelatingObject`) first; the two containment
7
+ * relations name the parts (`RelatedElements`) first. Same table as `STRUCTURE_RELATIONS`
8
+ * in `@ifc-lite/export`'s `merged-empty-containers.ts`, which reads the same three
10
9
  * records, copied rather than imported because that module is internal to
11
10
  * `@ifc-lite/export` and exporting it would widen a published API surface for a
12
11
  * three-line constant.
13
12
  *
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.
13
+ * `IfcRelReferencedInSpatialStructure` is here for the same reason the other two are:
14
+ * same shape (one relating parent, one related SET), same one-per-storey authoring,
15
+ * same claim in the command's own docs that the output "parses and renders on its
16
+ * own". It used to be missing entirely, so a referenced-but-not-contained product was
17
+ * always orphaned.
19
18
  */
20
- const STRUCTURE_RELATIONS = {
19
+ export const STRUCTURE_RELATIONS = {
21
20
  IFCRELAGGREGATES: [4, 5],
22
21
  IFCRELCONTAINEDINSPATIALSTRUCTURE: [5, 4],
23
22
  IFCRELREFERENCEDINSPATIALSTRUCTURE: [5, 4],
24
23
  };
25
24
  /**
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.
25
+ * All three are `GlobalId, OwnerHistory, Name, Description` plus the relating/related
26
+ * pair: exactly 6 attributes in every schema that defines them. A record that does not
27
+ * split into 6 was mis-scanned (or is not the entity the type name claims), so it falls
28
+ * back to keep-whole-or-drop-whole rather than having a slot index written into
29
+ * whatever it did split into.
31
30
  *
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.
31
+ * A relation type with a different attribute COUNT (`IfcRelAssignsToGroup` has 7)
32
+ * therefore cannot simply be added as a row above: it would fail this check on every
33
+ * record and fall silently back to keep-whole-or-drop-whole, which is the bug this
34
+ * module exists to fix. Such a type needs the count moved into the table value first,
35
+ * or the whole table derived from the schema registry, which returns 7 for that entity
36
+ * and would make row four safe rather than forbidden. Filed as #4123.
39
37
  */
40
- const STRUCTURE_RELATION_ATTRS = 6;
38
+ export const STRUCTURE_RELATION_ATTRS = 6;
41
39
  /** A single `#id` and nothing else: an object reference in one slot. */
42
- const SINGLE_REF_RE = /^#(\d+)$/;
40
+ export const SINGLE_REF_RE = /^#(\d+)$/;
43
41
  /**
44
42
  * Decide every spatial-structure relation against a kept-id set.
45
43
  *
@@ -66,9 +64,9 @@ export function planSpatialRelations(instances, keep) {
66
64
  }
67
65
  /**
68
66
  * 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}.
67
+ * Returns `inst.full` unchanged when nothing was filtered out. Appends ONE entry
68
+ * to `blocked` when the ONLY thing standing in the way is unkept non-SET
69
+ * references; see {@link SpatialRelationPlan.blockedOn}.
72
70
  */
73
71
  function relationLine(inst, [relatingIdx, relatedIdx], keep, blocked) {
74
72
  // A null is a REJECTED scan, not an empty list: its parts are wherever the
@@ -115,7 +113,7 @@ function relationLine(inst, [relatingIdx, relatedIdx], keep, blocked) {
115
113
  }
116
114
  }
117
115
  if (unkept.length > 0) {
118
- blocked.push(...unkept);
116
+ blocked.push(unkept);
119
117
  return null;
120
118
  }
121
119
  if (kept.length === memberIds.length)
@@ -139,8 +137,14 @@ function relationLine(inst, [relatingIdx, relatedIdx], keep, blocked) {
139
137
  * the six-attribute shape this module rewrites, so its boundaries are not
140
138
  * established in general. There, over-counting references (drop the record) is
141
139
  * the safe error, while under-counting (emit a dangling `#id`) is not.
140
+ *
141
+ * Exported for `extract-entities.ts`'s `forwardClosure`, which has the same
142
+ * hazard scanning a whole record body for its reference closure: nothing here
143
+ * assumes `arg` is one split ARGUMENT rather than a whole body, since a comma
144
+ * or `)` outside a string does not affect the in-string/out-of-string state
145
+ * this walks.
142
146
  */
143
- function refsOutsideStrings(arg) {
147
+ export function refsOutsideStrings(arg) {
144
148
  const ids = [];
145
149
  let inString = false;
146
150
  for (let i = 0; i < arg.length; i++) {
@@ -198,39 +202,34 @@ function spliceArgument(inst, args, index, replacement) {
198
202
  return inst.full.slice(0, open + 1) + next.join(',') + inst.full.slice(open + 1 + inst.body.length);
199
203
  }
200
204
  /**
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.
205
+ * Skip a `/* ... *\/` comment atomically: index of `/` in, index past its
206
+ * close marker (or end-of-text when unterminated) out. Byte-identical copy of
207
+ * `@ifc-lite/export`'s `skipStepComment` (not imported, see the module
208
+ * header): #4227's third copy of the same missing logic.
209
+ */
210
+ function skipStepComment(text, i) {
211
+ const end = text.indexOf('*/', i + 2);
212
+ return end === -1 ? text.length : end + 2;
213
+ }
214
+ /**
215
+ * Split a STEP argument list on top-level commas, respecting nested parens,
216
+ * quoted strings, doubled-quote escapes, and `/* ... *\/` comments (#4227).
217
+ * Returns null on an unterminated string, an unbalanced paren depth, or a
218
+ * depth that ever goes negative -- {@link relationLine} writes a slot by
219
+ * index (#2470), so a mis-scanned list must not hand back parts that look
220
+ * like success. A comma/paren/quote inside a comment is skipped with it (see
221
+ * {@link skipStepComment}): unskipped, its comma shifts every later slot
222
+ * boundary and `relationLine` either mis-splices a member or falls back to
223
+ * {@link keepWhole}, dropping a relation that should have survived -- the
224
+ * orphaned-storey symptom (#4126) this module exists to fix, by a different
225
+ * route. An EMPTY INTERIOR slot (`a,,b`) is one part, not rejected.
222
226
  *
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.
227
+ * Near-twin of `@ifc-lite/export`'s `splitTopLevelStepArguments` (see the
228
+ * module header). Two differences: each part is `trim`med (because
229
+ * {@link SINGLE_REF_RE} is anchored), and a TRAILING empty slot (`a,b,`)
230
+ * yields 2 parts, not 3.
232
231
  */
233
- function splitTopLevelArgs(text) {
232
+ export function splitTopLevelArgs(text) {
234
233
  const parts = [];
235
234
  let start = 0;
236
235
  let depth = 0;
@@ -247,7 +246,12 @@ function splitTopLevelArgs(text) {
247
246
  }
248
247
  continue;
249
248
  }
250
- if (char === "'") {
249
+ if (char === '/' && text[i + 1] === '*') {
250
+ // See skipStepComment's docstring: its content is skipped as one unit,
251
+ // not read as argument-list structure.
252
+ i = skipStepComment(text, i) - 1;
253
+ }
254
+ else if (char === "'") {
251
255
  inString = true;
252
256
  }
253
257
  else if (char === '(') {
@@ -1 +1 @@
1
- {"version":3,"file":"subset-relations.js","sourceRoot":"","sources":["../../src/commands/subset-relations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subset-relations.js","sourceRoot":"","sources":["../../src/commands/subset-relations.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,sEAAsE;AACtE,4DAA4D;AAyH5D;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAqC;IACnE,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACxB,iCAAiC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC,kCAAkC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAA+B,EAC/B,IAAyB;IAEzB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAC5B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,IAAgB,EAChB,CAAC,WAAW,EAAE,UAAU,CAAmB,EAC3C,IAAyB,EACzB,OAAmB;IAEnB,2EAA2E;IAC3E,oEAAoE;IACpE,yEAAyE;IACzE,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,wBAAwB;QAAE,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE5F,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,0EAA0E;QAC1E,0DAA0D;QAC1D,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,2EAA2E;IAC3E,0EAA0E;IAC1E,yCAAyC;IACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAErE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,2EAA2E;IAC3E,6EAA6E;IAC7E,8EAA8E;IAC9E,wDAAwD;IACxD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,UAAU;YAAE,SAAS;QAC/B,KAAK,MAAM,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IACvD,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;oBAAE,CAAC,EAAE,CAAC;;oBACvB,QAAQ,GAAG,KAAK,CAAC;YACxB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG;gBAAE,GAAG,EAAE,CAAC;YACrE,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,IAAgB,EAAE,IAAyB;IAC5D,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CACrB,IAAgB,EAChB,IAAc,EACd,KAAa,EACb,WAAmB;IAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,6EAA6E;IAC7E,2CAA2C;IAC3C,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAClG,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtG,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAY,EAAE,CAAS;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,kEAAkE;gBAClE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;oBAAE,CAAC,EAAE,CAAC;;oBACxB,QAAQ,GAAG,KAAK,CAAC;YACxB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACxC,uEAAuE;YACvE,uCAAuC;YACvC,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC7B,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -14,6 +14,7 @@ import { normalizeBooleanValue } from '@ifc-lite/query';
14
14
  * PsetName.PropName>=Value (greater or equal)
15
15
  * PsetName.PropName<=Value (less or equal)
16
16
  * PsetName.PropName~Value (contains)
17
+ * PsetName.PropName~=Pattern (regex match — see `matches` on FilterComparisonOp)
17
18
  * PsetName.PropName (exists)
18
19
  */
19
20
  export declare function parseWhereFilter(filter: string): {
@@ -1 +1 @@
1
- {"version":3,"file":"where-filter.d.ts","sourceRoot":"","sources":["../../src/commands/where-filter.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,OAAO,EAIL,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AAGzB;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAsBzH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAoB9G;AAMD,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGlG;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"where-filter.d.ts","sourceRoot":"","sources":["../../src/commands/where-filter.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,OAAO,EAIL,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AAGzB;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAyBzH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAoB9G;AAMD,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGlG;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -18,6 +18,7 @@ import { fatal } from '../output.js';
18
18
  * PsetName.PropName>=Value (greater or equal)
19
19
  * PsetName.PropName<=Value (less or equal)
20
20
  * PsetName.PropName~Value (contains)
21
+ * PsetName.PropName~=Pattern (regex match — see `matches` on FilterComparisonOp)
21
22
  * PsetName.PropName (exists)
22
23
  */
23
24
  export function parseWhereFilter(filter) {
@@ -27,13 +28,16 @@ export function parseWhereFilter(filter) {
27
28
  }
28
29
  const psetName = filter.slice(0, dotIdx);
29
30
  const rest = filter.slice(dotIdx + 1);
30
- // Try multi-char operators first, then single-char
31
- for (const op of ['!=', '>=', '<=', '>', '<', '=', '~']) {
31
+ // Try multi-char operators first, then single-char. `~=` MUST be checked
32
+ // before both `=` and `~` either alone would split "Prop~=pattern" wrong
33
+ // (matching bare `=` mid-token, or bare `~` and leaving a stray `=` in the
34
+ // value).
35
+ for (const op of ['!=', '>=', '<=', '~=', '>', '<', '=', '~']) {
32
36
  const opIdx = rest.indexOf(op);
33
37
  if (opIdx > 0) {
34
38
  const propName = rest.slice(0, opIdx);
35
39
  const value = rest.slice(opIdx + op.length);
36
- const mappedOp = op === '~' ? 'contains' : op;
40
+ const mappedOp = op === '~' ? 'contains' : op === '~=' ? 'matches' : op;
37
41
  return { psetName, propName, operator: mappedOp, value };
38
42
  }
39
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"where-filter.js","sourceRoot":"","sources":["../../src/commands/where-filter.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;GAIG;AAEH,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,GAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,KAAK,CAAC,4BAA4B,MAAM,wCAAwC,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEtC,mDAAmD;IACnD,KAAK,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAe,EAAE,MAA2C,EAAE,GAAQ;IACrG,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACzB,0BAA0B;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,uBAAuB,CAAM,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5F,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC9C,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9F,CAAC;QAED,gCAAgC;QAChC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,YAAY,GAAG,uBAAuB,CAAM,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3F,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC9C,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AACjF,4EAA4E;AAC5E,+EAA+E;AAC/E,iDAAiD;AACjD,MAAM,UAAU,aAAa,CAAC,MAAW,EAAE,QAAgB,EAAE,QAA4B;IACvF,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,MAAM,IAAI,IAAI,CAAC;IAClD,OAAO,kBAAkB,CAAC,MAAM,EAAE,QAA8B,EAAE,QAAQ,CAAC,CAAC;AAC9E,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"where-filter.js","sourceRoot":"","sources":["../../src/commands/where-filter.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.28.1",
3
+ "version": "0.29.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,25 +20,25 @@
20
20
  "README.md"
21
21
  ],
22
22
  "dependencies": {
23
- "@ifc-lite/bcf": "^3.0.1",
24
- "@ifc-lite/create": "^2.2.1",
25
- "@ifc-lite/data": "^4.0.0",
23
+ "@ifc-lite/bcf": "^4.0.0",
24
+ "@ifc-lite/clash": "^2.1.2",
25
+ "@ifc-lite/create": "^2.4.0",
26
+ "@ifc-lite/data": "^4.2.0",
26
27
  "@ifc-lite/diff": "^0.8.0",
27
- "@ifc-lite/clash": "^2.1.0",
28
- "@ifc-lite/export": "^4.0.1",
29
- "@ifc-lite/extensions": "^0.6.0",
30
- "@ifc-lite/ids": "^1.16.0",
31
- "@ifc-lite/geometry": "^4.3.0",
32
- "@ifc-lite/ifcx": "^4.0.0",
28
+ "@ifc-lite/export": "^4.2.0",
29
+ "@ifc-lite/geometry": "^5.0.0",
30
+ "@ifc-lite/extensions": "^0.7.0",
31
+ "@ifc-lite/ids": "^1.16.2",
32
+ "@ifc-lite/ifcx": "^4.1.0",
33
33
  "@ifc-lite/merge": "^0.4.5",
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",
39
- "@ifc-lite/viewer-core": "^0.2.15",
40
- "@ifc-lite/sdk": "^4.0.2",
41
- "@ifc-lite/wasm": "^6.4.0"
34
+ "@ifc-lite/mutations": "^2.2.0",
35
+ "@ifc-lite/parser": "^6.1.0",
36
+ "@ifc-lite/query": "^2.3.1",
37
+ "@ifc-lite/sdk": "^5.0.0",
38
+ "@ifc-lite/mcp": "^0.14.1",
39
+ "@ifc-lite/viewer-core": "^0.2.16",
40
+ "@ifc-lite/wasm": "^7.0.0",
41
+ "@ifc-lite/sandbox": "^2.2.4"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/node": "^26.4.1",