@ifc-lite/cli 0.25.0 → 0.25.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.
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Pure aggregation helpers for `ifc-lite stats` — extracted so the KPI /
3
+ * WWR / GFA math can be unit tested against a fake `bim` surface instead of
4
+ * only through a real parsed IFC file. `statsCommand` in stats.ts wires
5
+ * these to the SDK's `BimContext`.
6
+ */
7
+ export interface QuantitySet {
8
+ name: string;
9
+ quantities: Array<{
10
+ name: string;
11
+ value: unknown;
12
+ }>;
13
+ }
14
+ export interface PropertySet {
15
+ name: string;
16
+ properties?: Array<{
17
+ name: string;
18
+ value: unknown;
19
+ }>;
20
+ }
21
+ /** Minimal surface these helpers need from a `BimContext`. */
22
+ export interface QuantityBim<R = unknown> {
23
+ quantities: (ref: R) => QuantitySet[];
24
+ }
25
+ export interface PropertyBim<R = unknown> {
26
+ properties: (ref: R) => PropertySet[];
27
+ }
28
+ /**
29
+ * Sum a named quantity across every quantity set on every element ref,
30
+ * adding up all matches ("Gross" and "Net" names given as alternatives —
31
+ * Gross/Net are two names for a slot the model only ever fills one of, not
32
+ * two quantities to add). A quantity set holding two quantities with the
33
+ * same name is not valid IFC — IfcElementQuantity's UniqueQuantityNames
34
+ * WHERE rule forbids it — so this function does not try to guess intent
35
+ * for non-compliant data; it just sums whatever is present. Returns 0 for
36
+ * an empty list — the caller decides what an empty aggregate means (e.g. a
37
+ * GFA fallback).
38
+ */
39
+ export declare function sumQuantity<R>(bim: QuantityBim<R>, refs: R[], quantityNames: string[]): number;
40
+ /** Read a single property's value out of a named property set, or undefined. */
41
+ export declare function getPropertyValue<R>(bim: PropertyBim<R>, ref: R, psetName: string, propName: string): unknown;
42
+ /** IFC boolean-logical literals that mean "true" across the encodings the parser hands back. */
43
+ export declare function isTruthyIfcBoolean(value: unknown): boolean;
44
+ export interface WallAggregate {
45
+ totalWallArea: number;
46
+ exteriorWallArea: number;
47
+ totalWallVolume: number;
48
+ }
49
+ /**
50
+ * Per-wall area/volume aggregation, plus the exterior-wall-area subtotal
51
+ * used as the Window-Wall-Ratio denominator. `exteriorWallArea` is a SUBSET
52
+ * of `totalWallArea` (every exterior wall's area is counted in both), not a
53
+ * separate quantity — callers must not sum them.
54
+ */
55
+ export declare function aggregateWalls<R>(bim: QuantityBim<R> & PropertyBim<R>, walls: Array<{
56
+ ref: R;
57
+ }>): WallAggregate;
58
+ /**
59
+ * Window-Wall Ratio as a percentage. Uses exterior wall area when any exists
60
+ * (the architecturally meaningful denominator); falls back to total wall
61
+ * area only when there is no exterior-wall data at all — NOT when exterior
62
+ * area happens to be smaller, and not summed with total wall area.
63
+ */
64
+ export declare function computeWindowWallRatio(totalWindowArea: number, exteriorWallArea: number, totalWallArea: number): number;
65
+ /**
66
+ * Gross Floor Area: sum of each storey's own `GrossFloorArea` quantity
67
+ * (a storey with none contributes 0, i.e. an empty group — it must not be
68
+ * skipped or it would silently undercount). Falls back to the model's total
69
+ * slab floor area only when the storey-quantity sum is exactly 0 (no storey
70
+ * anywhere reports GFA), not per-storey.
71
+ */
72
+ export declare function computeGrossFloorArea<R>(bim: QuantityBim<R>, storeys: Array<{
73
+ ref: R;
74
+ }>, fallbackTotalFloorArea: number): number;
75
+ export interface MaterialSummaryEntry {
76
+ name: string;
77
+ count: number;
78
+ volume: number;
79
+ }
80
+ export interface MaterialsBim<R = unknown> extends QuantityBim<R> {
81
+ materials: (ref: R) => {
82
+ materials?: Array<string | {
83
+ name?: string;
84
+ }>;
85
+ name?: string;
86
+ } | null | undefined;
87
+ }
88
+ /**
89
+ * Per-material element count and summed Gross/NetVolume, sorted by element
90
+ * count descending (most common material first).
91
+ */
92
+ export declare function computeMaterialSummary<R>(bim: MaterialsBim<R>, elements: Array<{
93
+ ref: R;
94
+ }>, round: (n: number) => number): MaterialSummaryEntry[];
95
+ export interface ValidationSummary {
96
+ duplicateGlobalIds: number;
97
+ unnamedElements: number;
98
+ }
99
+ /**
100
+ * Model-health checks: how many GlobalIds are duplicated (a count of
101
+ * *offending IDs*, not of duplicate rows — three elements sharing one
102
+ * GlobalId count as 1 here, matching the original implementation) and how
103
+ * many elements have no name / an empty-string name.
104
+ */
105
+ export declare function computeValidation(elements: Array<{
106
+ globalId?: unknown;
107
+ name?: unknown;
108
+ }>): ValidationSummary;
109
+ //# sourceMappingURL=stats-aggregation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-aggregation.d.ts","sourceRoot":"","sources":["../../src/commands/stats-aggregation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
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
+ * Sum a named quantity across every quantity set on every element ref,
6
+ * adding up all matches ("Gross" and "Net" names given as alternatives —
7
+ * Gross/Net are two names for a slot the model only ever fills one of, not
8
+ * two quantities to add). A quantity set holding two quantities with the
9
+ * same name is not valid IFC — IfcElementQuantity's UniqueQuantityNames
10
+ * WHERE rule forbids it — so this function does not try to guess intent
11
+ * for non-compliant data; it just sums whatever is present. Returns 0 for
12
+ * an empty list — the caller decides what an empty aggregate means (e.g. a
13
+ * GFA fallback).
14
+ */
15
+ export function sumQuantity(bim, refs, quantityNames) {
16
+ let total = 0;
17
+ for (const ref of refs) {
18
+ const qsets = bim.quantities(ref);
19
+ for (const qset of qsets) {
20
+ for (const q of qset.quantities) {
21
+ if (quantityNames.includes(q.name)) {
22
+ total += Number(q.value) || 0;
23
+ }
24
+ }
25
+ }
26
+ }
27
+ return total;
28
+ }
29
+ /** Read a single property's value out of a named property set, or undefined. */
30
+ export function getPropertyValue(bim, ref, psetName, propName) {
31
+ try {
32
+ const psets = bim.properties(ref);
33
+ for (const pset of psets) {
34
+ if (pset.name === psetName) {
35
+ const prop = pset.properties?.find(p => p.name === propName);
36
+ if (prop)
37
+ return prop.value;
38
+ }
39
+ }
40
+ }
41
+ catch {
42
+ // Property not available
43
+ }
44
+ return undefined;
45
+ }
46
+ /** IFC boolean-logical literals that mean "true" across the encodings the parser hands back. */
47
+ export function isTruthyIfcBoolean(value) {
48
+ return value === true || value === 'TRUE' || value === '.T.';
49
+ }
50
+ /**
51
+ * Per-wall area/volume aggregation, plus the exterior-wall-area subtotal
52
+ * used as the Window-Wall-Ratio denominator. `exteriorWallArea` is a SUBSET
53
+ * of `totalWallArea` (every exterior wall's area is counted in both), not a
54
+ * separate quantity — callers must not sum them.
55
+ */
56
+ export function aggregateWalls(bim, walls) {
57
+ let totalWallArea = 0;
58
+ let exteriorWallArea = 0;
59
+ let totalWallVolume = 0;
60
+ for (const w of walls) {
61
+ let wallArea = 0;
62
+ let wallVolume = 0;
63
+ const qsets = bim.quantities(w.ref);
64
+ for (const qset of qsets) {
65
+ for (const q of qset.quantities) {
66
+ if (q.name === 'GrossSideArea' || q.name === 'NetSideArea') {
67
+ wallArea = Number(q.value) || 0;
68
+ }
69
+ if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
70
+ wallVolume = Number(q.value) || 0;
71
+ }
72
+ }
73
+ }
74
+ totalWallArea += wallArea;
75
+ totalWallVolume += wallVolume;
76
+ const isExternal = getPropertyValue(bim, w.ref, 'Pset_WallCommon', 'IsExternal');
77
+ if (isTruthyIfcBoolean(isExternal)) {
78
+ exteriorWallArea += wallArea;
79
+ }
80
+ }
81
+ return { totalWallArea, exteriorWallArea, totalWallVolume };
82
+ }
83
+ /**
84
+ * Window-Wall Ratio as a percentage. Uses exterior wall area when any exists
85
+ * (the architecturally meaningful denominator); falls back to total wall
86
+ * area only when there is no exterior-wall data at all — NOT when exterior
87
+ * area happens to be smaller, and not summed with total wall area.
88
+ */
89
+ export function computeWindowWallRatio(totalWindowArea, exteriorWallArea, totalWallArea) {
90
+ const wwrBase = exteriorWallArea > 0 ? exteriorWallArea : totalWallArea;
91
+ return wwrBase > 0 ? (totalWindowArea / wwrBase) * 100 : 0;
92
+ }
93
+ /**
94
+ * Gross Floor Area: sum of each storey's own `GrossFloorArea` quantity
95
+ * (a storey with none contributes 0, i.e. an empty group — it must not be
96
+ * skipped or it would silently undercount). Falls back to the model's total
97
+ * slab floor area only when the storey-quantity sum is exactly 0 (no storey
98
+ * anywhere reports GFA), not per-storey.
99
+ */
100
+ export function computeGrossFloorArea(bim, storeys, fallbackTotalFloorArea) {
101
+ const grossFloorArea = sumQuantity(bim, storeys.map(s => s.ref), ['GrossFloorArea']);
102
+ return grossFloorArea === 0 ? fallbackTotalFloorArea : grossFloorArea;
103
+ }
104
+ /**
105
+ * Per-material element count and summed Gross/NetVolume, sorted by element
106
+ * count descending (most common material first).
107
+ */
108
+ export function computeMaterialSummary(bim, elements, round) {
109
+ const materialVolumes = new Map();
110
+ const materialCounts = new Map();
111
+ for (const e of elements) {
112
+ const mat = bim.materials(e.ref);
113
+ const first = mat?.materials?.[0];
114
+ const firstName = typeof first === 'string' ? first : first?.name;
115
+ const matName = firstName ?? mat?.name;
116
+ if (!matName)
117
+ continue;
118
+ materialCounts.set(matName, (materialCounts.get(matName) ?? 0) + 1);
119
+ const qsets = bim.quantities(e.ref);
120
+ for (const qset of qsets) {
121
+ for (const q of qset.quantities) {
122
+ if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
123
+ materialVolumes.set(matName, (materialVolumes.get(matName) ?? 0) + (Number(q.value) || 0));
124
+ break;
125
+ }
126
+ }
127
+ }
128
+ }
129
+ return [...materialCounts.entries()]
130
+ .sort((a, b) => b[1] - a[1])
131
+ .map(([name, count]) => ({
132
+ name,
133
+ count,
134
+ volume: round(materialVolumes.get(name) ?? 0),
135
+ }));
136
+ }
137
+ /**
138
+ * Model-health checks: how many GlobalIds are duplicated (a count of
139
+ * *offending IDs*, not of duplicate rows — three elements sharing one
140
+ * GlobalId count as 1 here, matching the original implementation) and how
141
+ * many elements have no name / an empty-string name.
142
+ */
143
+ export function computeValidation(elements) {
144
+ const globalIds = elements.map(e => e.globalId).filter(Boolean);
145
+ const globalIdCounts = new Map();
146
+ for (const id of globalIds) {
147
+ globalIdCounts.set(id, (globalIdCounts.get(id) ?? 0) + 1);
148
+ }
149
+ const duplicateGlobalIds = [...globalIdCounts.entries()].filter(([, count]) => count > 1).length;
150
+ const unnamedElements = elements.filter(e => !e.name || e.name === '').length;
151
+ return { duplicateGlobalIds, unnamedElements };
152
+ }
153
+ //# sourceMappingURL=stats-aggregation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-aggregation.js","sourceRoot":"","sources":["../../src/commands/stats-aggregation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAcA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8PhE"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAsBA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuJhE"}
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import { createHeadlessContext } from '../loader.js';
11
11
  import { printJson, hasFlag, fatal } from '../output.js';
12
+ import { aggregateWalls, computeWindowWallRatio, computeGrossFloorArea, computeMaterialSummary, computeValidation, sumQuantity, } from './stats-aggregation.js';
12
13
  export async function statsCommand(args) {
13
14
  const filePath = args.find(a => !a.startsWith('-'));
14
15
  if (!filePath)
@@ -44,127 +45,26 @@ export async function statsCommand(args) {
44
45
  const walls = bim.query().byType('IfcWall').toArray();
45
46
  const slabs = bim.query().byType('IfcSlab').toArray();
46
47
  const windows = bim.query().byType('IfcWindow').toArray();
47
- let totalWallArea = 0;
48
- let exteriorWallArea = 0;
49
- let totalWallVolume = 0;
50
- for (const w of walls) {
51
- let wallArea = 0;
52
- let wallVolume = 0;
53
- const qsets = bim.quantities(w.ref);
54
- for (const qset of qsets) {
55
- for (const q of qset.quantities) {
56
- if (q.name === 'GrossSideArea' || q.name === 'NetSideArea') {
57
- wallArea = Number(q.value) || 0;
58
- }
59
- if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
60
- wallVolume = Number(q.value) || 0;
61
- }
62
- }
63
- }
64
- totalWallArea += wallArea;
65
- totalWallVolume += wallVolume;
66
- // Check IsExternal from Pset_WallCommon
67
- const isExternal = getPropertyValue(bim, w.ref, 'Pset_WallCommon', 'IsExternal');
68
- if (isExternal === true || isExternal === 'TRUE' || isExternal === '.T.') {
69
- exteriorWallArea += wallArea;
70
- }
71
- }
72
- let totalFloorArea = 0;
73
- let totalSlabVolume = 0;
74
- for (const s of slabs) {
75
- const qsets = bim.quantities(s.ref);
76
- for (const qset of qsets) {
77
- for (const q of qset.quantities) {
78
- if (q.name === 'GrossArea' || q.name === 'NetArea') {
79
- totalFloorArea += Number(q.value) || 0;
80
- }
81
- if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
82
- totalSlabVolume += Number(q.value) || 0;
83
- }
84
- }
85
- }
86
- }
87
- let totalWindowArea = 0;
88
- for (const w of windows) {
89
- const qsets = bim.quantities(w.ref);
90
- for (const qset of qsets) {
91
- for (const q of qset.quantities) {
92
- if (q.name === 'Area') {
93
- totalWindowArea += Number(q.value) || 0;
94
- break;
95
- }
96
- }
97
- }
98
- }
48
+ const { totalWallArea, exteriorWallArea, totalWallVolume } = aggregateWalls(bim, walls);
49
+ const totalFloorArea = sumQuantity(bim, slabs.map((s) => s.ref), ['GrossArea', 'NetArea']);
50
+ const totalSlabVolume = sumQuantity(bim, slabs.map((s) => s.ref), ['GrossVolume', 'NetVolume']);
51
+ const totalWindowArea = sumQuantity(bim, windows.map((w) => w.ref), ['Area']);
99
52
  // WWR uses exterior wall area if available, falls back to total wall area
100
- const wwrBase = exteriorWallArea > 0 ? exteriorWallArea : totalWallArea;
101
- const windowWallRatio = wwrBase > 0 ? (totalWindowArea / wwrBase) * 100 : 0;
53
+ const windowWallRatio = computeWindowWallRatio(totalWindowArea, exteriorWallArea, totalWallArea);
102
54
  // GFA: sum GrossFloorArea from IfcBuildingStorey quantities, fallback to slab area
103
- let grossFloorArea = 0;
104
- for (const storey of storeys) {
105
- const qsets = bim.quantities(storey.ref);
106
- for (const qset of qsets) {
107
- for (const q of qset.quantities) {
108
- if (q.name === 'GrossFloorArea') {
109
- grossFloorArea += Number(q.value) || 0;
110
- }
111
- }
112
- }
113
- }
114
- if (grossFloorArea === 0)
115
- grossFloorArea = totalFloorArea;
55
+ const grossFloorArea = computeGrossFloorArea(bim, storeys, totalFloorArea);
116
56
  // Total volume across all elements
117
57
  let totalVolume = totalWallVolume + totalSlabVolume;
118
58
  const volTypes = ['IfcColumn', 'IfcBeam', 'IfcRoof', 'IfcStair', 'IfcFooting'];
119
59
  for (const t of volTypes) {
120
- for (const e of bim.query().byType(t).toArray()) {
121
- const qsets = bim.quantities(e.ref);
122
- for (const qset of qsets) {
123
- for (const q of qset.quantities) {
124
- if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
125
- totalVolume += Number(q.value) || 0;
126
- }
127
- }
128
- }
129
- }
60
+ const refs = bim.query().byType(t).toArray().map((e) => e.ref);
61
+ totalVolume += sumQuantity(bim, refs, ['GrossVolume', 'NetVolume']);
130
62
  }
131
63
  // Material summary with volumes
132
- const materialVolumes = new Map();
133
- const materialCounts = new Map();
134
64
  const allBuildingElements = bim.query().toArray();
135
- for (const e of allBuildingElements) {
136
- const mat = bim.materials(e.ref);
137
- const first = mat?.materials?.[0];
138
- const firstName = typeof first === 'string' ? first : first?.name;
139
- const matName = firstName ?? mat?.name;
140
- if (!matName)
141
- continue;
142
- materialCounts.set(matName, (materialCounts.get(matName) ?? 0) + 1);
143
- const qsets = bim.quantities(e.ref);
144
- for (const qset of qsets) {
145
- for (const q of qset.quantities) {
146
- if (q.name === 'GrossVolume' || q.name === 'NetVolume') {
147
- materialVolumes.set(matName, (materialVolumes.get(matName) ?? 0) + (Number(q.value) || 0));
148
- break;
149
- }
150
- }
151
- }
152
- }
153
- const materialSummary = [...materialCounts.entries()]
154
- .sort((a, b) => b[1] - a[1])
155
- .map(([name, count]) => ({
156
- name,
157
- count,
158
- volume: round(materialVolumes.get(name) ?? 0),
159
- }));
65
+ const materialSummary = computeMaterialSummary(bim, allBuildingElements, round);
160
66
  // Validation checks
161
- const globalIds = allBuildingElements.map((e) => e.globalId).filter(Boolean);
162
- const globalIdCounts = new Map();
163
- for (const id of globalIds) {
164
- globalIdCounts.set(id, (globalIdCounts.get(id) ?? 0) + 1);
165
- }
166
- const duplicateGlobalIds = [...globalIdCounts.entries()].filter(([, count]) => count > 1).length;
167
- const unnamedElements = allBuildingElements.filter((e) => !e.name || e.name === '').length;
67
+ const { duplicateGlobalIds, unnamedElements } = computeValidation(allBuildingElements);
168
68
  const stats = {
169
69
  building: buildingName,
170
70
  schema,
@@ -253,20 +153,4 @@ export async function statsCommand(args) {
253
153
  function round(n) {
254
154
  return Math.round(n * 100) / 100;
255
155
  }
256
- function getPropertyValue(bim, ref, psetName, propName) {
257
- try {
258
- const psets = bim.properties(ref);
259
- for (const pset of psets) {
260
- if (pset.name === psetName) {
261
- const prop = pset.properties?.find((p) => p.name === propName);
262
- if (prop)
263
- return prop.value;
264
- }
265
- }
266
- }
267
- catch {
268
- // Property not available
269
- }
270
- return undefined;
271
- }
272
156
  //# sourceMappingURL=stats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.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.25.0",
3
+ "version": "0.25.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": "^2.0.0",
23
24
  "@ifc-lite/clash": "^1.9.1",
24
25
  "@ifc-lite/create": "^2.2.0",
25
26
  "@ifc-lite/data": "^3.4.1",
26
- "@ifc-lite/bcf": "^2.0.0",
27
27
  "@ifc-lite/diff": "^0.7.0",
28
- "@ifc-lite/extensions": "^0.5.0",
29
28
  "@ifc-lite/export": "^3.0.0",
30
- "@ifc-lite/ids": "^1.15.49",
29
+ "@ifc-lite/extensions": "^0.5.0",
30
+ "@ifc-lite/geometry": "^4.0.1",
31
+ "@ifc-lite/ids": "^1.15.50",
32
+ "@ifc-lite/ifcx": "^3.0.0",
31
33
  "@ifc-lite/merge": "^0.4.4",
32
34
  "@ifc-lite/mcp": "^0.12.0",
33
35
  "@ifc-lite/mutations": "^1.27.0",
34
- "@ifc-lite/geometry": "^4.0.0",
35
- "@ifc-lite/ifcx": "^3.0.0",
36
- "@ifc-lite/parser": "^4.3.0",
37
- "@ifc-lite/sandbox": "^2.2.1",
36
+ "@ifc-lite/parser": "^4.3.1",
38
37
  "@ifc-lite/query": "^2.0.0",
38
+ "@ifc-lite/sandbox": "^2.2.1",
39
39
  "@ifc-lite/sdk": "^3.0.0",
40
- "@ifc-lite/wasm": "^6.0.0",
41
- "@ifc-lite/viewer-core": "^0.2.14"
40
+ "@ifc-lite/viewer-core": "^0.2.14",
41
+ "@ifc-lite/wasm": "^6.0.1"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/node": "^26.2.0",