@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.
- package/dist/commands/ask.d.ts +2 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +524 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js +120 -27
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +149 -11
- package/dist/commands/export.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 +353 -0
- package/dist/commands/mutate.js.map +1 -0
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +446 -79
- 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 +270 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/index.js +35 -1
- package/dist/index.js.map +1 -1
- package/dist/output.d.ts +4 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +13 -0
- package/dist/output.js.map +1 -1
- package/package.json +6 -5
package/dist/commands/eval.js
CHANGED
|
@@ -7,37 +7,140 @@
|
|
|
7
7
|
* Evaluate a JavaScript expression against the BIM SDK.
|
|
8
8
|
* The `bim` object is available with the full SDK API.
|
|
9
9
|
*
|
|
10
|
+
* When --type is specified, the expression is evaluated per-entity with
|
|
11
|
+
* `ref` bound to each entity reference, enabling patterns like:
|
|
12
|
+
* ifc-lite eval model.ifc "bim.quantity(ref, 'GrossSideArea')" --type IfcWall --limit 3
|
|
13
|
+
*
|
|
10
14
|
* Examples:
|
|
11
15
|
* ifc-lite eval model.ifc "bim.query().byType('IfcWall').count()"
|
|
12
16
|
* ifc-lite eval model.ifc "bim.query().byType('IfcDoor').toArray().map(d => d.name)"
|
|
13
17
|
*/
|
|
14
18
|
import { createHeadlessContext } from '../loader.js';
|
|
15
|
-
import { printJson, fatal } from '../output.js';
|
|
19
|
+
import { printJson, fatal, hasFlag, getFlag } from '../output.js';
|
|
20
|
+
/** Known flags that take a value argument */
|
|
21
|
+
const EVAL_VALUE_FLAGS = new Set(['--type', '--limit']);
|
|
22
|
+
/** Known boolean flags (no value) */
|
|
23
|
+
const EVAL_BOOLEAN_FLAGS = new Set(['--json']);
|
|
16
24
|
export async function evalCommand(args) {
|
|
17
|
-
const
|
|
25
|
+
const jsonOutput = hasFlag(args, '--json');
|
|
26
|
+
const typeFilter = getFlag(args, '--type');
|
|
27
|
+
const limitStr = getFlag(args, '--limit');
|
|
28
|
+
// Parse positional args, skipping known flags and their values.
|
|
29
|
+
// Known value flags (--type, --limit) and boolean flags (--json) are always
|
|
30
|
+
// skipped regardless of position. After the file path is collected, other
|
|
31
|
+
// dash-prefixed tokens (e.g. "-1") are treated as expression parts.
|
|
32
|
+
const positional = [];
|
|
33
|
+
let afterFilePath = false;
|
|
34
|
+
for (let i = 0; i < args.length; i++) {
|
|
35
|
+
const arg = args[i];
|
|
36
|
+
if (arg === '--') {
|
|
37
|
+
afterFilePath = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
// Always skip known flags, even after the file path
|
|
41
|
+
if (EVAL_VALUE_FLAGS.has(arg)) {
|
|
42
|
+
i++; // skip flag value
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (EVAL_BOOLEAN_FLAGS.has(arg))
|
|
46
|
+
continue;
|
|
47
|
+
// Before the file path, skip any unrecognised flags too
|
|
48
|
+
if (!afterFilePath && arg.startsWith('-'))
|
|
49
|
+
continue;
|
|
50
|
+
positional.push(arg);
|
|
51
|
+
// After collecting the file path, allow dash-prefixed expression tokens
|
|
52
|
+
if (positional.length === 1)
|
|
53
|
+
afterFilePath = true;
|
|
54
|
+
}
|
|
18
55
|
if (positional.length < 2)
|
|
19
56
|
fatal('Usage: ifc-lite eval <file.ifc> "<expression>"');
|
|
20
57
|
const [filePath, ...exprParts] = positional;
|
|
21
58
|
const expression = exprParts.join(' ');
|
|
22
59
|
const { bim } = await createHeadlessContext(filePath);
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
|
|
60
|
+
// When --type is specified, iterate entities and evaluate per-entity with `ref` in scope
|
|
61
|
+
if (typeFilter) {
|
|
62
|
+
const types = typeFilter.split(',').map(t => {
|
|
63
|
+
const trimmed = t.trim();
|
|
64
|
+
if (trimmed.startsWith('Ifc') || trimmed.startsWith('IFC') || trimmed.startsWith('ifc'))
|
|
65
|
+
return trimmed;
|
|
66
|
+
return 'Ifc' + trimmed;
|
|
67
|
+
});
|
|
68
|
+
let entities = bim.query().byType(...types).toArray();
|
|
69
|
+
if (limitStr)
|
|
70
|
+
entities = entities.slice(0, parseInt(limitStr, 10));
|
|
71
|
+
const results = [];
|
|
72
|
+
const evalFn = buildEvalFunction(expression, ['bim', 'ref', 'entity']);
|
|
73
|
+
for (const entity of entities) {
|
|
74
|
+
try {
|
|
75
|
+
const result = evalFn(bim, entity.ref, entity);
|
|
76
|
+
const resolved = result instanceof Promise ? await result : result;
|
|
77
|
+
results.push({
|
|
78
|
+
Name: entity.name,
|
|
79
|
+
Type: entity.type,
|
|
80
|
+
GlobalId: entity.globalId,
|
|
81
|
+
result: resolved ?? null,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
results.push({
|
|
86
|
+
Name: entity.name,
|
|
87
|
+
Type: entity.type,
|
|
88
|
+
GlobalId: entity.globalId,
|
|
89
|
+
error: err.message,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (jsonOutput) {
|
|
94
|
+
printJson({ results });
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
for (const r of results) {
|
|
98
|
+
const val = r.error ? `ERROR: ${r.error}` : formatValue(r.result);
|
|
99
|
+
process.stdout.write(`${r.Name ?? r.GlobalId}: ${val}\n`);
|
|
100
|
+
}
|
|
101
|
+
process.stderr.write(`\n${results.length} entities evaluated\n`);
|
|
102
|
+
}
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Standard eval (no --type): evaluate expression once with bim in scope
|
|
106
|
+
const evalFn = buildEvalFunction(expression, ['bim']);
|
|
107
|
+
try {
|
|
108
|
+
const result = evalFn(bim);
|
|
109
|
+
// Handle async results
|
|
110
|
+
const resolved = result instanceof Promise ? await result : result;
|
|
111
|
+
if (jsonOutput) {
|
|
112
|
+
printJson({ result: resolved ?? null });
|
|
113
|
+
}
|
|
114
|
+
else if (resolved === undefined || resolved === null) {
|
|
115
|
+
process.stdout.write('null\n');
|
|
116
|
+
}
|
|
117
|
+
else if (typeof resolved === 'object') {
|
|
118
|
+
printJson(resolved);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
process.stdout.write(String(resolved) + '\n');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
fatal(`Evaluation error: ${err.message}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Build an eval function from an expression string.
|
|
130
|
+
* Handles both single expressions and multi-statement code.
|
|
131
|
+
*/
|
|
132
|
+
function buildEvalFunction(expression, paramNames) {
|
|
26
133
|
const isStatement = /^\s*(const |let |var |for |if |while |return |class |function |try |switch |{)/.test(expression)
|
|
27
134
|
|| expression.includes(';');
|
|
28
135
|
let body;
|
|
29
136
|
if (isStatement) {
|
|
30
|
-
// For multi-statement code: if the last statement is an expression (not a declaration),
|
|
31
|
-
// auto-return it so users don't need to write explicit return
|
|
32
137
|
const statements = expression.split(';').map(s => s.trim()).filter(Boolean);
|
|
33
138
|
const last = statements[statements.length - 1];
|
|
34
139
|
const isLastDeclaration = /^(const |let |var |for |if |while |return |class |function |try |switch |{)/.test(last);
|
|
35
140
|
if (!isLastDeclaration && statements.length > 1) {
|
|
36
|
-
// Replace last statement with return
|
|
37
141
|
statements[statements.length - 1] = `return (${last})`;
|
|
38
142
|
}
|
|
39
143
|
else if (isLastDeclaration && /^(const |let |var )\s*(\w+)/.test(last)) {
|
|
40
|
-
// If last is a variable declaration, return the variable name
|
|
41
144
|
const varMatch = last.match(/^(?:const |let |var )\s*(\w+)/);
|
|
42
145
|
if (varMatch) {
|
|
43
146
|
statements.push(`return ${varMatch[1]}`);
|
|
@@ -48,26 +151,16 @@ export async function evalCommand(args) {
|
|
|
48
151
|
else {
|
|
49
152
|
body = `return (${expression})`;
|
|
50
153
|
}
|
|
51
|
-
|
|
154
|
+
return new Function(...paramNames, `
|
|
52
155
|
"use strict";
|
|
53
156
|
${body};
|
|
54
157
|
`);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
else if (typeof resolved === 'object') {
|
|
63
|
-
printJson(resolved);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
process.stdout.write(String(resolved) + '\n');
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch (err) {
|
|
70
|
-
fatal(`Evaluation error: ${err.message}`);
|
|
71
|
-
}
|
|
158
|
+
}
|
|
159
|
+
function formatValue(value) {
|
|
160
|
+
if (value === null || value === undefined)
|
|
161
|
+
return 'null';
|
|
162
|
+
if (typeof value === 'object')
|
|
163
|
+
return JSON.stringify(value);
|
|
164
|
+
return String(value);
|
|
72
165
|
}
|
|
73
166
|
//# sourceMappingURL=eval.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/commands/eval.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/commands/eval.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAgIA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GjE"}
|
package/dist/commands/export.js
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
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';
|
|
@@ -31,17 +32,109 @@ function parseWhereFilter(filter) {
|
|
|
31
32
|
}
|
|
32
33
|
return { psetName, propName: rest, operator: 'exists' };
|
|
33
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
|
+
}
|
|
34
122
|
export async function exportCommand(args) {
|
|
35
123
|
const filePath = args.find(a => !a.startsWith('-'));
|
|
36
124
|
const format = getFlag(args, '--format') ?? 'csv';
|
|
37
125
|
const outPath = getFlag(args, '--out');
|
|
38
|
-
|
|
126
|
+
let type = getFlag(args, '--type');
|
|
39
127
|
const columnsStr = getFlag(args, '--columns');
|
|
40
128
|
const separator = getFlag(args, '--separator') ?? ',';
|
|
41
129
|
const limit = getFlag(args, '--limit');
|
|
42
130
|
const propFilter = getFlag(args, '--where');
|
|
131
|
+
const storeyFilter = getFlag(args, '--storey');
|
|
43
132
|
if (!filePath)
|
|
44
|
-
fatal('Usage: ifc-lite export <file.ifc> --format csv|json|ifc [--type IfcWall] [--columns Name,Type,GlobalId] [--where PsetName.Prop=Value] [--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
|
+
}
|
|
45
138
|
const { bim } = await createHeadlessContext(filePath);
|
|
46
139
|
// Build entity query
|
|
47
140
|
let q = bim.query();
|
|
@@ -52,24 +145,69 @@ export async function exportCommand(args) {
|
|
|
52
145
|
const parsed = parseWhereFilter(propFilter);
|
|
53
146
|
q = q.where(parsed.psetName, parsed.propName, parsed.operator, parsed.value);
|
|
54
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
|
|
55
165
|
if (limit) {
|
|
56
|
-
|
|
166
|
+
entities = entities.slice(0, parseInt(limit, 10));
|
|
57
167
|
}
|
|
58
|
-
const
|
|
59
|
-
const refs = entities.map(e => e.ref);
|
|
168
|
+
const refs = entities.map((e) => e.ref);
|
|
60
169
|
const columns = columnsStr
|
|
61
170
|
? columnsStr.split(',')
|
|
62
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));
|
|
63
175
|
switch (format) {
|
|
64
176
|
case 'csv': {
|
|
65
|
-
|
|
66
|
-
|
|
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
|
+
}
|
|
67
190
|
break;
|
|
68
191
|
}
|
|
69
192
|
case 'json': {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
+
}
|
|
73
211
|
break;
|
|
74
212
|
}
|
|
75
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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../src/commands/mutate.ts"],"names":[],"mappings":"AA8GA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2IjE"}
|