@fnndsc/brasa 0.35.2 → 0.37.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/dist/buildinfo.json +1 -1
- package/dist/builtins/fs/ls.js +35 -0
- package/dist/builtins/fs/ls.js.map +1 -1
- package/dist/builtins/help.d.ts +12 -0
- package/dist/builtins/help.js +129 -55
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/helpSections.d.ts +88 -0
- package/dist/builtins/helpSections.js +237 -0
- package/dist/builtins/helpSections.js.map +1 -0
- package/dist/builtins/net/query.csv.d.ts +1 -18
- package/dist/builtins/net/query.csv.js +43 -3
- package/dist/builtins/net/query.csv.js.map +1 -1
- package/dist/builtins/net/query.ignored.d.ts +16 -0
- package/dist/builtins/net/query.ignored.js +64 -0
- package/dist/builtins/net/query.ignored.js.map +1 -0
- package/dist/builtins/net/query.js +14 -66
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/net/query.view.d.ts +8 -0
- package/dist/builtins/net/query.view.js +74 -0
- package/dist/builtins/net/query.view.js.map +1 -0
- package/dist/builtins/pronouns.d.ts +8 -0
- package/dist/builtins/pronouns.js +39 -0
- package/dist/builtins/pronouns.js.map +1 -0
- package/dist/builtins/res/gather.js +27 -8
- package/dist/builtins/res/gather.js.map +1 -1
- package/dist/builtins/sys/apropos.d.ts +22 -0
- package/dist/builtins/sys/apropos.js +41 -0
- package/dist/builtins/sys/apropos.js.map +1 -0
- package/dist/builtins/sys/command.d.ts +20 -0
- package/dist/builtins/sys/command.js +40 -0
- package/dist/builtins/sys/command.js.map +1 -0
- package/dist/builtins/sys/grep.d.ts +48 -0
- package/dist/builtins/sys/grep.js +327 -0
- package/dist/builtins/sys/grep.js.map +1 -0
- package/dist/chris/commandFallback.js +15 -0
- package/dist/chris/commandFallback.js.map +1 -1
- package/dist/chris/help.d.ts +2 -0
- package/dist/chris/help.js +87 -16
- package/dist/chris/help.js.map +1 -1
- package/dist/chris/references.js +2 -2
- package/dist/chris/references.js.map +1 -1
- package/dist/core/backend.d.ts +6 -0
- package/dist/core/backend.js.map +1 -1
- package/dist/core/commandRegistry.d.ts +6 -0
- package/dist/core/commandRegistry.js.map +1 -1
- package/dist/core/coreCommands.js +11 -0
- package/dist/core/coreCommands.js.map +1 -1
- package/dist/core/dispatch.js +32 -5
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/expansion.js +16 -5
- package/dist/core/expansion.js.map +1 -1
- package/dist/core/listing.d.ts +50 -0
- package/dist/core/listing.js +76 -0
- package/dist/core/listing.js.map +1 -0
- package/dist/notes.json +1 -1
- package/dist/session/answer.d.ts +82 -0
- package/dist/session/answer.js +129 -9
- package/dist/session/answer.js.map +1 -1
- package/dist/session/answerAdapters.js +39 -3
- package/dist/session/answerAdapters.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/** One section of help. */
|
|
2
|
+
export interface HelpSection {
|
|
3
|
+
/** One capitalised word: what `help <Section>` takes, and the category commands declare. */
|
|
4
|
+
name: string;
|
|
5
|
+
/** What the section is for, a sentence or two. */
|
|
6
|
+
blurb: string;
|
|
7
|
+
/** Commands that show what it holds, the first runnable ones of which `help` lists. */
|
|
8
|
+
examples: ReadonlyArray<string>;
|
|
9
|
+
}
|
|
10
|
+
/** The sections, in the order `help` lists them. */
|
|
11
|
+
export declare const HELP_SECTIONS: ReadonlyArray<HelpSection>;
|
|
12
|
+
/** The section that is not a list of commands: what the shell does to a line. */
|
|
13
|
+
export declare const SHELL_SECTION: HelpSection;
|
|
14
|
+
/** A Shell topic: its one line, and its page (or the command whose page it is). */
|
|
15
|
+
interface ShellTopic {
|
|
16
|
+
name: string;
|
|
17
|
+
summary: string;
|
|
18
|
+
page?: ReadonlyArray<string>;
|
|
19
|
+
}
|
|
20
|
+
/** The Shell section's topics, each `help <topic>`. */
|
|
21
|
+
export declare const SHELL_TOPICS: ReadonlyArray<ShellTopic>;
|
|
22
|
+
/** What the renderers read of the commands: a summary, whether it runs, its section. */
|
|
23
|
+
export interface HelpLookup {
|
|
24
|
+
/** The commands this session can run, with help, in listing order. */
|
|
25
|
+
commands(): ReadonlyArray<string>;
|
|
26
|
+
/** A command's one line. */
|
|
27
|
+
summary(name: string): string | undefined;
|
|
28
|
+
/** A command's description and options, for apropos. */
|
|
29
|
+
text(name: string): string;
|
|
30
|
+
/** A command's section. */
|
|
31
|
+
section(name: string): string | undefined;
|
|
32
|
+
/** The games shelf's commands, for the Games section. */
|
|
33
|
+
games(): ReadonlyArray<string>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A section's commands: those that declare it, and for Games the shelf.
|
|
37
|
+
*
|
|
38
|
+
* @param section - The section's name.
|
|
39
|
+
* @param lookup - The commands.
|
|
40
|
+
* @returns Its runnable commands.
|
|
41
|
+
*/
|
|
42
|
+
export declare function sectionCommands_of(section: string, lookup: HelpLookup): string[];
|
|
43
|
+
/**
|
|
44
|
+
* `help`: the table of contents. A section with nothing this session can
|
|
45
|
+
* run is left out, as are examples it cannot run.
|
|
46
|
+
*
|
|
47
|
+
* @param lookup - The commands.
|
|
48
|
+
* @returns The page.
|
|
49
|
+
*/
|
|
50
|
+
export declare function helpToc_render(lookup: HelpLookup): string;
|
|
51
|
+
/**
|
|
52
|
+
* The section a word names: exactly (`PACS`), or in any case when no command
|
|
53
|
+
* has that name (`navigation`).
|
|
54
|
+
*
|
|
55
|
+
* @param word - What followed `help`.
|
|
56
|
+
* @param isCommand - Whether a command has that name.
|
|
57
|
+
* @returns The section, or undefined.
|
|
58
|
+
*/
|
|
59
|
+
export declare function section_find(word: string, isCommand: (name: string) => boolean): HelpSection | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* A section's page: what it is for, then each command with its line.
|
|
62
|
+
*
|
|
63
|
+
* @param section - The section.
|
|
64
|
+
* @param lookup - The commands.
|
|
65
|
+
* @returns The page.
|
|
66
|
+
*/
|
|
67
|
+
export declare function helpSection_render(section: HelpSection, lookup: HelpLookup): string;
|
|
68
|
+
/**
|
|
69
|
+
* A Shell topic's own page, or undefined when it is not one (or is a
|
|
70
|
+
* command, whose own page answers).
|
|
71
|
+
*
|
|
72
|
+
* @param word - What followed `help`.
|
|
73
|
+
* @returns The page.
|
|
74
|
+
*/
|
|
75
|
+
export declare function shellTopic_render(word: string): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* `apropos <word>` (`man -k`): what holds the word, strongest first. A
|
|
78
|
+
* section, a command or a Shell topic whose name or one line holds it leads;
|
|
79
|
+
* one that only mentions it further in (its description, its options)
|
|
80
|
+
* follows, under "also mentioned in", so `apropos dicom` leads with dcm and
|
|
81
|
+
* image rather than a game that happens to name DICOM.
|
|
82
|
+
*
|
|
83
|
+
* @param word - What to look for.
|
|
84
|
+
* @param lookup - The commands.
|
|
85
|
+
* @returns The lines, empty when nothing holds the word.
|
|
86
|
+
*/
|
|
87
|
+
export declare function apropos_search(word: string, lookup: HelpLookup): string[];
|
|
88
|
+
export {};
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file help's sections: the table of contents `help` shows, a section's
|
|
3
|
+
* page (`help PACS`), the Shell topics (`help pipes`), and `apropos`.
|
|
4
|
+
*
|
|
5
|
+
* Borrowed from man rather than reinvented: sections by topic (man's are by
|
|
6
|
+
* number), a page per command, and `apropos` / `man -k` to search every
|
|
7
|
+
* summary by a word, which is how anyone finds a command they cannot name.
|
|
8
|
+
* A section is one capitalised word, so `help PACS` (the section) and
|
|
9
|
+
* `help pacs` (the command) never collide; a section word that names no
|
|
10
|
+
* command answers in lower case too.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import chalk from 'chalk';
|
|
15
|
+
/** The sections, in the order `help` lists them. */
|
|
16
|
+
export const HELP_SECTIONS = [
|
|
17
|
+
{ name: 'Navigation', blurb: "Move around ChRIS's filesystem, including the /proc and /net projections.", examples: ['cd', 'ls', 'tree', 'du', 'cubepath'] },
|
|
18
|
+
{ name: 'Files', blurb: 'Read, write, copy and move files and folders; upload from and download to this machine.', examples: ['cat', 'cp', 'mv', 'upload', 'download', 'grep'] },
|
|
19
|
+
{ name: 'Sharing', blurb: 'Who may see a folder or file, and links that open ARGUS where you are.', examples: ['chmod', 'setfacl', 'url'] },
|
|
20
|
+
{ name: 'Connection', blurb: 'Who you are, which CUBE you are on, and where the session stands.', examples: ['connect', 'whoami', 'context'] },
|
|
21
|
+
{ name: 'Monitoring', blurb: 'Live jobs as a filesystem, and jumping to one by number.', examples: ['proc'] },
|
|
22
|
+
{ name: 'Imaging', blurb: 'DICOM tags and image viewing.', examples: ['dcm', 'image'] },
|
|
23
|
+
{ name: 'Workflows', blurb: 'Gather a cohort, record what you do as a manifest, and replay it.', examples: ['gather', 'record', 'play', 'expect'] },
|
|
24
|
+
{ name: 'Resources', blurb: 'ChRIS resources one at a time or as lists: feeds, plugins, pipelines, jobs, tags, groups, compute, store.', examples: ['feed', 'feeds', 'plugins', 'jobs'] },
|
|
25
|
+
{ name: 'PACS', blurb: "Ask a PACS for a patient's studies and series, narrow the answer, and pull it into ChRIS.", examples: ['query', 'pull', 'pacs'] },
|
|
26
|
+
{ name: 'Admin', blurb: 'Administrative acts that need elevated rights.', examples: ['sudo', 'user'] },
|
|
27
|
+
{ name: 'Settings', blurb: 'How the shell behaves: prompt, timing, physical paths, debug output.', examples: ['prompt', 'timing', 'debug'] },
|
|
28
|
+
{ name: 'Games', blurb: 'The /usr/games shelf: text toys, small utilities and games.', examples: ['fortune', 'cowsay', 'tetris'] },
|
|
29
|
+
{ name: 'General', blurb: 'Help, finding a command by a word, release notes, versions, and leaving.', examples: ['help', 'apropos', 'notes', 'version', 'exit'] },
|
|
30
|
+
];
|
|
31
|
+
/** The section that is not a list of commands: what the shell does to a line. */
|
|
32
|
+
export const SHELL_SECTION = {
|
|
33
|
+
name: 'Shell',
|
|
34
|
+
blurb: 'What the shell does to a line: pipes, redirection, index handles (@SER3), pronouns (${cwd}), listing-aware grep, command.',
|
|
35
|
+
examples: ['help pipes', 'help handles', 'help pronouns'],
|
|
36
|
+
};
|
|
37
|
+
/** The Shell section's topics, each `help <topic>`. */
|
|
38
|
+
export const SHELL_TOPICS = [
|
|
39
|
+
{
|
|
40
|
+
name: 'pipes',
|
|
41
|
+
summary: 'cmd | cmd: text between programs, a numbered listing between builtins',
|
|
42
|
+
page: [
|
|
43
|
+
'A pipe hands one command\'s output to the next: cat notes.txt | wc -l.',
|
|
44
|
+
'',
|
|
45
|
+
'Between two builtins a numbered listing travels beside the text, so the',
|
|
46
|
+
'next builtin receives rows, not words:',
|
|
47
|
+
' query PatientID:1234567 | grep -i t1 | gather add',
|
|
48
|
+
'A program that is not a builtin (sort, awk, a system grep) receives the',
|
|
49
|
+
'text alone. The last listing a pipe produces becomes the held listing:',
|
|
50
|
+
'@SER3 and ${listing} name its rows afterwards.',
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'redirection',
|
|
55
|
+
summary: '> and >>: write or append a command\'s output to a file on this machine',
|
|
56
|
+
page: [
|
|
57
|
+
'cmd > file writes the output to a file; cmd >> file appends to it.',
|
|
58
|
+
'',
|
|
59
|
+
'The file is on the machine chell runs on, not in ChRIS: to put text in',
|
|
60
|
+
'ChRIS use touch --withContents or upload.',
|
|
61
|
+
' query PatientID:1234567 --table > answer.txt',
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'handles',
|
|
66
|
+
summary: '@SER3 @STD1-4 @FIL2,5,7: name rows of the last numbered listing',
|
|
67
|
+
page: [
|
|
68
|
+
'A listing that numbers its rows (query, query --table, gather list,',
|
|
69
|
+
'ls -l) prints a handle beside each: @PAT1, @STD3, @SER12, @DIR4, @FIL2.',
|
|
70
|
+
'Typed in a later line, a handle stands for its row:',
|
|
71
|
+
' gather add @SER3 one row',
|
|
72
|
+
' gather add @SER1-4 a range',
|
|
73
|
+
' gather add @SER2,5,7 a list',
|
|
74
|
+
'',
|
|
75
|
+
'The listing\'s footer says what is numbered now:',
|
|
76
|
+
' numbered: @PAT1, @STD1-9, @SER1-235',
|
|
77
|
+
'The next listing replaces it, so @SER3 always means the last listing\'s',
|
|
78
|
+
'row. grep keeps the handles rows already wore (@SER41 stays @SER41).',
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
{ name: 'pronouns', summary: '${cwd} ${listing} …: what this session just made or asked' },
|
|
82
|
+
{ name: 'grep', summary: 'filter text, or a numbered listing keeping its handles' },
|
|
83
|
+
{ name: 'command', summary: 'run the system program, not the builtin' },
|
|
84
|
+
];
|
|
85
|
+
/** Wraps a paragraph to a width, each line indented. */
|
|
86
|
+
function paragraph_wrap(text, indent, width = 78) {
|
|
87
|
+
const lines = [];
|
|
88
|
+
let line = '';
|
|
89
|
+
for (const word of text.split(/\s+/)) {
|
|
90
|
+
if (line !== '' && indent.length + line.length + 1 + word.length > width) {
|
|
91
|
+
lines.push(`${indent}${line}`);
|
|
92
|
+
line = word;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
line = line === '' ? word : `${line} ${word}`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (line !== '')
|
|
99
|
+
lines.push(`${indent}${line}`);
|
|
100
|
+
return lines;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* A section's commands: those that declare it, and for Games the shelf.
|
|
104
|
+
*
|
|
105
|
+
* @param section - The section's name.
|
|
106
|
+
* @param lookup - The commands.
|
|
107
|
+
* @returns Its runnable commands.
|
|
108
|
+
*/
|
|
109
|
+
export function sectionCommands_of(section, lookup) {
|
|
110
|
+
const declared = lookup.commands().filter((name) => lookup.section(name) === section);
|
|
111
|
+
if (section !== 'Games')
|
|
112
|
+
return declared;
|
|
113
|
+
return [...new Set([...declared, ...lookup.games()])];
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* `help`: the table of contents. A section with nothing this session can
|
|
117
|
+
* run is left out, as are examples it cannot run.
|
|
118
|
+
*
|
|
119
|
+
* @param lookup - The commands.
|
|
120
|
+
* @returns The page.
|
|
121
|
+
*/
|
|
122
|
+
export function helpToc_render(lookup) {
|
|
123
|
+
const runnable = new Set(lookup.commands());
|
|
124
|
+
const out = [
|
|
125
|
+
'',
|
|
126
|
+
chalk.bold.yellow('chell — the ChRIS shell'),
|
|
127
|
+
chalk.gray('Type help <Section> for a section, help <command> for a command, apropos <word> to search.'),
|
|
128
|
+
'',
|
|
129
|
+
];
|
|
130
|
+
const entry = (section, count) => {
|
|
131
|
+
out.push(`${chalk.bold.cyan(section.name)}${count === null ? '' : chalk.gray(` (${count})`)}`);
|
|
132
|
+
out.push(...paragraph_wrap(section.blurb, ' '));
|
|
133
|
+
const shown = section === SHELL_SECTION ? [...section.examples] : section.examples.filter((name) => runnable.has(name) || lookup.games().includes(name));
|
|
134
|
+
if (shown.length > 0)
|
|
135
|
+
out.push(` ${chalk.gray('e.g.')} ${shown.map((name) => chalk.yellow(name)).join(' ')}`);
|
|
136
|
+
out.push('');
|
|
137
|
+
};
|
|
138
|
+
for (const section of HELP_SECTIONS) {
|
|
139
|
+
const count = sectionCommands_of(section.name, lookup).length;
|
|
140
|
+
if (count > 0)
|
|
141
|
+
entry(section, count);
|
|
142
|
+
}
|
|
143
|
+
entry(SHELL_SECTION, null);
|
|
144
|
+
if (runnable.has('query') && runnable.has('gather')) {
|
|
145
|
+
out.push(`${chalk.gray('Start here:')} ${chalk.yellow('query PatientID:1234567 | grep -i t1 | gather add')}`, '');
|
|
146
|
+
}
|
|
147
|
+
return `${out.join('\n')}\n`;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The section a word names: exactly (`PACS`), or in any case when no command
|
|
151
|
+
* has that name (`navigation`).
|
|
152
|
+
*
|
|
153
|
+
* @param word - What followed `help`.
|
|
154
|
+
* @param isCommand - Whether a command has that name.
|
|
155
|
+
* @returns The section, or undefined.
|
|
156
|
+
*/
|
|
157
|
+
export function section_find(word, isCommand) {
|
|
158
|
+
const all = [...HELP_SECTIONS, SHELL_SECTION];
|
|
159
|
+
const exact = all.find((section) => section.name === word);
|
|
160
|
+
if (exact !== undefined)
|
|
161
|
+
return exact;
|
|
162
|
+
if (isCommand(word))
|
|
163
|
+
return undefined;
|
|
164
|
+
return all.find((section) => section.name.toLowerCase() === word.toLowerCase());
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* A section's page: what it is for, then each command with its line.
|
|
168
|
+
*
|
|
169
|
+
* @param section - The section.
|
|
170
|
+
* @param lookup - The commands.
|
|
171
|
+
* @returns The page.
|
|
172
|
+
*/
|
|
173
|
+
export function helpSection_render(section, lookup) {
|
|
174
|
+
const out = ['', `${chalk.bold.cyan(section.name)} ${chalk.gray('—')} ${section.blurb}`, ''];
|
|
175
|
+
const rows = section === SHELL_SECTION
|
|
176
|
+
? SHELL_TOPICS.map((topic) => ({ name: topic.name, line: topic.summary }))
|
|
177
|
+
: sectionCommands_of(section.name, lookup).map((name) => ({ name, line: lookup.summary(name) ?? '' }));
|
|
178
|
+
const width = Math.max(12, ...rows.map((row) => row.name.length + 2));
|
|
179
|
+
for (const row of rows)
|
|
180
|
+
out.push(` ${chalk.cyan(row.name.padEnd(width))}${row.line}`);
|
|
181
|
+
out.push('', chalk.gray(`help <${section === SHELL_SECTION ? 'topic' : 'command'}> for each.`), '');
|
|
182
|
+
return `${out.join('\n')}\n`;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* A Shell topic's own page, or undefined when it is not one (or is a
|
|
186
|
+
* command, whose own page answers).
|
|
187
|
+
*
|
|
188
|
+
* @param word - What followed `help`.
|
|
189
|
+
* @returns The page.
|
|
190
|
+
*/
|
|
191
|
+
export function shellTopic_render(word) {
|
|
192
|
+
const topic = SHELL_TOPICS.find((one) => one.name === word && one.page !== undefined);
|
|
193
|
+
if (topic === undefined || topic.page === undefined)
|
|
194
|
+
return undefined;
|
|
195
|
+
return `\n${chalk.bold.yellow(topic.name.toUpperCase())}\n${chalk.gray('─'.repeat(60))}\n${topic.page.join('\n')}\n\n${chalk.gray('help Shell for the other topics.')}\n`;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* `apropos <word>` (`man -k`): what holds the word, strongest first. A
|
|
199
|
+
* section, a command or a Shell topic whose name or one line holds it leads;
|
|
200
|
+
* one that only mentions it further in (its description, its options)
|
|
201
|
+
* follows, under "also mentioned in", so `apropos dicom` leads with dcm and
|
|
202
|
+
* image rather than a game that happens to name DICOM.
|
|
203
|
+
*
|
|
204
|
+
* @param word - What to look for.
|
|
205
|
+
* @param lookup - The commands.
|
|
206
|
+
* @returns The lines, empty when nothing holds the word.
|
|
207
|
+
*/
|
|
208
|
+
export function apropos_search(word, lookup) {
|
|
209
|
+
const needle = word.toLowerCase();
|
|
210
|
+
const holds = (text) => text.toLowerCase().includes(needle);
|
|
211
|
+
const strong = [];
|
|
212
|
+
const mentioned = [];
|
|
213
|
+
for (const section of [...HELP_SECTIONS, SHELL_SECTION]) {
|
|
214
|
+
if (holds(`${section.name} ${section.blurb}`))
|
|
215
|
+
strong.push(`${chalk.cyan(section.name)} ${chalk.gray('(section)')} — ${section.blurb}`);
|
|
216
|
+
}
|
|
217
|
+
for (const name of lookup.commands()) {
|
|
218
|
+
const line = `${chalk.cyan(name)} ${chalk.gray(`(${lookup.section(name) ?? 'General'})`)} — ${lookup.summary(name) ?? ''}`;
|
|
219
|
+
if (holds(`${name} ${lookup.summary(name) ?? ''}`))
|
|
220
|
+
strong.push(line);
|
|
221
|
+
else if (holds(lookup.text(name)))
|
|
222
|
+
mentioned.push(line);
|
|
223
|
+
}
|
|
224
|
+
for (const topic of SHELL_TOPICS) {
|
|
225
|
+
if (lookup.commands().includes(topic.name))
|
|
226
|
+
continue;
|
|
227
|
+
const line = `${chalk.cyan(topic.name)} ${chalk.gray('(Shell)')} — ${topic.summary}`;
|
|
228
|
+
if (holds(`${topic.name} ${topic.summary}`))
|
|
229
|
+
strong.push(line);
|
|
230
|
+
else if (holds((topic.page ?? []).join(' ')))
|
|
231
|
+
mentioned.push(line);
|
|
232
|
+
}
|
|
233
|
+
if (mentioned.length === 0)
|
|
234
|
+
return strong;
|
|
235
|
+
return [...strong, ...(strong.length > 0 ? [''] : []), chalk.gray('also mentioned in:'), ...mentioned];
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=helpSections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpSections.js","sourceRoot":"","sources":["../../src/builtins/helpSections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file A PACS answer as a table a spreadsheet can read.
|
|
3
|
-
*
|
|
4
|
-
* There has been a `--csv` on listings since chili, and it renders the same
|
|
5
|
-
* way this does — headers uppercased, every cell quoted, embedded quotes
|
|
6
|
-
* doubled — but it renders it inside a chili handler rather than from a
|
|
7
|
-
* function anything else can call. Rather than grow a dependency on a
|
|
8
|
-
* package the stack is trying to shed, the rule is stated here, once, and
|
|
9
|
-
* the PACS answer is the first thing to use it.
|
|
10
|
-
*
|
|
11
|
-
* The shape is settled by doctrine rather than by convenience: a row per
|
|
12
|
-
* STUDY (or, asked with `--series`, per series), and a row for every
|
|
13
|
-
* patient that owns none. The MRNs that come
|
|
14
|
-
* back are the ones with imaging, so a table built from studies alone
|
|
15
|
-
* would quietly drop exactly the rows an audit is asking about.
|
|
16
|
-
*
|
|
17
|
-
* @module
|
|
18
|
-
*/
|
|
19
1
|
import type { PacsQueryModel } from '@fnndsc/menu';
|
|
20
2
|
/**
|
|
21
3
|
* How far down an answer's rows go: one per STUDY (the audit's grain, and
|
|
@@ -38,6 +20,7 @@ export type PacsAnswerLevel = 'study' | 'series';
|
|
|
38
20
|
export declare function pacsAnswer_rows(model: PacsQueryModel, level?: PacsAnswerLevel): {
|
|
39
21
|
columns: ReadonlyArray<string>;
|
|
40
22
|
rows: string[][];
|
|
23
|
+
keys: Array<string | null>;
|
|
41
24
|
};
|
|
42
25
|
/**
|
|
43
26
|
* Renders one answer as CSV.
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file A PACS answer as a table a spreadsheet can read.
|
|
3
|
+
*
|
|
4
|
+
* There has been a `--csv` on listings since chili, and it renders the same
|
|
5
|
+
* way this does — headers uppercased, every cell quoted, embedded quotes
|
|
6
|
+
* doubled — but it renders it inside a chili handler rather than from a
|
|
7
|
+
* function anything else can call. Rather than grow a dependency on a
|
|
8
|
+
* package the stack is trying to shed, the rule is stated here, once, and
|
|
9
|
+
* the PACS answer is the first thing to use it.
|
|
10
|
+
*
|
|
11
|
+
* The shape is settled by doctrine rather than by convenience: a row per
|
|
12
|
+
* STUDY (or, asked with `--series`, per series), and a row for every
|
|
13
|
+
* patient that owns none. The MRNs that come
|
|
14
|
+
* back are the ones with imaging, so a table built from studies alone
|
|
15
|
+
* would quietly drop exactly the rows an audit is asking about.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
import { answerNumbering_of, handleWords_of, numberedFooter_of } from '../../session/answer.js';
|
|
1
20
|
/** The columns of a study-level table, in reading order. */
|
|
2
21
|
const STUDY_COLUMNS = [
|
|
3
22
|
'MRN', 'PATIENT', 'SERVER', 'STATUS', 'STUDY', 'DATE',
|
|
@@ -40,19 +59,27 @@ function cell_quote(value) {
|
|
|
40
59
|
*/
|
|
41
60
|
export function pacsAnswer_rows(model, level = 'study') {
|
|
42
61
|
const rows = [];
|
|
62
|
+
// What each row is, for the handle a screen prints beside it (`STD:<path>`,
|
|
63
|
+
// `SER:<path>`); null for a row nothing numbers. Never in the CSV.
|
|
64
|
+
const keys = [];
|
|
43
65
|
const patients = model.patients ?? [];
|
|
44
66
|
const studiesOf = (patient) => model.studies.filter((study) => study.patientId === patient.patientId
|
|
45
67
|
&& (patient.server === undefined || study.server === undefined || study.server === patient.server));
|
|
46
68
|
const study_rows = (study, facts) => {
|
|
47
69
|
if (level === 'study') {
|
|
70
|
+
keys.push(study.vfsPath === undefined ? null : `STD:${study.vfsPath}`);
|
|
48
71
|
return [[
|
|
49
72
|
facts.mrn, study.patientName, facts.server, facts.status, study.description, study.date,
|
|
50
73
|
study.accession, study.modalities, String(study.series.length), facts.answeredAt,
|
|
51
74
|
]];
|
|
52
75
|
}
|
|
53
76
|
const lead = [facts.mrn, study.patientName, facts.server, facts.status, study.description, study.date, study.accession];
|
|
54
|
-
if (study.series.length === 0)
|
|
77
|
+
if (study.series.length === 0) {
|
|
78
|
+
keys.push(null);
|
|
55
79
|
return [[...lead, '', '', '', '', '', facts.answeredAt]];
|
|
80
|
+
}
|
|
81
|
+
for (const series of study.series)
|
|
82
|
+
keys.push(series.vfsPath === undefined ? null : `SER:${series.vfsPath}`);
|
|
56
83
|
return study.series.map((series, index) => [
|
|
57
84
|
...lead,
|
|
58
85
|
String(index + 1),
|
|
@@ -76,6 +103,7 @@ export function pacsAnswer_rows(model, level = 'study') {
|
|
|
76
103
|
// audit is usually about: a patient with no imaging, or one whose
|
|
77
104
|
// question could not be asked at all.
|
|
78
105
|
rows.push(patient_row(patient, server, answeredAt));
|
|
106
|
+
keys.push(null);
|
|
79
107
|
continue;
|
|
80
108
|
}
|
|
81
109
|
for (const study of owned) {
|
|
@@ -93,7 +121,7 @@ export function pacsAnswer_rows(model, level = 'study') {
|
|
|
93
121
|
}));
|
|
94
122
|
}
|
|
95
123
|
}
|
|
96
|
-
return { columns: level === 'study' ? STUDY_COLUMNS : SERIES_COLUMNS, rows };
|
|
124
|
+
return { columns: level === 'study' ? STUDY_COLUMNS : SERIES_COLUMNS, rows, keys };
|
|
97
125
|
}
|
|
98
126
|
/**
|
|
99
127
|
* Renders one answer as CSV.
|
|
@@ -125,7 +153,16 @@ export function pacsAnswer_toCsv(model, level = 'study') {
|
|
|
125
153
|
* @returns The table, header and rule first, uncoloured.
|
|
126
154
|
*/
|
|
127
155
|
export function pacsAnswer_toTable(model, level = 'study') {
|
|
128
|
-
const
|
|
156
|
+
const table = pacsAnswer_rows(model, level);
|
|
157
|
+
// The handle each row answers to leads the screen's table (#1099); the
|
|
158
|
+
// CSV, a record of the answer, does not carry it.
|
|
159
|
+
const numbered = answerNumbering_of('pacs.query', model) ?? [];
|
|
160
|
+
const words = handleWords_of(numbered);
|
|
161
|
+
// A column is earned: an answer nothing numbers (no paths yet) keeps the
|
|
162
|
+
// table it always had.
|
|
163
|
+
const lead = table.keys.some((key) => key !== null && words.has(key));
|
|
164
|
+
const columns = lead ? ['@', ...table.columns] : table.columns;
|
|
165
|
+
const rows = lead ? table.rows.map((row, at) => [words.get(table.keys[at] ?? '') ?? '', ...row]) : table.rows;
|
|
129
166
|
const shown = columns.map((_, index) => index).filter((index) => columns[index] !== 'ANSWERED');
|
|
130
167
|
const widths = shown.map((index) => Math.max(columns[index]?.length ?? 0, ...rows.map((row) => (row[index] ?? '').length)));
|
|
131
168
|
const line = (cells) => ` ${shown.map((index, at) => (cells[index] ?? '').padEnd(widths[at] ?? 0)).join(' ').trimEnd()}`;
|
|
@@ -133,6 +170,9 @@ export function pacsAnswer_toTable(model, level = 'study') {
|
|
|
133
170
|
for (const row of rows)
|
|
134
171
|
out.push(line(row));
|
|
135
172
|
out.push('', ` ${rows.length} row${rows.length === 1 ? '' : 's'}, one per ${level}`);
|
|
173
|
+
const footer = numberedFooter_of(numbered);
|
|
174
|
+
if (footer !== '')
|
|
175
|
+
out.push(` ${footer}`);
|
|
136
176
|
return `${out.join('\n')}\n`;
|
|
137
177
|
}
|
|
138
178
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.csv.js","sourceRoot":"","sources":["../../../src/builtins/net/query.csv.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query.csv.js","sourceRoot":"","sources":["../../../src/builtins/net/query.csv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The per-server lists: the config file's when it has one, else the default.
|
|
3
|
+
*
|
|
4
|
+
* @param env - The environment (its XDG_CONFIG_HOME).
|
|
5
|
+
* @returns Server identifier to the keys it ignores.
|
|
6
|
+
*/
|
|
7
|
+
export declare function ignoredKeys_read(env?: NodeJS.ProcessEnv): Readonly<Record<string, ReadonlyArray<string>>>;
|
|
8
|
+
/**
|
|
9
|
+
* The hint for keys a server ignores, or null when it ignores none asked.
|
|
10
|
+
*
|
|
11
|
+
* @param terms - The query's keys and their values.
|
|
12
|
+
* @param server - The server's identifier (`PACSDCM`).
|
|
13
|
+
* @param lists - The per-server lists.
|
|
14
|
+
* @returns The line, or null.
|
|
15
|
+
*/
|
|
16
|
+
export declare function ignoredKeys_hint(terms: Readonly<Record<string, ReadonlyArray<string>>>, server: string, lists?: Readonly<Record<string, ReadonlyArray<string>>>): string | null;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The query keys a PACS ignores, and the hint that points at grep
|
|
3
|
+
* (#1105).
|
|
4
|
+
*
|
|
5
|
+
* Asked by series or study description, the PACS behind ekanite answers as
|
|
6
|
+
* if the key were not there (#1100's table: `SeriesDescription:*T1*` still
|
|
7
|
+
* returns 299 of 300 series), so a query that reads as narrowed is not. The
|
|
8
|
+
* query is run exactly as asked — its cache and record unchanged — and one
|
|
9
|
+
* line says so, with the grep that does the narrowing.
|
|
10
|
+
*
|
|
11
|
+
* The keys are a list per server, in `~/.config/mise/pacs.json`
|
|
12
|
+
* (`{"ignoredKeys": {"PACSDCM": ["SeriesDescription"]}}`); without that
|
|
13
|
+
* file the server known to ignore them has its list built in.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { readFileSync } from 'node:fs';
|
|
18
|
+
import os from 'node:os';
|
|
19
|
+
import path from 'node:path';
|
|
20
|
+
/** The servers known to ignore description keys, when no file says otherwise. */
|
|
21
|
+
const IGNORED_DEFAULT = {
|
|
22
|
+
PACSDCM: ['SeriesDescription', 'StudyDescription'],
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The per-server lists: the config file's when it has one, else the default.
|
|
26
|
+
*
|
|
27
|
+
* @param env - The environment (its XDG_CONFIG_HOME).
|
|
28
|
+
* @returns Server identifier to the keys it ignores.
|
|
29
|
+
*/
|
|
30
|
+
export function ignoredKeys_read(env = process.env) {
|
|
31
|
+
const file = path.join(env['XDG_CONFIG_HOME'] || path.join(os.homedir(), '.config'), 'mise', 'pacs.json');
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(readFileSync(file, 'utf8'));
|
|
34
|
+
const lists = parsed.ignoredKeys;
|
|
35
|
+
if (lists !== null && typeof lists === 'object') {
|
|
36
|
+
return Object.fromEntries(Object.entries(lists)
|
|
37
|
+
.map(([server, keys]) => [server, Array.isArray(keys) ? keys.filter((key) => typeof key === 'string') : []]));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// No file, or not one we read: the default.
|
|
42
|
+
}
|
|
43
|
+
return IGNORED_DEFAULT;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The hint for keys a server ignores, or null when it ignores none asked.
|
|
47
|
+
*
|
|
48
|
+
* @param terms - The query's keys and their values.
|
|
49
|
+
* @param server - The server's identifier (`PACSDCM`).
|
|
50
|
+
* @param lists - The per-server lists.
|
|
51
|
+
* @returns The line, or null.
|
|
52
|
+
*/
|
|
53
|
+
export function ignoredKeys_hint(terms, server, lists = ignoredKeys_read()) {
|
|
54
|
+
const ignored = lists[server] ?? [];
|
|
55
|
+
const asked = Object.keys(terms).filter((key) => ignored.some((one) => one.toLowerCase() === key.toLowerCase()));
|
|
56
|
+
if (asked.length === 0)
|
|
57
|
+
return null;
|
|
58
|
+
// The grep that does what the key could not: its value without the PACS
|
|
59
|
+
// wildcards, matched in any case.
|
|
60
|
+
const words = asked.flatMap((key) => (terms[key] ?? []).map((value) => value.replace(/\*/g, '').trim())).filter((word) => word !== '');
|
|
61
|
+
const grep = words.length === 0 ? 'grep -i <text>' : `grep -i${words.map((word) => ` -e '${word.replace(/'/g, `'\\''`)}'`).join('')}`;
|
|
62
|
+
return `[!] the PACS (${server}) ignores ${asked.join(' and ')}: the answer is not narrowed by ${asked.length === 1 ? 'it' : 'them'}. Filter it with: query … | ${grep}`;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=query.ignored.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.ignored.js","sourceRoot":"","sources":["../../../src/builtins/net/query.ignored.ts"],"names":[],"mappings":"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"}
|