@ifc-lite/cli 0.38.1 → 0.39.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/README.md +2 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +4 -4
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/flow-ai.d.ts +20 -0
- package/dist/commands/flow-ai.d.ts.map +1 -0
- package/dist/commands/flow-ai.js +35 -0
- package/dist/commands/flow-ai.js.map +1 -0
- package/dist/commands/flow-host.d.ts +2 -1
- package/dist/commands/flow-host.d.ts.map +1 -1
- package/dist/commands/flow-host.js +7 -1
- package/dist/commands/flow-host.js.map +1 -1
- package/dist/commands/flow-review.d.ts +28 -0
- package/dist/commands/flow-review.d.ts.map +1 -0
- package/dist/commands/flow-review.js +154 -0
- package/dist/commands/flow-review.js.map +1 -0
- package/dist/commands/flow-tracking.d.ts +4 -0
- package/dist/commands/flow-tracking.d.ts.map +1 -1
- package/dist/commands/flow-tracking.js +25 -4
- package/dist/commands/flow-tracking.js.map +1 -1
- package/dist/commands/flow.d.ts.map +1 -1
- package/dist/commands/flow.js +126 -25
- package/dist/commands/flow.js.map +1 -1
- package/dist/commands/ids-audit-lint.d.ts +3 -0
- package/dist/commands/ids-audit-lint.d.ts.map +1 -0
- package/dist/commands/ids-audit-lint.js +129 -0
- package/dist/commands/ids-audit-lint.js.map +1 -0
- package/dist/commands/ids-diff.d.ts +2 -0
- package/dist/commands/ids-diff.d.ts.map +1 -0
- package/dist/commands/ids-diff.js +61 -0
- package/dist/commands/ids-diff.js.map +1 -0
- package/dist/commands/ids-explain.d.ts +2 -0
- package/dist/commands/ids-explain.d.ts.map +1 -0
- package/dist/commands/ids-explain.js +53 -0
- package/dist/commands/ids-explain.js.map +1 -0
- package/dist/commands/ids-fmt.d.ts +2 -0
- package/dist/commands/ids-fmt.d.ts.map +1 -0
- package/dist/commands/ids-fmt.js +54 -0
- package/dist/commands/ids-fmt.js.map +1 -0
- package/dist/commands/ids-subcommand.d.ts +31 -0
- package/dist/commands/ids-subcommand.d.ts.map +1 -0
- package/dist/commands/ids-subcommand.js +101 -0
- package/dist/commands/ids-subcommand.js.map +1 -0
- package/dist/commands/ids.d.ts.map +1 -1
- package/dist/commands/ids.js +25 -2
- package/dist/commands/ids.js.map +1 -1
- package/dist/commands/info.js +11 -11
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/semantic-file.d.ts +2 -0
- package/dist/commands/semantic-file.d.ts.map +1 -0
- package/dist/commands/semantic-file.js +24 -0
- package/dist/commands/semantic-file.js.map +1 -0
- package/dist/commands/semantic-serve.d.ts +2 -0
- package/dist/commands/semantic-serve.d.ts.map +1 -0
- package/dist/commands/semantic-serve.js +48 -0
- package/dist/commands/semantic-serve.js.map +1 -0
- package/dist/commands/semantic.d.ts +3 -0
- package/dist/commands/semantic.d.ts.map +1 -0
- package/dist/commands/semantic.js +130 -0
- package/dist/commands/semantic.js.map +1 -0
- package/dist/geometry-report.d.ts.map +1 -1
- package/dist/geometry-report.js +2 -1
- package/dist/geometry-report.js.map +1 -1
- package/dist/headless-backend-store-authoring.d.ts +4 -4
- package/dist/headless-backend-store-authoring.d.ts.map +1 -1
- package/dist/headless-backend-store-authoring.js +7 -5
- package/dist/headless-backend-store-authoring.js.map +1 -1
- package/dist/headless-backend.d.ts.map +1 -1
- package/dist/headless-backend.js +1 -57
- package/dist/headless-backend.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +13 -2
- package/dist/help.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/out-flag-commands.js +1 -1
- package/dist/out-flag-commands.js.map +1 -1
- package/dist/output.d.ts +11 -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 +26 -23
package/dist/commands/flow.js
CHANGED
|
@@ -8,10 +8,17 @@
|
|
|
8
8
|
* flow run <graph.flow.json> <model.ifc> [--input k=v]... [--out F] [--tracking F|--no-tracking] [--json]
|
|
9
9
|
* flow describe <graph.flow.json> [--json] inputs/outputs schema (the Hops `/io`)
|
|
10
10
|
* flow validate <graph.flow.json> [--json] document + node availability report
|
|
11
|
+
* flow review <checkpoint.json> [--approve D | --reject] review a paused run (see `flow-review.ts`)
|
|
12
|
+
* flow resume <graph.flow.json> <model.ifc> --checkpoint F resume a reviewed run
|
|
13
|
+
*
|
|
14
|
+
* AI nodes (`@ifc-lite/flow-nodes/ai`) run only when the environment names a
|
|
15
|
+
* provider (`flow-ai.ts`), spend one root budget per run (`--ai-max-requests`,
|
|
16
|
+
* `--ai-max-output-tokens`), and pause the run for review: `run` then needs
|
|
17
|
+
* `--checkpoint F` and exits 3.
|
|
11
18
|
*
|
|
12
19
|
* The CLI is a trusted caller running a local file, so no capability grants
|
|
13
20
|
* are applied to model/viewer/export capabilities; the graph's declared
|
|
14
|
-
* `capabilities` are still reported. `network.fetch:<host>` and
|
|
21
|
+
* `capabilities` are still reported. `network.ai`, `network.fetch:<host>` and
|
|
15
22
|
* `secret.read:<NAME>` are the exception: they are ALWAYS checked against
|
|
16
23
|
* the graph's own declared capabilities regardless of trust level (see
|
|
17
24
|
* `FlowHost.networkGrants`'s doc comment in `@ifc-lite/flow-nodes`) — a
|
|
@@ -34,14 +41,36 @@
|
|
|
34
41
|
*/
|
|
35
42
|
import { createHash } from 'node:crypto';
|
|
36
43
|
import { readFile, stat, writeFile } from 'node:fs/promises';
|
|
37
|
-
import { checkAvailability, declaredInputKeys, describeFlowIO, parseFlowDocument, resolveDeclaredParam, runFlow, validateFlowWiring
|
|
44
|
+
import { checkAvailability, declaredInputKeys, describeFlowIO, parseFlowDocument, resolveDeclaredParam, runFlow, validateFlowWiring } from '@ifc-lite/flow';
|
|
45
|
+
import { resumeOutputs } from '@ifc-lite/flow/checkpoint';
|
|
38
46
|
import { parseCapabilities } from '@ifc-lite/extensions';
|
|
39
47
|
import { buildRedactionMap, createStandardRegistry, headlessFeatures, interpolateSecrets, redactDeep, resolveSecretValues, usableSecretNames, validateSecretReferences, } from '@ifc-lite/flow-nodes';
|
|
48
|
+
import { aiNodes, AI_FEATURE, FLOW_AI_BUDGET } from '@ifc-lite/flow-nodes/ai';
|
|
49
|
+
import { createRootBudget, restoreRootBudget } from '@ifc-lite/ai';
|
|
40
50
|
import { createHeadlessContext } from '../loader.js';
|
|
51
|
+
import { createCliAiService } from './flow-ai.js';
|
|
52
|
+
import { flowAiConfig } from '@ifc-lite/ai/chat-completions';
|
|
53
|
+
import { sourceDigestOf } from '@ifc-lite/flow/checkpoint-file';
|
|
54
|
+
import { checkDistinctDestinations, checkPauseDestination, checkpointNodes, claimForResume, failResume, finishResume, PAUSED_FOR_REVIEW, preparePause, reportPause, reviewCommand, savePause } from './flow-review.js';
|
|
41
55
|
import { createCliFlowSession } from './flow-host.js';
|
|
42
56
|
import { fatal, getAllFlags, hasFlag, printJson } from '../output.js';
|
|
43
57
|
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]';
|
|
58
|
+
const USAGE = 'Usage: ifc-lite flow <run|resume|describe|validate|review> <graph.flow.json> [<model.ifc>] [--input k=v]... [--out F] [--tracking F | --no-tracking] [--checkpoint F] [--json]';
|
|
59
|
+
/** The standard nodes plus the AI nodes, so an AI graph reports what it lacks instead of an unknown type. */
|
|
60
|
+
function cliRegistry() {
|
|
61
|
+
return createStandardRegistry().registerAll(aiNodes);
|
|
62
|
+
}
|
|
63
|
+
function cliFeatures() {
|
|
64
|
+
const features = headlessFeatures(usableSecretNames(process.env));
|
|
65
|
+
return flowAiConfig(process.env) ? { ...features, backend: new Set([...features.backend, AI_FEATURE]) } : features;
|
|
66
|
+
}
|
|
67
|
+
function budgetLimit(args, flag, fallback) {
|
|
68
|
+
const raw = requireFlagValue(args, flag);
|
|
69
|
+
const value = raw === undefined ? fallback : Number(raw);
|
|
70
|
+
if (!Number.isSafeInteger(value) || value < 1)
|
|
71
|
+
fatal(`${flag} must be a positive whole number`);
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
45
74
|
async function loadDocument(path) {
|
|
46
75
|
if (!path)
|
|
47
76
|
fatal(USAGE);
|
|
@@ -59,7 +88,7 @@ async function loadDocument(path) {
|
|
|
59
88
|
fatal(err.message);
|
|
60
89
|
}
|
|
61
90
|
}
|
|
62
|
-
const VALUE_FLAGS = new Set(['--input', '--out', '--tracking']);
|
|
91
|
+
const VALUE_FLAGS = new Set(['--input', '--out', '--tracking', '--checkpoint', '--next-checkpoint', '--approve', '--ai-max-requests', '--ai-max-output-tokens']);
|
|
63
92
|
/** Arguments that are neither flags nor the value of a value-taking flag. */
|
|
64
93
|
function positionalArgs(args) {
|
|
65
94
|
const out = [];
|
|
@@ -132,7 +161,9 @@ export async function flowCommand(args) {
|
|
|
132
161
|
const sub = args[0];
|
|
133
162
|
const positional = positionalArgs(args.slice(1));
|
|
134
163
|
const json = hasFlag(args, '--json');
|
|
135
|
-
const registry =
|
|
164
|
+
const registry = cliRegistry();
|
|
165
|
+
if (sub === 'review')
|
|
166
|
+
return reviewCommand(args, positional[0], json, requireFlagValue(args, '--approve'));
|
|
136
167
|
if (sub === 'describe') {
|
|
137
168
|
const doc = await loadDocument(positional[0]);
|
|
138
169
|
const info = describeFlowIO(doc, registry);
|
|
@@ -155,7 +186,7 @@ export async function flowCommand(args) {
|
|
|
155
186
|
// output naming a port no node has would otherwise validate clean and
|
|
156
187
|
// then produce nothing at run time.
|
|
157
188
|
const wiring = validateFlowWiring(doc, registry);
|
|
158
|
-
const availability = checkAvailability(doc, registry,
|
|
189
|
+
const availability = checkAvailability(doc, registry, cliFeatures());
|
|
159
190
|
const problems = availability.filter((a) => a.status === 'unavailable' || a.status === 'unknown');
|
|
160
191
|
// The report goes out in either format FIRST, then the exit code — a
|
|
161
192
|
// `--json` run that printed `ok: false` and returned 0 let CI read an
|
|
@@ -177,12 +208,20 @@ export async function flowCommand(args) {
|
|
|
177
208
|
}
|
|
178
209
|
return;
|
|
179
210
|
}
|
|
180
|
-
if (sub !== 'run')
|
|
211
|
+
if (sub !== 'run' && sub !== 'resume')
|
|
181
212
|
fatal(USAGE);
|
|
182
213
|
const [graphPath, modelPath] = positional;
|
|
183
214
|
if (!modelPath)
|
|
184
215
|
fatal(USAGE);
|
|
185
216
|
const doc = await loadDocument(graphPath);
|
|
217
|
+
const checkpointPath = requireFlagValue(args, '--checkpoint');
|
|
218
|
+
// Refuse malformed arguments before consuming a reviewed checkpoint.
|
|
219
|
+
const out = requireFlagValue(args, '--out');
|
|
220
|
+
const trackingPath = requireFlagValue(args, '--tracking') ?? defaultTrackingPath(graphPath);
|
|
221
|
+
const requestedBudget = { maxRequests: budgetLimit(args, '--ai-max-requests', FLOW_AI_BUDGET.maxRequests),
|
|
222
|
+
maxOutputTokens: budgetLimit(args, '--ai-max-output-tokens', FLOW_AI_BUDGET.maxOutputTokens) };
|
|
223
|
+
if (sub === 'resume' && !checkpointPath)
|
|
224
|
+
fatal('flow resume needs --checkpoint <file>');
|
|
186
225
|
// Capabilities first: `declaredSecrets` reads the all-or-nothing parse, so
|
|
187
226
|
// with one malformed capability every secret would be reported undeclared
|
|
188
227
|
// instead of the malformed capability itself (#5446 review).
|
|
@@ -198,46 +237,104 @@ export async function flowCommand(args) {
|
|
|
198
237
|
process.stderr.write(` error secrets: ${e.message}\n`);
|
|
199
238
|
fatal(`${secretErrors.length} secret reference problem(s); see above`);
|
|
200
239
|
}
|
|
240
|
+
const inputs = parseInputs(getAllFlags(args, '--input'), doc, registry);
|
|
241
|
+
// A resume's restored nodes are not executed again, so they need no host
|
|
242
|
+
// service: replaying a reviewed AI proposal needs no provider.
|
|
243
|
+
const restored = new Set(sub === 'resume' ? await checkpointNodes(checkpointPath) : []);
|
|
244
|
+
const unavailable = checkAvailability(doc, registry, cliFeatures())
|
|
245
|
+
.filter((node) => !restored.has(node.nodeId) && (node.status === 'unknown' || node.status === 'unavailable'));
|
|
246
|
+
if (unavailable.length)
|
|
247
|
+
fatal(`Flow cannot run on this host: ${unavailable.map((node) => `${node.nodeId}: ${node.reasons.join('; ')}`).join(' | ')}`);
|
|
248
|
+
const reviewsAhead = doc.nodes.some((n) => registry.get(n.type)?.review && !restored.has(n.id));
|
|
249
|
+
const nextCheckpoint = sub === 'resume' ? requireFlagValue(args, '--next-checkpoint') : checkpointPath;
|
|
250
|
+
if (reviewsAhead && !nextCheckpoint) {
|
|
251
|
+
fatal(sub === 'resume' ? 'this graph pauses for review again after the checkpoint; pass --next-checkpoint <file>' : 'this graph pauses for review; pass --checkpoint <file> to save the proposal');
|
|
252
|
+
}
|
|
253
|
+
if (reviewsAhead && nextCheckpoint) {
|
|
254
|
+
try {
|
|
255
|
+
await checkPauseDestination(nextCheckpoint);
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
fatal(error.message);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
const destinations = [checkpointPath, sub === 'resume' ? nextCheckpoint : undefined, out, hasFlag(args, '--no-tracking') ? undefined : trackingPath].filter((path) => path !== undefined);
|
|
262
|
+
try {
|
|
263
|
+
await checkDistinctDestinations(destinations);
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
fatal(error.message);
|
|
267
|
+
}
|
|
201
268
|
const secretValues = resolveSecretValues(doc, process.env);
|
|
202
269
|
const redaction = buildRedactionMap(secretValues);
|
|
203
270
|
const runDoc = interpolateSecrets(doc, secretValues);
|
|
204
|
-
|
|
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;
|
|
271
|
+
const modelBytes = await readFile(modelPath);
|
|
208
272
|
let tracking;
|
|
209
|
-
const trackingPath = requireFlagValue(args, '--tracking') ?? defaultTrackingPath(graphPath);
|
|
210
273
|
// An existing sidecar is opened even when no node is tracked any more:
|
|
211
274
|
// that is how a set whose node was deleted gets removed from the model.
|
|
212
275
|
const wantsTracking = doc.nodes.some((n) => registry.get(n.type)?.tracked) || (await stat(trackingPath).then(() => true, () => false));
|
|
213
276
|
if (!hasFlag(args, '--no-tracking') && wantsTracking) {
|
|
214
|
-
const pin = `file:${createHash('sha256').update(
|
|
277
|
+
const pin = `file:${createHash('sha256').update(modelBytes).digest('hex')}`;
|
|
215
278
|
tracking = await FileTrackingStore.open(trackingPath, pin);
|
|
216
279
|
if (tracking.loadedPin !== undefined && tracking.loadedPin !== pin) {
|
|
217
280
|
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
281
|
}
|
|
219
282
|
}
|
|
283
|
+
// Bind approval to the exact execution graph, including resolved secret parameters.
|
|
284
|
+
const aiAhead = doc.nodes.some(n => !restored.has(n.id) && registry.get(n.type)?.requires?.backend?.includes(AI_FEATURE));
|
|
285
|
+
const resume = sub === 'resume' ? await claimForResume(checkpointPath, runDoc, inputs, sourceDigestOf(modelBytes, tracking?.fingerprint()), registry, aiAhead) : undefined;
|
|
286
|
+
// The host follows the model the graph works on: `model.openFromSource`
|
|
287
|
+
// can replace the command-line model mid-run (see `flow-host.ts`).
|
|
288
|
+
const aiConfig = flowAiConfig(process.env);
|
|
289
|
+
const budget = restoreRootBudget(resume?.checkpoint.budget) ?? createRootBudget(requestedBudget);
|
|
290
|
+
const initialModel = await createHeadlessContext(modelPath);
|
|
291
|
+
const session = createCliFlowSession(initialModel, capsResult.value, aiConfig ? createCliAiService(aiConfig, budget) : undefined);
|
|
292
|
+
const host = session.host;
|
|
220
293
|
const result = await runFlow(runDoc, {
|
|
221
294
|
host,
|
|
222
295
|
registry,
|
|
223
296
|
// `--input` overrides are NOT scanned for `{{secret:NAME}}` — a secret
|
|
224
297
|
// must be authored into the graph's own node params, not passed at the
|
|
225
298
|
// command line, where it would land in shell history / process args.
|
|
226
|
-
inputs
|
|
227
|
-
features:
|
|
299
|
+
inputs,
|
|
300
|
+
features: cliFeatures(),
|
|
301
|
+
...(resume ? { resume: resumeOutputs(resume.checkpoint) } : {}),
|
|
228
302
|
modelRevisions: { [host.defaultModelId ?? 'model']: 0 },
|
|
229
303
|
tracking,
|
|
230
304
|
});
|
|
231
|
-
const
|
|
232
|
-
|
|
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');
|
|
305
|
+
const paused = result.ok && result.review.length > 0;
|
|
306
|
+
const activeModelChanged = session.active() !== initialModel;
|
|
236
307
|
const wrote = out !== undefined && result.ok;
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
308
|
+
let trackingWritten = false;
|
|
309
|
+
let pause;
|
|
310
|
+
try {
|
|
311
|
+
if (paused && activeModelChanged && out === undefined)
|
|
312
|
+
throw new Error('the run opened a different model before pausing for review; pass --out so the resume starts from that model');
|
|
313
|
+
if (paused && result.writes > 0 && out === undefined)
|
|
314
|
+
throw new Error('the run wrote to the model before pausing for review; pass --out so the resume can start from that model');
|
|
315
|
+
if (paused && !nextCheckpoint)
|
|
316
|
+
throw new Error(`the run paused for review at ${result.review.join(', ')} with no checkpoint file to save it to`);
|
|
317
|
+
let written;
|
|
318
|
+
if (wrote) {
|
|
319
|
+
const { bim, store } = session.active();
|
|
320
|
+
const content = bim.export.ifc(null, { schema: store.schemaVersion ?? 'IFC4', includeMutations: true });
|
|
321
|
+
written = typeof content === 'string' ? content : Buffer.from(content);
|
|
322
|
+
}
|
|
323
|
+
// Refuse secrets in every restored output before either durable side effect.
|
|
324
|
+
const proposal = paused ? preparePause({ registry, doc: runDoc, result, inputs, sourceDigest: sourceDigestOf(written ?? modelBytes, tracking?.fingerprint()), budget: { ...budget } }, redaction) : undefined;
|
|
325
|
+
if (written !== undefined)
|
|
326
|
+
await writeFile(out, written);
|
|
327
|
+
trackingWritten = tracking ? await tracking.flush() : false;
|
|
328
|
+
if (proposal)
|
|
329
|
+
pause = await savePause(nextCheckpoint, proposal);
|
|
330
|
+
if (resume)
|
|
331
|
+
await finishResume(resume, result);
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
const message = redactDeep(error.message, redaction);
|
|
335
|
+
if (resume)
|
|
336
|
+
await failResume(resume, message);
|
|
337
|
+
fatal(message);
|
|
241
338
|
}
|
|
242
339
|
// Redaction runs at the OUTER boundary, right before anything leaves this
|
|
243
340
|
// process — on the whole summary object (`--json` output included), not
|
|
@@ -246,8 +343,10 @@ export async function flowCommand(args) {
|
|
|
246
343
|
// caught here too, not only at the point it was substituted in.
|
|
247
344
|
const summary = redactDeep(summarize(result), redaction);
|
|
248
345
|
if (json)
|
|
249
|
-
printJson({ ...summary, out: wrote ? out : null, tracking: trackingWritten ? tracking.path : null });
|
|
346
|
+
printJson({ ...summary, out: wrote ? out : null, tracking: trackingWritten ? tracking.path : null, ...(pause ? { checkpoint: { path: nextCheckpoint, id: pause.id, proposalDigest: pause.proposalDigest } } : {}) });
|
|
250
347
|
else {
|
|
348
|
+
if (pause)
|
|
349
|
+
reportPause(pause, nextCheckpoint);
|
|
251
350
|
process.stdout.write(`${result.ok ? 'ok' : 'FAILED'}: ${Object.entries(summary.nodes).map(([k, v]) => `${v} ${k}`).join(', ')}\n`);
|
|
252
351
|
// `summary` was already redacted (deep) above; `redactDeep` walks Maps
|
|
253
352
|
// too, so `o.data` here never carries a raw secret value.
|
|
@@ -269,5 +368,7 @@ export async function flowCommand(args) {
|
|
|
269
368
|
}
|
|
270
369
|
if (!result.ok)
|
|
271
370
|
process.exit(1);
|
|
371
|
+
if (pause)
|
|
372
|
+
process.exit(PAUSED_FOR_REVIEW);
|
|
272
373
|
}
|
|
273
374
|
//# sourceMappingURL=flow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,EACP,kBAAkB,GAGnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,KAAK,GAAG,iJAAiJ,CAAC;AAEhK,KAAK,UAAU,YAAY,CAAC,IAAwB;IAClD,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,eAAe,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC;QACH,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAEhE,6EAA6E;AAC7E,SAAS,cAAc,CAAC,IAAc;IACpC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,IAAI,CAAC,CAAC;aAChC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAc,EAAE,IAAY;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,GAAG,IAAI,gBAAgB,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,IAAc,EAAE,GAAiB,EAAE,QAAmD;IACzG,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC;YAAE,KAAK,CAAC,4CAA4C,GAAG,GAAG,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACrC,KAAK,CAAC,YAAY,GAAG,uBAAuB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrH,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,MAAiB;IAClC,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO;QAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzG,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;QACrD,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;QACtD,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAE1C,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,IAAI;YAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,eAAe,CAAC,CAAC;QACjG,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACrK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC;QACvH,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,oEAAoE;QACpE,sEAAsE;QACtE,oCAAoC;QACpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxG,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAClG,qEAAqE;QACrE,sEAAsE;QACtE,+CAA+C;QAC/C,IAAI,IAAI;YAAE,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;aAClG,CAAC;YACJ,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YACxF,KAAK,MAAM,CAAC,IAAI,YAAY;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACjK,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,sBAAsB,CAAC,CAAC;YACpF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,oCAAoC,CAAC,CAAC;YACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,KAAK;QAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC;IAC1C,IAAI,CAAC,SAAS;QAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAE1C,2EAA2E;IAC3E,0EAA0E;IAC1E,6DAA6D;IAC7D,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,8CAA8C,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE9H,uEAAuE;IACvE,yEAAyE;IACzE,0DAA0D;IAC1D,MAAM,YAAY,GAAG,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAChE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,YAAY;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QACtF,KAAK,CAAC,GAAG,YAAY,CAAC,MAAM,yCAAyC,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAErD,wEAAwE;IACxE,mEAAmE;IACnE,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,qBAAqB,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,QAAuC,CAAC;IAC5C,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC5F,uEAAuE;IACvE,wEAAwE;IACxE,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACvI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,aAAa,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,QAAQ,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3F,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;YACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,QAAQ,CAAC,IAAI,kGAAkG,CAAC,CAAC;QACpK,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE;QACnC,IAAI;QACJ,QAAQ;QACR,uEAAuE;QACvE,uEAAuE;QACvE,qEAAqE;QACrE,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC;QAChE,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1D,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE;QACvD,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAElE,uEAAuE;IACvE,wEAAwE;IACxE,qDAAqD;IACrD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;IAC7C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAG,KAAK,CAAC,aAA0D,IAAI,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACtJ,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,0EAA0E;IAC1E,wEAAwE;IACxE,qEAAqE;IACrE,sEAAsE;IACtE,gEAAgE;IAChE,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;IACzD,IAAI,IAAI;QAAE,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAC3G,CAAC;QACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnI,uEAAuE;QACvE,0DAA0D;QAC1D,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9J,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QAChI,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QAClI,IAAI,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG;CACjD,CAAC,CAAC;aACM,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,GAAG;CAC5F,CAAC,CAAC;QACC,IAAI,eAAe;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,QAAS,CAAC,IAAI;CACzE,CAAC,CAAC;IACD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-audit-lint.d.ts","sourceRoot":"","sources":["../../src/commands/ids-audit-lint.ts"],"names":[],"mappings":"AA+CA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBnE;AA4DD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqClE"}
|
|
@@ -0,0 +1,129 @@
|
|
|
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 ids audit <rules.ids> [--json]
|
|
6
|
+
* ifc-lite ids lint <rules.ids> [--json] [--rules C,…] [--severity C=level,…] [--fail-on error|warning|info|never]
|
|
7
|
+
*
|
|
8
|
+
* `audit` answers "is this a valid IDS 1.0 file?" (`@ifc-lite/ids`
|
|
9
|
+
* `auditIDSDocument`). `lint` answers "does it mean what the author
|
|
10
|
+
* intends?" (`@ifc-lite/ids-authoring`'s rule catalogue, the same engine
|
|
11
|
+
* the Studio runs). Exit codes: see `ids-subcommand.ts`.
|
|
12
|
+
*/
|
|
13
|
+
import { auditIDSDocument } from '@ifc-lite/ids';
|
|
14
|
+
import { createLintContext, lintDocument, LINT_RULES, nodePath, studioDocumentFromIds, } from '@ifc-lite/ids-authoring';
|
|
15
|
+
import { printJson } from '../output.js';
|
|
16
|
+
import { countLine, EXIT_CLEAN, EXIT_FINDINGS, IdsUsageError, positionals, readIds, readText, rejectUnknownFlags, runIdsSubcommand, tally, } from './ids-subcommand.js';
|
|
17
|
+
const AUDIT_FLAGS = new Set(['--json']);
|
|
18
|
+
function auditLine(issue) {
|
|
19
|
+
const path = issue.path || '(document)';
|
|
20
|
+
const where = issue.line !== undefined ? `${path} (line ${issue.line})` : path;
|
|
21
|
+
return ` ${issue.severity.padEnd(8)}${issue.code.padEnd(36)}${where}\n ${issue.message}\n`;
|
|
22
|
+
}
|
|
23
|
+
export async function idsAuditCommand(args) {
|
|
24
|
+
await runIdsSubcommand(async () => {
|
|
25
|
+
rejectUnknownFlags(args, AUDIT_FLAGS, new Set());
|
|
26
|
+
const [file, extra] = positionals(args, new Set());
|
|
27
|
+
if (!file || extra)
|
|
28
|
+
throw new IdsUsageError('usage: ifc-lite ids audit <rules.ids> [--json]');
|
|
29
|
+
const report = await auditIDSDocument(await readText(file));
|
|
30
|
+
const counts = tally(report.issues);
|
|
31
|
+
const exit = counts.error > 0 ? EXIT_FINDINGS : EXIT_CLEAN;
|
|
32
|
+
if (args.includes('--json')) {
|
|
33
|
+
printJson({ file, status: report.status, counts, issues: report.issues });
|
|
34
|
+
return exit;
|
|
35
|
+
}
|
|
36
|
+
process.stdout.write(`\n IDS audit: ${file}\n\n`);
|
|
37
|
+
for (const issue of report.issues)
|
|
38
|
+
process.stdout.write(auditLine(issue));
|
|
39
|
+
if (report.issues.length > 0)
|
|
40
|
+
process.stdout.write('\n');
|
|
41
|
+
process.stdout.write(` ${countLine(counts)}\n Result: ${exit === EXIT_CLEAN ? 'PASS' : 'FAIL'}\n\n`);
|
|
42
|
+
return exit;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const LINT_FLAGS = new Set(['--json']);
|
|
46
|
+
const LINT_VALUE_FLAGS = new Set(['--rules', '--severity', '--fail-on', '--model']);
|
|
47
|
+
const SEVERITIES = ['error', 'warning', 'info'];
|
|
48
|
+
const RANK = { error: 0, warning: 1, info: 2 };
|
|
49
|
+
function knownCode(code) {
|
|
50
|
+
if (!LINT_RULES.some((r) => r.code === code))
|
|
51
|
+
throw new IdsUsageError(`unknown lint rule ${code}`);
|
|
52
|
+
return code;
|
|
53
|
+
}
|
|
54
|
+
/** `--severity IDSL-ENT-002=error,IDSL-SPEC-008=off` */
|
|
55
|
+
function parseSeverity(raw) {
|
|
56
|
+
if (raw === undefined)
|
|
57
|
+
return undefined;
|
|
58
|
+
const out = {};
|
|
59
|
+
for (const part of raw.split(',')) {
|
|
60
|
+
const [code, level] = part.split('=');
|
|
61
|
+
if (!level || !(level === 'off' || SEVERITIES.includes(level))) {
|
|
62
|
+
throw new IdsUsageError(`--severity expects CODE=error|warning|info|off, got "${part}"`);
|
|
63
|
+
}
|
|
64
|
+
out[knownCode(code)] = level;
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
function parseFailOn(raw) {
|
|
69
|
+
if (raw === undefined)
|
|
70
|
+
return 'error';
|
|
71
|
+
if (raw === 'never' || SEVERITIES.includes(raw))
|
|
72
|
+
return raw;
|
|
73
|
+
throw new IdsUsageError(`--fail-on expects error|warning|info|never, got "${raw}"`);
|
|
74
|
+
}
|
|
75
|
+
function flagValue(args, flag) {
|
|
76
|
+
const i = args.indexOf(flag);
|
|
77
|
+
return i === -1 ? undefined : args[i + 1];
|
|
78
|
+
}
|
|
79
|
+
function toRow(doc, d) {
|
|
80
|
+
const specIndex = d.specId ? doc.nodes.specs.findIndex((s) => s.id === d.specId) : -1;
|
|
81
|
+
return {
|
|
82
|
+
code: d.code,
|
|
83
|
+
severity: d.severity,
|
|
84
|
+
path: nodePath(doc, d.nodeId) ?? d.nodeId,
|
|
85
|
+
...(specIndex >= 0 ? { spec: doc.ids.specifications[specIndex].name } : {}),
|
|
86
|
+
message: d.message,
|
|
87
|
+
fixable: (d.fixes?.length ?? 0) > 0,
|
|
88
|
+
docsUrl: d.docsUrl,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export async function idsLintCommand(args) {
|
|
92
|
+
await runIdsSubcommand(async () => {
|
|
93
|
+
rejectUnknownFlags(args, LINT_FLAGS, LINT_VALUE_FLAGS);
|
|
94
|
+
if (args.includes('--model')) {
|
|
95
|
+
throw new IdsUsageError('model-aware lint (--model) is not available in this build; it ships with the IDS model loop');
|
|
96
|
+
}
|
|
97
|
+
const [file, extra] = positionals(args, LINT_VALUE_FLAGS);
|
|
98
|
+
if (!file || extra)
|
|
99
|
+
throw new IdsUsageError('usage: ifc-lite ids lint <rules.ids> [--json] [--rules C,…] [--severity C=level,…] [--fail-on level]');
|
|
100
|
+
const rulesFlag = flagValue(args, '--rules');
|
|
101
|
+
const rules = rulesFlag?.split(',').map(knownCode);
|
|
102
|
+
const severity = parseSeverity(flagValue(args, '--severity'));
|
|
103
|
+
const failOn = parseFailOn(flagValue(args, '--fail-on'));
|
|
104
|
+
const doc = studioDocumentFromIds(await readIds(file));
|
|
105
|
+
const result = lintDocument(doc, await createLintContext(), { rules, severity });
|
|
106
|
+
const rows = result.diagnostics
|
|
107
|
+
.map((d) => toRow(doc, d))
|
|
108
|
+
.sort((a, b) => RANK[a.severity] - RANK[b.severity] || a.path.localeCompare(b.path) || a.code.localeCompare(b.code));
|
|
109
|
+
const counts = tally(rows);
|
|
110
|
+
const failing = failOn === 'never' ? false : rows.some((r) => RANK[r.severity] <= RANK[failOn]);
|
|
111
|
+
const exit = failing ? EXIT_FINDINGS : EXIT_CLEAN;
|
|
112
|
+
if (args.includes('--json')) {
|
|
113
|
+
printJson({ file, counts, suppressed: result.suppressed.length, diagnostics: rows });
|
|
114
|
+
return exit;
|
|
115
|
+
}
|
|
116
|
+
process.stdout.write(`\n IDS lint: ${file}\n\n`);
|
|
117
|
+
for (const r of rows) {
|
|
118
|
+
const spec = r.spec !== undefined ? ` "${r.spec}"` : '';
|
|
119
|
+
process.stdout.write(` ${r.severity.padEnd(8)}${r.code.padEnd(15)}${r.path}${spec}\n ${r.message}${r.fixable ? ' [fix available]' : ''}\n`);
|
|
120
|
+
}
|
|
121
|
+
if (rows.length > 0)
|
|
122
|
+
process.stdout.write('\n');
|
|
123
|
+
const fixable = rows.filter((r) => r.fixable).length;
|
|
124
|
+
const suppressed = result.suppressed.length > 0 ? `, ${result.suppressed.length} suppressed` : '';
|
|
125
|
+
process.stdout.write(` ${countLine(counts)} (${fixable} fixable${suppressed})\n Result: ${exit === EXIT_CLEAN ? 'PASS' : 'FAIL'}\n\n`);
|
|
126
|
+
return exit;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=ids-audit-lint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-audit-lint.js","sourceRoot":"","sources":["../../src/commands/ids-audit-lint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-diff.d.ts","sourceRoot":"","sources":["../../src/commands/ids-diff.ts"],"names":[],"mappings":"AAkCA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBlE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
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 ids diff <before.ids> <after.ids> [--json | --md]
|
|
6
|
+
*
|
|
7
|
+
* Semantic diff of two IDS files: specifications and facets are paired by
|
|
8
|
+
* the re-identification cascade (identifier, then name + applicability,
|
|
9
|
+
* then similarity), so a renamed specification or an edited requirement
|
|
10
|
+
* reads as a change. Exit 1 when the documents differ (CI use), 2 when one
|
|
11
|
+
* cannot be read.
|
|
12
|
+
*/
|
|
13
|
+
import { diffIds } from '@ifc-lite/ids-authoring';
|
|
14
|
+
import { printJson } from '../output.js';
|
|
15
|
+
import { EXIT_CLEAN, EXIT_FINDINGS, IdsUsageError, positionals, readIds, rejectUnknownFlags, runIdsSubcommand } from './ids-subcommand.js';
|
|
16
|
+
const DIFF_FLAGS = new Set(['--json', '--md']);
|
|
17
|
+
const MARK = { added: '+', removed: '-', changed: '~' };
|
|
18
|
+
function markdown(before, after, entries) {
|
|
19
|
+
const lines = [`## IDS changes: \`${before}\` → \`${after}\``, ''];
|
|
20
|
+
if (entries.length === 0)
|
|
21
|
+
return `${lines.join('\n')}No changes.\n`;
|
|
22
|
+
for (const change of ['added', 'removed', 'changed']) {
|
|
23
|
+
const group = entries.filter((e) => e.change === change);
|
|
24
|
+
if (group.length === 0)
|
|
25
|
+
continue;
|
|
26
|
+
lines.push(`### ${change[0].toUpperCase()}${change.slice(1)} (${group.length})`, '');
|
|
27
|
+
for (const e of group)
|
|
28
|
+
lines.push(`- ${e.text} (\`${e.path}\`)`);
|
|
29
|
+
lines.push('');
|
|
30
|
+
}
|
|
31
|
+
return lines.join('\n');
|
|
32
|
+
}
|
|
33
|
+
export async function idsDiffCommand(args) {
|
|
34
|
+
await runIdsSubcommand(async () => {
|
|
35
|
+
rejectUnknownFlags(args, DIFF_FLAGS, new Set());
|
|
36
|
+
const [before, after, extra] = positionals(args, new Set());
|
|
37
|
+
if (!before || !after || extra)
|
|
38
|
+
throw new IdsUsageError('usage: ifc-lite ids diff <before.ids> <after.ids> [--json | --md]');
|
|
39
|
+
if (args.includes('--json') && args.includes('--md'))
|
|
40
|
+
throw new IdsUsageError('--json and --md cannot be combined');
|
|
41
|
+
const diff = diffIds(await readIds(before), await readIds(after));
|
|
42
|
+
const exit = diff.identical ? EXIT_CLEAN : EXIT_FINDINGS;
|
|
43
|
+
if (args.includes('--json')) {
|
|
44
|
+
printJson({ before, after, identical: diff.identical, entries: diff.entries });
|
|
45
|
+
return exit;
|
|
46
|
+
}
|
|
47
|
+
if (args.includes('--md')) {
|
|
48
|
+
process.stdout.write(markdown(before, after, diff.entries));
|
|
49
|
+
return exit;
|
|
50
|
+
}
|
|
51
|
+
process.stdout.write(`\n IDS diff: ${before} → ${after}\n\n`);
|
|
52
|
+
for (const e of diff.entries)
|
|
53
|
+
process.stdout.write(` ${MARK[e.change]} ${e.text}\n ${e.path}\n`);
|
|
54
|
+
if (diff.entries.length > 0)
|
|
55
|
+
process.stdout.write('\n');
|
|
56
|
+
const count = diff.entries.length;
|
|
57
|
+
process.stdout.write(` ${count === 0 ? 'No changes' : `${count} change${count === 1 ? '' : 's'}`}\n\n`);
|
|
58
|
+
return exit;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=ids-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-diff.js","sourceRoot":"","sources":["../../src/commands/ids-diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-explain.d.ts","sourceRoot":"","sources":["../../src/commands/ids-explain.ts"],"names":[],"mappings":"AA4CA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
import { describeFacet } from '@ifc-lite/ids-authoring';
|
|
5
|
+
import { EXIT_CLEAN, IdsUsageError, positionals, readIds, rejectUnknownFlags, runIdsSubcommand } from './ids-subcommand.js';
|
|
6
|
+
const EXPLAIN_FLAGS = new Set(['--md']);
|
|
7
|
+
const EXPLAIN_VALUE_FLAGS = new Set(['--lang']);
|
|
8
|
+
const LOCALES = ['en', 'de', 'fr'];
|
|
9
|
+
function cardinality(spec) {
|
|
10
|
+
if (spec.maxOccurs === 0)
|
|
11
|
+
return 'prohibited';
|
|
12
|
+
return (spec.minOccurs ?? 0) > 0 ? 'required' : 'optional';
|
|
13
|
+
}
|
|
14
|
+
function render(ids, locale, md) {
|
|
15
|
+
const out = [];
|
|
16
|
+
out.push(md ? `# ${ids.info.title}` : `\n ${ids.info.title}`);
|
|
17
|
+
if (ids.info.description)
|
|
18
|
+
out.push(md ? `\n${ids.info.description}` : ` ${ids.info.description}`);
|
|
19
|
+
for (const spec of ids.specifications) {
|
|
20
|
+
const head = `${spec.name} (${cardinality(spec)}, ${spec.ifcVersions.join(' ')})`;
|
|
21
|
+
out.push(md ? `\n## ${head}\n` : `\n ${head}`);
|
|
22
|
+
if (spec.description)
|
|
23
|
+
out.push(md ? `${spec.description}\n` : ` ${spec.description}`);
|
|
24
|
+
const bullet = md ? '- ' : ' - ';
|
|
25
|
+
out.push(md ? '**Applies to**\n' : ' Applies to:');
|
|
26
|
+
for (const facet of spec.applicability.facets)
|
|
27
|
+
out.push(`${bullet}${describeFacet(facet, 'applicability', 'required', locale)}`);
|
|
28
|
+
if (spec.requirements.length > 0) {
|
|
29
|
+
out.push(md ? '\n**Requires**\n' : ' Requires:');
|
|
30
|
+
for (const r of spec.requirements)
|
|
31
|
+
out.push(`${bullet}${describeFacet(r.facet, 'requirements', r.optionality, locale)}`);
|
|
32
|
+
}
|
|
33
|
+
if (spec.instructions)
|
|
34
|
+
out.push(md ? `\n> ${spec.instructions}` : ` Instructions: ${spec.instructions}`);
|
|
35
|
+
}
|
|
36
|
+
return `${out.join('\n')}\n${md ? '' : '\n'}`;
|
|
37
|
+
}
|
|
38
|
+
export async function idsExplainCommand(args) {
|
|
39
|
+
await runIdsSubcommand(async () => {
|
|
40
|
+
rejectUnknownFlags(args, EXPLAIN_FLAGS, EXPLAIN_VALUE_FLAGS);
|
|
41
|
+
const [file, extra] = positionals(args, EXPLAIN_VALUE_FLAGS);
|
|
42
|
+
if (!file || extra)
|
|
43
|
+
throw new IdsUsageError('usage: ifc-lite ids explain <rules.ids> [--lang en|de|fr] [--md]');
|
|
44
|
+
const langIndex = args.indexOf('--lang');
|
|
45
|
+
const lang = langIndex === -1 ? 'en' : args[langIndex + 1];
|
|
46
|
+
if (!LOCALES.includes(lang))
|
|
47
|
+
throw new IdsUsageError(`--lang expects ${LOCALES.join('|')}, got "${lang}"`);
|
|
48
|
+
const ids = await readIds(file);
|
|
49
|
+
process.stdout.write(render(ids, lang, args.includes('--md')));
|
|
50
|
+
return EXIT_CLEAN;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=ids-explain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-explain.js","sourceRoot":"","sources":["../../src/commands/ids-explain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-fmt.d.ts","sourceRoot":"","sources":["../../src/commands/ids-fmt.ts"],"names":[],"mappings":"AAwBA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BjE"}
|