@ifc-lite/cli 0.38.2 → 0.40.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 +25 -0
- package/dist/commands/delivery-checks.d.ts +4 -1
- package/dist/commands/delivery-checks.d.ts.map +1 -1
- package/dist/commands/delivery-checks.js +18 -5
- package/dist/commands/delivery-checks.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-bcf.d.ts +3 -0
- package/dist/commands/flow-bcf.d.ts.map +1 -0
- package/dist/commands/flow-bcf.js +87 -0
- package/dist/commands/flow-bcf.js.map +1 -0
- package/dist/commands/flow-host.d.ts +5 -1
- package/dist/commands/flow-host.d.ts.map +1 -1
- package/dist/commands/flow-host.js +9 -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 +129 -27
- 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 +14 -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 -22
|
@@ -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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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 fmt <rules.ids> [--check | --write]
|
|
6
|
+
*
|
|
7
|
+
* Canonical formatting. Without a flag the formatted XML goes to stdout.
|
|
8
|
+
* `--check` exits 1 when the file is not already canonical; `--write`
|
|
9
|
+
* rewrites it in place. The formatter never writes XML that reads back
|
|
10
|
+
* with less content than the input: when this build's writer cannot carry
|
|
11
|
+
* a value (some `info` fields, length/digit and conjunctive restrictions
|
|
12
|
+
* until the full writer lands in `@ifc-lite/ids`), it exits 2 and names
|
|
13
|
+
* the values instead of dropping them.
|
|
14
|
+
*/
|
|
15
|
+
import { writeFile } from 'node:fs/promises';
|
|
16
|
+
import { formatIds } from '@ifc-lite/ids-authoring';
|
|
17
|
+
import { writeIdsXml } from '@ifc-lite/ids';
|
|
18
|
+
import { EXIT_CLEAN, EXIT_FINDINGS, IdsUsageError, positionals, readText, rejectUnknownFlags, runIdsSubcommand } from './ids-subcommand.js';
|
|
19
|
+
const FMT_FLAGS = new Set(['--check', '--write']);
|
|
20
|
+
const MAX_LOST_SHOWN = 10;
|
|
21
|
+
export async function idsFmtCommand(args) {
|
|
22
|
+
await runIdsSubcommand(async () => {
|
|
23
|
+
rejectUnknownFlags(args, FMT_FLAGS, new Set());
|
|
24
|
+
const [file, extra] = positionals(args, new Set());
|
|
25
|
+
if (!file || extra)
|
|
26
|
+
throw new IdsUsageError('usage: ifc-lite ids fmt <rules.ids> [--check | --write]');
|
|
27
|
+
const check = args.includes('--check');
|
|
28
|
+
const write = args.includes('--write');
|
|
29
|
+
if (check && write)
|
|
30
|
+
throw new IdsUsageError('--check and --write cannot be combined');
|
|
31
|
+
const out = formatIds(await readText(file), writeIdsXml);
|
|
32
|
+
if (!out.ok) {
|
|
33
|
+
if (out.reason === 'parse')
|
|
34
|
+
throw new IdsUsageError(`${file} does not parse as IDS (${out.message})`);
|
|
35
|
+
const lost = out.lost ?? [];
|
|
36
|
+
const shown = lost.slice(0, MAX_LOST_SHOWN).map((p) => `\n - ${p}`).join('');
|
|
37
|
+
const more = lost.length > MAX_LOST_SHOWN ? `\n … and ${lost.length - MAX_LOST_SHOWN} more` : '';
|
|
38
|
+
throw new IdsUsageError(`cannot format ${file} without loss: ${out.message}${shown}${more}`);
|
|
39
|
+
}
|
|
40
|
+
if (check) {
|
|
41
|
+
process.stdout.write(out.changed ? `${file}: not formatted\n` : `${file}: formatted\n`);
|
|
42
|
+
return out.changed ? EXIT_FINDINGS : EXIT_CLEAN;
|
|
43
|
+
}
|
|
44
|
+
if (write) {
|
|
45
|
+
if (out.changed)
|
|
46
|
+
await writeFile(file, out.xml, 'utf-8');
|
|
47
|
+
process.stdout.write(out.changed ? `${file}: reformatted\n` : `${file}: already formatted\n`);
|
|
48
|
+
return EXIT_CLEAN;
|
|
49
|
+
}
|
|
50
|
+
process.stdout.write(out.xml);
|
|
51
|
+
return EXIT_CLEAN;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=ids-fmt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-fmt.js","sourceRoot":"","sources":["../../src/commands/ids-fmt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type IDSDocument } from '@ifc-lite/ids';
|
|
2
|
+
export declare const EXIT_CLEAN = 0;
|
|
3
|
+
export declare const EXIT_FINDINGS = 1;
|
|
4
|
+
export declare const EXIT_UNUSABLE = 2;
|
|
5
|
+
/** Thrown for a condition that ends the command with exit code 2. */
|
|
6
|
+
export declare class IdsUsageError extends Error {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
/** Positionals, skipping the value that follows each flag in `valueFlags`. */
|
|
10
|
+
export declare function positionals(args: readonly string[], valueFlags: ReadonlySet<string>): string[];
|
|
11
|
+
/** Refuse flags the subcommand does not know, so a typo is not a silent no-op. */
|
|
12
|
+
export declare function rejectUnknownFlags(args: readonly string[], known: ReadonlySet<string>, valueFlags: ReadonlySet<string>): void;
|
|
13
|
+
export declare function readText(path: string): Promise<string>;
|
|
14
|
+
/** Read and parse an IDS file; a parse failure is a usage error (exit 2). */
|
|
15
|
+
export declare function readIds(path: string): Promise<IDSDocument>;
|
|
16
|
+
/** Run a subcommand body, turning `IdsUsageError` into exit code 2. */
|
|
17
|
+
export declare function runIdsSubcommand(body: () => Promise<number>): Promise<void>;
|
|
18
|
+
/** `1 error, 2 warnings, 0 info` */
|
|
19
|
+
export declare function countLine(counts: {
|
|
20
|
+
error: number;
|
|
21
|
+
warning: number;
|
|
22
|
+
info: number;
|
|
23
|
+
}): string;
|
|
24
|
+
export declare function tally<T extends {
|
|
25
|
+
severity: 'error' | 'warning' | 'info';
|
|
26
|
+
}>(items: readonly T[]): {
|
|
27
|
+
error: number;
|
|
28
|
+
warning: number;
|
|
29
|
+
info: number;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=ids-subcommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-subcommand.d.ts","sourceRoot":"","sources":["../../src/commands/ids-subcommand.ts"],"names":[],"mappings":"AAmBA,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE1E,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,qEAAqE;AACrE,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAW9F;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAU7H;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5D;AAED,6EAA6E;AAC7E,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAQhE;AAED,uEAAuE;AACvE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjF;AAED,oCAAoC;AACpC,wBAAgB,SAAS,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAG1F;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAIjJ"}
|
|
@@ -0,0 +1,101 @@
|
|
|
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
|
+
* Shared plumbing for the IDS authoring subcommands (`ifc-lite ids audit |
|
|
6
|
+
* lint | fmt | diff`).
|
|
7
|
+
*
|
|
8
|
+
* Exit codes are the same for all of them, so a CI step can tell "the IDS
|
|
9
|
+
* has problems" from "the command could not run":
|
|
10
|
+
* 0 clean
|
|
11
|
+
* 1 findings (audit/lint errors, unformatted file, documents differ)
|
|
12
|
+
* 2 usage error, unreadable file, or output this build cannot write
|
|
13
|
+
*
|
|
14
|
+
* Usage errors set `process.exitCode` instead of calling `process.exit`, so
|
|
15
|
+
* the commands can run in-process (tests, `ifc-lite gym`-style hosts).
|
|
16
|
+
*/
|
|
17
|
+
import { readFile } from 'node:fs/promises';
|
|
18
|
+
import { IDSParseError, parseIDS } from '@ifc-lite/ids';
|
|
19
|
+
export const EXIT_CLEAN = 0;
|
|
20
|
+
export const EXIT_FINDINGS = 1;
|
|
21
|
+
export const EXIT_UNUSABLE = 2;
|
|
22
|
+
/** Thrown for a condition that ends the command with exit code 2. */
|
|
23
|
+
export class IdsUsageError extends Error {
|
|
24
|
+
constructor(message) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.name = 'IdsUsageError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Positionals, skipping the value that follows each flag in `valueFlags`. */
|
|
30
|
+
export function positionals(args, valueFlags) {
|
|
31
|
+
const out = [];
|
|
32
|
+
for (let i = 0; i < args.length; i++) {
|
|
33
|
+
const arg = args[i];
|
|
34
|
+
if (arg.startsWith('-')) {
|
|
35
|
+
if (valueFlags.has(arg))
|
|
36
|
+
i++;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
out.push(arg);
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
/** Refuse flags the subcommand does not know, so a typo is not a silent no-op. */
|
|
44
|
+
export function rejectUnknownFlags(args, known, valueFlags) {
|
|
45
|
+
for (let i = 0; i < args.length; i++) {
|
|
46
|
+
const arg = args[i];
|
|
47
|
+
if (!arg.startsWith('-'))
|
|
48
|
+
continue;
|
|
49
|
+
if (!known.has(arg) && !valueFlags.has(arg))
|
|
50
|
+
throw new IdsUsageError(`unknown flag ${arg}`);
|
|
51
|
+
if (valueFlags.has(arg)) {
|
|
52
|
+
if (i + 1 >= args.length)
|
|
53
|
+
throw new IdsUsageError(`${arg} needs a value`);
|
|
54
|
+
i++;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export async function readText(path) {
|
|
59
|
+
try {
|
|
60
|
+
return await readFile(path, 'utf-8');
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
throw new IdsUsageError(`cannot read ${path}: ${err instanceof Error ? err.message : String(err)}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Read and parse an IDS file; a parse failure is a usage error (exit 2). */
|
|
67
|
+
export async function readIds(path) {
|
|
68
|
+
const xml = await readText(path);
|
|
69
|
+
try {
|
|
70
|
+
return parseIDS(xml);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (!(err instanceof IDSParseError))
|
|
74
|
+
throw err;
|
|
75
|
+
throw new IdsUsageError(`${path} does not parse as IDS (${err.message})`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Run a subcommand body, turning `IdsUsageError` into exit code 2. */
|
|
79
|
+
export async function runIdsSubcommand(body) {
|
|
80
|
+
try {
|
|
81
|
+
process.exitCode = await body();
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
if (!(err instanceof IdsUsageError))
|
|
85
|
+
throw err;
|
|
86
|
+
process.stderr.write(`Error: ${err.message}\n`);
|
|
87
|
+
process.exitCode = EXIT_UNUSABLE;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** `1 error, 2 warnings, 0 info` */
|
|
91
|
+
export function countLine(counts) {
|
|
92
|
+
const plural = (n, word) => `${n} ${word}${n === 1 ? '' : 's'}`;
|
|
93
|
+
return `${plural(counts.error, 'error')}, ${plural(counts.warning, 'warning')}, ${counts.info} info`;
|
|
94
|
+
}
|
|
95
|
+
export function tally(items) {
|
|
96
|
+
const counts = { error: 0, warning: 0, info: 0 };
|
|
97
|
+
for (const item of items)
|
|
98
|
+
counts[item.severity]++;
|
|
99
|
+
return counts;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=ids-subcommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids-subcommand.js","sourceRoot":"","sources":["../../src/commands/ids-subcommand.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":"AA+DA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsF9D"}
|
package/dist/commands/ids.js
CHANGED
|
@@ -3,13 +3,30 @@
|
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
/**
|
|
5
5
|
* ifc-lite ids <file.ifc> <rules.ids> [options]
|
|
6
|
+
* ifc-lite ids <audit|lint|fmt|diff> …
|
|
6
7
|
*
|
|
7
|
-
* Validate an IFC file against IDS (Information Delivery Specification)
|
|
8
|
+
* Validate an IFC file against IDS (Information Delivery Specification)
|
|
9
|
+
* rules, or run one of the IDS authoring subcommands on an IDS file.
|
|
8
10
|
*/
|
|
9
11
|
import { readFile } from 'node:fs/promises';
|
|
10
|
-
import { createHeadlessContext } from '../loader.js';
|
|
11
12
|
import { printJson, hasFlag, getFlag, fatal } from '../output.js';
|
|
12
13
|
import { createDataAccessor } from '@ifc-lite/ids/bridge';
|
|
14
|
+
import { idsAuditCommand, idsLintCommand } from './ids-audit-lint.js';
|
|
15
|
+
import { idsDiffCommand } from './ids-diff.js';
|
|
16
|
+
import { idsExplainCommand } from './ids-explain.js';
|
|
17
|
+
import { idsFmtCommand } from './ids-fmt.js';
|
|
18
|
+
/**
|
|
19
|
+
* Authoring subcommands. A first argument with one of these names is the
|
|
20
|
+
* subcommand, never a model path: validation needs a model file AND an IDS
|
|
21
|
+
* file, and a model file named `lint` (no extension) is not a real input.
|
|
22
|
+
*/
|
|
23
|
+
const SUBCOMMANDS = {
|
|
24
|
+
audit: idsAuditCommand,
|
|
25
|
+
lint: idsLintCommand,
|
|
26
|
+
fmt: idsFmtCommand,
|
|
27
|
+
diff: idsDiffCommand,
|
|
28
|
+
explain: idsExplainCommand,
|
|
29
|
+
};
|
|
13
30
|
/** Flags that consume the following argument, so it is never mistaken for a
|
|
14
31
|
* positional file path. `--locale de file.ifc rules.ids` would otherwise
|
|
15
32
|
* have the naive `args.filter(a => !a.startsWith('-'))` idiom swallow `de`
|
|
@@ -30,12 +47,18 @@ function idsPositionals(args) {
|
|
|
30
47
|
return positional;
|
|
31
48
|
}
|
|
32
49
|
export async function idsCommand(args) {
|
|
50
|
+
const sub = Object.hasOwn(SUBCOMMANDS, args[0] ?? '') ? SUBCOMMANDS[args[0]] : undefined;
|
|
51
|
+
if (sub)
|
|
52
|
+
return sub(args.slice(1));
|
|
33
53
|
const positional = idsPositionals(args);
|
|
34
54
|
if (positional.length < 2)
|
|
35
55
|
fatal('Usage: ifc-lite ids <file.ifc> <rules.ids> [--json]');
|
|
36
56
|
const [ifcPath, idsPath] = positional;
|
|
37
57
|
const jsonOutput = hasFlag(args, '--json');
|
|
38
58
|
const locale = (getFlag(args, '--locale') ?? 'en');
|
|
59
|
+
// Loaded on demand: the model loader pulls in the geometry/wasm stack,
|
|
60
|
+
// which the IDS-only subcommands above never need.
|
|
61
|
+
const { createHeadlessContext } = await import('../loader.js');
|
|
39
62
|
const { bim, store } = await createHeadlessContext(ifcPath);
|
|
40
63
|
// Read IDS file
|
|
41
64
|
const idsContent = await readFile(idsPath, 'utf-8');
|
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
|
|
1
|
+
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/commands/ids.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;;;GAIG;AACH,MAAM,WAAW,GAAsD;IACrE,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,cAAc;IACpB,GAAG,EAAE,aAAa;IAClB,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,iBAAiB;CAC3B,CAAC;AAYF;;;;2DAI2D;AAC3D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAE1C,SAAS,cAAc,CAAC,IAAc;IACpC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAExF,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAuB,CAAC;IAEzE,uEAAuE;IACvE,mDAAmD;IACnD,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE5D,gBAAgB;IAChB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEpD,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE/C,6DAA6D;IAC7D,uEAAuE;IACvE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC7C,QAAQ;QACR,SAAS,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;QACjD,MAAM;QACN,+DAA+D;QAC/D,mEAAmE;QACnE,sBAAsB,EAAE,UAAU;QAClC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;YAChB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC;gBACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAI,IAAI,CAAC,CAAC,mBAAmB,KAAK,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;KACF,CAAC,CAGD,CAAC;IAEF,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE5C,IAAI,UAAU,EAAE,CAAC;QACf,uDAAuD;QACvD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,wEAAwE;QACxE,0CAA0C;QAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,KAAK,CAAC,CAAC;QACvD,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnG,qEAAqE;QACrE,qEAAqE;QACrE,sEAAsE;QACtE,sEAAsE;QACtE,wCAAwC;QACxC,OAAO,CAAC,QAAQ,GAAG,YAAY,IAAI,OAAO,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,sEAAsE;IACtE,qEAAqE;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAE/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,oBAAoB,IAAI,OAAO,CAAC,mBAAmB,WAAW,CAAC,CAAC;IAClH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,WAAW,CAAC,CAAC;IAClH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,mBAAmB,gBAAgB,OAAO,CAAC,oBAAoB,UAAU,CAAC,CAAC;IAE7H,sEAAsE;IACtE,oEAAoE;IACpE,+DAA+D;IAC/D,IAAI,OAAO,CAAC,mBAAmB,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC7E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC;IAC5E,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC9B,CAAC"}
|
package/dist/commands/info.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Print a summary of an IFC file: schema, entity counts, spatial structure.
|
|
8
8
|
*/
|
|
9
9
|
import { loadIfcFile } from '../loader.js';
|
|
10
|
-
import { printJson, formatTable, hasFlag, fatal } from '../output.js';
|
|
10
|
+
import { printJson, formatCount, 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
13
|
/**
|
|
@@ -87,7 +87,7 @@ export async function infoCommand(args) {
|
|
|
87
87
|
process.stdout.write(`\n File: ${filePath}\n`);
|
|
88
88
|
process.stdout.write(` Schema: ${store.schemaVersion}\n`);
|
|
89
89
|
process.stdout.write(` Size: ${summary.fileSizeHuman}\n`);
|
|
90
|
-
process.stdout.write(` Entities: ${store.entityCount
|
|
90
|
+
process.stdout.write(` Entities: ${formatCount(store.entityCount)}\n`);
|
|
91
91
|
process.stdout.write(` Parsed: ${summary.parseTime}\n`);
|
|
92
92
|
if (storeys.length > 0) {
|
|
93
93
|
process.stdout.write(`\n Storeys:\n`);
|
|
@@ -115,35 +115,35 @@ export async function infoCommand(args) {
|
|
|
115
115
|
.slice(0, 10);
|
|
116
116
|
if (buildingElements.length > 0) {
|
|
117
117
|
process.stdout.write(`\n Building elements:\n`);
|
|
118
|
-
process.stdout.write(formatTable(['Type', 'Count'], buildingElements.map(([name, count]) => [name, count
|
|
118
|
+
process.stdout.write(formatTable(['Type', 'Count'], buildingElements.map(([name, count]) => [name, formatCount(count)])).split('\n').map(l => ' ' + l).join('\n') + '\n');
|
|
119
119
|
}
|
|
120
120
|
if (otherTypes.length > 0) {
|
|
121
121
|
process.stdout.write(`\n Other types (top ${otherTypes.length}):\n`);
|
|
122
|
-
process.stdout.write(formatTable(['Type', 'Count'], otherTypes.map(([name, count]) => [name, count
|
|
122
|
+
process.stdout.write(formatTable(['Type', 'Count'], otherTypes.map(([name, count]) => [name, formatCount(count)])).split('\n').map(l => ' ' + l).join('\n') + '\n');
|
|
123
123
|
}
|
|
124
124
|
// Semantic drop census (#4208)
|
|
125
125
|
if (!dropCensusSummary.ran) {
|
|
126
126
|
process.stdout.write(`\n Drop census: did not run (no dropCensus on this store).\n`);
|
|
127
127
|
}
|
|
128
128
|
else {
|
|
129
|
-
process.stdout.write(`\n Drop census: ${dropCensusSummary.totalScanned
|
|
130
|
-
+ `${dropCensusSummary.totalRetained
|
|
131
|
-
+ `${dropCensusSummary.totalSkipped
|
|
129
|
+
process.stdout.write(`\n Drop census: ${formatCount(dropCensusSummary.totalScanned)} scanned, `
|
|
130
|
+
+ `${formatCount(dropCensusSummary.totalRetained)} retained, `
|
|
131
|
+
+ `${formatCount(dropCensusSummary.totalSkipped)} skipped.\n`);
|
|
132
132
|
if (dropCensusSummary.unexpectedSkippedClasses.length > 0) {
|
|
133
133
|
// Classes with a GlobalId (IfcRoot descendants) that fell to CAT_SKIP
|
|
134
134
|
// anyway — the shape of a real regression, not routine geometry noise.
|
|
135
135
|
process.stdout.write(` Skipped classes with a GlobalId (unexpected):\n`);
|
|
136
|
-
process.stdout.write(formatTable(['Type', 'Count', 'In schema'], dropCensusSummary.unexpectedSkippedClasses.map((c) => [c.type, c.scanned
|
|
136
|
+
process.stdout.write(formatTable(['Type', 'Count', 'In schema'], dropCensusSummary.unexpectedSkippedClasses.map((c) => [c.type, formatCount(c.scanned), c.knownInSchema ? 'yes' : 'no'])).split('\n').map(l => ' ' + l).join('\n') + '\n');
|
|
137
137
|
}
|
|
138
138
|
if (dropCensusSummary.expectedSkippedClasses.length > 0) {
|
|
139
139
|
// Geometry/placement/style resource classes with no GlobalId — this
|
|
140
140
|
// fires on nearly every file and is not, by itself, a problem.
|
|
141
141
|
process.stdout.write(` Skipped classes with no GlobalId (expected — geometry/placement/style resources):\n`);
|
|
142
|
-
process.stdout.write(formatTable(['Type', 'Count', 'In schema'], dropCensusSummary.expectedSkippedClasses.map((c) => [c.type, c.scanned
|
|
142
|
+
process.stdout.write(formatTable(['Type', 'Count', 'In schema'], dropCensusSummary.expectedSkippedClasses.map((c) => [c.type, formatCount(c.scanned), c.knownInSchema ? 'yes' : 'no'])).split('\n').map(l => ' ' + l).join('\n') + '\n');
|
|
143
143
|
}
|
|
144
144
|
if (dropCensusSummary.unindexedRelClasses.length > 0) {
|
|
145
145
|
process.stdout.write(` IFCREL* classes seen but not indexed as edges:\n`);
|
|
146
|
-
process.stdout.write(formatTable(['Type', 'Count'], dropCensusSummary.unindexedRelClasses.map((c) => [c.type, c.scanned
|
|
146
|
+
process.stdout.write(formatTable(['Type', 'Count'], dropCensusSummary.unindexedRelClasses.map((c) => [c.type, formatCount(c.scanned)])).split('\n').map(l => ' ' + l).join('\n') + '\n');
|
|
147
147
|
}
|
|
148
148
|
if (dropCensusSummary.unknownClasses.length > 0) {
|
|
149
149
|
// Classes not recognised by the bundled schema registry at all —
|
|
@@ -151,7 +151,7 @@ export async function infoCommand(args) {
|
|
|
151
151
|
// silently dropped from the human-readable output while it's still
|
|
152
152
|
// in the JSON payload.
|
|
153
153
|
process.stdout.write(` Classes not recognised by the schema registry (unknown):\n`);
|
|
154
|
-
process.stdout.write(formatTable(['Type', 'Count'], dropCensusSummary.unknownClasses.map((c) => [c.type, c.scanned
|
|
154
|
+
process.stdout.write(formatTable(['Type', 'Count'], dropCensusSummary.unknownClasses.map((c) => [c.type, formatCount(c.scanned)])).split('\n').map(l => ' ' + l).join('\n') + '\n');
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
process.stdout.write('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-file.d.ts","sourceRoot":"","sources":["../../src/commands/semantic-file.ts"],"names":[],"mappings":"AAEA,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAa3F"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. */
|
|
2
|
+
import { open } from 'node:fs/promises';
|
|
3
|
+
export async function readSemanticFile(path, max = 5 * 1024 * 1024) {
|
|
4
|
+
const file = await open(path, 'r');
|
|
5
|
+
try {
|
|
6
|
+
const metadata = await file.stat();
|
|
7
|
+
if (!metadata.isFile() || metadata.size > max)
|
|
8
|
+
throw new Error('Semantic input must be a regular file within the byte limit');
|
|
9
|
+
const chunks = [];
|
|
10
|
+
let bytes = 0;
|
|
11
|
+
for await (const chunk of file.createReadStream({ autoClose: false })) {
|
|
12
|
+
const data = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
13
|
+
bytes += data.byteLength;
|
|
14
|
+
if (bytes > max)
|
|
15
|
+
throw new Error('Semantic input exceeds byte limit');
|
|
16
|
+
chunks.push(data);
|
|
17
|
+
}
|
|
18
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
await file.close();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=semantic-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-file.js","sourceRoot":"","sources":["../../src/commands/semantic-file.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;IACxE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC9H,MAAM,MAAM,GAAa,EAAE,CAAC;QAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC;YAC3F,IAAI,KAAK,GAAG,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACtE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;YAAS,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-serve.d.ts","sourceRoot":"","sources":["../../src/commands/semantic-serve.ts"],"names":[],"mappings":"AASA,wBAAsB,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBvF"}
|