@leemour/cli-messaging 0.67.0 → 0.68.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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/parity/bin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { parityProblems } from "./manifest.js";
4
+ const cli = process.argv[2];
5
+ if (cli !== "max" && cli !== "tg") {
6
+ console.error("usage: <tool> commands --json | cli-messaging-parity <max|tg>");
7
+ process.exit(2);
8
+ }
9
+ const manifest = JSON.parse(readFileSync(new URL("../../parity.json", import.meta.url), "utf8"));
10
+ const problems = parityProblems(manifest, cli, JSON.parse(readFileSync(0, "utf8")));
11
+ for (const problem of problems)
12
+ console.error(problem);
13
+ if (problems.length > 0) {
14
+ console.error(`${problems.length} difference(s) from @leemour/cli-messaging parity.json — see docs/dev/STANDARD.md`);
15
+ process.exit(1);
16
+ }
17
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/parity/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAA2B,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC3B,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAA;IAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,QAAQ,GAAa,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,mBAAmB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAC1G,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,GAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;AACjG,KAAK,MAAM,OAAO,IAAI,QAAQ;IAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AACtD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,mFAAmF,CAAC,CAAA;IACpH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./manifest.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parity/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./manifest.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parity/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
@@ -0,0 +1,42 @@
1
+ import type { CommandInfo, OptionInfo } from "@leemour/cli-core/commands";
2
+ export type Cli = "max" | "tg";
3
+ export type State = "both" | "max-only" | "tg-only" | "planned";
4
+ /** `"both"`, or a one-sided or planned entry that says why (`reason`) or who closes it (`by`). */
5
+ export type Entry = "both" | {
6
+ state: Exclude<State, "both">;
7
+ reason?: string;
8
+ by?: string;
9
+ };
10
+ export interface CommandRow {
11
+ state: State;
12
+ reason?: string;
13
+ by?: string;
14
+ /** On a planned row: it stands for every path below it, which then have no rows of their own. */
15
+ subtree?: boolean;
16
+ options?: Record<string, Entry>;
17
+ }
18
+ export interface CatalogueOption {
19
+ value?: string;
20
+ meaning: string;
21
+ default?: string;
22
+ note?: string;
23
+ }
24
+ export interface Manifest {
25
+ options: Record<string, CatalogueOption>;
26
+ globalOptions: Record<string, Entry>;
27
+ commands: Record<string, CommandRow>;
28
+ }
29
+ /** What `commands --json` prints, as far as the check reads it. */
30
+ export interface CommandsJson {
31
+ cli: string;
32
+ globalOptions: readonly OptionInfo[];
33
+ commands: readonly CommandInfo[];
34
+ }
35
+ export declare const longName: (flags: string) => string;
36
+ /** The row above `path` that covers it and everything else below it: one-sided, or planned as a subtree. */
37
+ export declare const coveringRow: (manifest: Manifest, path: string) => string | undefined;
38
+ /** Everything wrong with the manifest itself; empty when it is well-formed. */
39
+ export declare const manifestProblems: (manifest: Manifest) => string[];
40
+ /** Where a CLI's `commands --json` disagrees with its column of the manifest; empty when it agrees. */
41
+ export declare const parityProblems: (manifest: Manifest, cli: Cli, program: CommandsJson) => string[];
42
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/parity/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEzE,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAA;AAC9B,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/D,kGAAkG;AAClG,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5F,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,iGAAiG;IACjG,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CACrC;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,SAAS,UAAU,EAAE,CAAA;IACpC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAA;CACjC;AAID,eAAO,MAAM,QAAQ,UAAW,MAAM,KAAG,MAA+E,CAAA;AAwBxH,4GAA4G;AAC5G,eAAO,MAAM,WAAW,aAAc,QAAQ,QAAQ,MAAM,KAAG,MAAM,GAAG,SAQvE,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,aAAc,QAAQ,KAAG,MAAM,EAgC3D,CAAA;AAwBD,uGAAuG;AACvG,eAAO,MAAM,cAAc,aAAc,QAAQ,OAAO,GAAG,WAAW,YAAY,KAAG,MAAM,EAmB1F,CAAA"}
@@ -0,0 +1,117 @@
1
+ const STATES = ["both", "max-only", "tg-only", "planned"];
2
+ export const longName = (flags) => flags.split(/[\s,|]+/).find((part) => part.startsWith("--")) ?? flags;
3
+ const stateOf = (entry) => (typeof entry === "string" ? entry : entry.state);
4
+ const entryProblems = (where, entry) => {
5
+ if (typeof entry === "string")
6
+ return entry === "both" ? [] : [`${where}: "${entry}" — only "both" stands alone`];
7
+ const problems = [];
8
+ if (!STATES.includes(entry.state))
9
+ problems.push(`${where}: no such state "${entry.state}"`);
10
+ if (entry.state === "max-only" || entry.state === "tg-only") {
11
+ if (!entry.reason)
12
+ problems.push(`${where}: ${entry.state} without a reason`);
13
+ }
14
+ else if (entry.reason)
15
+ problems.push(`${where}: a reason on a ${entry.state} row`);
16
+ if (entry.state === "planned" && !entry.by)
17
+ problems.push(`${where}: planned without "by"`);
18
+ if (entry.state !== "planned" && entry.by)
19
+ problems.push(`${where}: "by" on a ${entry.state} row`);
20
+ return problems;
21
+ };
22
+ const unsorted = (where, keys) => {
23
+ const sorted = [...keys].sort();
24
+ const at = keys.findIndex((key, index) => key !== sorted[index]);
25
+ return at === -1 ? [] : [`${where}: keys out of order at "${keys[at]}" — run the seed to sort`];
26
+ };
27
+ const oneSided = (state) => state === "max-only" || state === "tg-only";
28
+ /** The row above `path` that covers it and everything else below it: one-sided, or planned as a subtree. */
29
+ export const coveringRow = (manifest, path) => {
30
+ const words = path.split(" ");
31
+ for (let length = words.length - 1; length > 0; length--) {
32
+ const parent = words.slice(0, length).join(" ");
33
+ const row = manifest.commands[parent];
34
+ if (row && (oneSided(row.state) || row.subtree))
35
+ return parent;
36
+ }
37
+ return undefined;
38
+ };
39
+ /** Everything wrong with the manifest itself; empty when it is well-formed. */
40
+ export const manifestProblems = (manifest) => {
41
+ const problems = [
42
+ ...unsorted("options", Object.keys(manifest.options)),
43
+ ...unsorted("globalOptions", Object.keys(manifest.globalOptions)),
44
+ ...unsorted("commands", Object.keys(manifest.commands)),
45
+ ];
46
+ const used = new Set();
47
+ const optionEntries = (where, options) => {
48
+ problems.push(...unsorted(`${where} options`, Object.keys(options)));
49
+ for (const [name, entry] of Object.entries(options)) {
50
+ used.add(name);
51
+ if (!manifest.options[name])
52
+ problems.push(`${where} ${name}: not in the option catalogue`);
53
+ problems.push(...entryProblems(`${where} ${name}`, entry));
54
+ }
55
+ };
56
+ optionEntries("(global)", manifest.globalOptions);
57
+ for (const [path, row] of Object.entries(manifest.commands)) {
58
+ problems.push(...entryProblems(path, row));
59
+ if (row.subtree && row.state !== "planned")
60
+ problems.push(`${path}: subtree on a ${row.state} row`);
61
+ const parent = path.split(" ").slice(0, -1).join(" ");
62
+ if (parent && !manifest.commands[parent])
63
+ problems.push(`${path}: no row for its parent "${parent}"`);
64
+ const cover = coveringRow(manifest, path);
65
+ if (cover)
66
+ problems.push(`${path}: under "${cover}", which is ${manifest.commands[cover]?.state} and covers it`);
67
+ optionEntries(path, row.options ?? {});
68
+ }
69
+ for (const [name, option] of Object.entries(manifest.options)) {
70
+ if (!option.meaning)
71
+ problems.push(`options ${name}: no meaning`);
72
+ if (!used.has(name))
73
+ problems.push(`options ${name}: in the catalogue, on no command`);
74
+ }
75
+ return problems;
76
+ };
77
+ const present = (cli, state) => state === "planned" ? undefined : state === "both" || state === `${cli}-only`;
78
+ const compare = (cli, where, state, has) => {
79
+ if (state === undefined)
80
+ return has ? [`${where}: not in the manifest — add its row first`] : [];
81
+ const expected = present(cli, state);
82
+ if (expected === undefined || expected === has)
83
+ return [];
84
+ return has
85
+ ? [`${where}: ${cli} has it, the manifest says ${state}`]
86
+ : [`${where}: the manifest says ${state}, ${cli} lacks it`];
87
+ };
88
+ const optionsOf = (options) => new Set(options.map((option) => longName(option.flags)));
89
+ const compareOptions = (cli, where, entries, options) => {
90
+ const has = optionsOf(options);
91
+ return [...new Set([...has, ...Object.keys(entries)])].sort().flatMap((name) => {
92
+ const entry = entries[name];
93
+ return compare(cli, `${where} ${name}`, entry === undefined ? undefined : stateOf(entry), has.has(name));
94
+ });
95
+ };
96
+ /** Where a CLI's `commands --json` disagrees with its column of the manifest; empty when it agrees. */
97
+ export const parityProblems = (manifest, cli, program) => {
98
+ const found = new Map();
99
+ const walk = (command) => {
100
+ found.set(command.path.join(" "), command);
101
+ command.commands.forEach(walk);
102
+ };
103
+ program.commands.forEach(walk);
104
+ const problems = compareOptions(cli, "(global)", manifest.globalOptions, program.globalOptions);
105
+ const paths = [...new Set([...found.keys(), ...Object.keys(manifest.commands)])].sort();
106
+ for (const path of paths) {
107
+ if (coveringRow(manifest, path))
108
+ continue;
109
+ const row = manifest.commands[path];
110
+ const command = found.get(path);
111
+ problems.push(...compare(cli, path, row?.state, command !== undefined));
112
+ if (row && command && present(cli, row.state) !== false && !oneSided(row.state))
113
+ problems.push(...compareOptions(cli, path, row.options ?? {}, command.options));
114
+ }
115
+ return problems;
116
+ };
117
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/parity/manifest.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leemour/cli-messaging",
3
- "version": "0.67.0",
3
+ "version": "0.68.0",
4
4
  "description": "The messenger-neutral half of a messaging CLI: domain model, message locators, rendering, name resolution, the SQLite seam, the command skeleton and shared read commands, the send guard, run records and the message store",
5
5
  "license": "MIT",
6
6
  "author": "Viacheslav Ptsarev",
@@ -15,6 +15,7 @@
15
15
  "packageManager": "pnpm@11.20.0",
16
16
  "files": [
17
17
  "dist",
18
+ "parity.json",
18
19
  "README.md",
19
20
  "LICENSE"
20
21
  ],
@@ -38,7 +39,12 @@
38
39
  "./services": {
39
40
  "types": "./dist/services/index.d.ts",
40
41
  "default": "./dist/services/index.js"
41
- }
42
+ },
43
+ "./parity": {
44
+ "types": "./dist/parity/index.d.ts",
45
+ "default": "./dist/parity/index.js"
46
+ },
47
+ "./parity.json": "./parity.json"
42
48
  },
43
49
  "scripts": {
44
50
  "build": "tsc --build && node scripts/bundle-drizzle.ts",
@@ -56,7 +62,8 @@
56
62
  "smoke:bun": "bun run scripts/smoke.ts",
57
63
  "prepare": "lefthook install || true",
58
64
  "secrets:scan": "gitleaks git --no-banner --redact .",
59
- "prepublishOnly": "pnpm build"
65
+ "prepublishOnly": "pnpm build",
66
+ "parity:seed": "node --experimental-strip-types scripts/parity-seed.ts"
60
67
  },
61
68
  "dependencies": {
62
69
  "@bomb.sh/tab": "0.0.22",
@@ -94,5 +101,8 @@
94
101
  },
95
102
  "peerDependencies": {
96
103
  "commander": ">=15"
104
+ },
105
+ "bin": {
106
+ "cli-messaging-parity": "dist/parity/bin.js"
97
107
  }
98
108
  }