@fnndsc/brasa 0.35.2 → 0.36.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.
Files changed (55) hide show
  1. package/dist/buildinfo.json +1 -1
  2. package/dist/builtins/fs/ls.js +35 -0
  3. package/dist/builtins/fs/ls.js.map +1 -1
  4. package/dist/builtins/help.d.ts +5 -0
  5. package/dist/builtins/help.js +90 -17
  6. package/dist/builtins/help.js.map +1 -1
  7. package/dist/builtins/net/query.csv.d.ts +1 -18
  8. package/dist/builtins/net/query.csv.js +43 -3
  9. package/dist/builtins/net/query.csv.js.map +1 -1
  10. package/dist/builtins/net/query.ignored.d.ts +16 -0
  11. package/dist/builtins/net/query.ignored.js +64 -0
  12. package/dist/builtins/net/query.ignored.js.map +1 -0
  13. package/dist/builtins/net/query.js +14 -66
  14. package/dist/builtins/net/query.js.map +1 -1
  15. package/dist/builtins/net/query.view.d.ts +8 -0
  16. package/dist/builtins/net/query.view.js +74 -0
  17. package/dist/builtins/net/query.view.js.map +1 -0
  18. package/dist/builtins/pronouns.d.ts +8 -0
  19. package/dist/builtins/pronouns.js +39 -0
  20. package/dist/builtins/pronouns.js.map +1 -0
  21. package/dist/builtins/res/gather.js +27 -8
  22. package/dist/builtins/res/gather.js.map +1 -1
  23. package/dist/builtins/sys/command.d.ts +20 -0
  24. package/dist/builtins/sys/command.js +40 -0
  25. package/dist/builtins/sys/command.js.map +1 -0
  26. package/dist/builtins/sys/grep.d.ts +48 -0
  27. package/dist/builtins/sys/grep.js +327 -0
  28. package/dist/builtins/sys/grep.js.map +1 -0
  29. package/dist/chris/commandFallback.js +15 -0
  30. package/dist/chris/commandFallback.js.map +1 -1
  31. package/dist/chris/help.d.ts +2 -0
  32. package/dist/chris/help.js +87 -16
  33. package/dist/chris/help.js.map +1 -1
  34. package/dist/chris/references.js +2 -2
  35. package/dist/chris/references.js.map +1 -1
  36. package/dist/core/backend.d.ts +6 -0
  37. package/dist/core/backend.js.map +1 -1
  38. package/dist/core/commandRegistry.d.ts +6 -0
  39. package/dist/core/commandRegistry.js.map +1 -1
  40. package/dist/core/coreCommands.js +6 -0
  41. package/dist/core/coreCommands.js.map +1 -1
  42. package/dist/core/dispatch.js +32 -5
  43. package/dist/core/dispatch.js.map +1 -1
  44. package/dist/core/expansion.js +16 -5
  45. package/dist/core/expansion.js.map +1 -1
  46. package/dist/core/listing.d.ts +50 -0
  47. package/dist/core/listing.js +76 -0
  48. package/dist/core/listing.js.map +1 -0
  49. package/dist/notes.json +1 -1
  50. package/dist/session/answer.d.ts +82 -0
  51. package/dist/session/answer.js +129 -9
  52. package/dist/session/answer.js.map +1 -1
  53. package/dist/session/answerAdapters.js +39 -3
  54. package/dist/session/answerAdapters.js.map +1 -1
  55. package/package.json +1 -1
@@ -11,6 +11,8 @@
11
11
  *
12
12
  * @module
13
13
  */
14
+ import { listingIn_take, listingOperands_of } from '../../core/listing.js';
15
+ import { answerNumbering_of, handleWords_of, numberedFooter_of } from '../../session/answer.js';
14
16
  import chalk from 'chalk';
15
17
  import path from 'path';
16
18
  import { table_render } from '@fnndsc/chili/screen/screen.js';
@@ -67,8 +69,13 @@ function cohort_render(state) {
67
69
  if (state.series.length === 0) {
68
70
  return envelope_ok(`${chalk.gray('The cohort is empty. Gather something with `gather add <path>`.')}\n`, model);
69
71
  }
70
- const rows = state.series.map((member, index) => ({
71
- '#': index + 1,
72
+ // Each member wears the handle an index expands to (#1099): one sequence
73
+ // per kind, as the cohort's numbering counts them.
74
+ const numbered = answerNumbering_of(GATHER_MODEL_KIND, state) ?? [];
75
+ const words = handleWords_of(numbered);
76
+ const kindCode = (member) => (member.kind === 'dir' ? 'DIR' : member.kind === 'file' ? 'FIL' : 'SER');
77
+ const rows = state.series.map((member) => ({
78
+ '@': words.get(`${kindCode(member)}:${member.vfsPath}`) ?? '',
72
79
  kind: member.kind,
73
80
  member: member_label(member),
74
81
  state: member_state(member),
@@ -82,9 +89,9 @@ function cohort_render(state) {
82
89
  if (placeCount > 0)
83
90
  parts.push(`${placeCount} ${placeCount === 1 ? 'place' : 'places'}`);
84
91
  const title = state.name === null ? 'Cohort' : `Cohort · ${state.name}`;
85
- return envelope_ok(`${table_render(rows, ['#', 'kind', 'member', 'state', 'path'], {
92
+ return envelope_ok(`${table_render(rows, ['@', 'kind', 'member', 'state', 'path'], {
86
93
  title: { title, justification: 'center' },
87
- })}${chalk.gray(parts.join(' · '))}\n`, model);
94
+ })}${chalk.gray(parts.join(' · '))}\n${numbered.length > 0 ? `${chalk.gray(numberedFooter_of(numbered))}\n` : ''}`, model);
88
95
  }
89
96
  /**
90
97
  * Takes paths into the cohort.
@@ -207,10 +214,22 @@ export async function builtin_gather(args) {
207
214
  try {
208
215
  if (subcommand === undefined || subcommand === 'list')
209
216
  return cohort_render(await cohort_read());
210
- if (subcommand === 'add')
211
- return await gather_add(operands);
212
- if (subcommand === 'remove' || subcommand === 'rm')
213
- return await gather_remove(operands);
217
+ if (subcommand === 'add' || subcommand === 'remove' || subcommand === 'rm') {
218
+ // With no operands, a listing piped in is the operand list (#1103):
219
+ // `query … | gather add`. With neither, the verb says what it needs
220
+ // rather than taking the held listing behind the operator's back.
221
+ let given = operands;
222
+ if (given.length === 0) {
223
+ const piped = listingIn_take();
224
+ if (piped === null) {
225
+ return gather_error(`gather ${subcommand}: what? give paths or handles (@SER3), \${listing}, or pipe a listing in (query … | gather ${subcommand === 'rm' ? 'remove' : subcommand})`);
226
+ }
227
+ given = listingOperands_of(piped) ?? [];
228
+ if (given.length === 0)
229
+ return gather_error(`gather ${subcommand}: the listing piped in has nothing to ${subcommand === 'add' ? 'gather' : 'remove'}.`);
230
+ }
231
+ return subcommand === 'add' ? await gather_add(given) : await gather_remove(given);
232
+ }
214
233
  if (subcommand === 'clear')
215
234
  return await gather_clear();
216
235
  if (subcommand === 'name')
@@ -1 +1 @@
1
- {"version":3,"file":"gather.js","sourceRoot":"","sources":["../../../src/builtins/res/gather.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gather.js","sourceRoot":"","sources":["../../../src/builtins/res/gather.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @file command: run the system's program of a name, not chell's builtin of
3
+ * the same name (#1104).
4
+ *
5
+ * POSIX's own `command` skips functions and aliases; chell's skips its
6
+ * builtins. The line goes to the surface's host shell whole, as
7
+ * `command <name> <args>`, so the host runs its real program (and answers
8
+ * `command -v` as it always does), reading whatever was piped in:
9
+ * `query … | command grep -i t1` is plain text grep, no listing logic.
10
+ *
11
+ * @module
12
+ */
13
+ import { CommandEnvelope } from '@fnndsc/menu';
14
+ /**
15
+ * `command <name> [args...]`
16
+ *
17
+ * @param args - The program and its words.
18
+ * @returns What the program wrote, or why it could not run.
19
+ */
20
+ export declare function builtin_command(args: string[]): Promise<CommandEnvelope>;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @file command: run the system's program of a name, not chell's builtin of
3
+ * the same name (#1104).
4
+ *
5
+ * POSIX's own `command` skips functions and aliases; chell's skips its
6
+ * builtins. The line goes to the surface's host shell whole, as
7
+ * `command <name> <args>`, so the host runs its real program (and answers
8
+ * `command -v` as it always does), reading whatever was piped in:
9
+ * `query … | command grep -i t1` is plain text grep, no listing logic.
10
+ *
11
+ * @module
12
+ */
13
+ import { envelope_ok, envelope_error } from '@fnndsc/menu';
14
+ import { stdin_take } from '../games/stdin.js';
15
+ import { listingIn_take } from '../../core/listing.js';
16
+ import { surface_get } from '../../core/surface.js';
17
+ /** A word as a POSIX shell reads it back. */
18
+ function word_quote(word) {
19
+ return /^[\w@%+=:,./-]+$/.test(word) ? word : `'${word.replace(/'/g, `'\\''`)}'`;
20
+ }
21
+ /**
22
+ * `command <name> [args...]`
23
+ *
24
+ * @param args - The program and its words.
25
+ * @returns What the program wrote, or why it could not run.
26
+ */
27
+ export async function builtin_command(args) {
28
+ // What was piped in is the program's input; a listing has no meaning there.
29
+ listingIn_take();
30
+ const input = stdin_take() ?? '';
31
+ if (args.length === 0)
32
+ return envelope_error('', undefined, 'command: a program to run: command <name> [args...] (the system program, not the builtin)\n');
33
+ const surface = surface_get();
34
+ if (!surface.capabilities.pipeSegments) {
35
+ return envelope_error('', undefined, `command ${args[0]}: this surface cannot run system programs\n`);
36
+ }
37
+ const out = await surface.pipeSegment(`command ${args.map(word_quote).join(' ')}`, Buffer.from(input, 'utf-8'));
38
+ return envelope_ok(out.toString('utf-8'));
39
+ }
40
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/builtins/sys/command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAmB,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,6CAA6C;AAC7C,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACnF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAc;IAClD,4EAA4E;IAC5E,cAAc,EAAE,CAAC;IACjB,MAAM,KAAK,GAAW,UAAU,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,6FAA6F,CAAC,CAAC;IAC3J,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,GAAG,GAAW,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACxH,OAAO,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { CommandEnvelope } from '@fnndsc/menu';
2
+ import { type AnswerRow } from '../../session/answer.js';
3
+ /** What a grep line asks. */
4
+ export interface GrepAsk {
5
+ insensitive: boolean;
6
+ invert: boolean;
7
+ word: boolean;
8
+ extended: boolean;
9
+ fixed: boolean;
10
+ count: boolean;
11
+ patterns: string[];
12
+ /** A flag or operand this grep does not take: the line is the system grep's. */
13
+ foreign: string | null;
14
+ }
15
+ /**
16
+ * Reads a grep line's words.
17
+ *
18
+ * @param args - The words after `grep`.
19
+ * @returns What they ask.
20
+ */
21
+ export declare function grepArgs_parse(args: ReadonlyArray<string>): GrepAsk;
22
+ /**
23
+ * Builds the test a line (or a row's text) passes.
24
+ *
25
+ * @param ask - What the grep line asks.
26
+ * @returns The test, or a refusal when a pattern does not compile.
27
+ */
28
+ export declare function grepMatcher_build(ask: GrepAsk): ((text: string) => boolean) | {
29
+ refused: string;
30
+ };
31
+ /**
32
+ * Which rows a grep keeps of a listing: a matching row with its parents, a
33
+ * matched group with all its rows; under -v the matching rows (and a
34
+ * matched group's rows) go, and a group stays while any of its rows does.
35
+ *
36
+ * @param rows - The listing's rows, in order.
37
+ * @param matches - The test.
38
+ * @param invert - grep -v.
39
+ * @returns The kept rows, in order.
40
+ */
41
+ export declare function listingRows_grep(rows: ReadonlyArray<AnswerRow>, matches: (text: string) => boolean, invert: boolean): AnswerRow[];
42
+ /**
43
+ * `grep [-ivwEFc] [-e PATTERN]... [PATTERN]`
44
+ *
45
+ * @param args - The words after `grep`.
46
+ * @returns The envelope.
47
+ */
48
+ export declare function builtin_grep(args: string[]): Promise<CommandEnvelope>;
@@ -0,0 +1,327 @@
1
+ /**
2
+ * @file grep: the system's grep on text, and a grep that knows numbered
3
+ * listings (#1100).
4
+ *
5
+ * Fed a numbered listing (a PACS answer, `ls`, the cohort; piped in, or the
6
+ * held one when nothing is piped), grep keeps rows rather than lines: a row
7
+ * that matches stays with its parents for context, a matched group (a study,
8
+ * a patient) keeps all of its rows, and every kept row keeps the handle it
9
+ * wore — `@SER41` stays `@SER41`. The kept rows become the held listing, so
10
+ * `gather add @SER41` and `${listing}` read what grep left.
11
+ *
12
+ * It takes grep's own flags only, with grep's meanings: -i -v -w -E -F -c
13
+ * and -e. Anything else (or a file operand) is the system grep's business,
14
+ * and the whole line goes there as text, said in one line. Plain text in is
15
+ * always the system grep where the surface can run it; `command grep` skips
16
+ * this builtin altogether.
17
+ *
18
+ * @module
19
+ */
20
+ import chalk from 'chalk';
21
+ import { envelope_ok, envelope_error } from '@fnndsc/menu';
22
+ import { stdin_take } from '../games/stdin.js';
23
+ import { listingIn_take } from '../../core/listing.js';
24
+ import { answerKinds_get } from '../../core/answerKinds.js';
25
+ import { surface_get } from '../../core/surface.js';
26
+ import { answer_get, answerFilter_apply, answerNumbering_of, answerOrdinals_attach, answerRow_key, answerRows_of, handle_word, numberedFooter_of, } from '../../session/answer.js';
27
+ /** grep's long flags this grep takes, to their short form. */
28
+ const LONG_FLAGS = {
29
+ '--ignore-case': 'i', '--invert-match': 'v', '--word-regexp': 'w',
30
+ '--extended-regexp': 'E', '--fixed-strings': 'F', '--count': 'c',
31
+ };
32
+ /**
33
+ * Reads a grep line's words.
34
+ *
35
+ * @param args - The words after `grep`.
36
+ * @returns What they ask.
37
+ */
38
+ export function grepArgs_parse(args) {
39
+ const ask = { insensitive: false, invert: false, word: false, extended: false, fixed: false, count: false, patterns: [], foreign: null };
40
+ const operands = [];
41
+ const flag = (letter) => {
42
+ if (letter === 'i')
43
+ ask.insensitive = true;
44
+ else if (letter === 'v')
45
+ ask.invert = true;
46
+ else if (letter === 'w')
47
+ ask.word = true;
48
+ else if (letter === 'E')
49
+ ask.extended = true;
50
+ else if (letter === 'F')
51
+ ask.fixed = true;
52
+ else if (letter === 'c')
53
+ ask.count = true;
54
+ else
55
+ return false;
56
+ return true;
57
+ };
58
+ for (let at = 0; at < args.length; at++) {
59
+ const word = args[at] ?? '';
60
+ if (word === '--') {
61
+ operands.push(...args.slice(at + 1));
62
+ break;
63
+ }
64
+ if (word === '-e' || word === '--regexp') {
65
+ const pattern = args[at + 1];
66
+ if (pattern === undefined) {
67
+ ask.foreign = word;
68
+ break;
69
+ }
70
+ ask.patterns.push(pattern);
71
+ at += 1;
72
+ continue;
73
+ }
74
+ if (word.startsWith('--regexp=')) {
75
+ ask.patterns.push(word.slice('--regexp='.length));
76
+ continue;
77
+ }
78
+ if (word.startsWith('--')) {
79
+ const short = LONG_FLAGS[word];
80
+ if (short === undefined) {
81
+ ask.foreign ??= word;
82
+ continue;
83
+ }
84
+ flag(short);
85
+ continue;
86
+ }
87
+ if (word.startsWith('-') && word.length > 1) {
88
+ // Clustered short flags: -vi. An -e inside a cluster takes the rest.
89
+ const letters = word.slice(1);
90
+ for (let index = 0; index < letters.length; index++) {
91
+ const letter = letters[index] ?? '';
92
+ if (letter === 'e') {
93
+ const rest = letters.slice(index + 1);
94
+ const pattern = rest !== '' ? rest : args[++at];
95
+ if (pattern === undefined)
96
+ ask.foreign ??= word;
97
+ else
98
+ ask.patterns.push(pattern);
99
+ break;
100
+ }
101
+ if (!flag(letter)) {
102
+ ask.foreign ??= `-${letter}`;
103
+ break;
104
+ }
105
+ }
106
+ continue;
107
+ }
108
+ operands.push(word);
109
+ }
110
+ if (ask.patterns.length === 0 && operands.length > 0)
111
+ ask.patterns.push(operands.shift());
112
+ // A file to read is the system grep's: this one reads a listing or a pipe.
113
+ if (operands.length > 0)
114
+ ask.foreign ??= operands[0] ?? null;
115
+ return ask;
116
+ }
117
+ /**
118
+ * A basic regular expression (grep's default) as a JavaScript one: in a BRE
119
+ * `\|` `\(` `\)` `\{` `\}` `\+` `\?` are the operators and the bare
120
+ * characters are literal.
121
+ *
122
+ * @param pattern - The BRE.
123
+ * @returns The equivalent JavaScript source.
124
+ */
125
+ function basic_toSource(pattern) {
126
+ let out = '';
127
+ for (let at = 0; at < pattern.length; at++) {
128
+ const char = pattern[at] ?? '';
129
+ if (char === '\\' && at + 1 < pattern.length) {
130
+ const next = pattern[at + 1] ?? '';
131
+ out += '|(){}+?'.includes(next) ? next : `\\${next}`;
132
+ at += 1;
133
+ }
134
+ else {
135
+ out += '|(){}+?'.includes(char) ? `\\${char}` : char;
136
+ }
137
+ }
138
+ return out;
139
+ }
140
+ /**
141
+ * Builds the test a line (or a row's text) passes.
142
+ *
143
+ * @param ask - What the grep line asks.
144
+ * @returns The test, or a refusal when a pattern does not compile.
145
+ */
146
+ export function grepMatcher_build(ask) {
147
+ const sources = ask.patterns.map((pattern) => {
148
+ const source = ask.fixed ? pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') : ask.extended ? pattern : basic_toSource(pattern);
149
+ return ask.word ? `(?<![\\w])(?:${source})(?![\\w])` : `(?:${source})`;
150
+ });
151
+ try {
152
+ const expression = new RegExp(sources.join('|'), ask.insensitive ? 'i' : '');
153
+ return (text) => expression.test(text);
154
+ }
155
+ catch (error) {
156
+ return { refused: `grep: ${error instanceof Error ? error.message : String(error)}` };
157
+ }
158
+ }
159
+ /**
160
+ * Which rows a grep keeps of a listing: a matching row with its parents, a
161
+ * matched group with all its rows; under -v the matching rows (and a
162
+ * matched group's rows) go, and a group stays while any of its rows does.
163
+ *
164
+ * @param rows - The listing's rows, in order.
165
+ * @param matches - The test.
166
+ * @param invert - grep -v.
167
+ * @returns The kept rows, in order.
168
+ */
169
+ export function listingRows_grep(rows, matches, invert) {
170
+ const byKey = new Map(rows.map((row) => [answerRow_key(row), row]));
171
+ const ancestors = (row) => {
172
+ const chain = [];
173
+ let parent = row.parent === undefined ? undefined : byKey.get(row.parent);
174
+ while (parent !== undefined && !chain.includes(parent)) {
175
+ chain.push(parent);
176
+ parent = parent.parent === undefined ? undefined : byKey.get(parent.parent);
177
+ }
178
+ return chain;
179
+ };
180
+ const hit = (row) => matches(row.text ?? row.label);
181
+ // A row is caught by its own match or a matched group above it.
182
+ const caught = (row) => hit(row) || ancestors(row).some(hit);
183
+ const hasChildren = new Set(rows.flatMap((row) => (row.parent === undefined ? [] : [row.parent])));
184
+ const kept = new Set();
185
+ if (!invert) {
186
+ for (const row of rows) {
187
+ if (!caught(row))
188
+ continue;
189
+ kept.add(answerRow_key(row));
190
+ for (const parent of ancestors(row))
191
+ kept.add(answerRow_key(parent));
192
+ }
193
+ }
194
+ else {
195
+ for (const row of rows) {
196
+ if (caught(row) || hasChildren.has(answerRow_key(row)))
197
+ continue;
198
+ kept.add(answerRow_key(row));
199
+ for (const parent of ancestors(row))
200
+ kept.add(answerRow_key(parent));
201
+ }
202
+ // A group with no rows of its own stays when it is not caught.
203
+ for (const row of rows) {
204
+ const key = answerRow_key(row);
205
+ if (!caught(row) && !hasChildren.has(key) && row.parent === undefined)
206
+ kept.add(key);
207
+ }
208
+ }
209
+ return rows.filter((row) => kept.has(answerRow_key(row)));
210
+ }
211
+ /** What a listing kind is called in grep's footer. */
212
+ const LISTING_WORDS = { 'pacs.query': 'PACS answer', 'fs.listing': 'listing', 'gather.cohort': 'cohort' };
213
+ /** A leaf kind's plural, for the count. */
214
+ const KIND_PLURALS = { SER: 'series', FIL: 'files', DIR: 'folders' };
215
+ /**
216
+ * Filters a listing and says what was kept, in the listing's own shape.
217
+ *
218
+ * @param listing - The listing: its kind, model, and the line that made it.
219
+ * @param ask - What the grep line asks.
220
+ * @param line - The grep line itself, for the footer.
221
+ * @returns The envelope: the kept rows with their handles, and the filtered model.
222
+ */
223
+ function listing_grep(listing, ask, line) {
224
+ const built = grepMatcher_build(ask);
225
+ if (typeof built !== 'function')
226
+ return envelope_error('', undefined, `${built.refused}\n`);
227
+ const rows = answerRows_of(listing.kind, listing.data) ?? [];
228
+ const numbered = answerNumbering_of(listing.kind, listing.data) ?? [];
229
+ const kept = listingRows_grep(rows, built, ask.invert);
230
+ const groups = new Set(answerKinds_get().filter((kind) => kind.group === true).map((kind) => kind.code));
231
+ const leaves = (list) => list.filter((row) => !groups.has(row.kind));
232
+ if (ask.count)
233
+ return envelope_ok(`${leaves(kept).length}\n`);
234
+ const ordinalOf = new Map(rows.map((row, at) => [answerRow_key(row), numbered[at]?.ordinal ?? 0]));
235
+ const keptKeys = new Set(kept.map(answerRow_key));
236
+ const keptHandles = kept.map((row) => ({ kind: row.kind, ordinal: ordinalOf.get(answerRow_key(row)) ?? 0, address: row.address ?? row.values[0] ?? '' }));
237
+ const width = Math.max(0, ...keptHandles.map((handle) => handle_word(handle).length));
238
+ const depthOf = (row) => {
239
+ let depth = 0;
240
+ let parent = row.parent;
241
+ while (parent !== undefined && depth < 8) {
242
+ const up = rows.find((one) => answerRow_key(one) === parent);
243
+ if (up === undefined)
244
+ break;
245
+ depth += 1;
246
+ parent = up.parent;
247
+ }
248
+ return depth;
249
+ };
250
+ const lines = kept.map((row, at) => `${' '.repeat(depthOf(row) + 1)}${chalk.cyan(handle_word(keptHandles[at]).padEnd(width))} ${row.text ?? row.label}`);
251
+ const leafKinds = [...new Set(leaves(rows).map((row) => row.kind))];
252
+ const plural = leafKinds.length === 1 ? KIND_PLURALS[leafKinds[0] ?? ''] ?? 'rows' : 'rows';
253
+ const what = `${LISTING_WORDS[listing.kind] ?? listing.kind}${listing.source !== '' ? `: ${listing.source}` : ''}`;
254
+ const tally = `${leaves(kept).length} of ${leaves(rows).length} ${plural} kept (${line}; ${what})`;
255
+ const footer = numberedFooter_of(keptHandles);
256
+ const rendered = `${lines.join('\n')}${lines.length > 0 ? '\n' : ''}${chalk.gray(` ${tally}`)}\n${footer !== '' ? `${chalk.gray(` ${footer}`)}\n` : ''}`;
257
+ // grep's own status: no match is exit 1, and an empty listing replaces nothing.
258
+ if (leaves(kept).length === 0)
259
+ process.exitCode = 1;
260
+ const filtered = answerFilter_apply(listing.kind, listing.data, keptKeys);
261
+ if (filtered === null || typeof filtered !== 'object')
262
+ return envelope_ok(rendered);
263
+ // The kept rows keep the numbers they wore, wherever the listing goes next.
264
+ answerOrdinals_attach(filtered, new Map([...keptKeys].map((key) => [key, ordinalOf.get(key) ?? 0])));
265
+ return envelope_ok(rendered, { kind: listing.kind, data: filtered });
266
+ }
267
+ /**
268
+ * Plain grep on text: the system's, where the surface runs host programs;
269
+ * otherwise this grep's own line filter, with the same flags.
270
+ *
271
+ * @param text - The text piped in.
272
+ * @param ask - What the grep line asks.
273
+ * @param args - The words after `grep`, for the system grep.
274
+ * @returns The envelope.
275
+ */
276
+ async function text_grep(text, ask, args) {
277
+ const surface = surface_get();
278
+ if (surface.capabilities.pipeSegments) {
279
+ const out = await surface.pipeSegment(`grep ${args.map(word_quote).join(' ')}`, Buffer.from(text, 'utf-8'));
280
+ return envelope_ok(out.toString('utf-8'));
281
+ }
282
+ if (ask.foreign !== null)
283
+ return envelope_error('', undefined, `grep ${ask.foreign}: this surface has no system grep to pass it to\n`);
284
+ const built = grepMatcher_build(ask);
285
+ if (typeof built !== 'function')
286
+ return envelope_error('', undefined, `${built.refused}\n`);
287
+ const lines = text.replace(/\n$/, '').split('\n').filter((line) => built(line) !== ask.invert);
288
+ if (lines.length === 0)
289
+ process.exitCode = 1;
290
+ return envelope_ok(ask.count ? `${lines.length}\n` : lines.length > 0 ? `${lines.join('\n')}\n` : '');
291
+ }
292
+ /** A word as a POSIX shell reads it back. */
293
+ function word_quote(word) {
294
+ return /^[\w@%+=:,./-]+$/.test(word) ? word : `'${word.replace(/'/g, `'\\''`)}'`;
295
+ }
296
+ /**
297
+ * `grep [-ivwEFc] [-e PATTERN]... [PATTERN]`
298
+ *
299
+ * @param args - The words after `grep`.
300
+ * @returns The envelope.
301
+ */
302
+ export async function builtin_grep(args) {
303
+ const ask = grepArgs_parse(args);
304
+ const line = `grep ${args.map(word_quote).join(' ')}`.trim();
305
+ const piped = listingIn_take();
306
+ const text = stdin_take();
307
+ // A flag or a file this grep does not take: the system grep's, as text.
308
+ if (ask.foreign !== null) {
309
+ const answered = await text_grep(text ?? '', ask, args);
310
+ if (answered.status === 'ok') {
311
+ return { ...answered, renderedErr: `${chalk.gray(`grep ${ask.foreign}: passed to the system grep; the held listing is unchanged`)}\n` };
312
+ }
313
+ return answered;
314
+ }
315
+ if (ask.patterns.length === 0)
316
+ return envelope_error('', undefined, 'grep: a pattern to keep: grep [-ivwEFc] [-e PATTERN] PATTERN\n');
317
+ if (piped !== null)
318
+ return listing_grep({ ...piped, source: '' }, ask, line);
319
+ if (text !== null)
320
+ return text_grep(text, ask, args);
321
+ // Nothing piped: the held listing, as an index reads it.
322
+ const held = answer_get();
323
+ if (held === null)
324
+ return envelope_error('', undefined, 'grep: nothing to filter: pipe text or a listing in, or list something first (query, ls, gather list)\n');
325
+ return listing_grep({ kind: held.kind, data: held.data, source: held.source }, ask, line);
326
+ }
327
+ //# sourceMappingURL=grep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/builtins/sys/grep.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,15 @@
1
+ /**
2
+ * @file What the ChRIS backend does with a word the registry does not answer.
3
+ *
4
+ * A plugin named with its version runs as that plugin. A word naming a
5
+ * plugin or a pipeline in `/bin` runs it (a captured line runs only a
6
+ * pipeline: a plugin's run prints live). Anything else goes to chili, when
7
+ * chili has the command, with a notice ahead of its output.
8
+ *
9
+ * @module
10
+ */
11
+ import { CHRIS_PRONOUN_LINES } from './help.js';
12
+ import { pronounsPage_render } from '../builtins/pronouns.js';
1
13
  import { envelope_deliver, sink_get } from '../core/sink.js';
2
14
  import { exitCode_read, handler_runDirect } from '../core/handlerRun.js';
3
15
  import { vfs } from '../lib/vfs/vfs.js';
@@ -103,6 +115,9 @@ export const chrisFallback = {
103
115
  return chili_delegate(command, args);
104
116
  },
105
117
  help: async (command) => {
118
+ // The session's pronouns: the core's page with this backend's lines.
119
+ if (command === 'pronouns')
120
+ return pronounsPage_render(CHRIS_PRONOUN_LINES);
106
121
  // A plugin version (`pl-dircopy-v2.1.2`) is its own executable.
107
122
  if (/-v[^/]+$/.test(command))
108
123
  return pluginExecutableHelp_render(command);
@@ -1 +1 @@
1
- {"version":3,"file":"commandFallback.js","sourceRoot":"","sources":["../../src/chris/commandFallback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commandFallback.js","sourceRoot":"","sources":["../../src/chris/commandFallback.ts"],"names":[],"mappings":"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"}
@@ -13,4 +13,6 @@ import type { CommandHelp } from '../core/commandRegistry.js';
13
13
  */
14
14
  export declare const RESOURCE_LIST_OPTIONS: string[];
15
15
  /** The help for each ChRIS command, by name. */
16
+ /** The pronouns the ChRIS session answers, for `help pronouns`. */
17
+ export declare const CHRIS_PRONOUN_LINES: ReadonlyArray<string>;
16
18
  export declare const chrisHelp: Record<string, CommandHelp>;