@ifc-lite/cli 0.3.0 → 0.5.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.
- package/dist/commands/ask.d.ts +2 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +403 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js +115 -27
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +175 -11
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +24 -7
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/mutate.d.ts +2 -0
- package/dist/commands/mutate.d.ts.map +1 -0
- package/dist/commands/mutate.js +203 -0
- package/dist/commands/mutate.js.map +1 -0
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +548 -52
- package/dist/commands/query.js.map +1 -1
- package/dist/commands/stats.d.ts +2 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +269 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/index.js +35 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/dist/commands/export.js
CHANGED
|
@@ -5,45 +5,209 @@
|
|
|
5
5
|
* ifc-lite export <file.ifc> --format csv|json|ifc [options]
|
|
6
6
|
*
|
|
7
7
|
* Export IFC data to CSV, JSON, or IFC STEP format.
|
|
8
|
-
* Supports type filtering,
|
|
8
|
+
* Supports type filtering, storey filtering, column selection (including quantities),
|
|
9
|
+
* and schema conversion on export.
|
|
9
10
|
*/
|
|
10
11
|
import { writeFile } from 'node:fs/promises';
|
|
11
12
|
import { createHeadlessContext } from '../loader.js';
|
|
12
13
|
import { getFlag, fatal, writeOutput } from '../output.js';
|
|
14
|
+
/**
|
|
15
|
+
* Parse a --where filter string into psetName, propName, operator, value.
|
|
16
|
+
*/
|
|
17
|
+
function parseWhereFilter(filter) {
|
|
18
|
+
const dotIdx = filter.indexOf('.');
|
|
19
|
+
if (dotIdx <= 0) {
|
|
20
|
+
fatal(`Invalid --where syntax: "${filter}". Expected: PsetName.PropName[=Value]`);
|
|
21
|
+
}
|
|
22
|
+
const psetName = filter.slice(0, dotIdx);
|
|
23
|
+
const rest = filter.slice(dotIdx + 1);
|
|
24
|
+
for (const op of ['!=', '>=', '<=', '>', '<', '=', '~']) {
|
|
25
|
+
const opIdx = rest.indexOf(op);
|
|
26
|
+
if (opIdx > 0) {
|
|
27
|
+
const propName = rest.slice(0, opIdx);
|
|
28
|
+
const value = rest.slice(opIdx + op.length);
|
|
29
|
+
const mappedOp = op === '~' ? 'contains' : op;
|
|
30
|
+
return { psetName, propName, operator: mappedOp, value };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { psetName, propName: rest, operator: 'exists' };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* B9/F6: Auto-prefix Ifc for --type if user omits it.
|
|
37
|
+
*/
|
|
38
|
+
function normalizeTypeName(typeStr) {
|
|
39
|
+
return typeStr.split(',').map(t => {
|
|
40
|
+
const trimmed = t.trim();
|
|
41
|
+
if (trimmed.startsWith('Ifc') || trimmed.startsWith('IFC') || trimmed.startsWith('ifc')) {
|
|
42
|
+
return trimmed;
|
|
43
|
+
}
|
|
44
|
+
const prefixed = 'Ifc' + trimmed;
|
|
45
|
+
process.stderr.write(`Note: Auto-corrected type "${trimmed}" → "${prefixed}"\n`);
|
|
46
|
+
return prefixed;
|
|
47
|
+
}).join(',');
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* B5: Resolve a column value from an entity, searching entity attributes,
|
|
51
|
+
* property sets, AND quantity sets (by bare quantity name or QsetName.QuantityName).
|
|
52
|
+
*/
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a column value from an entity, returning the raw value
|
|
55
|
+
* (number, boolean, string, or null) to preserve types in JSON output.
|
|
56
|
+
*/
|
|
57
|
+
function resolveColumnValue(entity, col, bim) {
|
|
58
|
+
// Native entity attributes
|
|
59
|
+
if (col === 'Name' || col === 'name')
|
|
60
|
+
return entity.name ?? null;
|
|
61
|
+
if (col === 'Type' || col === 'type')
|
|
62
|
+
return entity.type ?? null;
|
|
63
|
+
if (col === 'GlobalId' || col === 'globalId')
|
|
64
|
+
return entity.globalId ?? null;
|
|
65
|
+
if (col === 'Description' || col === 'description')
|
|
66
|
+
return entity.description ?? null;
|
|
67
|
+
if (col === 'ObjectType' || col === 'objectType')
|
|
68
|
+
return entity.objectType ?? null;
|
|
69
|
+
// Dot-separated: PsetName.PropName or QsetName.QuantityName
|
|
70
|
+
const dotIdx = col.indexOf('.');
|
|
71
|
+
if (dotIdx > 0) {
|
|
72
|
+
const setName = col.slice(0, dotIdx);
|
|
73
|
+
const valueName = col.slice(dotIdx + 1);
|
|
74
|
+
// Search property sets
|
|
75
|
+
const props = bim.properties(entity.ref);
|
|
76
|
+
const pset = props.find((p) => p.name === setName);
|
|
77
|
+
if (pset) {
|
|
78
|
+
const prop = pset.properties.find((p) => p.name === valueName);
|
|
79
|
+
if (prop?.value != null)
|
|
80
|
+
return prop.value;
|
|
81
|
+
}
|
|
82
|
+
// Search quantity sets
|
|
83
|
+
const qsets = bim.quantities(entity.ref);
|
|
84
|
+
const qset = qsets.find((q) => q.name === setName);
|
|
85
|
+
if (qset) {
|
|
86
|
+
const qty = qset.quantities.find((q) => q.name === valueName);
|
|
87
|
+
if (qty?.value != null)
|
|
88
|
+
return qty.value;
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
// B5: Bare quantity name (e.g., "GrossSideArea") — search all quantity sets
|
|
93
|
+
const qsets = bim.quantities(entity.ref);
|
|
94
|
+
for (const qset of qsets) {
|
|
95
|
+
for (const q of qset.quantities) {
|
|
96
|
+
if (q.name === col && q.value != null)
|
|
97
|
+
return q.value;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Also search all property sets for bare property name
|
|
101
|
+
const props = bim.properties(entity.ref);
|
|
102
|
+
for (const pset of props) {
|
|
103
|
+
for (const p of pset.properties) {
|
|
104
|
+
if (p.name === col && p.value != null)
|
|
105
|
+
return p.value;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
/** Stringify a column value for CSV output */
|
|
111
|
+
function columnValueToCsv(value) {
|
|
112
|
+
if (value == null)
|
|
113
|
+
return '';
|
|
114
|
+
return String(value);
|
|
115
|
+
}
|
|
116
|
+
function escapeCsv(value, sep) {
|
|
117
|
+
if (value.includes(sep) || value.includes('"') || value.includes('\n')) {
|
|
118
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
119
|
+
}
|
|
120
|
+
return value;
|
|
121
|
+
}
|
|
13
122
|
export async function exportCommand(args) {
|
|
14
123
|
const filePath = args.find(a => !a.startsWith('-'));
|
|
15
124
|
const format = getFlag(args, '--format') ?? 'csv';
|
|
16
125
|
const outPath = getFlag(args, '--out');
|
|
17
|
-
|
|
126
|
+
let type = getFlag(args, '--type');
|
|
18
127
|
const columnsStr = getFlag(args, '--columns');
|
|
19
128
|
const separator = getFlag(args, '--separator') ?? ',';
|
|
20
129
|
const limit = getFlag(args, '--limit');
|
|
130
|
+
const propFilter = getFlag(args, '--where');
|
|
131
|
+
const storeyFilter = getFlag(args, '--storey');
|
|
21
132
|
if (!filePath)
|
|
22
|
-
fatal('Usage: ifc-lite export <file.ifc> --format csv|json|ifc [--type IfcWall] [--columns Name,Type,GlobalId] [--out file]');
|
|
133
|
+
fatal('Usage: ifc-lite export <file.ifc> --format csv|json|ifc [--type IfcWall] [--columns Name,Type,GlobalId] [--where PsetName.Prop=Value] [--storey Name] [--out file]');
|
|
134
|
+
// B9/F6: Auto-prefix Ifc
|
|
135
|
+
if (type) {
|
|
136
|
+
type = normalizeTypeName(type);
|
|
137
|
+
}
|
|
23
138
|
const { bim } = await createHeadlessContext(filePath);
|
|
24
139
|
// Build entity query
|
|
25
140
|
let q = bim.query();
|
|
26
141
|
if (type) {
|
|
27
142
|
q = q.byType(...type.split(','));
|
|
28
143
|
}
|
|
144
|
+
if (propFilter) {
|
|
145
|
+
const parsed = parseWhereFilter(propFilter);
|
|
146
|
+
q = q.where(parsed.psetName, parsed.propName, parsed.operator, parsed.value);
|
|
147
|
+
}
|
|
148
|
+
// Don't apply limit to the query yet — storey filtering must happen first
|
|
149
|
+
let entities = q.toArray();
|
|
150
|
+
// B4: --storey filter (applied before limit so --limit restricts storey-filtered results)
|
|
151
|
+
if (storeyFilter) {
|
|
152
|
+
const storeys = bim.storeys();
|
|
153
|
+
const matchedStorey = storeys.find((s) => s.name === storeyFilter ||
|
|
154
|
+
s.name.toLowerCase().includes(storeyFilter.toLowerCase()) ||
|
|
155
|
+
String(s.ref.expressId) === storeyFilter);
|
|
156
|
+
if (!matchedStorey) {
|
|
157
|
+
const names = storeys.map((s) => s.name).filter(Boolean).join(', ');
|
|
158
|
+
fatal(`Storey "${storeyFilter}" not found. Available: ${names || '(none)'}`);
|
|
159
|
+
}
|
|
160
|
+
const contained = bim.contains(matchedStorey.ref);
|
|
161
|
+
const storeyIds = new Set(contained.map((e) => e.ref.expressId));
|
|
162
|
+
entities = entities.filter((e) => storeyIds.has(e.ref.expressId));
|
|
163
|
+
}
|
|
164
|
+
// Apply limit after storey filtering
|
|
29
165
|
if (limit) {
|
|
30
|
-
|
|
166
|
+
entities = entities.slice(0, parseInt(limit, 10));
|
|
31
167
|
}
|
|
32
|
-
const
|
|
33
|
-
const refs = entities.map(e => e.ref);
|
|
168
|
+
const refs = entities.map((e) => e.ref);
|
|
34
169
|
const columns = columnsStr
|
|
35
170
|
? columnsStr.split(',')
|
|
36
171
|
: ['Type', 'Name', 'GlobalId', 'Description', 'ObjectType'];
|
|
172
|
+
// Check if any columns need quantity/property resolution (non-native columns)
|
|
173
|
+
const nativeColumns = new Set(['Name', 'name', 'Type', 'type', 'GlobalId', 'globalId', 'Description', 'description', 'ObjectType', 'objectType']);
|
|
174
|
+
const hasCustomColumns = columns.some(c => !nativeColumns.has(c));
|
|
37
175
|
switch (format) {
|
|
38
176
|
case 'csv': {
|
|
39
|
-
|
|
40
|
-
|
|
177
|
+
if (hasCustomColumns) {
|
|
178
|
+
// B5: Use our own CSV generation that supports quantity columns
|
|
179
|
+
const rows = [columns];
|
|
180
|
+
for (const entity of entities) {
|
|
181
|
+
rows.push(columns.map(col => columnValueToCsv(resolveColumnValue(entity, col, bim))));
|
|
182
|
+
}
|
|
183
|
+
const csv = rows.map(r => r.map(cell => escapeCsv(cell, separator)).join(separator)).join('\n');
|
|
184
|
+
await writeOutput(csv, outPath);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const csv = bim.export.csv(refs, { columns, separator });
|
|
188
|
+
await writeOutput(csv, outPath);
|
|
189
|
+
}
|
|
41
190
|
break;
|
|
42
191
|
}
|
|
43
192
|
case 'json': {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
193
|
+
if (hasCustomColumns) {
|
|
194
|
+
// B5: Use our own JSON generation that supports quantity columns (raw values preserved)
|
|
195
|
+
const result = [];
|
|
196
|
+
for (const entity of entities) {
|
|
197
|
+
const row = {};
|
|
198
|
+
for (const col of columns) {
|
|
199
|
+
row[col] = resolveColumnValue(entity, col, bim);
|
|
200
|
+
}
|
|
201
|
+
result.push(row);
|
|
202
|
+
}
|
|
203
|
+
const content = JSON.stringify(result, null, 2);
|
|
204
|
+
await writeOutput(content, outPath);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
const json = bim.export.json(refs, columns);
|
|
208
|
+
const content = JSON.stringify(json, null, 2);
|
|
209
|
+
await writeOutput(content, outPath);
|
|
210
|
+
}
|
|
47
211
|
break;
|
|
48
212
|
}
|
|
49
213
|
case 'ifc': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAeA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAeA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F/D"}
|
package/dist/commands/info.js
CHANGED
|
@@ -57,14 +57,31 @@ export async function infoCommand(args) {
|
|
|
57
57
|
process.stdout.write(` - ${s.name || '(unnamed)'}\n`);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
//
|
|
61
|
-
const
|
|
62
|
-
|
|
60
|
+
// Split entity types into building elements vs geometry/infrastructure
|
|
61
|
+
const BUILDING_ELEMENT_PREFIXES = [
|
|
62
|
+
'IfcWall', 'IfcSlab', 'IfcBeam', 'IfcColumn', 'IfcDoor', 'IfcWindow',
|
|
63
|
+
'IfcRoof', 'IfcStair', 'IfcRailing', 'IfcMember', 'IfcPlate', 'IfcCovering',
|
|
64
|
+
'IfcFooting', 'IfcPile', 'IfcCurtainWall', 'IfcRamp', 'IfcSpace',
|
|
65
|
+
'IfcBuildingElementProxy', 'IfcFurnishingElement', 'IfcFlowTerminal',
|
|
66
|
+
'IfcFlowSegment', 'IfcFlowFitting', 'IfcDistributionElement',
|
|
67
|
+
'IfcOpeningElement', 'IfcSite', 'IfcBuilding', 'IfcBuildingStorey',
|
|
68
|
+
];
|
|
69
|
+
const isBuilding = (name) => BUILDING_ELEMENT_PREFIXES.some(p => name.startsWith(p));
|
|
70
|
+
const isInfrastructure = (name) => !name.startsWith('IfcRel') && !name.startsWith('IfcProperty') && !name.startsWith('IfcQuantity');
|
|
71
|
+
const buildingElements = Object.entries(typeCounts)
|
|
72
|
+
.filter(([name]) => isBuilding(name))
|
|
73
|
+
.sort((a, b) => b[1] - a[1]);
|
|
74
|
+
const otherTypes = Object.entries(typeCounts)
|
|
75
|
+
.filter(([name]) => isInfrastructure(name) && !isBuilding(name))
|
|
63
76
|
.sort((a, b) => b[1] - a[1])
|
|
64
|
-
.slice(0,
|
|
65
|
-
if (
|
|
66
|
-
process.stdout.write(`\n
|
|
67
|
-
process.stdout.write(formatTable(['Type', 'Count'],
|
|
77
|
+
.slice(0, 10);
|
|
78
|
+
if (buildingElements.length > 0) {
|
|
79
|
+
process.stdout.write(`\n Building elements:\n`);
|
|
80
|
+
process.stdout.write(formatTable(['Type', 'Count'], buildingElements.map(([name, count]) => [name, count.toLocaleString()])).split('\n').map(l => ' ' + l).join('\n') + '\n');
|
|
81
|
+
}
|
|
82
|
+
if (otherTypes.length > 0) {
|
|
83
|
+
process.stdout.write(`\n Other types (top ${otherTypes.length}):\n`);
|
|
84
|
+
process.stdout.write(formatTable(['Type', 'Count'], otherTypes.map(([name, count]) => [name, count.toLocaleString()])).split('\n').map(l => ' ' + l).join('\n') + '\n');
|
|
68
85
|
}
|
|
69
86
|
process.stdout.write('\n');
|
|
70
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../src/commands/mutate.ts"],"names":[],"mappings":"AAkGA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiHjE"}
|
|
@@ -0,0 +1,203 @@
|
|
|
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
|
+
* ifc-lite mutate <file.ifc> --id N --set PsetName.PropName=Value --out output.ifc
|
|
6
|
+
*
|
|
7
|
+
* Modify properties or attributes of IFC entities and save the result.
|
|
8
|
+
* Uses MutablePropertyView + StepExporter for real mutation persistence.
|
|
9
|
+
*/
|
|
10
|
+
import { writeFile } from 'node:fs/promises';
|
|
11
|
+
import { createHeadlessContext } from '../loader.js';
|
|
12
|
+
import { getFlag, hasFlag, fatal, printJson } from '../output.js';
|
|
13
|
+
import { MutablePropertyView } from '@ifc-lite/mutations';
|
|
14
|
+
import { StepExporter } from '@ifc-lite/export';
|
|
15
|
+
import { extractPropertiesOnDemand } from '@ifc-lite/parser';
|
|
16
|
+
import { PropertyValueType } from '@ifc-lite/data';
|
|
17
|
+
/**
|
|
18
|
+
* Parse a --where filter string.
|
|
19
|
+
*/
|
|
20
|
+
function parseWhereFilter(filter) {
|
|
21
|
+
const dotIdx = filter.indexOf('.');
|
|
22
|
+
if (dotIdx <= 0) {
|
|
23
|
+
fatal(`Invalid --where syntax: "${filter}". Expected: PsetName.PropName[=Value]`);
|
|
24
|
+
}
|
|
25
|
+
const psetName = filter.slice(0, dotIdx);
|
|
26
|
+
const rest = filter.slice(dotIdx + 1);
|
|
27
|
+
for (const op of ['!=', '>=', '<=', '>', '<', '=', '~']) {
|
|
28
|
+
const opIdx = rest.indexOf(op);
|
|
29
|
+
if (opIdx > 0) {
|
|
30
|
+
const propName = rest.slice(0, opIdx);
|
|
31
|
+
const value = rest.slice(opIdx + op.length);
|
|
32
|
+
const mappedOp = op === '~' ? 'contains' : op;
|
|
33
|
+
return { psetName, propName, operator: mappedOp, value };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return { psetName, propName: rest, operator: 'exists' };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parse a --set value like "Pset_WallCommon.IsExternal=true" into
|
|
40
|
+
* { psetName, propName, value }.
|
|
41
|
+
*/
|
|
42
|
+
function parseSetArg(setStr) {
|
|
43
|
+
const dotIdx = setStr.indexOf('.');
|
|
44
|
+
if (dotIdx <= 0) {
|
|
45
|
+
fatal(`Invalid --set syntax: "${setStr}". Expected: PsetName.PropName=Value`);
|
|
46
|
+
}
|
|
47
|
+
const psetName = setStr.slice(0, dotIdx);
|
|
48
|
+
const rest = setStr.slice(dotIdx + 1);
|
|
49
|
+
const eqIdx = rest.indexOf('=');
|
|
50
|
+
if (eqIdx <= 0) {
|
|
51
|
+
fatal(`Invalid --set syntax: "${setStr}". Expected: PsetName.PropName=Value`);
|
|
52
|
+
}
|
|
53
|
+
const propName = rest.slice(0, eqIdx);
|
|
54
|
+
const value = rest.slice(eqIdx + 1);
|
|
55
|
+
return { psetName, propName, value };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Coerce string value to appropriate type and determine PropertyValueType.
|
|
59
|
+
*/
|
|
60
|
+
function coerceValue(value) {
|
|
61
|
+
if (value === 'true')
|
|
62
|
+
return { coerced: true, valueType: PropertyValueType.Boolean };
|
|
63
|
+
if (value === 'false')
|
|
64
|
+
return { coerced: false, valueType: PropertyValueType.Boolean };
|
|
65
|
+
const num = Number(value);
|
|
66
|
+
if (!isNaN(num) && value.trim() !== '') {
|
|
67
|
+
return {
|
|
68
|
+
coerced: num,
|
|
69
|
+
valueType: Number.isInteger(num) ? PropertyValueType.Integer : PropertyValueType.Real,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return { coerced: value, valueType: PropertyValueType.String };
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if a value matches a filter operator and comparison value.
|
|
76
|
+
*/
|
|
77
|
+
function matchesFilter(actual, operator, expected) {
|
|
78
|
+
if (operator === 'exists')
|
|
79
|
+
return actual != null;
|
|
80
|
+
if (actual == null || expected == null)
|
|
81
|
+
return false;
|
|
82
|
+
const numActual = Number(actual);
|
|
83
|
+
const numExpected = Number(expected);
|
|
84
|
+
const isNumeric = !isNaN(numActual) && !isNaN(numExpected);
|
|
85
|
+
switch (operator) {
|
|
86
|
+
case '=': return isNumeric ? numActual === numExpected : String(actual) === expected;
|
|
87
|
+
case '!=': return isNumeric ? numActual !== numExpected : String(actual) !== expected;
|
|
88
|
+
case '>': return isNumeric ? numActual > numExpected : false;
|
|
89
|
+
case '<': return isNumeric ? numActual < numExpected : false;
|
|
90
|
+
case '>=': return isNumeric ? numActual >= numExpected : false;
|
|
91
|
+
case '<=': return isNumeric ? numActual <= numExpected : false;
|
|
92
|
+
case 'contains': return String(actual).toLowerCase().includes(expected.toLowerCase());
|
|
93
|
+
default: return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export async function mutateCommand(args) {
|
|
97
|
+
const filePath = args.find(a => !a.startsWith('-'));
|
|
98
|
+
if (!filePath)
|
|
99
|
+
fatal('Usage: ifc-lite mutate <file.ifc> --id <N> --set PsetName.PropName=Value --out output.ifc');
|
|
100
|
+
const idStr = getFlag(args, '--id');
|
|
101
|
+
const type = getFlag(args, '--type');
|
|
102
|
+
const setStr = getFlag(args, '--set');
|
|
103
|
+
const outPath = getFlag(args, '--out');
|
|
104
|
+
const propFilter = getFlag(args, '--where');
|
|
105
|
+
const jsonOutput = hasFlag(args, '--json');
|
|
106
|
+
if (!setStr)
|
|
107
|
+
fatal('--set is required. Example: --set Pset_WallCommon.IsExternal=true');
|
|
108
|
+
if (!outPath)
|
|
109
|
+
fatal('--out is required. Specify output file path.');
|
|
110
|
+
const { psetName, propName, value } = parseSetArg(setStr);
|
|
111
|
+
const { coerced, valueType } = coerceValue(value);
|
|
112
|
+
// Load the store and create a BimContext for querying
|
|
113
|
+
const { bim, store } = await createHeadlessContext(filePath);
|
|
114
|
+
// Find target entities
|
|
115
|
+
let targets = [];
|
|
116
|
+
if (idStr) {
|
|
117
|
+
const expressId = parseInt(idStr, 10);
|
|
118
|
+
const entity = bim.entity({ modelId: 'default', expressId });
|
|
119
|
+
if (!entity)
|
|
120
|
+
fatal(`Entity #${expressId} not found`);
|
|
121
|
+
targets = [entity];
|
|
122
|
+
}
|
|
123
|
+
else if (type) {
|
|
124
|
+
// Auto-prefix Ifc if user omits it (e.g., "Wall" → "IfcWall")
|
|
125
|
+
const normalizedTypes = type.split(',').map(t => {
|
|
126
|
+
const trimmed = t.trim();
|
|
127
|
+
if (trimmed.startsWith('Ifc') || trimmed.startsWith('IFC') || trimmed.startsWith('ifc'))
|
|
128
|
+
return trimmed;
|
|
129
|
+
const prefixed = 'Ifc' + trimmed;
|
|
130
|
+
process.stderr.write(`Note: Auto-corrected type "${trimmed}" → "${prefixed}"\n`);
|
|
131
|
+
return prefixed;
|
|
132
|
+
});
|
|
133
|
+
let q = bim.query().byType(...normalizedTypes);
|
|
134
|
+
if (propFilter) {
|
|
135
|
+
const parsed = parseWhereFilter(propFilter);
|
|
136
|
+
// Try standard property where first
|
|
137
|
+
const filtered = q.toArray().filter((e) => {
|
|
138
|
+
// Check property sets
|
|
139
|
+
const psets = bim.properties(e.ref);
|
|
140
|
+
for (const pset of psets) {
|
|
141
|
+
if (pset.name === parsed.psetName) {
|
|
142
|
+
const prop = pset.properties?.find((p) => p.name === parsed.propName);
|
|
143
|
+
if (prop && matchesFilter(prop.value, parsed.operator, parsed.value))
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Fallback: check quantity sets (Qto_* aware)
|
|
148
|
+
const qsets = bim.quantities(e.ref);
|
|
149
|
+
for (const qset of qsets) {
|
|
150
|
+
if (qset.name === parsed.psetName) {
|
|
151
|
+
const qty = qset.quantities?.find((q) => q.name === parsed.propName);
|
|
152
|
+
if (qty && matchesFilter(qty.value, parsed.operator, parsed.value))
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return false;
|
|
157
|
+
});
|
|
158
|
+
targets = filtered;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
targets = q.toArray();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
fatal('Either --id or --type is required to select target entities.');
|
|
166
|
+
}
|
|
167
|
+
if (targets.length === 0) {
|
|
168
|
+
fatal('No entities matched the given criteria.');
|
|
169
|
+
}
|
|
170
|
+
// Create MutablePropertyView with on-demand extraction from the store
|
|
171
|
+
const mutationView = new MutablePropertyView(null, 'default');
|
|
172
|
+
mutationView.setOnDemandExtractor((entityId) => {
|
|
173
|
+
return extractPropertiesOnDemand(store, entityId);
|
|
174
|
+
});
|
|
175
|
+
// Apply mutations via the real mutation system
|
|
176
|
+
let mutatedCount = 0;
|
|
177
|
+
for (const entity of targets) {
|
|
178
|
+
mutationView.setProperty(entity.ref.expressId, psetName, propName, coerced, valueType);
|
|
179
|
+
mutatedCount++;
|
|
180
|
+
}
|
|
181
|
+
// Export with mutations applied via StepExporter
|
|
182
|
+
const schema = store.schemaVersion ?? 'IFC4';
|
|
183
|
+
const exporter = new StepExporter(store, mutationView);
|
|
184
|
+
const result = exporter.export({
|
|
185
|
+
schema: schema,
|
|
186
|
+
applyMutations: true,
|
|
187
|
+
});
|
|
188
|
+
await writeFile(outPath, result.content, 'utf-8');
|
|
189
|
+
if (jsonOutput) {
|
|
190
|
+
printJson({
|
|
191
|
+
mutated: mutatedCount,
|
|
192
|
+
property: `${psetName}.${propName}`,
|
|
193
|
+
value: coerced,
|
|
194
|
+
output: outPath,
|
|
195
|
+
stats: result.stats,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
process.stderr.write(`Mutated ${mutatedCount} entities: ${psetName}.${propName} = ${value}\n`);
|
|
200
|
+
process.stderr.write(`Written to ${outPath} (${result.stats.entityCount} entities, ${result.stats.newEntityCount} new)\n`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=mutate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../src/commands/mutate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AA2LA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmdhE"}
|