@ifc-lite/cli 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/commands/ask.d.ts +8 -0
  2. package/dist/commands/ask.d.ts.map +1 -1
  3. package/dist/commands/ask.js +10 -9
  4. package/dist/commands/ask.js.map +1 -1
  5. package/dist/commands/bsdd.d.ts.map +1 -1
  6. package/dist/commands/bsdd.js +49 -13
  7. package/dist/commands/bsdd.js.map +1 -1
  8. package/dist/commands/diff-classification-label.d.ts +12 -0
  9. package/dist/commands/diff-classification-label.d.ts.map +1 -0
  10. package/dist/commands/diff-classification-label.js +20 -0
  11. package/dist/commands/diff-classification-label.js.map +1 -0
  12. package/dist/commands/diff-engine.d.ts.map +1 -1
  13. package/dist/commands/diff-engine.js +33 -11
  14. package/dist/commands/diff-engine.js.map +1 -1
  15. package/dist/commands/diff-test-helpers.d.ts +12 -0
  16. package/dist/commands/diff-test-helpers.d.ts.map +1 -1
  17. package/dist/commands/diff-test-helpers.js +68 -0
  18. package/dist/commands/diff-test-helpers.js.map +1 -1
  19. package/dist/commands/diff-unit-scale-fixtures.d.ts +34 -0
  20. package/dist/commands/diff-unit-scale-fixtures.d.ts.map +1 -0
  21. package/dist/commands/diff-unit-scale-fixtures.js +94 -0
  22. package/dist/commands/diff-unit-scale-fixtures.js.map +1 -0
  23. package/dist/commands/export.d.ts +11 -0
  24. package/dist/commands/export.d.ts.map +1 -1
  25. package/dist/commands/export.js +9 -14
  26. package/dist/commands/export.js.map +1 -1
  27. package/dist/commands/merge.d.ts.map +1 -1
  28. package/dist/commands/merge.js +8 -0
  29. package/dist/commands/merge.js.map +1 -1
  30. package/dist/commands/query-aggregation.d.ts +27 -4
  31. package/dist/commands/query-aggregation.d.ts.map +1 -1
  32. package/dist/commands/query-aggregation.js +67 -6
  33. package/dist/commands/query-aggregation.js.map +1 -1
  34. package/dist/commands/query-output.d.ts +7 -0
  35. package/dist/commands/query-output.d.ts.map +1 -1
  36. package/dist/commands/query-output.js +63 -27
  37. package/dist/commands/query-output.js.map +1 -1
  38. package/dist/commands/query-storey.d.ts +24 -0
  39. package/dist/commands/query-storey.d.ts.map +1 -0
  40. package/dist/commands/query-storey.js +71 -0
  41. package/dist/commands/query-storey.js.map +1 -0
  42. package/dist/commands/query.d.ts +2 -25
  43. package/dist/commands/query.d.ts.map +1 -1
  44. package/dist/commands/query.js +39 -158
  45. package/dist/commands/query.js.map +1 -1
  46. package/dist/commands/schedule-aggregate.d.ts +51 -0
  47. package/dist/commands/schedule-aggregate.d.ts.map +1 -0
  48. package/dist/commands/schedule-aggregate.js +121 -0
  49. package/dist/commands/schedule-aggregate.js.map +1 -0
  50. package/dist/commands/schedule-columns.d.ts +15 -0
  51. package/dist/commands/schedule-columns.d.ts.map +1 -0
  52. package/dist/commands/schedule-columns.js +63 -0
  53. package/dist/commands/schedule-columns.js.map +1 -0
  54. package/dist/commands/schedule-group.d.ts +65 -0
  55. package/dist/commands/schedule-group.d.ts.map +1 -0
  56. package/dist/commands/schedule-group.js +0 -0
  57. package/dist/commands/schedule-group.js.map +1 -0
  58. package/dist/commands/schedule-presets.d.ts +21 -0
  59. package/dist/commands/schedule-presets.d.ts.map +1 -0
  60. package/dist/commands/schedule-presets.js +62 -0
  61. package/dist/commands/schedule-presets.js.map +1 -0
  62. package/dist/commands/schedule-render-html.d.ts +13 -0
  63. package/dist/commands/schedule-render-html.d.ts.map +1 -0
  64. package/dist/commands/schedule-render-html.js +100 -0
  65. package/dist/commands/schedule-render-html.js.map +1 -0
  66. package/dist/commands/schedule-render-md.d.ts +12 -0
  67. package/dist/commands/schedule-render-md.d.ts.map +1 -0
  68. package/dist/commands/schedule-render-md.js +77 -0
  69. package/dist/commands/schedule-render-md.js.map +1 -0
  70. package/dist/commands/schedule-render.d.ts +51 -0
  71. package/dist/commands/schedule-render.d.ts.map +1 -0
  72. package/dist/commands/schedule-render.js +205 -0
  73. package/dist/commands/schedule-render.js.map +1 -0
  74. package/dist/commands/schedule-spec.d.ts +29 -0
  75. package/dist/commands/schedule-spec.d.ts.map +1 -0
  76. package/dist/commands/schedule-spec.js +111 -0
  77. package/dist/commands/schedule-spec.js.map +1 -0
  78. package/dist/commands/schedule.d.ts +23 -0
  79. package/dist/commands/schedule.d.ts.map +1 -0
  80. package/dist/commands/schedule.js +249 -0
  81. package/dist/commands/schedule.js.map +1 -0
  82. package/dist/commands/schema.d.ts.map +1 -1
  83. package/dist/commands/schema.js +192 -17
  84. package/dist/commands/schema.js.map +1 -1
  85. package/dist/commands/stats-aggregation.d.ts +31 -6
  86. package/dist/commands/stats-aggregation.d.ts.map +1 -1
  87. package/dist/commands/stats-aggregation.js +79 -11
  88. package/dist/commands/stats-aggregation.js.map +1 -1
  89. package/dist/commands/stats.d.ts.map +1 -1
  90. package/dist/commands/stats.js +4 -4
  91. package/dist/commands/stats.js.map +1 -1
  92. package/dist/commands/validate.d.ts +7 -4
  93. package/dist/commands/validate.d.ts.map +1 -1
  94. package/dist/commands/validate.js +9 -6
  95. package/dist/commands/validate.js.map +1 -1
  96. package/dist/commands/where-filter.d.ts +42 -0
  97. package/dist/commands/where-filter.d.ts.map +1 -0
  98. package/dist/commands/where-filter.js +88 -0
  99. package/dist/commands/where-filter.js.map +1 -0
  100. package/dist/energy-export.d.ts.map +1 -1
  101. package/dist/energy-export.js +12 -2
  102. package/dist/energy-export.js.map +1 -1
  103. package/dist/geometry-report.d.ts.map +1 -1
  104. package/dist/geometry-report.js +15 -3
  105. package/dist/geometry-report.js.map +1 -1
  106. package/dist/headless-backend.d.ts +20 -5
  107. package/dist/headless-backend.d.ts.map +1 -1
  108. package/dist/headless-backend.js +131 -90
  109. package/dist/headless-backend.js.map +1 -1
  110. package/dist/index.js +22 -0
  111. package/dist/index.js.map +1 -1
  112. package/dist/output.d.ts +13 -0
  113. package/dist/output.d.ts.map +1 -1
  114. package/dist/output.js +21 -0
  115. package/dist/output.js.map +1 -1
  116. package/dist/property-filter-match.d.ts +12 -0
  117. package/dist/property-filter-match.d.ts.map +1 -0
  118. package/dist/property-filter-match.js +17 -0
  119. package/dist/property-filter-match.js.map +1 -0
  120. package/dist/query-overlay-relations.d.ts +29 -0
  121. package/dist/query-overlay-relations.d.ts.map +1 -0
  122. package/dist/query-overlay-relations.js +88 -0
  123. package/dist/query-overlay-relations.js.map +1 -0
  124. package/dist/query-overlay.d.ts +44 -0
  125. package/dist/query-overlay.d.ts.map +1 -0
  126. package/dist/query-overlay.js +100 -0
  127. package/dist/query-overlay.js.map +1 -0
  128. package/package.json +21 -21
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@
11
11
  import { logger, parseVerbosity } from './logger.js';
12
12
  import { infoCommand } from './commands/info.js';
13
13
  import { queryCommand } from './commands/query.js';
14
+ import { scheduleCommand } from './commands/schedule.js';
14
15
  import { propsCommand } from './commands/props.js';
15
16
  import { exportCommand } from './commands/export.js';
16
17
  import { diagnoseGeometryCommand } from './commands/diagnose-geometry.js';
@@ -58,6 +59,15 @@ const HELP = `
58
59
  query <file.ifc> [--type T] [--json] Query entities by type/properties/quantities
59
60
  props <file.ifc> --id <N> All properties for a single entity
60
61
  export <file.ifc> --format csv|json|ifc|obj|gltf|glb|jsonld|step|ifcx|usd|hbjson|dfjson Export data / geometry / energy model
62
+ schedule <file.ifc> --type T --columns "H=path,..." Tabular schedule of one class (csv/json/md/html)
63
+ [--preset door|window|space|wall|material-takeoff] default type+columns (flags override)
64
+ [--where PsetName.Prop=Value] [--format csv|json|md|html] path = attr | Pset.Prop | Qto.Qty
65
+ [--sort "Header[:asc|desc],..."] multi-key row sort by column HEADER (numbers numeric, nulls last)
66
+ [--group-by "Header,..."] contiguous groups, ordered by group key (asc, or --sort's dir)
67
+ [--subtotals "count|sum:H|avg:H|min:H|max:H,..."] subtotal row per group + grand total
68
+ (without --group-by: grand total only; CSV/md label the group column, JSON marks __row)
69
+ [--spec spec.json] load a saved schedule definition (beats --preset; an explicit flag beats both)
70
+ [--save spec.json] persist this invocation's resolved definition for --spec reuse
61
71
  diagnose-geometry <file.ifc> [--json] CSG / opening diagnostics (failures, classification)
62
72
  [--product ID|GUID] [--type T] Filter worst-hosts detail to one product/type
63
73
  extract-entities <file.ifc> --out F Isolate entities into a small, viewable standalone IFC
@@ -119,6 +129,15 @@ const HELP = `
119
129
  ifc-lite props model.ifc --id 42
120
130
  ifc-lite export model.ifc --format csv --type IfcWall --columns Name,Type,GlobalId
121
131
  ifc-lite export model.ifc --format json --type IfcWall,IfcDoor
132
+ ifc-lite schedule model.ifc --type IfcDoor --columns "Name=Name, Mark=Pset_DoorCommon.Reference"
133
+ ifc-lite schedule model.ifc --type IfcWall --columns "Name,Qto_WallBaseQuantities.NetVolume" --where Pset_WallCommon.IsExternal=true --format json
134
+ ifc-lite schedule model.ifc --type IfcDoor --columns "Name=Name, Fire=Pset_DoorCommon.FireRating, Area=Qto_DoorBaseQuantities.Area" --group-by Fire --sort "Area:desc" --subtotals "count, sum:Area"
135
+ ifc-lite schedule model.ifc --preset door
136
+ ifc-lite schedule model.ifc --preset material-takeoff --format json
137
+ ifc-lite schedule model.ifc --preset door --format md
138
+ ifc-lite schedule model.ifc --preset door --format html > doors.html
139
+ ifc-lite schedule model.ifc --preset door --save door-schedule.json
140
+ ifc-lite schedule model.ifc --spec door-schedule.json --format json
122
141
  ifc-lite diagnose-geometry model.ifc --json
123
142
  ifc-lite diagnose-geometry model.ifc --type IfcWall
124
143
  ifc-lite diagnose-geometry model.ifc --product 0YvCT2_$X3_xJG3rzD8L_8
@@ -239,6 +258,9 @@ async function main() {
239
258
  case 'export':
240
259
  await exportCommand(commandArgs);
241
260
  break;
261
+ case 'schedule':
262
+ await scheduleCommand(commandArgs);
263
+ break;
242
264
  case 'diagnose-geometry':
243
265
  await diagnoseGeometryCommand(commandArgs);
244
266
  break;
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/dist/output.d.ts CHANGED
@@ -55,6 +55,19 @@ export declare function validateViewerPort(raw: string | undefined, flagName?: s
55
55
  * zero-row/zero-entity result reported as success (#see export --limit).
56
56
  */
57
57
  export declare function validateLimit(raw: string | undefined, flagName?: string): number | undefined;
58
+ /**
59
+ * A candidate string is absent for display/grouping purposes when it is
60
+ * undefined/null OR blank/whitespace-only (`IFCMATERIAL('',$,$)`,
61
+ * `IFCBUILDINGSTOREY('...','',...)`, or a whitespace-only source value — a
62
+ * real shape, see #3714). Chaining raw candidates with `??` only falls
63
+ * through on null/undefined, so a present-but-blank `Name` short-circuits
64
+ * the chain and is emitted verbatim (an empty-string JSON key, a blank
65
+ * label) where a placeholder belongs. Mirrors the shape introduced in
66
+ * `packages/mcp/src/material-naming.ts` for the same defect family.
67
+ */
68
+ export declare function isBlank(value: string | undefined | null): boolean;
69
+ /** First candidate that is not blank per `isBlank`, or undefined if none. */
70
+ export declare function firstNonBlank(...candidates: Array<string | undefined | null>): string | undefined;
58
71
  /**
59
72
  * Get positional arguments (non-flag arguments).
60
73
  */
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAIpD;;;;;;;;;;;;GAYG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAStD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAqBvE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAO7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAG5C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIxE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CASlE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAa,GAAG,MAAM,GAAG,SAAS,CAOrG;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAY,GAAG,MAAM,GAAG,SAAS,CAY/F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAa1D"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAIpD;;;;;;;;;;;;GAYG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAStD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAqBvE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAO7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAG5C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIxE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CASlE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAa,GAAG,MAAM,GAAG,SAAS,CAOrG;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAY,GAAG,MAAM,GAAG,SAAS,CAY/F;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAEjE;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,SAAS,CAKjG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAa1D"}
package/dist/output.js CHANGED
@@ -152,6 +152,27 @@ export function validateLimit(raw, flagName = '--limit') {
152
152
  }
153
153
  return n;
154
154
  }
155
+ /**
156
+ * A candidate string is absent for display/grouping purposes when it is
157
+ * undefined/null OR blank/whitespace-only (`IFCMATERIAL('',$,$)`,
158
+ * `IFCBUILDINGSTOREY('...','',...)`, or a whitespace-only source value — a
159
+ * real shape, see #3714). Chaining raw candidates with `??` only falls
160
+ * through on null/undefined, so a present-but-blank `Name` short-circuits
161
+ * the chain and is emitted verbatim (an empty-string JSON key, a blank
162
+ * label) where a placeholder belongs. Mirrors the shape introduced in
163
+ * `packages/mcp/src/material-naming.ts` for the same defect family.
164
+ */
165
+ export function isBlank(value) {
166
+ return value === undefined || value === null || value.trim() === '';
167
+ }
168
+ /** First candidate that is not blank per `isBlank`, or undefined if none. */
169
+ export function firstNonBlank(...candidates) {
170
+ for (const candidate of candidates) {
171
+ if (!isBlank(candidate))
172
+ return candidate ?? undefined;
173
+ }
174
+ return undefined;
175
+ }
155
176
  /**
156
177
  * Get positional arguments (non-flag arguments).
157
178
  */
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,IAAI,qBAAqB,GAAG,KAAK,CAAC;AAElC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,+BAA+B;IAC7C,IAAI,qBAAqB;QAAE,OAAO;IAClC,qBAAqB,GAAG,IAAI,CAAC;IAC7B,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAgB,EAAE,EAAE;QACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC;IACF,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC;IACvB,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;IACxB,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA4B,EAAE,OAAgB;IAC9E,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,yEAAyE;QACzE,0EAA0E;QAC1E,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAiB,EAAE,IAAgB;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAClC,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;gBAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,CAAC,KAAe,EAAE,EAAE,CACpC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAExF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACxD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,OAAO,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,IAAY;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC3D,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,IAAY;IACtD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAE,CAAC,CAAC,aAAa;QACpB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,IAAY;IAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAuB,EAAE,QAAQ,GAAG,UAAU;IAC/E,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC5C,KAAK,CAAC,WAAW,QAAQ,WAAW,GAAG,qBAAqB,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,GAAuB,EAAE,QAAQ,GAAG,SAAS;IACzE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,0EAA0E;IAC1E,wEAAwE;IACxE,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtB,KAAK,CAAC,WAAW,QAAQ,MAAM,GAAG,oCAAoC,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,WAAW,QAAQ,MAAM,GAAG,oCAAoC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,0BAA0B;YAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxF,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `entities()`'s `descriptor.filters` predicate, split out of
3
+ * `headless-backend.ts` (module-size ratchet).
4
+ *
5
+ * Any-match, not first-match (#3490): an entity can carry two distinct
6
+ * same-named property sets (type + occurrence), so a filter predicate
7
+ * passes when ANY of them satisfies the condition, not just the first
8
+ * one found. This applies uniformly to every operator, `!=` included.
9
+ */
10
+ import type { PropertySetData, QueryFilter } from '@ifc-lite/sdk';
11
+ export declare function matchesPropertyFilter(props: PropertySetData[], filter: QueryFilter): boolean;
12
+ //# sourceMappingURL=property-filter-match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-filter-match.d.ts","sourceRoot":"","sources":["../src/property-filter-match.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAOlE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAO5F"}
@@ -0,0 +1,17 @@
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 { findAllPropertiesInSets, compareFilterValue } from '@ifc-lite/query';
5
+ // compareFilterValue is the same comparison the viewer SDK adapter, CLI
6
+ // --where flag, and MCP backend use for their QueryBackendMethods `where`,
7
+ // so this can't drift from their boolean-normalization/case-insensitive
8
+ // -`contains` semantics.
9
+ export function matchesPropertyFilter(props, filter) {
10
+ const matchingProps = findAllPropertiesInSets(props, filter.psetName, filter.propName);
11
+ if (matchingProps.length === 0)
12
+ return false;
13
+ if (filter.operator === 'exists')
14
+ return true;
15
+ return matchingProps.some((prop) => compareFilterValue(prop.value, filter.operator, filter.value));
16
+ }
17
+ //# sourceMappingURL=property-filter-match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-filter-match.js","sourceRoot":"","sources":["../src/property-filter-match.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAa/D,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAA2B,MAAM,iBAAiB,CAAC;AAEvG,wEAAwE;AACxE,2EAA2E;AAC3E,wEAAwE;AACxE,yBAAyB;AACzB,MAAM,UAAU,qBAAqB,CAAC,KAAwB,EAAE,MAAmB;IACjF,MAAM,aAAa,GAAG,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACjC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,QAA8B,EAAE,MAAM,CAAC,KAAK,CAAC,CACpF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Overlay-visibility for `HeadlessBackend.query.related()` (headless-backend.ts).
3
+ *
4
+ * `bim.store.addEntity('default', { type: 'IfcRelContainedInSpatialStructure', ... })`
5
+ * is how a CLI script places something — the record lives only in the session's
6
+ * `MutablePropertyView` overlay until an export, exactly like `addEntity` for an
7
+ * ordinary element (see `query-overlay.ts`). `related()` read `store.relationships`
8
+ * alone, so a session that queued a containment relation and then asked
9
+ * `bim.related(wall, 'IfcRelContainedInSpatialStructure', 'inverse')` to confirm
10
+ * where its own wall landed got back nothing — the query answered about the file
11
+ * as parsed, not as the session had just changed it.
12
+ *
13
+ * `@ifc-lite/mcp`'s parallel `HeadlessLikeBackend` already folds queued
14
+ * relationships into `related()` for this exact reason (`packages/mcp/src/overlay.ts`,
15
+ * #2014). This ports that half — reading relations back out of newly-created
16
+ * `IfcRel…` entities — to the CLI, via `MutablePropertyView`'s own public
17
+ * `getNewEntities()`/`isDeleted()`.
18
+ */
19
+ import type { NewEntity } from '@ifc-lite/mutations';
20
+ /**
21
+ * This session's queued `relType` relationships touching `expressId`, in the
22
+ * given `direction` — the overlay half of `related()`. `newEntities` and
23
+ * `isDeleted` come straight from `MutablePropertyView`, so a relationship
24
+ * whose `IfcRel…` record was itself deleted this session (or whose far end
25
+ * was) answers nothing, same as `related()`'s parsed-store half already does
26
+ * for a queued edge that never got authored in the first place.
27
+ */
28
+ export declare function foldQueuedRelated(newEntities: readonly NewEntity[], isDeleted: (expressId: number) => boolean, relType: string, direction: 'forward' | 'inverse', expressId: number): number[];
29
+ //# sourceMappingURL=query-overlay-relations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-overlay-relations.d.ts","sourceRoot":"","sources":["../src/query-overlay-relations.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAqDrD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,SAAS,SAAS,EAAE,EACjC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EACzC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAiBV"}
@@ -0,0 +1,88 @@
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 { getAttributeNamesAcrossSchemas } from '@ifc-lite/parser';
5
+ /** Express ids from an authored `'#42'` reference or a list of them. */
6
+ function refIds(value) {
7
+ if (typeof value === 'string') {
8
+ const trimmed = value.trim();
9
+ const match = /^#(\d+)$/.exec(trimmed);
10
+ if (!match)
11
+ return [];
12
+ const id = Number(match[1]);
13
+ return Number.isSafeInteger(id) ? [id] : [];
14
+ }
15
+ if (Array.isArray(value))
16
+ return value.flatMap((item) => refIds(item));
17
+ return [];
18
+ }
19
+ /**
20
+ * Group queued `IfcRel…` creates by class, resolved to their two ends.
21
+ *
22
+ * By attribute name, never by slot — `IfcRelAggregates` puts `RelatingObject`
23
+ * at slot 4, while `IfcRelContainedInSpatialStructure` puts `RelatedElements`
24
+ * there. `getAttributeNamesAcrossSchemas` is cross-schema, so a queued IFC2X3
25
+ * or IFC4X3 relationship resolves too, mirroring the MCP overlay this is
26
+ * ported from.
27
+ */
28
+ function indexQueuedRelations(created) {
29
+ const byType = new Map();
30
+ for (const entity of created) {
31
+ const upper = entity.type.toUpperCase();
32
+ if (!upper.startsWith('IFCREL'))
33
+ continue;
34
+ const names = getAttributeNamesAcrossSchemas(entity.type);
35
+ if (names.length === 0)
36
+ continue;
37
+ let relating;
38
+ let related;
39
+ for (let i = 0; i < names.length; i++) {
40
+ if (names[i].startsWith('Related'))
41
+ related ??= refIds(entity.attributes[i]);
42
+ else if (names[i].startsWith('Relating'))
43
+ relating ??= refIds(entity.attributes[i])[0];
44
+ }
45
+ if (relating === undefined || related === undefined || related.length === 0)
46
+ continue;
47
+ const relation = { relationshipId: entity.expressId, relating, related };
48
+ const list = byType.get(upper);
49
+ if (list)
50
+ list.push(relation);
51
+ else
52
+ byType.set(upper, [relation]);
53
+ }
54
+ return byType;
55
+ }
56
+ /**
57
+ * This session's queued `relType` relationships touching `expressId`, in the
58
+ * given `direction` — the overlay half of `related()`. `newEntities` and
59
+ * `isDeleted` come straight from `MutablePropertyView`, so a relationship
60
+ * whose `IfcRel…` record was itself deleted this session (or whose far end
61
+ * was) answers nothing, same as `related()`'s parsed-store half already does
62
+ * for a queued edge that never got authored in the first place.
63
+ */
64
+ export function foldQueuedRelated(newEntities, isDeleted, relType, direction, expressId) {
65
+ const byType = indexQueuedRelations(newEntities);
66
+ const relations = byType.get(relType.toUpperCase()) ?? [];
67
+ const out = [];
68
+ for (const relation of relations) {
69
+ if (isDeleted(relation.relationshipId))
70
+ continue;
71
+ if (direction === 'forward') {
72
+ if (relation.relating !== expressId)
73
+ continue;
74
+ for (const target of relation.related) {
75
+ if (!isDeleted(target))
76
+ out.push(target);
77
+ }
78
+ }
79
+ else {
80
+ if (!relation.related.includes(expressId))
81
+ continue;
82
+ if (!isDeleted(relation.relating))
83
+ out.push(relation.relating);
84
+ }
85
+ }
86
+ return out;
87
+ }
88
+ //# sourceMappingURL=query-overlay-relations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-overlay-relations.js","sourceRoot":"","sources":["../src/query-overlay-relations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Overlay-visibility helpers for `HeadlessBackend.query` (headless-backend.ts).
3
+ *
4
+ * `StoreEditor.addEntity`/`removeEntity` never touch `store.entityIndex` (the
5
+ * parsed file's immutable index) — writes live only in the
6
+ * `MutablePropertyView` overlay. Without folding that in, a
7
+ * `bim.store.addEntity`/`removeEntity` followed by `bim.query()` in the same
8
+ * session answered about the file as parsed, not as the session had just
9
+ * changed it. `@ifc-lite/mcp`'s parallel backend already folds its overlay
10
+ * into every read (#2004, #2014); this ports the entity add/remove
11
+ * visibility half of that to the CLI via the overlay's own public
12
+ * `getNewEntities()`/`isDeleted()`.
13
+ */
14
+ import type { EntityData, EntityRef, PropertySetData, QuantitySetData } from '@ifc-lite/sdk';
15
+ import type { MutablePropertyView } from '@ifc-lite/mutations';
16
+ /**
17
+ * `getEntityData(ref)`'s overlay half: `null` means deleted this session,
18
+ * `undefined` means "not in the overlay, fall through to the parsed store".
19
+ */
20
+ export declare function overlayEntityData(view: MutablePropertyView | null, ref: EntityRef): EntityData | null | undefined;
21
+ /** This session's overlay-only entities matching an `entities()` query's type criteria. */
22
+ export declare function foldNewEntities(view: MutablePropertyView, types: string[] | undefined, expandTypes: (types: string[]) => string[], isProductType: (upperType: string) => boolean, modelId: string): EntityData[];
23
+ /**
24
+ * `getProperties`/`getQuantities`'s overlay half. Unlike {@link overlayEntityData},
25
+ * this has no per-entity "not in the overlay" case to fall through on:
26
+ * `MutablePropertyView.getForEntity`/`getQuantitiesForEntity` already merge the
27
+ * wired on-demand extractor's base data with any SET/DELETE mutations (the same
28
+ * merge `StepExporter` reads for `bim.export.ifc()`), so once a session has a
29
+ * mutation view at all, it is the whole answer for every entity — mutated or
30
+ * not. `undefined` here means only "no mutation view exists yet" (a read-only
31
+ * session), the one case that still falls through to the parsed store.
32
+ *
33
+ * Before this, `getProperties`/`getQuantities` read `EntityNode` directly and
34
+ * never consulted the overlay at all: `bim.mutate.setProperty(...)` followed by
35
+ * `bim.properties(ref)` (or `bim.quantities`, or anything built on them —
36
+ * `export --format csv|json`, `props`, `query --where`) silently returned the
37
+ * pre-edit value in the same process, even though `bim.export.ifc()` on that
38
+ * same session already reflected the edit. #3498 folded the overlay into
39
+ * entity add/remove visibility and explicitly left this half out of scope.
40
+ */
41
+ export declare function overlayProperties(view: MutablePropertyView | null, ref: EntityRef): PropertySetData[] | undefined;
42
+ /** `getQuantities`'s overlay half — see {@link overlayProperties}. */
43
+ export declare function overlayQuantities(view: MutablePropertyView | null, ref: EntityRef): QuantitySetData[] | undefined;
44
+ //# sourceMappingURL=query-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-overlay.d.ts","sourceRoot":"","sources":["../src/query-overlay.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,KAAK,EAAE,mBAAmB,EAAa,MAAM,qBAAqB,CAAC;AA4B1E;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAKjH;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAC7B,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAC3B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,EAC1C,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EAC7C,OAAO,EAAE,MAAM,GACd,UAAU,EAAE,CAUd;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,GAAG,eAAe,EAAE,GAAG,SAAS,CAYjH;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,GAAG,eAAe,EAAE,GAAG,SAAS,CAOjH"}
@@ -0,0 +1,100 @@
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
+ function scalarAttr(value) {
5
+ if (typeof value !== 'string')
6
+ return '';
7
+ const trimmed = value.trim();
8
+ if (trimmed === '' || trimmed === '$' || trimmed === '*')
9
+ return '';
10
+ if (trimmed.length >= 2 && trimmed.startsWith("'") && trimmed.endsWith("'")) {
11
+ return trimmed.slice(1, -1).replace(/''/g, "'");
12
+ }
13
+ return trimmed;
14
+ }
15
+ /**
16
+ * Slots 0/2/3 are GlobalId/Name/Description on every IfcRoot subtype (the
17
+ * only classes this backend queries). Slot 4 differs by class (ObjectType vs
18
+ * ApplicableOccurrence), so it's left blank rather than misread.
19
+ */
20
+ function createdEntityData(entity, modelId) {
21
+ return {
22
+ ref: { modelId, expressId: entity.expressId },
23
+ globalId: scalarAttr(entity.attributes[0]),
24
+ name: scalarAttr(entity.attributes[2]),
25
+ type: entity.type,
26
+ description: scalarAttr(entity.attributes[3]),
27
+ objectType: '',
28
+ };
29
+ }
30
+ /**
31
+ * `getEntityData(ref)`'s overlay half: `null` means deleted this session,
32
+ * `undefined` means "not in the overlay, fall through to the parsed store".
33
+ */
34
+ export function overlayEntityData(view, ref) {
35
+ if (!view)
36
+ return undefined;
37
+ if (view.isDeleted(ref.expressId))
38
+ return null;
39
+ const created = view.getNewEntity(ref.expressId);
40
+ return created ? createdEntityData(created, ref.modelId) : undefined;
41
+ }
42
+ /** This session's overlay-only entities matching an `entities()` query's type criteria. */
43
+ export function foldNewEntities(view, types, expandTypes, isProductType, modelId) {
44
+ const wantedTypes = types && types.length > 0 ? new Set(expandTypes(types)) : null;
45
+ const out = [];
46
+ for (const created of view.getNewEntities()) {
47
+ if (view.isDeleted(created.expressId))
48
+ continue;
49
+ const upperType = created.type.toUpperCase();
50
+ const matches = wantedTypes ? wantedTypes.has(upperType) : isProductType(upperType);
51
+ if (matches)
52
+ out.push(createdEntityData(created, modelId));
53
+ }
54
+ return out;
55
+ }
56
+ /**
57
+ * `getProperties`/`getQuantities`'s overlay half. Unlike {@link overlayEntityData},
58
+ * this has no per-entity "not in the overlay" case to fall through on:
59
+ * `MutablePropertyView.getForEntity`/`getQuantitiesForEntity` already merge the
60
+ * wired on-demand extractor's base data with any SET/DELETE mutations (the same
61
+ * merge `StepExporter` reads for `bim.export.ifc()`), so once a session has a
62
+ * mutation view at all, it is the whole answer for every entity — mutated or
63
+ * not. `undefined` here means only "no mutation view exists yet" (a read-only
64
+ * session), the one case that still falls through to the parsed store.
65
+ *
66
+ * Before this, `getProperties`/`getQuantities` read `EntityNode` directly and
67
+ * never consulted the overlay at all: `bim.mutate.setProperty(...)` followed by
68
+ * `bim.properties(ref)` (or `bim.quantities`, or anything built on them —
69
+ * `export --format csv|json`, `props`, `query --where`) silently returned the
70
+ * pre-edit value in the same process, even though `bim.export.ifc()` on that
71
+ * same session already reflected the edit. #3498 folded the overlay into
72
+ * entity add/remove visibility and explicitly left this half out of scope.
73
+ */
74
+ export function overlayProperties(view, ref) {
75
+ if (!view)
76
+ return undefined;
77
+ if (view.isDeleted(ref.expressId))
78
+ return [];
79
+ return view.getForEntity(ref.expressId).map((pset) => ({
80
+ name: pset.name,
81
+ globalId: pset.globalId,
82
+ properties: pset.properties.map((p) => ({
83
+ name: p.name,
84
+ type: p.type,
85
+ value: p.value,
86
+ })),
87
+ }));
88
+ }
89
+ /** `getQuantities`'s overlay half — see {@link overlayProperties}. */
90
+ export function overlayQuantities(view, ref) {
91
+ if (!view)
92
+ return undefined;
93
+ if (view.isDeleted(ref.expressId))
94
+ return [];
95
+ return view.getQuantitiesForEntity(ref.expressId).map((qset) => ({
96
+ name: qset.name,
97
+ quantities: qset.quantities.map((q) => ({ name: q.name, type: q.type, value: q.value })),
98
+ }));
99
+ }
100
+ //# sourceMappingURL=query-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-overlay.js","sourceRoot":"","sources":["../src/query-overlay.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAmB/D,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IACpE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5E,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,MAA4D,EAAE,OAAe;IACtG,OAAO;QACL,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;QAC7C,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7C,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAgC,EAAE,GAAc;IAChF,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAC7B,IAAyB,EACzB,KAA2B,EAC3B,WAA0C,EAC1C,aAA6C,EAC7C,OAAe;IAEf,MAAM,WAAW,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,SAAS;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACpF,IAAI,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAgC,EAAE,GAAc;IAChF,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAyC;SACnD,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAAC,IAAgC,EAAE,GAAc;IAChF,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;KACzF,CAAC,CAAC,CAAC;AACN,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ifc-lite/cli",
3
- "version": "0.26.0",
3
+ "version": "0.27.0",
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/bcf": "^2.0.1",
24
- "@ifc-lite/clash": "^1.9.2",
25
- "@ifc-lite/diff": "^0.7.0",
26
- "@ifc-lite/create": "^2.2.0",
27
- "@ifc-lite/data": "^3.5.1",
28
- "@ifc-lite/export": "^3.1.0",
29
- "@ifc-lite/extensions": "^0.5.0",
30
- "@ifc-lite/geometry": "^4.1.0",
31
- "@ifc-lite/ifcx": "^3.0.1",
32
- "@ifc-lite/merge": "^0.4.4",
33
- "@ifc-lite/mcp": "^0.12.0",
34
- "@ifc-lite/mutations": "^1.27.0",
35
- "@ifc-lite/ids": "^1.15.52",
36
- "@ifc-lite/parser": "^4.3.2",
37
- "@ifc-lite/query": "^2.0.0",
38
- "@ifc-lite/sandbox": "^2.2.1",
39
- "@ifc-lite/sdk": "^3.0.0",
40
- "@ifc-lite/viewer-core": "^0.2.14",
41
- "@ifc-lite/wasm": "^6.1.1"
23
+ "@ifc-lite/clash": "^2.0.0",
24
+ "@ifc-lite/create": "^2.2.1",
25
+ "@ifc-lite/data": "^4.0.0",
26
+ "@ifc-lite/bcf": "^3.0.0",
27
+ "@ifc-lite/diff": "^0.8.0",
28
+ "@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",
32
+ "@ifc-lite/ifcx": "^4.0.0",
33
+ "@ifc-lite/mcp": "^0.13.0",
34
+ "@ifc-lite/mutations": "^2.0.0",
35
+ "@ifc-lite/merge": "^0.4.5",
36
+ "@ifc-lite/parser": "^5.0.0",
37
+ "@ifc-lite/sandbox": "^2.2.2",
38
+ "@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"
42
42
  },
43
43
  "devDependencies": {
44
- "@types/node": "^26.2.0",
44
+ "@types/node": "^26.4.0",
45
45
  "typescript": "^6.0.3",
46
46
  "vitest": "^4.1.11"
47
47
  },