@ifc-lite/cli 0.4.0 → 0.5.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,353 @@
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, getAllFlags, 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. Supports two forms:
40
+ * "PsetName.PropName=Value" → property set mutation
41
+ * "AttributeName=Value" → entity attribute mutation (Name, Description, etc.)
42
+ */
43
+ function parseSetArg(setStr) {
44
+ const dotIdx = setStr.indexOf('.');
45
+ const eqIdx = setStr.indexOf('=');
46
+ if (eqIdx <= 0) {
47
+ fatal(`Invalid --set syntax: "${setStr}". Expected: PsetName.PropName=Value or AttributeName=Value`);
48
+ }
49
+ // No dot or dot comes after '=' → attribute mutation (e.g. "Name=TestWall")
50
+ if (dotIdx <= 0 || dotIdx > eqIdx) {
51
+ const propName = setStr.slice(0, eqIdx);
52
+ const value = setStr.slice(eqIdx + 1);
53
+ return { psetName: null, propName, value, isAttribute: true };
54
+ }
55
+ // Standard pset.prop=value form
56
+ const psetName = setStr.slice(0, dotIdx);
57
+ const rest = setStr.slice(dotIdx + 1);
58
+ const restEqIdx = rest.indexOf('=');
59
+ if (restEqIdx <= 0) {
60
+ fatal(`Invalid --set syntax: "${setStr}". Expected: PsetName.PropName=Value`);
61
+ }
62
+ const propName = rest.slice(0, restEqIdx);
63
+ const value = rest.slice(restEqIdx + 1);
64
+ return { psetName, propName, value, isAttribute: false };
65
+ }
66
+ /**
67
+ * Coerce string value to appropriate type and determine PropertyValueType.
68
+ */
69
+ function coerceValue(value) {
70
+ if (value === 'true')
71
+ return { coerced: true, valueType: PropertyValueType.Boolean };
72
+ if (value === 'false')
73
+ return { coerced: false, valueType: PropertyValueType.Boolean };
74
+ const num = Number(value);
75
+ if (!isNaN(num) && value.trim() !== '') {
76
+ return {
77
+ coerced: num,
78
+ valueType: Number.isInteger(num) ? PropertyValueType.Integer : PropertyValueType.Real,
79
+ };
80
+ }
81
+ return { coerced: value, valueType: PropertyValueType.String };
82
+ }
83
+ /**
84
+ * Check if a value matches a filter operator and comparison value.
85
+ */
86
+ function matchesFilter(actual, operator, expected) {
87
+ if (operator === 'exists')
88
+ return actual != null;
89
+ if (actual == null || expected == null)
90
+ return false;
91
+ const numActual = Number(actual);
92
+ const numExpected = Number(expected);
93
+ const isNumeric = !isNaN(numActual) && !isNaN(numExpected);
94
+ switch (operator) {
95
+ case '=': return isNumeric ? numActual === numExpected : String(actual) === expected;
96
+ case '!=': return isNumeric ? numActual !== numExpected : String(actual) !== expected;
97
+ case '>': return isNumeric ? numActual > numExpected : false;
98
+ case '<': return isNumeric ? numActual < numExpected : false;
99
+ case '>=': return isNumeric ? numActual >= numExpected : false;
100
+ case '<=': return isNumeric ? numActual <= numExpected : false;
101
+ case 'contains': return String(actual).toLowerCase().includes(expected.toLowerCase());
102
+ default: return false;
103
+ }
104
+ }
105
+ export async function mutateCommand(args) {
106
+ const filePath = args.find(a => !a.startsWith('-'));
107
+ if (!filePath)
108
+ fatal('Usage: ifc-lite mutate <file.ifc> --id <N> --set PsetName.PropName=Value --out output.ifc');
109
+ const idStr = getFlag(args, '--id');
110
+ const type = getFlag(args, '--type');
111
+ const setStrs = getAllFlags(args, '--set');
112
+ const outPath = getFlag(args, '--out');
113
+ const propFilter = getFlag(args, '--where');
114
+ const jsonOutput = hasFlag(args, '--json');
115
+ if (setStrs.length === 0)
116
+ fatal('--set is required. Example: --set Pset_WallCommon.IsExternal=true or --set Name=TestWall');
117
+ if (!outPath)
118
+ fatal('--out is required. Specify output file path.');
119
+ const mutations = setStrs.map(s => {
120
+ const parsed = parseSetArg(s);
121
+ const { coerced, valueType } = coerceValue(parsed.value);
122
+ return { ...parsed, coerced, valueType };
123
+ });
124
+ // Load the store and create a BimContext for querying
125
+ const { bim, store } = await createHeadlessContext(filePath);
126
+ // Find target entities
127
+ let targets = [];
128
+ if (idStr) {
129
+ const expressId = parseInt(idStr, 10);
130
+ const entity = bim.entity({ modelId: 'default', expressId });
131
+ if (!entity)
132
+ fatal(`Entity #${expressId} not found`);
133
+ targets = [entity];
134
+ }
135
+ else if (type) {
136
+ // Auto-prefix Ifc if user omits it (e.g., "Wall" → "IfcWall")
137
+ const normalizedTypes = type.split(',').map(t => {
138
+ const trimmed = t.trim();
139
+ if (trimmed.startsWith('Ifc') || trimmed.startsWith('IFC') || trimmed.startsWith('ifc'))
140
+ return trimmed;
141
+ const prefixed = 'Ifc' + trimmed;
142
+ process.stderr.write(`Note: Auto-corrected type "${trimmed}" → "${prefixed}"\n`);
143
+ return prefixed;
144
+ });
145
+ let q = bim.query().byType(...normalizedTypes);
146
+ if (propFilter) {
147
+ const parsed = parseWhereFilter(propFilter);
148
+ // Try standard property where first
149
+ const filtered = q.toArray().filter((e) => {
150
+ // Check property sets
151
+ const psets = bim.properties(e.ref);
152
+ for (const pset of psets) {
153
+ if (pset.name === parsed.psetName) {
154
+ const prop = pset.properties?.find((p) => p.name === parsed.propName);
155
+ if (prop && matchesFilter(prop.value, parsed.operator, parsed.value))
156
+ return true;
157
+ }
158
+ }
159
+ // Fallback: check quantity sets (Qto_* aware)
160
+ const qsets = bim.quantities(e.ref);
161
+ for (const qset of qsets) {
162
+ if (qset.name === parsed.psetName) {
163
+ const qty = qset.quantities?.find((q) => q.name === parsed.propName);
164
+ if (qty && matchesFilter(qty.value, parsed.operator, parsed.value))
165
+ return true;
166
+ }
167
+ }
168
+ return false;
169
+ });
170
+ targets = filtered;
171
+ }
172
+ else {
173
+ targets = q.toArray();
174
+ }
175
+ }
176
+ else {
177
+ fatal('Either --id or --type is required to select target entities.');
178
+ }
179
+ if (targets.length === 0) {
180
+ fatal('No entities matched the given criteria.');
181
+ }
182
+ // Create MutablePropertyView with on-demand extraction from the store
183
+ const mutationView = new MutablePropertyView(null, 'default');
184
+ mutationView.setOnDemandExtractor((entityId) => {
185
+ return extractPropertiesOnDemand(store, entityId);
186
+ });
187
+ // Apply mutations via the real mutation system
188
+ let mutatedCount = 0;
189
+ const attributeMutations = [];
190
+ for (const entity of targets) {
191
+ for (const mut of mutations) {
192
+ if (mut.isAttribute) {
193
+ // Attribute mutations are handled via store manipulation
194
+ attributeMutations.push({ entity, propName: mut.propName, value: mut.value });
195
+ }
196
+ else {
197
+ mutationView.setProperty(entity.ref.expressId, mut.psetName, mut.propName, mut.coerced, mut.valueType);
198
+ }
199
+ }
200
+ mutatedCount++;
201
+ }
202
+ // Export with mutations applied via StepExporter
203
+ const schema = store.schemaVersion ?? 'IFC4';
204
+ const exporter = new StepExporter(store, mutationView);
205
+ const result = exporter.export({
206
+ schema: schema,
207
+ applyMutations: true,
208
+ });
209
+ // Apply attribute mutations via STEP text post-processing
210
+ let outputContent = result.content;
211
+ if (attributeMutations.length > 0) {
212
+ outputContent = applyAttributeMutations(outputContent, attributeMutations);
213
+ }
214
+ await writeFile(outPath, outputContent, 'utf-8');
215
+ const mutationDescs = mutations.map(m => m.isAttribute ? m.propName : `${m.psetName}.${m.propName}`);
216
+ if (jsonOutput) {
217
+ printJson({
218
+ mutated: mutatedCount,
219
+ properties: mutationDescs.map((desc, i) => ({
220
+ property: desc,
221
+ value: mutations[i].coerced,
222
+ })),
223
+ output: outPath,
224
+ stats: result.stats,
225
+ });
226
+ }
227
+ else {
228
+ for (const mut of mutations) {
229
+ const desc = mut.isAttribute ? mut.propName : `${mut.psetName}.${mut.propName}`;
230
+ process.stderr.write(`Mutated ${mutatedCount} entities: ${desc} = ${mut.value}\n`);
231
+ }
232
+ process.stderr.write(`Written to ${outPath} (${result.stats.entityCount} entities, ${result.stats.newEntityCount} new)\n`);
233
+ }
234
+ }
235
+ /**
236
+ * IFC entity attribute indices (0-based positions in STEP argument list).
237
+ * Standard for all IfcRoot subtypes: GlobalId(0), OwnerHistory(1), Name(2), Description(3).
238
+ * IfcObject subtypes add ObjectType(4). Tag varies by entity type.
239
+ */
240
+ const ATTRIBUTE_INDEX = {
241
+ name: 2,
242
+ description: 3,
243
+ objecttype: 4,
244
+ };
245
+ /**
246
+ * IFC types that have an ObjectType attribute at index 4.
247
+ * Only IfcObject subtypes (building elements, spatial elements) define ObjectType.
248
+ * Relationship types (IfcRelAggregates, etc.) and type objects do NOT.
249
+ */
250
+ const OBJECTTYPE_TYPES = new Set([
251
+ 'IFCWALL', 'IFCWALLSTANDARDCASE', 'IFCSLAB', 'IFCCOLUMN', 'IFCBEAM',
252
+ 'IFCDOOR', 'IFCWINDOW', 'IFCROOF', 'IFCSTAIR', 'IFCRAILING', 'IFCMEMBER',
253
+ 'IFCPLATE', 'IFCCOVERING', 'IFCFOOTING', 'IFCPILE', 'IFCCURTAINWALL',
254
+ 'IFCRAMP', 'IFCSPACE', 'IFCBUILDINGELEMENTPROXY', 'IFCFURNISHINGELEMENT',
255
+ 'IFCFLOWSEGMENT', 'IFCFLOWTERMINAL', 'IFCFLOWFITTING', 'IFCDISTRIBUTIONELEMENT',
256
+ 'IFCOPENINGELEMENT', 'IFCSITE', 'IFCBUILDING', 'IFCBUILDINGSTOREY', 'IFCPROJECT',
257
+ ]);
258
+ /**
259
+ * Apply attribute mutations to STEP content via text replacement.
260
+ * For each target entity, finds its STEP line and replaces the attribute at the known index.
261
+ */
262
+ function applyAttributeMutations(content, mutations) {
263
+ // Group mutations by expressId for efficient single-pass replacement
264
+ const mutationsByEntity = new Map();
265
+ for (const m of mutations) {
266
+ const id = m.entity.ref.expressId;
267
+ const list = mutationsByEntity.get(id) ?? [];
268
+ list.push({ propName: m.propName, value: m.value });
269
+ mutationsByEntity.set(id, list);
270
+ }
271
+ const lines = content.split('\n');
272
+ for (let i = 0; i < lines.length; i++) {
273
+ const line = lines[i];
274
+ // Match entity lines: #123=IFCTYPE(...);
275
+ const match = line.match(/^#(\d+)\s*=\s*(\w+)\s*\(/);
276
+ if (!match)
277
+ continue;
278
+ const expressId = parseInt(match[1], 10);
279
+ const entityType = match[2].toUpperCase();
280
+ const entityMuts = mutationsByEntity.get(expressId);
281
+ if (!entityMuts)
282
+ continue;
283
+ // Parse the STEP argument list (handle nested parens and quoted strings)
284
+ const argsStart = line.indexOf('(');
285
+ const argsEnd = line.lastIndexOf(')');
286
+ if (argsStart === -1 || argsEnd === -1)
287
+ continue;
288
+ const args = splitStepArgs(line.slice(argsStart + 1, argsEnd));
289
+ for (const mut of entityMuts) {
290
+ const attrIdx = ATTRIBUTE_INDEX[mut.propName.toLowerCase()];
291
+ if (attrIdx !== undefined && attrIdx < args.length) {
292
+ // Validate ObjectType is only written to entities that define it
293
+ if (mut.propName.toLowerCase() === 'objecttype' && !OBJECTTYPE_TYPES.has(entityType)) {
294
+ process.stderr.write(`Warning: attribute "ObjectType" not applicable to ${entityType} #${expressId}, skipping\n`);
295
+ continue;
296
+ }
297
+ // Escape for STEP format and wrap in quotes
298
+ const escaped = mut.value.replace(/\\/g, '\\\\').replace(/'/g, "''");
299
+ args[attrIdx] = `'${escaped}'`;
300
+ }
301
+ else {
302
+ process.stderr.write(`Warning: attribute "${mut.propName}" not recognized for entity #${expressId}\n`);
303
+ }
304
+ }
305
+ lines[i] = line.slice(0, argsStart + 1) + args.join(',') + line.slice(argsEnd);
306
+ }
307
+ return lines.join('\n');
308
+ }
309
+ /**
310
+ * Split a STEP argument string by commas, respecting nested parens and quoted strings.
311
+ */
312
+ function splitStepArgs(argsStr) {
313
+ const result = [];
314
+ let current = '';
315
+ let depth = 0;
316
+ let inString = false;
317
+ for (let i = 0; i < argsStr.length; i++) {
318
+ const ch = argsStr[i];
319
+ if (inString) {
320
+ current += ch;
321
+ if (ch === "'" && argsStr[i + 1] === "'") {
322
+ current += "'";
323
+ i++; // skip escaped quote
324
+ }
325
+ else if (ch === "'") {
326
+ inString = false;
327
+ }
328
+ }
329
+ else if (ch === "'") {
330
+ inString = true;
331
+ current += ch;
332
+ }
333
+ else if (ch === '(') {
334
+ depth++;
335
+ current += ch;
336
+ }
337
+ else if (ch === ')') {
338
+ depth--;
339
+ current += ch;
340
+ }
341
+ else if (ch === ',' && depth === 0) {
342
+ result.push(current);
343
+ current = '';
344
+ }
345
+ else {
346
+ current += ch;
347
+ }
348
+ }
349
+ if (current)
350
+ result.push(current);
351
+ return result;
352
+ }
353
+ //# 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":"AAoGA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsWhE"}
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"}