@ifc-lite/cli 0.38.2 → 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.
Files changed (79) hide show
  1. package/README.md +2 -0
  2. package/dist/commands/flow-ai.d.ts +20 -0
  3. package/dist/commands/flow-ai.d.ts.map +1 -0
  4. package/dist/commands/flow-ai.js +35 -0
  5. package/dist/commands/flow-ai.js.map +1 -0
  6. package/dist/commands/flow-host.d.ts +2 -1
  7. package/dist/commands/flow-host.d.ts.map +1 -1
  8. package/dist/commands/flow-host.js +7 -1
  9. package/dist/commands/flow-host.js.map +1 -1
  10. package/dist/commands/flow-review.d.ts +28 -0
  11. package/dist/commands/flow-review.d.ts.map +1 -0
  12. package/dist/commands/flow-review.js +154 -0
  13. package/dist/commands/flow-review.js.map +1 -0
  14. package/dist/commands/flow-tracking.d.ts +4 -0
  15. package/dist/commands/flow-tracking.d.ts.map +1 -1
  16. package/dist/commands/flow-tracking.js +25 -4
  17. package/dist/commands/flow-tracking.js.map +1 -1
  18. package/dist/commands/flow.d.ts.map +1 -1
  19. package/dist/commands/flow.js +124 -27
  20. package/dist/commands/flow.js.map +1 -1
  21. package/dist/commands/ids-audit-lint.d.ts +3 -0
  22. package/dist/commands/ids-audit-lint.d.ts.map +1 -0
  23. package/dist/commands/ids-audit-lint.js +129 -0
  24. package/dist/commands/ids-audit-lint.js.map +1 -0
  25. package/dist/commands/ids-diff.d.ts +2 -0
  26. package/dist/commands/ids-diff.d.ts.map +1 -0
  27. package/dist/commands/ids-diff.js +61 -0
  28. package/dist/commands/ids-diff.js.map +1 -0
  29. package/dist/commands/ids-explain.d.ts +2 -0
  30. package/dist/commands/ids-explain.d.ts.map +1 -0
  31. package/dist/commands/ids-explain.js +53 -0
  32. package/dist/commands/ids-explain.js.map +1 -0
  33. package/dist/commands/ids-fmt.d.ts +2 -0
  34. package/dist/commands/ids-fmt.d.ts.map +1 -0
  35. package/dist/commands/ids-fmt.js +54 -0
  36. package/dist/commands/ids-fmt.js.map +1 -0
  37. package/dist/commands/ids-subcommand.d.ts +31 -0
  38. package/dist/commands/ids-subcommand.d.ts.map +1 -0
  39. package/dist/commands/ids-subcommand.js +101 -0
  40. package/dist/commands/ids-subcommand.js.map +1 -0
  41. package/dist/commands/ids.d.ts.map +1 -1
  42. package/dist/commands/ids.js +25 -2
  43. package/dist/commands/ids.js.map +1 -1
  44. package/dist/commands/info.js +11 -11
  45. package/dist/commands/info.js.map +1 -1
  46. package/dist/commands/semantic-file.d.ts +2 -0
  47. package/dist/commands/semantic-file.d.ts.map +1 -0
  48. package/dist/commands/semantic-file.js +24 -0
  49. package/dist/commands/semantic-file.js.map +1 -0
  50. package/dist/commands/semantic-serve.d.ts +2 -0
  51. package/dist/commands/semantic-serve.d.ts.map +1 -0
  52. package/dist/commands/semantic-serve.js +48 -0
  53. package/dist/commands/semantic-serve.js.map +1 -0
  54. package/dist/commands/semantic.d.ts +3 -0
  55. package/dist/commands/semantic.d.ts.map +1 -0
  56. package/dist/commands/semantic.js +130 -0
  57. package/dist/commands/semantic.js.map +1 -0
  58. package/dist/geometry-report.d.ts.map +1 -1
  59. package/dist/geometry-report.js +2 -1
  60. package/dist/geometry-report.js.map +1 -1
  61. package/dist/headless-backend-store-authoring.d.ts +4 -4
  62. package/dist/headless-backend-store-authoring.d.ts.map +1 -1
  63. package/dist/headless-backend-store-authoring.js +7 -5
  64. package/dist/headless-backend-store-authoring.js.map +1 -1
  65. package/dist/headless-backend.d.ts.map +1 -1
  66. package/dist/headless-backend.js +1 -57
  67. package/dist/headless-backend.js.map +1 -1
  68. package/dist/help.d.ts.map +1 -1
  69. package/dist/help.js +13 -2
  70. package/dist/help.js.map +1 -1
  71. package/dist/index.js +4 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/out-flag-commands.js +1 -1
  74. package/dist/out-flag-commands.js.map +1 -1
  75. package/dist/output.d.ts +11 -0
  76. package/dist/output.d.ts.map +1 -1
  77. package/dist/output.js +13 -0
  78. package/dist/output.js.map +1 -1
  79. package/package.json +25 -22
@@ -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":"AA6CA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiF9D"}
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"}
@@ -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) rules.
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');
@@ -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;;;;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,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,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"}
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/commands/ids.ts"],"names":[],"mappings":"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"}
@@ -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.toLocaleString()}\n`);
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.toLocaleString()])).split('\n').map(l => ' ' + l).join('\n') + '\n');
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.toLocaleString()])).split('\n').map(l => ' ' + l).join('\n') + '\n');
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.toLocaleString()} scanned, `
130
- + `${dropCensusSummary.totalRetained.toLocaleString()} retained, `
131
- + `${dropCensusSummary.totalSkipped.toLocaleString()} skipped.\n`);
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.toLocaleString(), c.knownInSchema ? 'yes' : 'no'])).split('\n').map(l => ' ' + l).join('\n') + '\n');
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.toLocaleString(), c.knownInSchema ? 'yes' : 'no'])).split('\n').map(l => ' ' + l).join('\n') + '\n');
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.toLocaleString()])).split('\n').map(l => ' ' + l).join('\n') + '\n');
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.toLocaleString()])).split('\n').map(l => ' ' + l).join('\n') + '\n');
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":"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"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function readSemanticFile(path: string, max?: number): Promise<string>;
2
+ //# sourceMappingURL=semantic-file.d.ts.map
@@ -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,2 @@
1
+ export declare function semanticServe(options: ReadonlyMap<string, string>): Promise<void>;
2
+ //# sourceMappingURL=semantic-serve.d.ts.map
@@ -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"}
@@ -0,0 +1,48 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. */
2
+ import { readFile } from 'node:fs/promises';
3
+ import { readSemanticFile } from './semantic-file.js';
4
+ import { createSemanticRelayServer } from '@ifc-lite/semantic/server';
5
+ function environment(name) {
6
+ if (typeof name !== 'string' || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(name))
7
+ throw new Error('Relay credentials require an environment variable name');
8
+ const value = process.env[name];
9
+ if (!value)
10
+ throw new Error('Relay credential environment variable is not set');
11
+ return value;
12
+ }
13
+ export async function semanticServe(options) {
14
+ const path = options.get('--config');
15
+ const cert = options.get('--cert');
16
+ const key = options.get('--key');
17
+ if (!path || !cert || !key)
18
+ throw new Error('Serve requires --config F --cert F --key F');
19
+ const data = JSON.parse(await readSemanticFile(path, 256000));
20
+ if (!data || typeof data !== 'object' || !('providers' in data) || !('allowedOrigins' in data) || !('clientTokenEnv' in data))
21
+ throw new Error('Invalid relay configuration');
22
+ if (Object.keys(data).some(key => !['clientTokenEnv', 'allowedOrigins', 'providers'].includes(key)))
23
+ throw new Error('Relay configuration accepts credential environment references only');
24
+ const config = data;
25
+ if (!Array.isArray(config.allowedOrigins) || !config.allowedOrigins.every(value => typeof value === 'string')
26
+ || !config.providers || typeof config.providers !== 'object' || Array.isArray(config.providers))
27
+ throw new Error('Invalid relay configuration');
28
+ const providers = {};
29
+ for (const [id, provider] of Object.entries(config.providers)) {
30
+ if (!provider || typeof provider !== 'object' || typeof provider.endpoint !== 'string' || typeof provider.grantedHost !== 'string'
31
+ || (provider.kind !== 'json' && provider.kind !== 'sparql'))
32
+ throw new Error('Invalid relay provider');
33
+ if (Object.keys(provider).some(key => !['endpoint', 'grantedHost', 'kind', 'bearerEnv', 'loopbackHttpOrigin'].includes(key)))
34
+ throw new Error('Only credential environment references may appear in provider configuration');
35
+ const env = provider.bearerEnv;
36
+ if (env !== undefined)
37
+ environment(env);
38
+ Object.defineProperty(providers, id, { enumerable: true, value: { endpoint: provider.endpoint, grantedHost: provider.grantedHost,
39
+ kind: provider.kind, loopbackHttpOrigin: provider.loopbackHttpOrigin, bearerToken: env ? () => environment(env) : undefined } });
40
+ }
41
+ const port = Number(options.get('--port') ?? '8443');
42
+ if (!Number.isInteger(port) || port < 1 || port > 65535)
43
+ throw new Error('Invalid relay port');
44
+ const server = createSemanticRelayServer({ providers, clientToken: environment(config.clientTokenEnv), allowedOrigins: config.allowedOrigins }, { cert: await readFile(cert), key: await readFile(key) });
45
+ server.on('error', () => { process.stderr.write('Semantic relay server failed\n'); process.exitCode = 1; });
46
+ server.listen(port, '127.0.0.1', () => process.stderr.write(`Semantic relay listening on https://localhost:${port}\n`));
47
+ }
48
+ //# sourceMappingURL=semantic-serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-serve.js","sourceRoot":"","sources":["../../src/commands/semantic-serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Exported only for command behavior tests; process output is reserved for its standard payload. */
2
+ export declare function semanticCommand(args: string[]): Promise<void>;
3
+ //# sourceMappingURL=semantic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/commands/semantic.ts"],"names":[],"mappings":"AAyCA,qGAAqG;AACrG,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDnE"}