@leemour/cli-messaging 0.97.0 → 0.99.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 +8 -7
- package/dist/cli/bot/admins.d.ts +10 -0
- package/dist/cli/bot/admins.d.ts.map +1 -0
- package/dist/cli/bot/admins.js +114 -0
- package/dist/cli/bot/admins.js.map +1 -0
- package/dist/cli/bot/command.d.ts.map +1 -1
- package/dist/cli/bot/command.js +17 -15
- package/dist/cli/bot/command.js.map +1 -1
- package/dist/cli/bot/context.d.ts +2 -0
- package/dist/cli/bot/context.d.ts.map +1 -1
- package/dist/cli/bot/context.js +7 -0
- package/dist/cli/bot/context.js.map +1 -1
- package/dist/cli/bot/messages.d.ts.map +1 -1
- package/dist/cli/bot/messages.js +20 -10
- package/dist/cli/bot/messages.js.map +1 -1
- package/dist/cli/bot/port.d.ts +128 -2
- package/dist/cli/bot/port.d.ts.map +1 -1
- package/dist/cli/bot/port.js.map +1 -1
- package/dist/cli/bot/registry.d.ts +2 -0
- package/dist/cli/bot/registry.d.ts.map +1 -1
- package/dist/cli/bot/registry.js +2 -0
- package/dist/cli/bot/registry.js.map +1 -1
- package/dist/cli/bot/setup.d.ts +9 -0
- package/dist/cli/bot/setup.d.ts.map +1 -0
- package/dist/cli/bot/setup.js +155 -0
- package/dist/cli/bot/setup.js.map +1 -0
- package/dist/cli/bot/updates.d.ts +23 -0
- package/dist/cli/bot/updates.d.ts.map +1 -0
- package/dist/cli/bot/updates.js +61 -0
- package/dist/cli/bot/updates.js.map +1 -0
- package/dist/cli/bot/watch.d.ts +9 -0
- package/dist/cli/bot/watch.d.ts.map +1 -0
- package/dist/cli/bot/watch.js +197 -0
- package/dist/cli/bot/watch.js.map +1 -0
- package/dist/cli/config-command.js +1 -1
- package/dist/cli/config-command.js.map +1 -1
- package/dist/cli/deadline.d.ts.map +1 -1
- package/dist/cli/deadline.js +11 -2
- package/dist/cli/deadline.js.map +1 -1
- package/dist/cli/index.d.ts +5 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/admin-moderation-command.js +2 -2
- package/dist/cli/messenger/admin-moderation-command.js.map +1 -1
- package/dist/cli/messenger/context.d.ts +18 -2
- package/dist/cli/messenger/context.d.ts.map +1 -1
- package/dist/cli/messenger/context.js +30 -8
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/download-command.d.ts.map +1 -1
- package/dist/cli/messenger/download-command.js +97 -30
- package/dist/cli/messenger/download-command.js.map +1 -1
- package/dist/cli/messenger/guard-commands.js +3 -3
- package/dist/cli/messenger/guard-commands.js.map +1 -1
- package/dist/cli/messenger/messages-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-command.js +45 -11
- package/dist/cli/messenger/messages-command.js.map +1 -1
- package/dist/cli/messenger/models-command.d.ts +1 -1
- package/dist/cli/messenger/models-command.d.ts.map +1 -1
- package/dist/cli/messenger/models-command.js +64 -3
- package/dist/cli/messenger/models-command.js.map +1 -1
- package/dist/cli/messenger/observed.d.ts.map +1 -1
- package/dist/cli/messenger/observed.js +27 -10
- package/dist/cli/messenger/observed.js.map +1 -1
- package/dist/cli/messenger/port.d.ts +26 -9
- package/dist/cli/messenger/port.d.ts.map +1 -1
- package/dist/cli/messenger/port.js.map +1 -1
- package/dist/cli/messenger/stored.d.ts +3 -2
- package/dist/cli/messenger/stored.d.ts.map +1 -1
- package/dist/cli/messenger/stored.js +75 -33
- package/dist/cli/messenger/stored.js.map +1 -1
- package/dist/cli/messenger/watch-command.d.ts +2 -1
- package/dist/cli/messenger/watch-command.d.ts.map +1 -1
- package/dist/cli/messenger/watch-command.js +11 -2
- package/dist/cli/messenger/watch-command.js.map +1 -1
- package/dist/embeddings/embed.d.ts +22 -0
- package/dist/embeddings/embed.d.ts.map +1 -0
- package/dist/embeddings/embed.js +69 -0
- package/dist/embeddings/embed.js.map +1 -0
- package/dist/embeddings/models.d.ts +33 -0
- package/dist/embeddings/models.d.ts.map +1 -0
- package/dist/embeddings/models.js +85 -0
- package/dist/embeddings/models.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kit/contract.d.ts +39 -0
- package/dist/kit/contract.d.ts.map +1 -0
- package/dist/kit/contract.js +449 -0
- package/dist/kit/contract.js.map +1 -0
- package/dist/kit/fake.d.ts +16 -0
- package/dist/kit/fake.d.ts.map +1 -0
- package/dist/kit/fake.js +457 -0
- package/dist/kit/fake.js.map +1 -0
- package/dist/kit/index.d.ts +4 -0
- package/dist/kit/index.d.ts.map +1 -0
- package/dist/kit/index.js +4 -0
- package/dist/kit/index.js.map +1 -0
- package/dist/kit/seed.d.ts +38 -0
- package/dist/kit/seed.d.ts.map +1 -0
- package/dist/kit/seed.js +83 -0
- package/dist/kit/seed.js.map +1 -0
- package/dist/mcp/resources.d.ts +6 -1
- package/dist/mcp/resources.d.ts.map +1 -1
- package/dist/mcp/resources.js +15 -5
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +3 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool.d.ts +12 -2
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/mcp/tool.js +15 -8
- package/dist/mcp/tool.js.map +1 -1
- package/dist/mcp/tools/chats.js +3 -3
- package/dist/mcp/tools/chats.js.map +1 -1
- package/dist/mcp/tools/contacts.js +3 -3
- package/dist/mcp/tools/contacts.js.map +1 -1
- package/dist/mcp/tools/inbox.d.ts.map +1 -1
- package/dist/mcp/tools/inbox.js +3 -4
- package/dist/mcp/tools/inbox.js.map +1 -1
- package/dist/mcp/tools/messages.d.ts.map +1 -1
- package/dist/mcp/tools/messages.js +19 -12
- package/dist/mcp/tools/messages.js.map +1 -1
- package/dist/mcp/tools/review.d.ts.map +1 -1
- package/dist/mcp/tools/review.js +3 -4
- package/dist/mcp/tools/review.js.map +1 -1
- package/dist/moderation/check.d.ts +3 -1
- package/dist/moderation/check.d.ts.map +1 -1
- package/dist/moderation/check.js +3 -2
- package/dist/moderation/check.js.map +1 -1
- package/dist/parity/audit.d.ts +11 -9
- package/dist/parity/audit.d.ts.map +1 -1
- package/dist/parity/audit.js +63 -46
- package/dist/parity/audit.js.map +1 -1
- package/dist/parity/bin.js +17 -8
- package/dist/parity/bin.js.map +1 -1
- package/dist/parity/catalogue.d.ts.map +1 -1
- package/dist/parity/catalogue.js +7 -1
- package/dist/parity/catalogue.js.map +1 -1
- package/dist/parity/manifest.d.ts +19 -12
- package/dist/parity/manifest.d.ts.map +1 -1
- package/dist/parity/manifest.js +60 -37
- package/dist/parity/manifest.js.map +1 -1
- package/dist/parity/pages.d.ts +3 -3
- package/dist/parity/pages.d.ts.map +1 -1
- package/dist/parity/pages.js +4 -5
- package/dist/parity/pages.js.map +1 -1
- package/dist/parity/seed.d.ts +11 -0
- package/dist/parity/seed.d.ts.map +1 -0
- package/dist/parity/seed.js +99 -0
- package/dist/parity/seed.js.map +1 -0
- package/dist/parity/wording.d.ts +4 -3
- package/dist/parity/wording.d.ts.map +1 -1
- package/dist/parity/wording.js +21 -10
- package/dist/parity/wording.js.map +1 -1
- package/dist/search/correct.d.ts +25 -0
- package/dist/search/correct.d.ts.map +1 -0
- package/dist/search/correct.js +65 -0
- package/dist/search/correct.js.map +1 -0
- package/dist/search/query.d.ts +7 -2
- package/dist/search/query.d.ts.map +1 -1
- package/dist/search/query.js +12 -8
- package/dist/search/query.js.map +1 -1
- package/dist/search/search.d.ts +27 -0
- package/dist/search/search.d.ts.map +1 -0
- package/dist/search/search.js +65 -0
- package/dist/search/search.js.map +1 -0
- package/dist/sends/guarded.d.ts +12 -0
- package/dist/sends/guarded.d.ts.map +1 -1
- package/dist/sends/guarded.js +24 -2
- package/dist/sends/guarded.js.map +1 -1
- package/dist/services/archive.d.ts +8 -3
- package/dist/services/archive.d.ts.map +1 -1
- package/dist/services/archive.js +24 -3
- package/dist/services/archive.js.map +1 -1
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +13 -9
- package/dist/services/chats.js.map +1 -1
- package/dist/services/deps.d.ts +13 -0
- package/dist/services/deps.d.ts.map +1 -1
- package/dist/services/deps.js +12 -0
- package/dist/services/deps.js.map +1 -1
- package/dist/services/inbox.d.ts +14 -4
- package/dist/services/inbox.d.ts.map +1 -1
- package/dist/services/inbox.js +55 -14
- package/dist/services/inbox.js.map +1 -1
- package/dist/services/index.d.ts +2 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/messages.d.ts +51 -6
- package/dist/services/messages.d.ts.map +1 -1
- package/dist/services/messages.js +202 -19
- package/dist/services/messages.js.map +1 -1
- package/dist/services/moderation.d.ts.map +1 -1
- package/dist/services/moderation.js +7 -1
- package/dist/services/moderation.js.map +1 -1
- package/dist/services/people.d.ts.map +1 -1
- package/dist/services/people.js +8 -5
- package/dist/services/people.js.map +1 -1
- package/dist/speech/hearing.d.ts +1 -1
- package/dist/speech/hearing.d.ts.map +1 -1
- package/dist/speech/hearing.js +2 -2
- package/dist/speech/hearing.js.map +1 -1
- package/dist/speech/install.d.ts +8 -1
- package/dist/speech/install.d.ts.map +1 -1
- package/dist/speech/install.js +11 -4
- package/dist/speech/install.js.map +1 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/sqlite/accounts.d.ts +1 -0
- package/dist/store/sqlite/accounts.d.ts.map +1 -1
- package/dist/store/sqlite/accounts.js +6 -1
- package/dist/store/sqlite/accounts.js.map +1 -1
- package/dist/store/sqlite/completeness.d.ts +17 -0
- package/dist/store/sqlite/completeness.d.ts.map +1 -0
- package/dist/store/sqlite/completeness.js +30 -0
- package/dist/store/sqlite/completeness.js.map +1 -0
- package/dist/store/sqlite/messages.d.ts +2 -2
- package/dist/store/sqlite/messages.d.ts.map +1 -1
- package/dist/store/sqlite/messages.js +10 -14
- package/dist/store/sqlite/messages.js.map +1 -1
- package/dist/store/sqlite/search-index.d.ts.map +1 -1
- package/dist/store/sqlite/search-index.js +45 -9
- package/dist/store/sqlite/search-index.js.map +1 -1
- package/dist/store/sqlite/search.d.ts +2 -0
- package/dist/store/sqlite/search.d.ts.map +1 -1
- package/dist/store/sqlite/search.js +27 -17
- package/dist/store/sqlite/search.js.map +1 -1
- package/dist/store/sqlite/words.d.ts +83 -0
- package/dist/store/sqlite/words.d.ts.map +1 -0
- package/dist/store/sqlite/words.js +255 -0
- package/dist/store/sqlite/words.js.map +1 -0
- package/dist/store/store.d.ts +40 -0
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +19 -2
- package/dist/store/store.js.map +1 -1
- package/package.json +10 -4
- package/parity.json +1136 -389
- package/dist/domain/capabilities.d.ts +0 -22
- package/dist/domain/capabilities.d.ts.map +0 -1
- package/dist/domain/capabilities.js +0 -2
- package/dist/domain/capabilities.js.map +0 -1
package/dist/parity/manifest.js
CHANGED
|
@@ -1,22 +1,41 @@
|
|
|
1
|
-
const STATES = ["both", "max-only", "tg-only", "planned"];
|
|
2
1
|
export const longName = (flags) => flags.split(/[\s,|]+/).find((part) => part.startsWith("--")) ?? flags;
|
|
3
|
-
const
|
|
4
|
-
|
|
2
|
+
const presence = (entry) => (typeof entry === "string" ? { in: entry } : entry);
|
|
3
|
+
/** `true` the CLI must have it, `false` it must not, `undefined` it is planned and either passes. */
|
|
4
|
+
export const expected = (entry, cli) => {
|
|
5
|
+
const row = presence(entry);
|
|
6
|
+
if (row.in === "all" || row.in.includes(cli))
|
|
7
|
+
return true;
|
|
8
|
+
return row.planned?.[cli] === undefined ? false : undefined;
|
|
9
|
+
};
|
|
10
|
+
/** A row only one CLI has, for a stated reason: everything below it is that CLI's alone, and unrowed. */
|
|
11
|
+
export const solo = (row) => row.in !== "all" && row.in.length === 1 && row.reason !== undefined;
|
|
12
|
+
const describe = (row) => row.in === "all" ? "all" : row.in.length === 1 ? `${row.in[0]}-only` : row.in.join("+") || "in none";
|
|
13
|
+
const entryProblems = (clis, where, entry) => {
|
|
5
14
|
if (typeof entry === "string")
|
|
6
|
-
return entry === "
|
|
15
|
+
return entry === "all" ? [] : [`${where}: "${entry}" — only "all" stands alone`];
|
|
7
16
|
const problems = [];
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
17
|
+
const names = entry.in === "all" ? [] : Array.isArray(entry.in) ? entry.in : undefined;
|
|
18
|
+
if (names === undefined)
|
|
19
|
+
return [`${where}: "in" is neither "all" nor a list of CLIs`];
|
|
20
|
+
const planned = Object.entries(entry.planned ?? {});
|
|
21
|
+
for (const name of [...names, ...planned.map(([name]) => name)])
|
|
22
|
+
if (!clis.includes(name))
|
|
23
|
+
problems.push(`${where}: no such CLI "${name}" — the manifest's clis are ${clis.join(", ")}`);
|
|
24
|
+
if (new Set(names).size !== names.length)
|
|
25
|
+
problems.push(`${where}: a CLI named twice in "in"`);
|
|
26
|
+
if (names.length > 0 && clis.every((cli) => names.includes(cli)))
|
|
27
|
+
problems.push(`${where}: in every CLI — write "all"`);
|
|
28
|
+
for (const [name, by] of planned) {
|
|
29
|
+
if (names.includes(name) || entry.in === "all")
|
|
30
|
+
problems.push(`${where}: planned for ${name}, which has it`);
|
|
31
|
+
if (!by)
|
|
32
|
+
problems.push(`${where}: planned for ${name} without who closes it`);
|
|
13
33
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
problems.push(`${where}: "by" on a ${entry.state} row`);
|
|
34
|
+
const lacking = clis.filter((cli) => expected(entry, cli) === false);
|
|
35
|
+
if (lacking.length > 0 && !entry.reason)
|
|
36
|
+
problems.push(`${where}: not in ${lacking.join(", ")}, without a reason`);
|
|
37
|
+
if (lacking.length === 0 && entry.reason)
|
|
38
|
+
problems.push(`${where}: a reason, but no CLI lacks it unplanned`);
|
|
20
39
|
return problems;
|
|
21
40
|
};
|
|
22
41
|
const unsorted = (where, keys) => {
|
|
@@ -24,21 +43,23 @@ const unsorted = (where, keys) => {
|
|
|
24
43
|
const at = keys.findIndex((key, index) => key !== sorted[index]);
|
|
25
44
|
return at === -1 ? [] : [`${where}: keys out of order at "${keys[at]}" — run the seed to sort`];
|
|
26
45
|
};
|
|
27
|
-
|
|
28
|
-
/** The row above `path` that covers it and everything else below it: one-sided, or planned as a subtree. */
|
|
46
|
+
/** The row above `path` that covers it and everything else below it: one CLI's alone, or planned as a subtree. */
|
|
29
47
|
export const coveringRow = (manifest, path) => {
|
|
30
48
|
const words = path.split(" ");
|
|
31
49
|
for (let length = words.length - 1; length > 0; length--) {
|
|
32
50
|
const parent = words.slice(0, length).join(" ");
|
|
33
51
|
const row = manifest.commands[parent];
|
|
34
|
-
if (row && (
|
|
52
|
+
if (row && (solo(row) || row.subtree))
|
|
35
53
|
return parent;
|
|
36
54
|
}
|
|
37
55
|
return undefined;
|
|
38
56
|
};
|
|
39
57
|
/** Everything wrong with the manifest itself; empty when it is well-formed. */
|
|
40
58
|
export const manifestProblems = (manifest) => {
|
|
59
|
+
const clis = Array.isArray(manifest.clis) ? manifest.clis : [];
|
|
41
60
|
const problems = [
|
|
61
|
+
...(clis.length === 0 ? ['clis: no CLIs — the manifest starts with "clis": ["max", "tg"]'] : []),
|
|
62
|
+
...(new Set(clis).size === clis.length ? [] : ["clis: a CLI named twice"]),
|
|
42
63
|
...unsorted("options", Object.keys(manifest.options)),
|
|
43
64
|
...unsorted("globalOptions", Object.keys(manifest.globalOptions)),
|
|
44
65
|
...unsorted("commands", Object.keys(manifest.commands)),
|
|
@@ -50,20 +71,23 @@ export const manifestProblems = (manifest) => {
|
|
|
50
71
|
used.add(name);
|
|
51
72
|
if (!manifest.options[name])
|
|
52
73
|
problems.push(`${where} ${name}: not in the option catalogue`);
|
|
53
|
-
problems.push(...entryProblems(`${where} ${name}`, entry));
|
|
74
|
+
problems.push(...entryProblems(clis, `${where} ${name}`, entry));
|
|
54
75
|
}
|
|
55
76
|
};
|
|
56
77
|
optionEntries("(global)", manifest.globalOptions);
|
|
57
78
|
for (const [path, row] of Object.entries(manifest.commands)) {
|
|
58
|
-
problems.push(...entryProblems(path, row));
|
|
59
|
-
if (row.subtree && row.
|
|
60
|
-
problems.push(`${path}: subtree on a
|
|
79
|
+
problems.push(...entryProblems(clis, path, row));
|
|
80
|
+
if (row.subtree && Object.keys(row.planned ?? {}).length === 0)
|
|
81
|
+
problems.push(`${path}: subtree on a row nobody plans`);
|
|
61
82
|
const parent = path.split(" ").slice(0, -1).join(" ");
|
|
62
83
|
if (parent && !manifest.commands[parent])
|
|
63
84
|
problems.push(`${path}: no row for its parent "${parent}"`);
|
|
64
85
|
const cover = coveringRow(manifest, path);
|
|
65
|
-
if (cover)
|
|
66
|
-
|
|
86
|
+
if (cover) {
|
|
87
|
+
const above = manifest.commands[cover];
|
|
88
|
+
const how = above?.subtree ? "planned" : above ? describe(above) : "";
|
|
89
|
+
problems.push(`${path}: under "${cover}", which is ${how} and covers it`);
|
|
90
|
+
}
|
|
67
91
|
optionEntries(path, row.options ?? {});
|
|
68
92
|
}
|
|
69
93
|
for (const [name, option] of Object.entries(manifest.options)) {
|
|
@@ -74,24 +98,23 @@ export const manifestProblems = (manifest) => {
|
|
|
74
98
|
}
|
|
75
99
|
return problems;
|
|
76
100
|
};
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
if (state === undefined)
|
|
101
|
+
const compare = (cli, where, entry, has) => {
|
|
102
|
+
if (entry === undefined)
|
|
80
103
|
return has ? [`${where}: not in the manifest — add its row first`] : [];
|
|
81
|
-
const
|
|
82
|
-
if (
|
|
104
|
+
const want = expected(entry, cli);
|
|
105
|
+
if (want === undefined || want === has)
|
|
83
106
|
return [];
|
|
107
|
+
const row = presence(entry);
|
|
84
108
|
return has
|
|
85
|
-
? [`${where}: ${cli} has it, the manifest says ${
|
|
86
|
-
: [`${where}: the manifest says ${
|
|
109
|
+
? [`${where}: ${cli} has it, the manifest says ${describe(row)}`]
|
|
110
|
+
: [`${where}: the manifest says ${describe(row)}, ${cli} lacks it`];
|
|
87
111
|
};
|
|
88
112
|
const optionsOf = (options) => new Set(options.map((option) => longName(option.flags)));
|
|
89
113
|
const compareOptions = (cli, where, entries, options) => {
|
|
90
114
|
const has = optionsOf(options);
|
|
91
|
-
return [...new Set([...has, ...Object.keys(entries)])]
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
});
|
|
115
|
+
return [...new Set([...has, ...Object.keys(entries)])]
|
|
116
|
+
.sort()
|
|
117
|
+
.flatMap((name) => compare(cli, `${where} ${name}`, entries[name], has.has(name)));
|
|
95
118
|
};
|
|
96
119
|
/** Where a CLI's `commands --json` disagrees with its column of the manifest; empty when it agrees. */
|
|
97
120
|
export const parityProblems = (manifest, cli, program) => {
|
|
@@ -108,8 +131,8 @@ export const parityProblems = (manifest, cli, program) => {
|
|
|
108
131
|
continue;
|
|
109
132
|
const row = manifest.commands[path];
|
|
110
133
|
const command = found.get(path);
|
|
111
|
-
problems.push(...compare(cli, path, row
|
|
112
|
-
if (row && command &&
|
|
134
|
+
problems.push(...compare(cli, path, row, command !== undefined));
|
|
135
|
+
if (row && command && expected(row, cli) !== false && !solo(row))
|
|
113
136
|
problems.push(...compareOptions(cli, path, row.options ?? {}, command.options));
|
|
114
137
|
}
|
|
115
138
|
return problems;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/parity/manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/parity/manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/parity/pages.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Cli, type CommandsJson, type Manifest } from "./manifest.js";
|
|
2
2
|
/**
|
|
3
3
|
* Every `<cli> <command> --option` on a user page whose option the command does not have. An option
|
|
4
|
-
* the manifest
|
|
5
|
-
*
|
|
4
|
+
* the manifest gives or plans for this CLI on that command passes — docs come first, the code follows —
|
|
5
|
+
* and one this CLI lacks does not.
|
|
6
6
|
*/
|
|
7
7
|
export declare const pageProblems: (page: string, cli: Cli, manifest: Manifest, program: CommandsJson) => string[];
|
|
8
8
|
//# sourceMappingURL=pages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/parity/pages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/parity/pages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAY,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAIpF;;;;GAIG;AACH,eAAO,MAAM,YAAY,SAAU,MAAM,OAAO,GAAG,YAAY,QAAQ,WAAW,YAAY,KAAG,MAAM,EA2BtG,CAAA"}
|
package/dist/parity/pages.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { expected } from "./manifest.js";
|
|
1
2
|
const optionsOf = (flags) => flags.match(/--[a-z][a-z-]*/g) ?? [];
|
|
2
|
-
const stateOf = (entry) => (typeof entry === "string" ? entry : entry.state);
|
|
3
3
|
/**
|
|
4
4
|
* Every `<cli> <command> --option` on a user page whose option the command does not have. An option
|
|
5
|
-
* the manifest
|
|
6
|
-
*
|
|
5
|
+
* the manifest gives or plans for this CLI on that command passes — docs come first, the code follows —
|
|
6
|
+
* and one this CLI lacks does not.
|
|
7
7
|
*/
|
|
8
8
|
export const pageProblems = (page, cli, manifest, program) => {
|
|
9
9
|
const commands = new Map();
|
|
@@ -13,7 +13,6 @@ export const pageProblems = (page, cli, manifest, program) => {
|
|
|
13
13
|
};
|
|
14
14
|
program.commands.forEach(walk);
|
|
15
15
|
const globals = new Set(program.globalOptions.flatMap((option) => optionsOf(option.flags)));
|
|
16
|
-
const other = cli === "tg" ? "max-only" : "tg-only";
|
|
17
16
|
const problems = [];
|
|
18
17
|
const line = new RegExp(`\\b${cli} ((?:[a-z][a-z-]* ?)+)([^\\n\`#|]*)`, "g");
|
|
19
18
|
for (const [, words, rest] of page.matchAll(line)) {
|
|
@@ -29,7 +28,7 @@ export const pageProblems = (page, cli, manifest, program) => {
|
|
|
29
28
|
if (commands.get(command)?.has(option) || globals.has(option))
|
|
30
29
|
continue;
|
|
31
30
|
const entry = planned[option];
|
|
32
|
-
if (entry !== undefined &&
|
|
31
|
+
if (entry !== undefined && expected(entry, cli) !== false)
|
|
33
32
|
continue;
|
|
34
33
|
problems.push(`${cli} ${command} ${option}`);
|
|
35
34
|
}
|
package/dist/parity/pages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/parity/pages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/parity/pages.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,QAAQ,EAAiB,MAAM,eAAe,CAAA;AAEpF,MAAM,SAAS,GAAG,CAAC,KAAa,EAAY,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;AAEnF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,GAAQ,EAAE,QAAkB,EAAE,OAAqB,EAAY,EAAE;IAC1G,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC/C,MAAM,IAAI,GAAG,CAAC,OAAoB,EAAE,EAAE;QACpC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3G,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC,CAAA;IACD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE3F,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,qCAAqC,EAAE,GAAG,CAAC,CAAA;IAC5E,KAAK,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC7C,mDAAmD;QACnD,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACpC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aACvG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QACrC,IAAI,OAAO,KAAK,SAAS;YAAE,SAAQ;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,EAAE,CAAA;QACzD,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3E,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAQ;YACvE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;YAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK;gBAAE,SAAQ;YACnE,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Cli, type CommandsJson, type Manifest } from "./manifest.js";
|
|
2
|
+
/**
|
|
3
|
+
* `manifest` with every command and option the programs have and it lacks, sorted. A program per CLI
|
|
4
|
+
* of the manifest, known by its `cli`. A row that is there is left as it is.
|
|
5
|
+
*/
|
|
6
|
+
export declare const seedPrograms: (manifest: Manifest, programs: readonly CommandsJson[]) => Manifest;
|
|
7
|
+
/** `manifest` with `cli` added to its CLIs and every command and option planned for it, by `"?"`. */
|
|
8
|
+
export declare const seedCli: (manifest: Manifest, cli: Cli) => Manifest;
|
|
9
|
+
/** `parity.json` as Biome formats it: two-space JSON, each list of CLIs on one line. */
|
|
10
|
+
export declare const formatManifest: (manifest: unknown) => string;
|
|
11
|
+
//# sourceMappingURL=seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/parity/seed.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,GAAG,EAER,KAAK,YAAY,EAIjB,KAAK,QAAQ,EAGd,MAAM,eAAe,CAAA;AAuBtB;;;GAGG;AACH,eAAO,MAAM,YAAY,aAAc,QAAQ,YAAY,SAAS,YAAY,EAAE,KAAG,QA6CpF,CAAA;AAED,qGAAqG;AACrG,eAAO,MAAM,OAAO,aAAc,QAAQ,OAAO,GAAG,KAAG,QA2BtD,CAAA;AAED,wFAAwF;AACxF,eAAO,MAAM,cAAc,aAAc,OAAO,KAAG,MACkG,CAAA"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { coveringRow, longName, solo, } from "./manifest.js";
|
|
2
|
+
const sorted = (record) => Object.fromEntries(Object.entries(record).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)));
|
|
3
|
+
const commandsOf = (program) => {
|
|
4
|
+
const found = new Map();
|
|
5
|
+
const walk = (command) => {
|
|
6
|
+
found.set(command.path.join(" "), command);
|
|
7
|
+
command.commands.forEach(walk);
|
|
8
|
+
};
|
|
9
|
+
program.commands.forEach(walk);
|
|
10
|
+
return found;
|
|
11
|
+
};
|
|
12
|
+
const where = (clis, having) => having.length === clis.length
|
|
13
|
+
? { in: "all" }
|
|
14
|
+
: {
|
|
15
|
+
in: [...having],
|
|
16
|
+
planned: Object.fromEntries(clis.filter((cli) => !having.includes(cli)).map((cli) => [cli, "?"])),
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* `manifest` with every command and option the programs have and it lacks, sorted. A program per CLI
|
|
20
|
+
* of the manifest, known by its `cli`. A row that is there is left as it is.
|
|
21
|
+
*/
|
|
22
|
+
export const seedPrograms = (manifest, programs) => {
|
|
23
|
+
const missing = manifest.clis.filter((cli) => !programs.some((program) => program.cli === cli));
|
|
24
|
+
if (missing.length > 0)
|
|
25
|
+
throw new Error(`no commands --json for ${missing.join(", ")}`);
|
|
26
|
+
const next = structuredClone(manifest);
|
|
27
|
+
const trees = new Map(programs.map((program) => [program.cli, commandsOf(program)]));
|
|
28
|
+
const catalogue = (option) => {
|
|
29
|
+
const name = longName(option.flags);
|
|
30
|
+
if (next.options[name])
|
|
31
|
+
return;
|
|
32
|
+
const value = /[<[][^>\]]+[>\]]/.exec(option.flags)?.[0];
|
|
33
|
+
next.options[name] = {
|
|
34
|
+
...(value ? { value } : {}),
|
|
35
|
+
meaning: option.description,
|
|
36
|
+
...(option.default === undefined ? {} : { default: String(option.default) }),
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
const seedOptions = (entries, options) => {
|
|
40
|
+
for (const option of [...options.values()].flat()) {
|
|
41
|
+
catalogue(option);
|
|
42
|
+
const name = longName(option.flags);
|
|
43
|
+
const having = next.clis.filter((cli) => options.get(cli)?.some((one) => longName(one.flags) === name));
|
|
44
|
+
const place = where(next.clis, having);
|
|
45
|
+
entries[name] ??= place.in === "all" ? "all" : place;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
seedOptions(next.globalOptions, new Map(programs.map((program) => [program.cli, program.globalOptions])));
|
|
49
|
+
const paths = new Set([...trees.values()].flatMap((tree) => [...tree.keys()]));
|
|
50
|
+
for (const path of [...paths].sort()) {
|
|
51
|
+
if (coveringRow(next, path))
|
|
52
|
+
continue;
|
|
53
|
+
const having = next.clis.filter((cli) => trees.get(cli)?.has(path));
|
|
54
|
+
next.commands[path] ??= where(next.clis, having);
|
|
55
|
+
const row = next.commands[path];
|
|
56
|
+
if (solo(row))
|
|
57
|
+
continue;
|
|
58
|
+
const options = { ...row.options };
|
|
59
|
+
seedOptions(options, new Map(having.map((cli) => [cli, trees.get(cli)?.get(path)?.options ?? []])));
|
|
60
|
+
if (Object.keys(options).length > 0)
|
|
61
|
+
row.options = sorted(options);
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
...next,
|
|
65
|
+
options: sorted(next.options),
|
|
66
|
+
globalOptions: sorted(next.globalOptions),
|
|
67
|
+
commands: sorted(next.commands),
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
/** `manifest` with `cli` added to its CLIs and every command and option planned for it, by `"?"`. */
|
|
71
|
+
export const seedCli = (manifest, cli) => {
|
|
72
|
+
if (manifest.clis.includes(cli))
|
|
73
|
+
throw new Error(`${cli} is in the parity manifest already`);
|
|
74
|
+
const plan = (entry) => {
|
|
75
|
+
const row = typeof entry === "string" ? { in: entry } : entry;
|
|
76
|
+
return {
|
|
77
|
+
in: row.in === "all" ? [...manifest.clis] : row.in,
|
|
78
|
+
...(row.reason ? { reason: row.reason } : {}),
|
|
79
|
+
planned: { ...row.planned, [cli]: "?" },
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const planAll = (entries) => Object.fromEntries(Object.entries(entries).map(([name, entry]) => [name, plan(entry)]));
|
|
83
|
+
return {
|
|
84
|
+
...manifest,
|
|
85
|
+
clis: [...manifest.clis, cli],
|
|
86
|
+
globalOptions: planAll(manifest.globalOptions),
|
|
87
|
+
commands: Object.fromEntries(Object.entries(manifest.commands).map(([path, row]) => [
|
|
88
|
+
path,
|
|
89
|
+
{
|
|
90
|
+
...plan(row),
|
|
91
|
+
...(row.subtree ? { subtree: true } : {}),
|
|
92
|
+
...(row.options ? { options: planAll(row.options) } : {}),
|
|
93
|
+
},
|
|
94
|
+
])),
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
/** `parity.json` as Biome formats it: two-space JSON, each list of CLIs on one line. */
|
|
98
|
+
export const formatManifest = (manifest) => `${JSON.stringify(manifest, null, 2).replace(/\[\s+((?:"[^"]*",?\s*)+)\]/g, (_, items) => `[${items.trim().split(/,\s*/).join(", ")}]`)}\n`;
|
|
99
|
+
//# sourceMappingURL=seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/parity/seed.ts"],"names":[],"mappings":"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"}
|
package/dist/parity/wording.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type CommandsJson, type Manifest } from "./manifest.js";
|
|
2
2
|
/**
|
|
3
|
-
* Every
|
|
4
|
-
* `note` is a clash already written down, and is left
|
|
3
|
+
* Every shared option that the CLIs having it describe in different words; each program is known by
|
|
4
|
+
* its `cli`. An option whose catalogue entry has a `note` is a clash already written down, and is left
|
|
5
|
+
* to whoever the note names.
|
|
5
6
|
*/
|
|
6
|
-
export declare const wordingProblems: (manifest: Manifest,
|
|
7
|
+
export declare const wordingProblems: (manifest: Manifest, programs: readonly CommandsJson[]) => string[];
|
|
7
8
|
//# sourceMappingURL=wording.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wording.d.ts","sourceRoot":"","sources":["../../src/parity/wording.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"wording.d.ts","sourceRoot":"","sources":["../../src/parity/wording.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAwB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAmBtF;;;;GAIG;AACH,eAAO,MAAM,eAAe,aAAc,QAAQ,YAAY,SAAS,YAAY,EAAE,KAAG,MAAM,EAiB7F,CAAA"}
|
package/dist/parity/wording.js
CHANGED
|
@@ -11,21 +11,32 @@ const descriptions = (program) => {
|
|
|
11
11
|
program.commands.forEach(walk);
|
|
12
12
|
return found;
|
|
13
13
|
};
|
|
14
|
+
const sharedBy = (manifest, entry) => {
|
|
15
|
+
const where = typeof entry === "string" ? entry : entry.in;
|
|
16
|
+
return where === "all" ? manifest.clis : where;
|
|
17
|
+
};
|
|
14
18
|
/**
|
|
15
|
-
* Every
|
|
16
|
-
* `note` is a clash already written down, and is left
|
|
19
|
+
* Every shared option that the CLIs having it describe in different words; each program is known by
|
|
20
|
+
* its `cli`. An option whose catalogue entry has a `note` is a clash already written down, and is left
|
|
21
|
+
* to whoever the note names.
|
|
17
22
|
*/
|
|
18
|
-
export const wordingProblems = (manifest,
|
|
23
|
+
export const wordingProblems = (manifest, programs) => {
|
|
19
24
|
const rows = [
|
|
20
25
|
...Object.entries(manifest.globalOptions).map(([name, entry]) => ["(global)", name, entry]),
|
|
21
26
|
...Object.entries(manifest.commands).flatMap(([path, row]) => Object.entries(row.options ?? {}).map(([name, entry]) => [path, name, entry])),
|
|
22
27
|
];
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
.filter((
|
|
29
|
-
|
|
28
|
+
const said = new Map(programs.map((program) => [program.cli, descriptions(program)]));
|
|
29
|
+
return rows.flatMap(([path, name, entry]) => {
|
|
30
|
+
if (manifest.options[name]?.note)
|
|
31
|
+
return [];
|
|
32
|
+
const where = `${path} ${name}`;
|
|
33
|
+
const clis = sharedBy(manifest, entry).filter((cli) => said.has(cli));
|
|
34
|
+
if (clis.length < 2)
|
|
35
|
+
return [];
|
|
36
|
+
const sentences = clis.map((cli) => said.get(cli)?.get(where));
|
|
37
|
+
if (sentences.every((sentence) => sentence === sentences[0]))
|
|
38
|
+
return [];
|
|
39
|
+
return [`${where}: ${clis.map((cli, index) => `${cli} says "${sentences[index]}"`).join(", ")}`];
|
|
40
|
+
});
|
|
30
41
|
};
|
|
31
42
|
//# sourceMappingURL=wording.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wording.js","sourceRoot":"","sources":["../../src/parity/wording.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"wording.js","sourceRoot":"","sources":["../../src/parity/wording.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** What correction needs of the store: the vocabulary, never the messages. */
|
|
2
|
+
export interface Vocabulary {
|
|
3
|
+
knownTerms(terms: string[]): Promise<Set<string>>;
|
|
4
|
+
termCandidates(trigrams: string[], lengths: {
|
|
5
|
+
shortest: number;
|
|
6
|
+
longest: number;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
term: string;
|
|
9
|
+
docs: number;
|
|
10
|
+
}[]>;
|
|
11
|
+
}
|
|
12
|
+
/** One edit for a word of up to four letters, two above: a short word has few letters to spare. */
|
|
13
|
+
export declare const maxEdits: (word: string) => number;
|
|
14
|
+
/**
|
|
15
|
+
* Optimal string alignment — Levenshtein plus a swap of two neighbours, the commonest typo — that
|
|
16
|
+
* gives up as soon as the distance passes `max`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const editDistance: (a: string, b: string, max: number) => number;
|
|
19
|
+
/**
|
|
20
|
+
* The words the store does not know, each with its nearest known words: the smallest distance wins,
|
|
21
|
+
* then the most frequent, at most five (as the prototype measured, `bench/search/common.ts`). A word
|
|
22
|
+
* with no close neighbour, or made of digits, is left as it is.
|
|
23
|
+
*/
|
|
24
|
+
export declare const correctWords: (vocabulary: Vocabulary, words: string[]) => Promise<Map<string, string[]>>;
|
|
25
|
+
//# sourceMappingURL=correct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correct.d.ts","sourceRoot":"","sources":["../../src/search/correct.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACjD,cAAc,CACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;CAC7C;AAKD,mGAAmG;AACnG,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,MAAoC,CAAA;AAE5E;;;GAGG;AACH,eAAO,MAAM,YAAY,MAAO,MAAM,KAAK,MAAM,OAAO,MAAM,KAAG,MAyBhE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,eAAsB,UAAU,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA2BzG,CAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { normalize } from "../store/normalize.js";
|
|
2
|
+
import { trigrams } from "./trigrams.js";
|
|
3
|
+
/** Two-letter words are nearly all filler — en, de, to — and would turn `len` into `en`. */
|
|
4
|
+
const SHORTEST_CORRECTION = 3;
|
|
5
|
+
/** One edit for a word of up to four letters, two above: a short word has few letters to spare. */
|
|
6
|
+
export const maxEdits = (word) => (word.length <= 4 ? 1 : 2);
|
|
7
|
+
/**
|
|
8
|
+
* Optimal string alignment — Levenshtein plus a swap of two neighbours, the commonest typo — that
|
|
9
|
+
* gives up as soon as the distance passes `max`.
|
|
10
|
+
*/
|
|
11
|
+
export const editDistance = (a, b, max) => {
|
|
12
|
+
if (Math.abs(a.length - b.length) > max)
|
|
13
|
+
return max + 1;
|
|
14
|
+
let before = new Array(b.length + 1).fill(0);
|
|
15
|
+
let previous = Array.from({ length: b.length + 1 }, (_, at) => at);
|
|
16
|
+
let current = new Array(b.length + 1).fill(0);
|
|
17
|
+
for (let i = 1; i <= a.length; i++) {
|
|
18
|
+
current[0] = i;
|
|
19
|
+
let lowest = i;
|
|
20
|
+
for (let j = 1; j <= b.length; j++) {
|
|
21
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
22
|
+
let value = Math.min(previous[j] + 1, current[j - 1] + 1, previous[j - 1] + cost);
|
|
23
|
+
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {
|
|
24
|
+
value = Math.min(value, before[j - 2] + 1);
|
|
25
|
+
}
|
|
26
|
+
current[j] = value;
|
|
27
|
+
lowest = Math.min(lowest, value);
|
|
28
|
+
}
|
|
29
|
+
if (lowest > max)
|
|
30
|
+
return max + 1;
|
|
31
|
+
[before, previous, current] = [previous, current, before];
|
|
32
|
+
}
|
|
33
|
+
return previous[b.length];
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* The words the store does not know, each with its nearest known words: the smallest distance wins,
|
|
37
|
+
* then the most frequent, at most five (as the prototype measured, `bench/search/common.ts`). A word
|
|
38
|
+
* with no close neighbour, or made of digits, is left as it is.
|
|
39
|
+
*/
|
|
40
|
+
export const correctWords = async (vocabulary, words) => {
|
|
41
|
+
const corrections = new Map();
|
|
42
|
+
const known = await vocabulary.knownTerms(words);
|
|
43
|
+
for (const typed of words) {
|
|
44
|
+
const word = normalize(typed);
|
|
45
|
+
if (known.has(typed) || /^\d*$/.test(word))
|
|
46
|
+
continue;
|
|
47
|
+
const max = maxEdits(word);
|
|
48
|
+
const near = (await vocabulary.termCandidates(trigrams(word), {
|
|
49
|
+
shortest: Math.max(SHORTEST_CORRECTION, word.length - max),
|
|
50
|
+
longest: word.length + max,
|
|
51
|
+
}))
|
|
52
|
+
.map((candidate) => ({ ...candidate, distance: editDistance(word, candidate.term, max) }))
|
|
53
|
+
.filter((candidate) => candidate.distance <= max);
|
|
54
|
+
if (near.length === 0)
|
|
55
|
+
continue;
|
|
56
|
+
const nearest = Math.min(...near.map((candidate) => candidate.distance));
|
|
57
|
+
corrections.set(typed, near
|
|
58
|
+
.filter((candidate) => candidate.distance === nearest)
|
|
59
|
+
.sort((a, b) => b.docs - a.docs)
|
|
60
|
+
.slice(0, 5)
|
|
61
|
+
.map((candidate) => candidate.term));
|
|
62
|
+
}
|
|
63
|
+
return corrections;
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=correct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correct.js","sourceRoot":"","sources":["../../src/search/correct.ts"],"names":[],"mappings":"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"}
|
package/dist/search/query.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Provider } from "../domain/models.js";
|
|
1
2
|
export type Term = {
|
|
2
3
|
kind: "word";
|
|
3
4
|
text: string;
|
|
@@ -5,7 +6,7 @@ export type Term = {
|
|
|
5
6
|
kind: "phrase";
|
|
6
7
|
words: string[];
|
|
7
8
|
};
|
|
8
|
-
export type Source =
|
|
9
|
+
export type Source = Provider | "all";
|
|
9
10
|
/**
|
|
10
11
|
* A parsed search (phase 2 plan §4). `required` is AND of groups, each group OR of terms — OR binds
|
|
11
12
|
* tighter than the implied AND. Words are as typed; normalizing them is the search's job.
|
|
@@ -22,7 +23,11 @@ export interface SearchQuery {
|
|
|
22
23
|
has: string[];
|
|
23
24
|
in?: Source;
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
+
/** `in:` and `--source` take a messenger the store holds, or `all`. */
|
|
27
|
+
export declare const sourceOf: (name: string, value: string, providers: readonly Provider[]) => Source;
|
|
28
|
+
/** `providers` are the messengers the store holds; `in:` takes one of them, or `all`. */
|
|
29
|
+
export declare const parseQuery: (query: string, { now, providers }?: {
|
|
26
30
|
now?: number;
|
|
31
|
+
providers?: readonly Provider[];
|
|
27
32
|
}) => SearchQuery;
|
|
28
33
|
//# sourceMappingURL=query.d.ts.map
|