@ifc-lite/cli 0.25.2 → 0.26.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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anonymize.d.ts","sourceRoot":"","sources":["../../src/commands/anonymize.ts"],"names":[],"mappings":"AAwEA,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+KpE"}
|
|
@@ -0,0 +1,221 @@
|
|
|
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 anonymize <file.ifc> --out F
|
|
6
|
+
*
|
|
7
|
+
* "Anonymized isolated export" (#2934): pick a seed selection (`--id`/
|
|
8
|
+
* `--guid`/`--type`/`--storey`, unioned like `extract-entities`), expand it
|
|
9
|
+
* by relationship context (host walls, openings/fillers, type objects,
|
|
10
|
+
* materials, aggregate parents/children, the spatial containment chain up to
|
|
11
|
+
* IfcProject, and optionally structurally connected neighbours), then export
|
|
12
|
+
* EXACTLY that subset as a STEP file with every project-identifying signal
|
|
13
|
+
* removed while the geometry-relevant local transformations (rotations in
|
|
14
|
+
* the placement chain, non-orthogonal cuts) survive — so a parsing-bug
|
|
15
|
+
* reproduction keeps reproducing without the source model that triggered it
|
|
16
|
+
* ever leaving the caller's machine.
|
|
17
|
+
*
|
|
18
|
+
* Thin CLI wiring over `@ifc-lite/export`'s `collectRelatedEntities` /
|
|
19
|
+
* `exportAnonymizedSubset` — the viewer's anonymized-export dialog drives the
|
|
20
|
+
* same two functions directly. See `docs/guide/exporting.md`.
|
|
21
|
+
*/
|
|
22
|
+
import { writeFile } from 'node:fs/promises';
|
|
23
|
+
import { EntityNode } from '@ifc-lite/query';
|
|
24
|
+
import { collectRelatedEntities, exportAnonymizedSubset, } from '@ifc-lite/export';
|
|
25
|
+
import { createHeadlessContext } from '../loader.js';
|
|
26
|
+
import { getFlag, getAllFlags, hasFlag, fatal, printJson, validateLimit } from '../output.js';
|
|
27
|
+
const USAGE = 'Usage: ifc-lite anonymize <file.ifc> --out F\n' +
|
|
28
|
+
' [--id N,...] [--guid G,...] [--type T] [--storey S]\n' +
|
|
29
|
+
' [--keep-psets] [--keep-names] [--keep-other-names] [--keep-currency]\n' +
|
|
30
|
+
' [--no-rel-voids-element] [--no-rel-fills-element] [--no-rel-defines-by-type]\n' +
|
|
31
|
+
' [--no-rel-associates-material] [--no-rel-aggregates] [--no-rel-nests]\n' +
|
|
32
|
+
' [--connect-depth N] [--guid-map F] [--json]';
|
|
33
|
+
/** Auto-prefix `Ifc` for `--type`, same convention as `export`/`mutate`. */
|
|
34
|
+
function normalizeTypeName(typeStr) {
|
|
35
|
+
return typeStr
|
|
36
|
+
.split(',')
|
|
37
|
+
.map((t) => {
|
|
38
|
+
const trimmed = t.trim();
|
|
39
|
+
if (/^ifc/i.test(trimmed))
|
|
40
|
+
return trimmed;
|
|
41
|
+
const prefixed = 'Ifc' + trimmed;
|
|
42
|
+
process.stderr.write(`Note: Auto-corrected type "${trimmed}" -> "${prefixed}"\n`);
|
|
43
|
+
return prefixed;
|
|
44
|
+
})
|
|
45
|
+
.join(',');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* GlobalId -> expressId for the whole store, built once so N `--guid`
|
|
49
|
+
* selectors cost one pass over the store rather than N. Mirrors the
|
|
50
|
+
* precedence-free lookup `packages/mcp/src/tools/util.ts`'s
|
|
51
|
+
* `findByGlobalId` does for a live store, minus the overlay handling this
|
|
52
|
+
* freshly-loaded, unmutated CLI store never needs.
|
|
53
|
+
*/
|
|
54
|
+
function buildGlobalIdIndex(store) {
|
|
55
|
+
const index = new Map();
|
|
56
|
+
for (const [, ids] of store.entityIndex.byType) {
|
|
57
|
+
for (const id of ids)
|
|
58
|
+
index.set(new EntityNode(store, id).globalId, id);
|
|
59
|
+
}
|
|
60
|
+
return index;
|
|
61
|
+
}
|
|
62
|
+
export async function anonymizeCommand(args) {
|
|
63
|
+
const filePath = args.find((a) => !a.startsWith('-'));
|
|
64
|
+
if (!filePath) {
|
|
65
|
+
fatal(USAGE);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const outPath = getFlag(args, '--out');
|
|
69
|
+
if (!outPath) {
|
|
70
|
+
fatal(`--out is required.\n${USAGE}`);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const { bim, store } = await createHeadlessContext(filePath);
|
|
74
|
+
// ── Seed selection — every selector is unioned, and each fails loudly on
|
|
75
|
+
// zero matches (never silently selects nothing), matching extract-entities'
|
|
76
|
+
// `resolveToId` contract. ──
|
|
77
|
+
const seeds = new Set();
|
|
78
|
+
for (const token of getAllFlags(args, '--id').flatMap((v) => v.split(','))) {
|
|
79
|
+
const t = token.trim();
|
|
80
|
+
if (!t)
|
|
81
|
+
continue;
|
|
82
|
+
const expressId = parseInt(t.startsWith('#') ? t.slice(1) : t, 10);
|
|
83
|
+
if (Number.isNaN(expressId) || !bim.entity({ modelId: 'default', expressId })) {
|
|
84
|
+
fatal(`--id: entity not found: ${token}`);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
seeds.add(expressId);
|
|
88
|
+
}
|
|
89
|
+
const guidTokens = getAllFlags(args, '--guid').flatMap((v) => v.split(','));
|
|
90
|
+
if (guidTokens.length > 0) {
|
|
91
|
+
const guidIndex = buildGlobalIdIndex(store);
|
|
92
|
+
for (const token of guidTokens) {
|
|
93
|
+
const t = token.trim();
|
|
94
|
+
if (!t)
|
|
95
|
+
continue;
|
|
96
|
+
const id = guidIndex.get(t);
|
|
97
|
+
if (id === undefined) {
|
|
98
|
+
fatal(`--guid: GlobalId not found: ${t}`);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
seeds.add(id);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const typeFlag = getFlag(args, '--type');
|
|
105
|
+
if (typeFlag) {
|
|
106
|
+
const normalized = normalizeTypeName(typeFlag);
|
|
107
|
+
const matched = bim.query().byType(...normalized.split(',')).toArray();
|
|
108
|
+
if (matched.length === 0) {
|
|
109
|
+
fatal(`--type: no entities matched: ${normalized}`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
for (const e of matched)
|
|
113
|
+
seeds.add(e.ref.expressId);
|
|
114
|
+
}
|
|
115
|
+
const storeyFlag = getFlag(args, '--storey');
|
|
116
|
+
if (storeyFlag) {
|
|
117
|
+
const storeys = bim.storeys();
|
|
118
|
+
const matchedStorey = storeys.find((s) => s.globalId === storeyFlag) ??
|
|
119
|
+
storeys.find((s) => String(s.ref.expressId) === storeyFlag) ??
|
|
120
|
+
storeys.find((s) => s.name === storeyFlag) ??
|
|
121
|
+
storeys.find((s) => s.name?.toLowerCase().includes(storeyFlag.toLowerCase()));
|
|
122
|
+
if (!matchedStorey) {
|
|
123
|
+
const names = storeys.map((s) => s.name).filter(Boolean).join(', ');
|
|
124
|
+
fatal(`--storey: not found: ${storeyFlag} (available: ${names || '(none)'})`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const contained = bim.contains(matchedStorey.ref);
|
|
128
|
+
if (contained.length === 0) {
|
|
129
|
+
fatal(`--storey: no entities contained in storey: ${storeyFlag}`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
for (const e of contained)
|
|
133
|
+
seeds.add(e.ref.expressId);
|
|
134
|
+
}
|
|
135
|
+
if (seeds.size === 0) {
|
|
136
|
+
fatal(`No entities selected. Use --id, --guid, --type, or --storey.\n${USAGE}`);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// ── Relationship expansion (RelatedEntityOptions) ──
|
|
140
|
+
// Flag names are the exact EXPRESS relationship names being toggled off
|
|
141
|
+
// (AGENTS.md "IFC schema fidelity" — full relationship names, never an
|
|
142
|
+
// invented alias like `--no-hosts`), and each relationship gets its own
|
|
143
|
+
// flag: `IfcRelAggregates` and `IfcRelNests` are distinct REL entity types
|
|
144
|
+
// (see `RelatedEntityOptions` in `anonymize-types.ts`) even though the
|
|
145
|
+
// parser folds both into one aggregation edge, so collapsing them onto one
|
|
146
|
+
// `--no-aggregates` switch would silently disable a relationship the flag
|
|
147
|
+
// never named.
|
|
148
|
+
const keepPsets = hasFlag(args, '--keep-psets');
|
|
149
|
+
const connectDepth = validateLimit(getFlag(args, '--connect-depth'), '--connect-depth') ?? 0;
|
|
150
|
+
const relatedOptions = {
|
|
151
|
+
IfcRelVoidsElement: !hasFlag(args, '--no-rel-voids-element'),
|
|
152
|
+
IfcRelFillsElement: !hasFlag(args, '--no-rel-fills-element'),
|
|
153
|
+
IfcRelDefinesByType: !hasFlag(args, '--no-rel-defines-by-type'),
|
|
154
|
+
IfcRelAssociatesMaterial: !hasFlag(args, '--no-rel-associates-material'),
|
|
155
|
+
IfcRelAggregates: hasFlag(args, '--no-rel-aggregates') ? 'none' : 'both',
|
|
156
|
+
IfcRelNests: hasFlag(args, '--no-rel-nests') ? 'none' : 'down',
|
|
157
|
+
IfcRelConnectsPathElementsDepth: connectDepth,
|
|
158
|
+
// `--keep-psets` alone only stops `exportAnonymizedSubset` from clearing
|
|
159
|
+
// `HasPropertySets` on whatever ends up included — it doesn't pull
|
|
160
|
+
// property sets into the selection that were never walked to. Turning
|
|
161
|
+
// the walk on too is what makes `--keep-psets` actually keep anything.
|
|
162
|
+
IfcRelDefinesByProperties: keepPsets,
|
|
163
|
+
};
|
|
164
|
+
const related = collectRelatedEntities(store, seeds, relatedOptions);
|
|
165
|
+
const anonymizeOptions = {
|
|
166
|
+
keepPropertySets: keepPsets,
|
|
167
|
+
// `--keep-names`: IfcRoot Name/LongName/Description/Tag stay as authored.
|
|
168
|
+
pseudonymizeNames: !hasFlag(args, '--keep-names'),
|
|
169
|
+
// `--keep-other-names`: ObjectType, Phase, and non-IfcRoot names (surface
|
|
170
|
+
// styles, materials, layers, profiles, colours) stay as authored.
|
|
171
|
+
pseudonymizeAllNames: !hasFlag(args, '--keep-other-names'),
|
|
172
|
+
// `--keep-currency`: IfcMonetaryUnit.Currency stays as authored instead of USD.
|
|
173
|
+
neutralizeCurrency: !hasFlag(args, '--keep-currency'),
|
|
174
|
+
// Deliberately NOT `filename: basename(outPath)`: `outPath` is whatever
|
|
175
|
+
// the caller chose to name the file on disk (often the client/project
|
|
176
|
+
// name, e.g. `--out Acme-Tower.ifc`), and `AnonymizeOptions.filename`
|
|
177
|
+
// feeds straight into the exported STEP header's `FILE_NAME` field. Using
|
|
178
|
+
// it here would write the identifying name this command exists to strip
|
|
179
|
+
// right back into the file it strips it from. Leave it unset so it falls
|
|
180
|
+
// through to the neutral `'anonymized.ifc'` default.
|
|
181
|
+
};
|
|
182
|
+
let result;
|
|
183
|
+
try {
|
|
184
|
+
result = exportAnonymizedSubset(store, related.all, anonymizeOptions);
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
fatal(err instanceof Error ? err.message : String(err));
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
await writeFile(outPath, result.content);
|
|
191
|
+
const guidMapPath = getFlag(args, '--guid-map');
|
|
192
|
+
if (guidMapPath) {
|
|
193
|
+
await writeFile(guidMapPath, JSON.stringify(Object.fromEntries(result.guidMap), null, 2));
|
|
194
|
+
}
|
|
195
|
+
if (hasFlag(args, '--json')) {
|
|
196
|
+
printJson({
|
|
197
|
+
seedCount: seeds.size,
|
|
198
|
+
includedCount: related.all.size,
|
|
199
|
+
entityCount: result.stats.entityCount,
|
|
200
|
+
includedRootEntityCount: result.stats.includedRootEntityCount,
|
|
201
|
+
prunedRelationshipIds: result.stats.prunedRelationshipIds,
|
|
202
|
+
zeroedPlacements: result.stats.zeroedPlacements,
|
|
203
|
+
warnings: result.stats.warnings,
|
|
204
|
+
truncated: related.truncated,
|
|
205
|
+
guidMap: guidMapPath ?? null,
|
|
206
|
+
out: outPath,
|
|
207
|
+
});
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
process.stderr.write(`Anonymized ${seeds.size} seed(s) -> ${related.all.size} related entities -> ${result.stats.entityCount} exported entities -> ${outPath}\n`);
|
|
211
|
+
if (related.truncated) {
|
|
212
|
+
process.stderr.write('Warning: related-entity walk hit its work budget before reaching a fixpoint; the result may be an incomplete reproduction.\n');
|
|
213
|
+
}
|
|
214
|
+
for (const w of result.stats.warnings)
|
|
215
|
+
process.stderr.write(`Warning: ${w}\n`);
|
|
216
|
+
if (guidMapPath) {
|
|
217
|
+
process.stderr.write(`GUID map written to ${guidMapPath} — it links back to the original, identifying model; ` +
|
|
218
|
+
`keep it separate from ${outPath} and do not share it alongside it.\n`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=anonymize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anonymize.js","sourceRoot":"","sources":["../../src/commands/anonymize.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import { propsCommand } from './commands/props.js';
|
|
|
15
15
|
import { exportCommand } from './commands/export.js';
|
|
16
16
|
import { diagnoseGeometryCommand } from './commands/diagnose-geometry.js';
|
|
17
17
|
import { extractEntitiesCommand } from './commands/extract-entities.js';
|
|
18
|
+
import { anonymizeCommand } from './commands/anonymize.js';
|
|
18
19
|
import { idsCommand } from './commands/ids.js';
|
|
19
20
|
import { bcfCommand } from './commands/bcf.js';
|
|
20
21
|
import { clashCommand } from './commands/clash.js';
|
|
@@ -61,6 +62,12 @@ const HELP = `
|
|
|
61
62
|
[--product ID|GUID] [--type T] Filter worst-hosts detail to one product/type
|
|
62
63
|
extract-entities <file.ifc> --out F Isolate entities into a small, viewable standalone IFC
|
|
63
64
|
[--product ID|GUID] [--storey S] [--detect] [--view] by GUID/type/storey or auto-triage
|
|
65
|
+
anonymize <file.ifc> --out F Export selected objects + context as an anonymized IFC
|
|
66
|
+
[--id N,...] [--guid G,...] [--type T] [--storey S]
|
|
67
|
+
[--keep-psets] [--keep-names] [--keep-other-names] [--keep-currency]
|
|
68
|
+
[--no-rel-voids-element] [--no-rel-fills-element] [--no-rel-defines-by-type]
|
|
69
|
+
[--no-rel-associates-material] [--no-rel-aggregates] [--no-rel-nests]
|
|
70
|
+
[--connect-depth N] [--guid-map F] [--json]
|
|
64
71
|
ids <file.ifc> <rules.ids> Validate against IDS rules
|
|
65
72
|
bcf <create|list|add-comment> Work with BCF collaboration files
|
|
66
73
|
clash <file.ifc> [--matrix] [--bcf F] Detect geometric clashes between elements
|
|
@@ -238,6 +245,9 @@ async function main() {
|
|
|
238
245
|
case 'extract-entities':
|
|
239
246
|
await extractEntitiesCommand(commandArgs);
|
|
240
247
|
break;
|
|
248
|
+
case 'anonymize':
|
|
249
|
+
await anonymizeCommand(commandArgs);
|
|
250
|
+
break;
|
|
241
251
|
case 'ids':
|
|
242
252
|
await idsCommand(commandArgs);
|
|
243
253
|
break;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;+DAE+D;AAE/D;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,6DAA6D;AAC7D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;AAEtE,MAAM,IAAI,GAAG;cACC,OAAO
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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.
|
|
3
|
+
"version": "0.26.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,30 +20,30 @@
|
|
|
20
20
|
"README.md"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@ifc-lite/bcf": "^2.0.
|
|
23
|
+
"@ifc-lite/bcf": "^2.0.1",
|
|
24
24
|
"@ifc-lite/clash": "^1.9.2",
|
|
25
|
-
"@ifc-lite/create": "^2.2.0",
|
|
26
|
-
"@ifc-lite/data": "^3.5.0",
|
|
27
25
|
"@ifc-lite/diff": "^0.7.0",
|
|
28
|
-
"@ifc-lite/
|
|
29
|
-
"@ifc-lite/
|
|
26
|
+
"@ifc-lite/create": "^2.2.0",
|
|
27
|
+
"@ifc-lite/data": "^3.5.1",
|
|
28
|
+
"@ifc-lite/export": "^3.1.0",
|
|
30
29
|
"@ifc-lite/extensions": "^0.5.0",
|
|
30
|
+
"@ifc-lite/geometry": "^4.1.0",
|
|
31
31
|
"@ifc-lite/ifcx": "^3.0.1",
|
|
32
32
|
"@ifc-lite/merge": "^0.4.4",
|
|
33
|
-
"@ifc-lite/
|
|
33
|
+
"@ifc-lite/mcp": "^0.12.0",
|
|
34
34
|
"@ifc-lite/mutations": "^1.27.0",
|
|
35
|
-
"@ifc-lite/
|
|
35
|
+
"@ifc-lite/ids": "^1.15.52",
|
|
36
36
|
"@ifc-lite/parser": "^4.3.2",
|
|
37
37
|
"@ifc-lite/query": "^2.0.0",
|
|
38
|
+
"@ifc-lite/sandbox": "^2.2.1",
|
|
38
39
|
"@ifc-lite/sdk": "^3.0.0",
|
|
39
40
|
"@ifc-lite/viewer-core": "^0.2.14",
|
|
40
|
-
"@ifc-lite/
|
|
41
|
-
"@ifc-lite/wasm": "^6.1.0"
|
|
41
|
+
"@ifc-lite/wasm": "^6.1.1"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/node": "^26.2.0",
|
|
45
45
|
"typescript": "^6.0.3",
|
|
46
|
-
"vitest": "^4.1.
|
|
46
|
+
"vitest": "^4.1.11"
|
|
47
47
|
},
|
|
48
48
|
"engines": {
|
|
49
49
|
"node": ">=18.0.0"
|