@ifc-lite/cli 0.17.2 → 0.18.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/layer-diff.d.ts +3 -0
- package/dist/commands/layer-diff.d.ts.map +1 -0
- package/dist/commands/layer-diff.js +46 -0
- package/dist/commands/layer-diff.js.map +1 -0
- package/dist/commands/layer-history.d.ts +61 -0
- package/dist/commands/layer-history.d.ts.map +1 -0
- package/dist/commands/layer-history.js +276 -0
- package/dist/commands/layer-history.js.map +1 -0
- package/dist/commands/layer-merge.d.ts +22 -0
- package/dist/commands/layer-merge.d.ts.map +1 -0
- package/dist/commands/layer-merge.js +138 -0
- package/dist/commands/layer-merge.js.map +1 -0
- package/dist/commands/layer-publish.d.ts +67 -0
- package/dist/commands/layer-publish.d.ts.map +1 -0
- package/dist/commands/layer-publish.js +299 -0
- package/dist/commands/layer-publish.js.map +1 -0
- package/dist/commands/layer-store.d.ts +59 -0
- package/dist/commands/layer-store.d.ts.map +1 -0
- package/dist/commands/layer-store.js +225 -0
- package/dist/commands/layer-store.js.map +1 -0
- package/dist/commands/layer-test-helpers.d.ts +10 -0
- package/dist/commands/layer-test-helpers.d.ts.map +1 -0
- package/dist/commands/layer-test-helpers.js +49 -0
- package/dist/commands/layer-test-helpers.js.map +1 -0
- package/dist/commands/layer.d.ts +2 -0
- package/dist/commands/layer.d.ts.map +1 -0
- package/dist/commands/layer.js +100 -0
- package/dist/commands/layer.js.map +1 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +4 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/ref.d.ts +17 -0
- package/dist/commands/ref.d.ts.map +1 -0
- package/dist/commands/ref.js +173 -0
- package/dist/commands/ref.js.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/package.json +13 -11
|
@@ -0,0 +1,173 @@
|
|
|
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 ref` — manage named refs (mutable pointers to layer stacks)
|
|
6
|
+
* in the local layer store (`.ifc-lite/refs.json`).
|
|
7
|
+
*
|
|
8
|
+
* ref list List refs with stack hashes
|
|
9
|
+
* ref create <name> [--from R] Create a ref (optionally copying R)
|
|
10
|
+
* ref move <name> --to <target> Point a ref at another ref's stack or
|
|
11
|
+
* a comma-separated layer-id list
|
|
12
|
+
* ref protect <name> [...] Set merge policy on a ref
|
|
13
|
+
*/
|
|
14
|
+
import { computeStackHash } from '@ifc-lite/ifcx';
|
|
15
|
+
import { getAllFlags, getFlag, hasFlag, printJson } from '../output.js';
|
|
16
|
+
import { getRef, readRefs, requireRef, resolveLayerId, setRef, shortId, storeFromArgs, } from './layer-store.js';
|
|
17
|
+
export function listRefs(store) {
|
|
18
|
+
const { refs } = readRefs(store);
|
|
19
|
+
return Object.keys(refs)
|
|
20
|
+
.sort()
|
|
21
|
+
.map((name) => {
|
|
22
|
+
const entry = refs[name];
|
|
23
|
+
const summary = {
|
|
24
|
+
name,
|
|
25
|
+
layers: entry.layers,
|
|
26
|
+
stackHash: computeStackHash(entry.layers),
|
|
27
|
+
};
|
|
28
|
+
if (entry.policy)
|
|
29
|
+
summary.policy = entry.policy;
|
|
30
|
+
return summary;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export function createRef(store, name, from) {
|
|
34
|
+
if (getRef(store, name)) {
|
|
35
|
+
throw new Error(`Ref "${name}" already exists`);
|
|
36
|
+
}
|
|
37
|
+
const layers = from === undefined ? [] : [...requireRef(store, from).layers];
|
|
38
|
+
const entry = { layers };
|
|
39
|
+
setRef(store, name, entry);
|
|
40
|
+
return entry;
|
|
41
|
+
}
|
|
42
|
+
/** Move a ref to another ref's stack or a comma-separated layer-id list. */
|
|
43
|
+
export function moveRef(store, name, to) {
|
|
44
|
+
const entry = requireRef(store, name);
|
|
45
|
+
const target = getRef(store, to);
|
|
46
|
+
const layers = target !== undefined
|
|
47
|
+
? [...target.layers]
|
|
48
|
+
: to
|
|
49
|
+
.split(',')
|
|
50
|
+
.map((id) => id.trim())
|
|
51
|
+
.filter((id) => id.length > 0)
|
|
52
|
+
.map((id) => resolveLayerId(store, id));
|
|
53
|
+
const updated = { ...entry, layers };
|
|
54
|
+
setRef(store, name, updated);
|
|
55
|
+
return updated;
|
|
56
|
+
}
|
|
57
|
+
export function protectRef(store, name, options) {
|
|
58
|
+
const entry = requireRef(store, name);
|
|
59
|
+
const policy = { ...entry.policy };
|
|
60
|
+
if (options.requiredChecks !== undefined && options.requiredChecks.length > 0) {
|
|
61
|
+
policy.requiredChecks = [...(policy.requiredChecks ?? []), ...options.requiredChecks];
|
|
62
|
+
}
|
|
63
|
+
if (options.requireHumanApproval)
|
|
64
|
+
policy.requireHumanApproval = true;
|
|
65
|
+
const updated = { ...entry, policy };
|
|
66
|
+
setRef(store, name, updated);
|
|
67
|
+
return updated;
|
|
68
|
+
}
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// command
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
export async function refCommand(args) {
|
|
73
|
+
const sub = args[0];
|
|
74
|
+
if (!sub || sub === '--help' || sub === '-h') {
|
|
75
|
+
printUsage();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const rest = args.slice(1);
|
|
79
|
+
switch (sub) {
|
|
80
|
+
case 'list':
|
|
81
|
+
await refListCommand(rest);
|
|
82
|
+
return;
|
|
83
|
+
case 'create':
|
|
84
|
+
await refCreateCommand(rest);
|
|
85
|
+
return;
|
|
86
|
+
case 'move':
|
|
87
|
+
await refMoveCommand(rest);
|
|
88
|
+
return;
|
|
89
|
+
case 'protect':
|
|
90
|
+
await refProtectCommand(rest);
|
|
91
|
+
return;
|
|
92
|
+
default:
|
|
93
|
+
process.stderr.write(`Unknown ref subcommand: ${sub}\n`);
|
|
94
|
+
printUsage();
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function printUsage() {
|
|
99
|
+
process.stdout.write(`Usage: ifc-lite ref <command> [...args]
|
|
100
|
+
|
|
101
|
+
Commands:
|
|
102
|
+
list List refs with layer counts and stack hashes.
|
|
103
|
+
Flags: --json, --store <dir>
|
|
104
|
+
create <name> [--from <ref>] Create a ref, optionally copying another
|
|
105
|
+
ref's layer stack.
|
|
106
|
+
move <name> --to <target> Point a ref at another ref's stack or at a
|
|
107
|
+
comma-separated list of layer ids.
|
|
108
|
+
protect <name> Set merge policy on a ref.
|
|
109
|
+
Flags: --require-check <spec> (repeatable),
|
|
110
|
+
--require-human-approval
|
|
111
|
+
|
|
112
|
+
All commands honour --store <dir> (default: <cwd>/.ifc-lite).
|
|
113
|
+
`);
|
|
114
|
+
}
|
|
115
|
+
async function refListCommand(args) {
|
|
116
|
+
const refs = listRefs(storeFromArgs(args));
|
|
117
|
+
if (hasFlag(args, '--json')) {
|
|
118
|
+
printJson(refs);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (refs.length === 0) {
|
|
122
|
+
process.stderr.write('No refs.\n');
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
for (const ref of refs) {
|
|
126
|
+
const policyBits = [];
|
|
127
|
+
if (ref.policy?.requireHumanApproval)
|
|
128
|
+
policyBits.push('human-approval');
|
|
129
|
+
for (const check of ref.policy?.requiredChecks ?? [])
|
|
130
|
+
policyBits.push(`check:${check}`);
|
|
131
|
+
const policySuffix = policyBits.length > 0 ? ` [${policyBits.join(', ')}]` : '';
|
|
132
|
+
const top = ref.layers.length > 0 ? ` @ ${shortId(ref.layers[ref.layers.length - 1])}` : '';
|
|
133
|
+
process.stdout.write(`${ref.name} ${ref.layers.length} layer(s)${top} ${ref.stackHash}${policySuffix}\n`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function positionalName(args, usage) {
|
|
137
|
+
const name = args[0];
|
|
138
|
+
if (!name || name.startsWith('-'))
|
|
139
|
+
throw new Error(usage);
|
|
140
|
+
return name;
|
|
141
|
+
}
|
|
142
|
+
async function refCreateCommand(args) {
|
|
143
|
+
const name = positionalName(args, 'Usage: ifc-lite ref create <name> [--from <ref>]');
|
|
144
|
+
const entry = createRef(storeFromArgs(args), name, getFlag(args, '--from'));
|
|
145
|
+
if (hasFlag(args, '--json'))
|
|
146
|
+
printJson({ name, ...entry });
|
|
147
|
+
else
|
|
148
|
+
process.stderr.write(`Created ref ${name} (${entry.layers.length} layer(s))\n`);
|
|
149
|
+
}
|
|
150
|
+
async function refMoveCommand(args) {
|
|
151
|
+
const usage = 'Usage: ifc-lite ref move <name> --to <ref|layer-id,layer-id,...>';
|
|
152
|
+
const name = positionalName(args, usage);
|
|
153
|
+
const to = getFlag(args, '--to');
|
|
154
|
+
if (!to)
|
|
155
|
+
throw new Error(usage);
|
|
156
|
+
const entry = moveRef(storeFromArgs(args), name, to);
|
|
157
|
+
if (hasFlag(args, '--json'))
|
|
158
|
+
printJson({ name, ...entry });
|
|
159
|
+
else
|
|
160
|
+
process.stderr.write(`Moved ref ${name} to ${entry.layers.length} layer(s)\n`);
|
|
161
|
+
}
|
|
162
|
+
async function refProtectCommand(args) {
|
|
163
|
+
const name = positionalName(args, 'Usage: ifc-lite ref protect <name> [--require-check <spec>]... [--require-human-approval]');
|
|
164
|
+
const entry = protectRef(storeFromArgs(args), name, {
|
|
165
|
+
requiredChecks: getAllFlags(args, '--require-check'),
|
|
166
|
+
requireHumanApproval: hasFlag(args, '--require-human-approval'),
|
|
167
|
+
});
|
|
168
|
+
if (hasFlag(args, '--json'))
|
|
169
|
+
printJson({ name, ...entry });
|
|
170
|
+
else
|
|
171
|
+
process.stderr.write(`Protected ref ${name}\n`);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref.js","sourceRoot":"","sources":["../../src/commands/ref.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -36,6 +36,8 @@ import { analyzeCommand } from './commands/analyze.js';
|
|
|
36
36
|
import { lodCommand } from './commands/lod.js';
|
|
37
37
|
import { mcpCommand } from './commands/mcp.js';
|
|
38
38
|
import { extCommand } from './commands/ext.js';
|
|
39
|
+
import { layerCommand } from './commands/layer.js';
|
|
40
|
+
import { refCommand } from './commands/ref.js';
|
|
39
41
|
import { readFileSync } from 'node:fs';
|
|
40
42
|
import { fileURLToPath } from 'node:url';
|
|
41
43
|
import { dirname, join } from 'node:path';
|
|
@@ -88,6 +90,8 @@ const HELP = `
|
|
|
88
90
|
lod <file.ifc> --level 0|1 Generate lightweight LOD artifacts
|
|
89
91
|
mcp <file.ifc> [--transport stdio|http] Start an MCP server bound to one or more IFC files
|
|
90
92
|
ext validate <path>|init <dir> Manage IFClite extensions (Phase 0 — validate, init)
|
|
93
|
+
layer <publish|diff|merge|log|bake|...> Layered change tracking over a local store (.ifc-lite/)
|
|
94
|
+
ref <list|create|move|protect> Manage named refs in the layer store
|
|
91
95
|
|
|
92
96
|
Options:
|
|
93
97
|
--help, -h Show help
|
|
@@ -158,6 +162,11 @@ const HELP = `
|
|
|
158
162
|
ifc-lite mcp model.ifc --read-only
|
|
159
163
|
ifc-lite mcp arch.ifc struct.ifc --federate
|
|
160
164
|
ifc-lite mcp model.ifc --transport http --port 8765 --token abc
|
|
165
|
+
ifc-lite ref create main
|
|
166
|
+
ifc-lite layer publish delta.ifcx --base main --intent "Set fire ratings" --scope "model.mutate:Pset_FireSafety*@IfcWall"
|
|
167
|
+
ifc-lite layer merge blake3:abc123 --into main --preview
|
|
168
|
+
ifc-lite layer log main
|
|
169
|
+
ifc-lite layer bake main -o flat.ifcx
|
|
161
170
|
|
|
162
171
|
Pipe-friendly:
|
|
163
172
|
ifc-lite query model.ifc --type IfcWall --json | jq '.[].name'
|
|
@@ -277,6 +286,12 @@ async function main() {
|
|
|
277
286
|
case 'ext':
|
|
278
287
|
await extCommand(commandArgs);
|
|
279
288
|
break;
|
|
289
|
+
case 'layer':
|
|
290
|
+
await layerCommand(commandArgs);
|
|
291
|
+
break;
|
|
292
|
+
case 'ref':
|
|
293
|
+
await refCommand(commandArgs);
|
|
294
|
+
break;
|
|
280
295
|
default:
|
|
281
296
|
process.stderr.write(`Unknown command: ${command}\n`);
|
|
282
297
|
process.stderr.write(`Run 'ifc-lite --help' for usage.\n`);
|
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,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,+DAA+D;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAE7B,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.18.0",
|
|
4
4
|
"description": "CLI toolkit for IFC files — query, validate, export, create, and script BIM data",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -21,21 +21,23 @@
|
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@ifc-lite/bcf": "^1.16.2",
|
|
24
|
-
"@ifc-lite/clash": "^1.6.
|
|
24
|
+
"@ifc-lite/clash": "^1.6.3",
|
|
25
25
|
"@ifc-lite/create": "^1.16.4",
|
|
26
|
-
"@ifc-lite/data": "^2.5.
|
|
26
|
+
"@ifc-lite/data": "^2.5.3",
|
|
27
27
|
"@ifc-lite/export": "^2.5.2",
|
|
28
|
-
"@ifc-lite/extensions": "^0.
|
|
29
|
-
"@ifc-lite/geometry": "^3.
|
|
30
|
-
"@ifc-lite/ids": "^1.15.
|
|
31
|
-
"@ifc-lite/
|
|
32
|
-
"@ifc-lite/
|
|
33
|
-
"@ifc-lite/
|
|
28
|
+
"@ifc-lite/extensions": "^0.4.0",
|
|
29
|
+
"@ifc-lite/geometry": "^3.2.0",
|
|
30
|
+
"@ifc-lite/ids": "^1.15.30",
|
|
31
|
+
"@ifc-lite/ifcx": "^2.3.0",
|
|
32
|
+
"@ifc-lite/merge": "^0.2.0",
|
|
33
|
+
"@ifc-lite/mcp": "^0.8.0",
|
|
34
|
+
"@ifc-lite/mutations": "^1.19.0",
|
|
35
|
+
"@ifc-lite/parser": "^3.8.5",
|
|
34
36
|
"@ifc-lite/query": "^1.14.13",
|
|
35
37
|
"@ifc-lite/sandbox": "^1.16.3",
|
|
36
38
|
"@ifc-lite/sdk": "^1.21.2",
|
|
37
|
-
"@ifc-lite/viewer-core": "^0.2.
|
|
38
|
-
"@ifc-lite/wasm": "^
|
|
39
|
+
"@ifc-lite/viewer-core": "^0.2.10",
|
|
40
|
+
"@ifc-lite/wasm": "^4.0.0"
|
|
39
41
|
},
|
|
40
42
|
"devDependencies": {
|
|
41
43
|
"@types/node": "^26.1.0",
|