@ifc-lite/cli 0.34.0 → 0.38.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/README.md +1 -1
- package/dist/commands/anonymize.d.ts.map +1 -1
- package/dist/commands/anonymize.js +1 -0
- package/dist/commands/anonymize.js.map +1 -1
- package/dist/commands/check.d.ts +2 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +119 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/convert.d.ts.map +1 -1
- package/dist/commands/convert.js +28 -8
- package/dist/commands/convert.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +6 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/delivery-checks-rules.d.ts +37 -0
- package/dist/commands/delivery-checks-rules.d.ts.map +1 -0
- package/dist/commands/delivery-checks-rules.js +76 -0
- package/dist/commands/delivery-checks-rules.js.map +1 -0
- package/dist/commands/delivery-checks.d.ts +12 -0
- package/dist/commands/delivery-checks.d.ts.map +1 -1
- package/dist/commands/delivery-checks.js +16 -5
- package/dist/commands/delivery-checks.js.map +1 -1
- package/dist/commands/delivery-recipe.d.ts +13 -2
- package/dist/commands/delivery-recipe.d.ts.map +1 -1
- package/dist/commands/delivery-recipe.js +29 -17
- package/dist/commands/delivery-recipe.js.map +1 -1
- package/dist/commands/delivery-report.d.ts +2 -2
- package/dist/commands/delivery-report.d.ts.map +1 -1
- package/dist/commands/delivery-report.js +14 -4
- package/dist/commands/delivery-report.js.map +1 -1
- package/dist/commands/delivery.d.ts.map +1 -1
- package/dist/commands/delivery.js +17 -5
- package/dist/commands/delivery.js.map +1 -1
- package/dist/commands/diff-engine.js +1 -0
- package/dist/commands/diff-engine.js.map +1 -1
- package/dist/commands/diff-scope.d.ts.map +1 -1
- package/dist/commands/diff-scope.js +2 -0
- package/dist/commands/diff-scope.js.map +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +2 -0
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +13 -0
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/ext.js +26 -10
- package/dist/commands/ext.js.map +1 -1
- package/dist/commands/extract-entities.d.ts.map +1 -1
- package/dist/commands/extract-entities.js +26 -8
- package/dist/commands/extract-entities.js.map +1 -1
- package/dist/commands/flow-host.d.ts +26 -0
- package/dist/commands/flow-host.d.ts.map +1 -0
- package/dist/commands/flow-host.js +29 -0
- package/dist/commands/flow-host.js.map +1 -0
- package/dist/commands/flow-tracking.d.ts +20 -0
- package/dist/commands/flow-tracking.d.ts.map +1 -0
- package/dist/commands/flow-tracking.js +86 -0
- package/dist/commands/flow-tracking.js.map +1 -0
- package/dist/commands/flow.d.ts +2 -0
- package/dist/commands/flow.d.ts.map +1 -0
- package/dist/commands/flow.js +273 -0
- package/dist/commands/flow.js.map +1 -0
- package/dist/commands/gym/channels.d.ts.map +1 -1
- package/dist/commands/gym/channels.js +10 -2
- package/dist/commands/gym/channels.js.map +1 -1
- package/dist/commands/gym.d.ts.map +1 -1
- package/dist/commands/gym.js +5 -1
- package/dist/commands/gym.js.map +1 -1
- package/dist/commands/ids.d.ts.map +1 -1
- package/dist/commands/ids.js +36 -3
- package/dist/commands/ids.js.map +1 -1
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +20 -5
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/layer-publish.d.ts.map +1 -1
- package/dist/commands/layer-publish.js +6 -0
- package/dist/commands/layer-publish.js.map +1 -1
- package/dist/commands/lod.d.ts.map +1 -1
- package/dist/commands/lod.js +4 -1
- package/dist/commands/lod.js.map +1 -1
- package/dist/commands/mutate-step-record.d.ts +25 -1
- package/dist/commands/mutate-step-record.d.ts.map +1 -1
- package/dist/commands/mutate-step-record.js +17 -22
- package/dist/commands/mutate-step-record.js.map +1 -1
- package/dist/commands/mutate.d.ts +2 -1
- package/dist/commands/mutate.d.ts.map +1 -1
- package/dist/commands/mutate.js +27 -2
- package/dist/commands/mutate.js.map +1 -1
- package/dist/commands/rekey.d.ts.map +1 -1
- package/dist/commands/rekey.js +22 -1
- package/dist/commands/rekey.js.map +1 -1
- package/dist/commands/schema.d.ts.map +1 -1
- package/dist/commands/schema.js +5 -1
- package/dist/commands/schema.js.map +1 -1
- package/dist/commands/simplify.d.ts.map +1 -1
- package/dist/commands/simplify.js +4 -1
- package/dist/commands/simplify.js.map +1 -1
- package/dist/commands/validate.d.ts +5 -14
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +11 -14
- package/dist/commands/validate.js.map +1 -1
- package/dist/headless-backend-store-authoring.d.ts +28 -0
- package/dist/headless-backend-store-authoring.d.ts.map +1 -0
- package/dist/headless-backend-store-authoring.js +34 -0
- package/dist/headless-backend-store-authoring.js.map +1 -0
- package/dist/headless-backend.d.ts +7 -0
- package/dist/headless-backend.d.ts.map +1 -1
- package/dist/headless-backend.js +59 -55
- package/dist/headless-backend.js.map +1 -1
- package/dist/help.d.ts +22 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +260 -0
- package/dist/help.js.map +1 -0
- package/dist/index.js +41 -189
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +12 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +54 -7
- package/dist/loader.js.map +1 -1
- package/dist/out-flag-commands.d.ts +12 -0
- package/dist/out-flag-commands.d.ts.map +1 -0
- package/dist/out-flag-commands.js +19 -0
- package/dist/out-flag-commands.js.map +1 -0
- package/dist/query-overlay-relations.js +1 -1
- package/dist/query-overlay-relations.js.map +1 -1
- package/dist/query-overlay.d.ts +0 -2
- package/dist/query-overlay.d.ts.map +1 -1
- package/dist/query-overlay.js +0 -15
- package/dist/query-overlay.js.map +1 -1
- package/package.json +26 -22
- package/dist/version.d.ts +0 -14
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -38
- package/dist/version.js.map +0 -1
|
@@ -0,0 +1,273 @@
|
|
|
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 flow <run|describe|validate>` — evaluate a `*.flow.json` graph
|
|
6
|
+
* headlessly over the same `HeadlessBackend` every other command uses.
|
|
7
|
+
*
|
|
8
|
+
* flow run <graph.flow.json> <model.ifc> [--input k=v]... [--out F] [--tracking F|--no-tracking] [--json]
|
|
9
|
+
* flow describe <graph.flow.json> [--json] inputs/outputs schema (the Hops `/io`)
|
|
10
|
+
* flow validate <graph.flow.json> [--json] document + node availability report
|
|
11
|
+
*
|
|
12
|
+
* The CLI is a trusted caller running a local file, so no capability grants
|
|
13
|
+
* are applied to model/viewer/export capabilities; the graph's declared
|
|
14
|
+
* `capabilities` are still reported. `network.fetch:<host>` and
|
|
15
|
+
* `secret.read:<NAME>` are the exception: they are ALWAYS checked against
|
|
16
|
+
* the graph's own declared capabilities regardless of trust level (see
|
|
17
|
+
* `FlowHost.networkGrants`'s doc comment in `@ifc-lite/flow-nodes`) — a
|
|
18
|
+
* local trusted run is still not trusted to reach an arbitrary host or leak
|
|
19
|
+
* an env var the graph never wrote down. Viewer nodes run as no-ops
|
|
20
|
+
* (`headlessFeatures`), so a graph that colorizes failures in the viewer
|
|
21
|
+
* validates and runs in CI unchanged.
|
|
22
|
+
*
|
|
23
|
+
* Secrets: `{{secret:NAME}}` references in node params are validated
|
|
24
|
+
* against the graph's `secret.read:<NAME>` capabilities and the real
|
|
25
|
+
* environment BEFORE the run starts (`validateSecretReferences`), then
|
|
26
|
+
* substituted into a throwaway copy of the document (`interpolateSecrets`)
|
|
27
|
+
* — the original document, and anything derived from it before this point
|
|
28
|
+
* (wiring/availability reports), never carries a real secret value.
|
|
29
|
+
* Every text this command emits afterwards (`--json`, plain-text summary,
|
|
30
|
+
* stderr) is passed through `redactDeep`/`redactText` first, so a secret
|
|
31
|
+
* that reaches a remote response body and comes back in a node's output or
|
|
32
|
+
* a thrown error is still scrubbed, not just the literal param it was
|
|
33
|
+
* interpolated into.
|
|
34
|
+
*/
|
|
35
|
+
import { createHash } from 'node:crypto';
|
|
36
|
+
import { readFile, stat, writeFile } from 'node:fs/promises';
|
|
37
|
+
import { checkAvailability, declaredInputKeys, describeFlowIO, parseFlowDocument, resolveDeclaredParam, runFlow, validateFlowWiring, } from '@ifc-lite/flow';
|
|
38
|
+
import { parseCapabilities } from '@ifc-lite/extensions';
|
|
39
|
+
import { buildRedactionMap, createStandardRegistry, headlessFeatures, interpolateSecrets, redactDeep, resolveSecretValues, usableSecretNames, validateSecretReferences, } from '@ifc-lite/flow-nodes';
|
|
40
|
+
import { createHeadlessContext } from '../loader.js';
|
|
41
|
+
import { createCliFlowSession } from './flow-host.js';
|
|
42
|
+
import { fatal, getAllFlags, hasFlag, printJson } from '../output.js';
|
|
43
|
+
import { defaultTrackingPath, FileTrackingStore } from './flow-tracking.js';
|
|
44
|
+
const USAGE = 'Usage: ifc-lite flow <run|describe|validate> <graph.flow.json> [<model.ifc>] [--input k=v]... [--out F] [--tracking F | --no-tracking] [--json]';
|
|
45
|
+
async function loadDocument(path) {
|
|
46
|
+
if (!path)
|
|
47
|
+
fatal(USAGE);
|
|
48
|
+
let text;
|
|
49
|
+
try {
|
|
50
|
+
text = await readFile(path, 'utf-8');
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
fatal(`cannot read ${path}: ${err.message}`);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
return parseFlowDocument(text);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
fatal(err.message);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const VALUE_FLAGS = new Set(['--input', '--out', '--tracking']);
|
|
63
|
+
/** Arguments that are neither flags nor the value of a value-taking flag. */
|
|
64
|
+
function positionalArgs(args) {
|
|
65
|
+
const out = [];
|
|
66
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
67
|
+
if (VALUE_FLAGS.has(args[i]))
|
|
68
|
+
i += 1;
|
|
69
|
+
else if (!args[i].startsWith('--'))
|
|
70
|
+
out.push(args[i]);
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A value-taking flag's operand. An absent flag and a flag whose operand is
|
|
76
|
+
* missing are different things: `--out` at the end of the line, or
|
|
77
|
+
* `--out --json`, would otherwise write a file literally named `--json`.
|
|
78
|
+
*/
|
|
79
|
+
function requireFlagValue(args, flag) {
|
|
80
|
+
const idx = args.indexOf(flag);
|
|
81
|
+
if (idx === -1)
|
|
82
|
+
return undefined;
|
|
83
|
+
const value = args[idx + 1];
|
|
84
|
+
if (value === undefined || value.startsWith('--'))
|
|
85
|
+
fatal(`${flag} needs a value`);
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* `--input nodeId.param=value`; values parse as JSON when they can, else as
|
|
90
|
+
* strings. A key that names no declared parameter is refused rather than
|
|
91
|
+
* ignored: the scheduler silently drops unknown keys, so `--input
|
|
92
|
+
* rating=REI90` (missing the node id) would run the graph on its DEFAULTS
|
|
93
|
+
* and report success while writing the wrong value. The lookup itself is
|
|
94
|
+
* `resolveDeclaredParam` from `@ifc-lite/flow`, shared with the MCP
|
|
95
|
+
* `run_flow` tool so the two callers cannot drift on what counts as declared.
|
|
96
|
+
*/
|
|
97
|
+
function parseInputs(raws, doc, registry) {
|
|
98
|
+
const out = {};
|
|
99
|
+
for (const raw of raws) {
|
|
100
|
+
const eq = raw.indexOf('=');
|
|
101
|
+
if (eq <= 0)
|
|
102
|
+
fatal(`--input expects nodeId.param=value, got "${raw}"`);
|
|
103
|
+
const key = raw.slice(0, eq);
|
|
104
|
+
if (!resolveDeclaredParam(key, doc, registry)) {
|
|
105
|
+
const known = declaredInputKeys(doc);
|
|
106
|
+
fatal(`--input "${key}" names no parameter${known.length > 0 ? `; this graph declares ${known.join(', ')}` : ''}`);
|
|
107
|
+
}
|
|
108
|
+
const text = raw.slice(eq + 1);
|
|
109
|
+
try {
|
|
110
|
+
out[key] = JSON.parse(text);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
out[key] = text;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return out;
|
|
117
|
+
}
|
|
118
|
+
function summarize(result) {
|
|
119
|
+
const statuses = {};
|
|
120
|
+
for (const r of result.reports)
|
|
121
|
+
statuses[r.status] = (statuses[r.status] ?? 0) + 1;
|
|
122
|
+
return {
|
|
123
|
+
ok: result.ok,
|
|
124
|
+
nodes: statuses,
|
|
125
|
+
outputs: result.graphOutputs.map((o) => ({ label: o.label, key: `${o.nodeId}.${o.port}`, data: o.data })),
|
|
126
|
+
errors: result.log.filter((l) => l.level === 'error'),
|
|
127
|
+
warnings: result.log.filter((l) => l.level === 'warn'),
|
|
128
|
+
log: result.log,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export async function flowCommand(args) {
|
|
132
|
+
const sub = args[0];
|
|
133
|
+
const positional = positionalArgs(args.slice(1));
|
|
134
|
+
const json = hasFlag(args, '--json');
|
|
135
|
+
const registry = createStandardRegistry();
|
|
136
|
+
if (sub === 'describe') {
|
|
137
|
+
const doc = await loadDocument(positional[0]);
|
|
138
|
+
const info = describeFlowIO(doc, registry);
|
|
139
|
+
if (json)
|
|
140
|
+
return printJson(info);
|
|
141
|
+
process.stdout.write(`${info.name} (${info.id})\n`);
|
|
142
|
+
if (info.description)
|
|
143
|
+
process.stdout.write(` ${info.description}\n`);
|
|
144
|
+
process.stdout.write(` capabilities: ${info.capabilities.join(', ') || '(none)'}\n inputs:\n`);
|
|
145
|
+
for (const i of info.inputs)
|
|
146
|
+
process.stdout.write(` ${i.key} ${i.label} [${i.kind}]${i.default !== undefined ? ` default=${JSON.stringify(i.default)}` : ''}\n`);
|
|
147
|
+
process.stdout.write(' outputs:\n');
|
|
148
|
+
for (const o of info.outputs)
|
|
149
|
+
process.stdout.write(` ${o.key} ${o.label} [${o.kind ?? '?'}/${o.access ?? '?'}]\n`);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (sub === 'validate') {
|
|
153
|
+
const doc = await loadDocument(positional[0]);
|
|
154
|
+
// Wiring first: `parseFlowDocument` is registry-free, so a declared
|
|
155
|
+
// output naming a port no node has would otherwise validate clean and
|
|
156
|
+
// then produce nothing at run time.
|
|
157
|
+
const wiring = validateFlowWiring(doc, registry);
|
|
158
|
+
const availability = checkAvailability(doc, registry, headlessFeatures(usableSecretNames(process.env)));
|
|
159
|
+
const problems = availability.filter((a) => a.status === 'unavailable' || a.status === 'unknown');
|
|
160
|
+
// The report goes out in either format FIRST, then the exit code — a
|
|
161
|
+
// `--json` run that printed `ok: false` and returned 0 let CI read an
|
|
162
|
+
// unrunnable graph as a successful validation.
|
|
163
|
+
if (json)
|
|
164
|
+
printJson({ ok: problems.length === 0 && wiring.length === 0, wiring, nodes: availability });
|
|
165
|
+
else {
|
|
166
|
+
for (const w of wiring)
|
|
167
|
+
process.stdout.write(` wiring ${w.path}: ${w.message}\n`);
|
|
168
|
+
for (const a of availability)
|
|
169
|
+
process.stdout.write(` ${a.status.padEnd(11)} ${a.nodeId} (${a.type})${a.reasons.length ? `: ${a.reasons.join('; ')}` : ''}\n`);
|
|
170
|
+
}
|
|
171
|
+
if (problems.length > 0 || wiring.length > 0) {
|
|
172
|
+
if (wiring.length > 0)
|
|
173
|
+
process.stderr.write(`${wiring.length} wiring problem(s)\n`);
|
|
174
|
+
if (problems.length > 0)
|
|
175
|
+
process.stderr.write(`${problems.length} node(s) cannot run on this host\n`);
|
|
176
|
+
process.exit(2);
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (sub !== 'run')
|
|
181
|
+
fatal(USAGE);
|
|
182
|
+
const [graphPath, modelPath] = positional;
|
|
183
|
+
if (!modelPath)
|
|
184
|
+
fatal(USAGE);
|
|
185
|
+
const doc = await loadDocument(graphPath);
|
|
186
|
+
// Capabilities first: `declaredSecrets` reads the all-or-nothing parse, so
|
|
187
|
+
// with one malformed capability every secret would be reported undeclared
|
|
188
|
+
// instead of the malformed capability itself (#5446 review).
|
|
189
|
+
const capsResult = parseCapabilities(doc.capabilities);
|
|
190
|
+
if (!capsResult.ok)
|
|
191
|
+
fatal(`the graph declares malformed capabilities: ${capsResult.errors.map((e) => e.message).join('; ')}`);
|
|
192
|
+
// Secrets: validated against the real environment BEFORE anything else
|
|
193
|
+
// touches the graph — an undeclared or unset `{{secret:NAME}}` reference
|
|
194
|
+
// is refused here, never interpolated as an empty string.
|
|
195
|
+
const secretErrors = validateSecretReferences(doc, process.env);
|
|
196
|
+
if (secretErrors.length > 0) {
|
|
197
|
+
for (const e of secretErrors)
|
|
198
|
+
process.stderr.write(` error secrets: ${e.message}\n`);
|
|
199
|
+
fatal(`${secretErrors.length} secret reference problem(s); see above`);
|
|
200
|
+
}
|
|
201
|
+
const secretValues = resolveSecretValues(doc, process.env);
|
|
202
|
+
const redaction = buildRedactionMap(secretValues);
|
|
203
|
+
const runDoc = interpolateSecrets(doc, secretValues);
|
|
204
|
+
// The host follows the model the graph works on: `model.openFromSource`
|
|
205
|
+
// can replace the command-line model mid-run (see `flow-host.ts`).
|
|
206
|
+
const session = createCliFlowSession(await createHeadlessContext(modelPath), capsResult.value);
|
|
207
|
+
const host = session.host;
|
|
208
|
+
let tracking;
|
|
209
|
+
const trackingPath = requireFlagValue(args, '--tracking') ?? defaultTrackingPath(graphPath);
|
|
210
|
+
// An existing sidecar is opened even when no node is tracked any more:
|
|
211
|
+
// that is how a set whose node was deleted gets removed from the model.
|
|
212
|
+
const wantsTracking = doc.nodes.some((n) => registry.get(n.type)?.tracked) || (await stat(trackingPath).then(() => true, () => false));
|
|
213
|
+
if (!hasFlag(args, '--no-tracking') && wantsTracking) {
|
|
214
|
+
const pin = `file:${createHash('sha256').update(await readFile(modelPath)).digest('hex')}`;
|
|
215
|
+
tracking = await FileTrackingStore.open(trackingPath, pin);
|
|
216
|
+
if (tracking.loadedPin !== undefined && tracking.loadedPin !== pin) {
|
|
217
|
+
process.stderr.write(` warn tracking sidecar ${tracking.path} was written against another model state; tracked elements that are missing will be re-created\n`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const result = await runFlow(runDoc, {
|
|
221
|
+
host,
|
|
222
|
+
registry,
|
|
223
|
+
// `--input` overrides are NOT scanned for `{{secret:NAME}}` — a secret
|
|
224
|
+
// must be authored into the graph's own node params, not passed at the
|
|
225
|
+
// command line, where it would land in shell history / process args.
|
|
226
|
+
inputs: parseInputs(getAllFlags(args, '--input'), doc, registry),
|
|
227
|
+
features: headlessFeatures(usableSecretNames(process.env)),
|
|
228
|
+
modelRevisions: { [host.defaultModelId ?? 'model']: 0 },
|
|
229
|
+
tracking,
|
|
230
|
+
});
|
|
231
|
+
const trackingWritten = tracking ? await tracking.flush() : false;
|
|
232
|
+
// A failed run can still have written through earlier nodes. Exporting
|
|
233
|
+
// that half-applied state would hand the next step a model no graph run
|
|
234
|
+
// ever produced, under a green-looking file on disk.
|
|
235
|
+
const out = requireFlagValue(args, '--out');
|
|
236
|
+
const wrote = out !== undefined && result.ok;
|
|
237
|
+
if (wrote) {
|
|
238
|
+
const { bim, store } = session.active();
|
|
239
|
+
const content = bim.export.ifc(null, { schema: store.schemaVersion ?? 'IFC4', includeMutations: true });
|
|
240
|
+
await writeFile(out, typeof content === 'string' ? content : Buffer.from(content));
|
|
241
|
+
}
|
|
242
|
+
// Redaction runs at the OUTER boundary, right before anything leaves this
|
|
243
|
+
// process — on the whole summary object (`--json` output included), not
|
|
244
|
+
// just the interpolated param string: a secret that reached a remote
|
|
245
|
+
// response body and came back as a node output or an error message is
|
|
246
|
+
// caught here too, not only at the point it was substituted in.
|
|
247
|
+
const summary = redactDeep(summarize(result), redaction);
|
|
248
|
+
if (json)
|
|
249
|
+
printJson({ ...summary, out: wrote ? out : null, tracking: trackingWritten ? tracking.path : null });
|
|
250
|
+
else {
|
|
251
|
+
process.stdout.write(`${result.ok ? 'ok' : 'FAILED'}: ${Object.entries(summary.nodes).map(([k, v]) => `${v} ${k}`).join(', ')}\n`);
|
|
252
|
+
// `summary` was already redacted (deep) above; `redactDeep` walks Maps
|
|
253
|
+
// too, so `o.data` here never carries a raw secret value.
|
|
254
|
+
for (const o of summary.outputs)
|
|
255
|
+
process.stdout.write(` ${o.label}: ${JSON.stringify(o.data, (_k, v) => (v instanceof Map ? Object.fromEntries(v) : v))}\n`);
|
|
256
|
+
for (const e of summary.errors)
|
|
257
|
+
process.stderr.write(` error ${e.nodeId}${e.laneKey ? `[${e.laneKey}]` : ''}: ${e.message}\n`);
|
|
258
|
+
for (const w of summary.warnings)
|
|
259
|
+
process.stderr.write(` warn ${w.nodeId}${w.laneKey ? `[${w.laneKey}]` : ''}: ${w.message}\n`);
|
|
260
|
+
if (wrote)
|
|
261
|
+
process.stdout.write(` wrote ${out}
|
|
262
|
+
`);
|
|
263
|
+
else if (out !== undefined)
|
|
264
|
+
process.stderr.write(` not written: the run failed, so ${out} would hold a half-applied model
|
|
265
|
+
`);
|
|
266
|
+
if (trackingWritten)
|
|
267
|
+
process.stdout.write(` tracking ${tracking.path}
|
|
268
|
+
`);
|
|
269
|
+
}
|
|
270
|
+
if (!result.ok)
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../src/commands/gym/channels.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAiB,MAAM,oBAAoB,CAAC;AAItE,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../src/commands/gym/channels.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAiB,MAAM,oBAAoB,CAAC;AAItE,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAItE,2DAA2D;AAC3D,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAClD,eAAO,MAAM,YAAY,EAAE,QAAQ,EAA+B,CAAC;AAEnE,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAGzD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASjF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoC9I;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiClC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4B/E"}
|
|
@@ -5,6 +5,7 @@ import { createClashEngine } from '@ifc-lite/clash';
|
|
|
5
5
|
import { elementsFromStep } from '@ifc-lite/clash/step';
|
|
6
6
|
import { createDataAccessor } from '@ifc-lite/ids/bridge';
|
|
7
7
|
import { computeValidationIssues } from '../validate.js';
|
|
8
|
+
import { IFC_ENTITY_NAMES } from '@ifc-lite/data';
|
|
8
9
|
export const KNOWN_CHECKS = ['schema', 'clash', 'ids'];
|
|
9
10
|
export function round(value, decimals = 6) {
|
|
10
11
|
const factor = 10 ** decimals;
|
|
@@ -93,14 +94,21 @@ export async function computeIdsChannel(store, ids, idsDoc, locale) {
|
|
|
93
94
|
}
|
|
94
95
|
export function computeObservation(store) {
|
|
95
96
|
const entityCounts = {};
|
|
97
|
+
// @raw-entity-enumeration-ok gym reset observes originalStore freshly loaded from a file or generated episode, before its edit overlay is applied
|
|
96
98
|
for (const [type, ids] of store.entityIndex.byType) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
+
// `byType` is keyed by the raw STEP spelling (IFCWALLSTANDARDCASE). This is
|
|
100
|
+
// the machine-readable observation an agent consumes, and `info --json`
|
|
101
|
+
// already reports IfcPascalCase, so the two disagreed on the same model.
|
|
102
|
+
if (ids.length > 0) {
|
|
103
|
+
const displayName = IFC_ENTITY_NAMES[type] ?? type;
|
|
104
|
+
entityCounts[displayName] = (entityCounts[displayName] ?? 0) + ids.length;
|
|
105
|
+
}
|
|
99
106
|
}
|
|
100
107
|
const sortedEntityCounts = {};
|
|
101
108
|
for (const type of Object.keys(entityCounts).sort()) {
|
|
102
109
|
sortedEntityCounts[type] = entityCounts[type];
|
|
103
110
|
}
|
|
111
|
+
// @raw-entity-enumeration-ok gym reset reports the same freshly loaded source snapshot as entityCounts above
|
|
104
112
|
const storeyCount = (store.entityIndex.byType.get('IFCBUILDINGSTOREY') ?? []).length;
|
|
105
113
|
return {
|
|
106
114
|
entityCounts: sortedEntityCounts,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../src/commands/gym/channels.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAa/D,OAAO,EAAE,iBAAiB,EAA8B,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../src/commands/gym/channels.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gym.d.ts","sourceRoot":"","sources":["../../src/commands/gym.ts"],"names":[],"mappings":"AAkJA;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAE,KAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"gym.d.ts","sourceRoot":"","sources":["../../src/commands/gym.ts"],"names":[],"mappings":"AAkJA;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAE,KAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+N9E"}
|
package/dist/commands/gym.js
CHANGED
|
@@ -92,7 +92,7 @@ import { createInterface } from 'node:readline';
|
|
|
92
92
|
import { readFile } from 'node:fs/promises';
|
|
93
93
|
import { basename } from 'node:path';
|
|
94
94
|
import { loadIfcFile, loadIfcBytes } from '../loader.js';
|
|
95
|
-
import { getFlag, fatal } from '../output.js';
|
|
95
|
+
import { getFlag, fatal, routeConsoleDiagnosticsToStderr } from '../output.js';
|
|
96
96
|
import { extractPropertiesOnDemand, extractQuantitiesOnDemand } from '@ifc-lite/parser';
|
|
97
97
|
import { MutablePropertyView } from '@ifc-lite/mutations';
|
|
98
98
|
import { StepExporter } from '@ifc-lite/export';
|
|
@@ -125,6 +125,10 @@ function parseLocale(raw) {
|
|
|
125
125
|
return raw;
|
|
126
126
|
}
|
|
127
127
|
export async function gymCommand(args, io = {}) {
|
|
128
|
+
// The gym protocol is newline-delimited JSON on stdout in both directions,
|
|
129
|
+
// so parser/geometry console diagnostics must go to stderr before the first
|
|
130
|
+
// model load or the consumer's very first read is not JSON.
|
|
131
|
+
routeConsoleDiagnosticsToStderr();
|
|
128
132
|
const modelPath = getFlag(args, '--model');
|
|
129
133
|
const seedFlag = getFlag(args, '--seed');
|
|
130
134
|
if (!modelPath && seedFlag === undefined)
|
package/dist/commands/gym.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gym.js","sourceRoot":"","sources":["../../src/commands/gym.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"gym.js","sourceRoot":"","sources":["../../src/commands/gym.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/commands/ids.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/commands/ids.ts"],"names":[],"mappings":"AA6CA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiF9D"}
|
package/dist/commands/ids.js
CHANGED
|
@@ -10,8 +10,27 @@ import { readFile } from 'node:fs/promises';
|
|
|
10
10
|
import { createHeadlessContext } from '../loader.js';
|
|
11
11
|
import { printJson, hasFlag, getFlag, fatal } from '../output.js';
|
|
12
12
|
import { createDataAccessor } from '@ifc-lite/ids/bridge';
|
|
13
|
+
/** Flags that consume the following argument, so it is never mistaken for a
|
|
14
|
+
* positional file path. `--locale de file.ifc rules.ids` would otherwise
|
|
15
|
+
* have the naive `args.filter(a => !a.startsWith('-'))` idiom swallow `de`
|
|
16
|
+
* as `ifcPath` (see diff.ts's `VALUE_FLAGS` / mcp.ts's `MCP_VALUE_FLAGS`
|
|
17
|
+
* for the same fix applied elsewhere in this package). */
|
|
18
|
+
const VALUE_FLAGS = new Set(['--locale']);
|
|
19
|
+
function idsPositionals(args) {
|
|
20
|
+
const positional = [];
|
|
21
|
+
for (let i = 0; i < args.length; i++) {
|
|
22
|
+
const arg = args[i];
|
|
23
|
+
if (arg.startsWith('-')) {
|
|
24
|
+
if (VALUE_FLAGS.has(arg))
|
|
25
|
+
i++;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
positional.push(arg);
|
|
29
|
+
}
|
|
30
|
+
return positional;
|
|
31
|
+
}
|
|
13
32
|
export async function idsCommand(args) {
|
|
14
|
-
const positional = args
|
|
33
|
+
const positional = idsPositionals(args);
|
|
15
34
|
if (positional.length < 2)
|
|
16
35
|
fatal('Usage: ifc-lite ids <file.ifc> <rules.ids> [--json]');
|
|
17
36
|
const [ifcPath, idsPath] = positional;
|
|
@@ -44,13 +63,19 @@ export async function idsCommand(args) {
|
|
|
44
63
|
if (jsonOutput) {
|
|
45
64
|
// Keep the established machine-readable summary shape.
|
|
46
65
|
const summary = bim.ids.summarize(report);
|
|
47
|
-
|
|
66
|
+
// A ruleset declaring zero specifications evaluated nothing -- reporting
|
|
67
|
+
// that as a pass would hide an empty ruleset behind a green check (same
|
|
68
|
+
// rationale as the `error` status in delivery-checks.ts). Surface it as
|
|
69
|
+
// an explicit field, not only in prose, so a --json consumer can branch
|
|
70
|
+
// on it without parsing a message string.
|
|
71
|
+
const emptyRuleset = summary.totalSpecifications === 0;
|
|
72
|
+
printJson({ summary, report, ...(emptyRuleset ? { error: 'declares zero specifications' } : {}) });
|
|
48
73
|
// Mirror the human-readable path's exit-code contract: a CI pipeline
|
|
49
74
|
// driving this command with --json (the shape any script would pick)
|
|
50
75
|
// must see a non-zero exit on a genuine IDS failure. Without this the
|
|
51
76
|
// JSON path always exited 0 -- a validation failure printed to stdout
|
|
52
77
|
// but reported as success to the shell.
|
|
53
|
-
process.exitCode = summary.failedSpecifications > 0 ? 1 : 0;
|
|
78
|
+
process.exitCode = emptyRuleset || summary.failedSpecifications > 0 ? 1 : 0;
|
|
54
79
|
return;
|
|
55
80
|
}
|
|
56
81
|
// The validator computes its summary from full per-spec counts, so it
|
|
@@ -61,6 +86,14 @@ export async function idsCommand(args) {
|
|
|
61
86
|
process.stdout.write(` Specifications: ${summary.passedSpecifications}/${summary.totalSpecifications} passed\n`);
|
|
62
87
|
process.stdout.write(` Entities: ${summary.totalEntitiesPassed}/${summary.totalEntitiesChecked} passed\n`);
|
|
63
88
|
process.stdout.write(` Failed: ${summary.totalEntitiesFailed} entities in ${summary.failedSpecifications} specs\n`);
|
|
89
|
+
// Zero specifications means nothing was evaluated -- distinguish that
|
|
90
|
+
// from a genuine pass/fail so a caller does not have to guess which
|
|
91
|
+
// problem it is looking at (same guard as delivery-checks.ts).
|
|
92
|
+
if (summary.totalSpecifications === 0) {
|
|
93
|
+
process.stdout.write(`\n Result: ERROR (declares zero specifications)\n\n`);
|
|
94
|
+
process.exitCode = 1;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
64
97
|
const exitCode = summary.failedSpecifications > 0 ? 1 : 0;
|
|
65
98
|
process.stdout.write(`\n Result: ${exitCode === 0 ? 'PASS' : 'FAIL'}\n\n`);
|
|
66
99
|
process.exitCode = exitCode;
|
package/dist/commands/ids.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/commands/ids.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAY1D,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/commands/ids.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AA2BA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0K/D"}
|
package/dist/commands/info.js
CHANGED
|
@@ -10,6 +10,16 @@ import { loadIfcFile } from '../loader.js';
|
|
|
10
10
|
import { printJson, formatTable, hasFlag, fatal } from '../output.js';
|
|
11
11
|
import { EntityNode } from '@ifc-lite/query';
|
|
12
12
|
import { IFC_ENTITY_NAMES } from '@ifc-lite/data';
|
|
13
|
+
/**
|
|
14
|
+
* Render a census entry's class for display. The census carries the raw STEP
|
|
15
|
+
* spelling; `typeCounts` above already maps through `IFC_ENTITY_NAMES`, so
|
|
16
|
+
* without this the same class appeared twice in one report --
|
|
17
|
+
* `IfcIndexedPolygonalFace` under "Other types" and `IFCINDEXEDPOLYGONALFACE`
|
|
18
|
+
* under "Skipped classes" (#5533).
|
|
19
|
+
*/
|
|
20
|
+
function displayClass(type) {
|
|
21
|
+
return IFC_ENTITY_NAMES[type] ?? type;
|
|
22
|
+
}
|
|
13
23
|
export async function infoCommand(args) {
|
|
14
24
|
const filePath = args.find(a => !a.startsWith('-'));
|
|
15
25
|
if (!filePath)
|
|
@@ -18,6 +28,7 @@ export async function infoCommand(args) {
|
|
|
18
28
|
const store = await loadIfcFile(filePath);
|
|
19
29
|
// Collect type counts
|
|
20
30
|
const typeCounts = {};
|
|
31
|
+
// @raw-entity-enumeration-ok infoCommand reports a freshly loaded file, not a live session
|
|
21
32
|
for (const [typeName, ids] of store.entityIndex.byType) {
|
|
22
33
|
if (ids.length > 0) {
|
|
23
34
|
// Convert UPPERCASE STEP type name to PascalCase for display
|
|
@@ -26,6 +37,7 @@ export async function infoCommand(args) {
|
|
|
26
37
|
}
|
|
27
38
|
}
|
|
28
39
|
// Collect storeys
|
|
40
|
+
// @raw-entity-enumeration-ok the same file-only info command has no mutation view
|
|
29
41
|
const storeyIds = store.entityIndex.byType.get('IFCBUILDINGSTOREY') ?? [];
|
|
30
42
|
const storeys = storeyIds.map(id => {
|
|
31
43
|
const node = new EntityNode(store, id);
|
|
@@ -41,16 +53,19 @@ export async function infoCommand(args) {
|
|
|
41
53
|
totalScanned: dropCensus.totalScanned,
|
|
42
54
|
totalRetained: dropCensus.totalRetained,
|
|
43
55
|
totalSkipped: dropCensus.totalSkipped,
|
|
44
|
-
skippedClasses: dropCensus.skippedClasses.map((c) => ({ type: c.type, scanned: c.scanned, knownInSchema: c.knownInSchema })),
|
|
56
|
+
skippedClasses: dropCensus.skippedClasses.map((c) => ({ type: displayClass(c.type), scanned: c.scanned, knownInSchema: c.knownInSchema })),
|
|
45
57
|
// Split so a JSON consumer doesn't have to re-derive "is this a real
|
|
46
58
|
// regression or universal geometry noise" itself — see
|
|
47
59
|
// ClassCensusEntry.isRootDescendant in @ifc-lite/parser's drop-census.ts.
|
|
48
|
-
expectedSkippedClasses: dropCensus.expectedSkippedClasses.map((c) => ({ type: c.type, scanned: c.scanned, knownInSchema: c.knownInSchema })),
|
|
49
|
-
unexpectedSkippedClasses: dropCensus.unexpectedSkippedClasses.map((c) => ({ type: c.type, scanned: c.scanned, knownInSchema: c.knownInSchema })),
|
|
50
|
-
|
|
60
|
+
expectedSkippedClasses: dropCensus.expectedSkippedClasses.map((c) => ({ type: displayClass(c.type), scanned: c.scanned, knownInSchema: c.knownInSchema })),
|
|
61
|
+
unexpectedSkippedClasses: dropCensus.unexpectedSkippedClasses.map((c) => ({ type: displayClass(c.type), scanned: c.scanned, knownInSchema: c.knownInSchema })),
|
|
62
|
+
// Unknown classes are by definition absent from the schema table, so
|
|
63
|
+
// `displayClass` returns them unchanged; mapped anyway so a class that
|
|
64
|
+
// later becomes known is rendered like every other one.
|
|
65
|
+
unknownClasses: dropCensus.unknownClasses.map((c) => ({ type: displayClass(c.type), scanned: c.scanned })),
|
|
51
66
|
relClassesSeen: dropCensus.relClassesSeen,
|
|
52
67
|
relClassesIndexed: dropCensus.relClassesIndexed,
|
|
53
|
-
unindexedRelClasses: dropCensus.unindexedRelClasses.map((c) => ({ type: c.type, scanned: c.scanned })),
|
|
68
|
+
unindexedRelClasses: dropCensus.unindexedRelClasses.map((c) => ({ type: displayClass(c.type), scanned: c.scanned })),
|
|
54
69
|
}
|
|
55
70
|
: { ran: false };
|
|
56
71
|
const summary = {
|