@fnndsc/brasa 0.45.0 → 0.47.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/api/models.d.ts +37 -0
- package/dist/api/models.js.map +1 -1
- package/dist/buildinfo.json +1 -1
- package/dist/builtins/fs/pull.args.d.ts +0 -10
- package/dist/builtins/fs/pull.args.js +5 -30
- package/dist/builtins/fs/pull.args.js.map +1 -1
- package/dist/builtins/fs/pull.js +25 -48
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/help.js +76 -5
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/helpSections.js +3 -3
- package/dist/builtins/helpSections.js.map +1 -1
- package/dist/builtins/net/query.d.ts +3 -21
- package/dist/builtins/net/query.js +4 -68
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/net/query.model.d.ts +31 -0
- package/dist/builtins/net/query.model.js +66 -0
- package/dist/builtins/net/query.model.js.map +1 -0
- package/dist/builtins/pluginExecute.d.ts +4 -1
- package/dist/builtins/pluginExecute.js +11 -12
- package/dist/builtins/pluginExecute.js.map +1 -1
- package/dist/builtins/res/expect.d.ts +38 -0
- package/dist/builtins/res/expect.js +77 -179
- package/dist/builtins/res/expect.js.map +1 -1
- package/dist/builtins/res/gather.d.ts +2 -2
- package/dist/builtins/res/gather.facts.d.ts +18 -0
- package/dist/builtins/res/gather.facts.js +114 -0
- package/dist/builtins/res/gather.facts.js.map +1 -0
- package/dist/builtins/res/gather.js +50 -11
- package/dist/builtins/res/gather.js.map +1 -1
- package/dist/builtins/res/gather.kind.d.ts +9 -0
- package/dist/builtins/res/gather.kind.js +10 -0
- package/dist/builtins/res/gather.kind.js.map +1 -0
- package/dist/builtins/res/gather.process.d.ts +46 -0
- package/dist/builtins/res/gather.process.js +230 -0
- package/dist/builtins/res/gather.process.js.map +1 -0
- package/dist/builtins/res/gather.store.d.ts +36 -0
- package/dist/builtins/res/gather.store.js +105 -2
- package/dist/builtins/res/gather.store.js.map +1 -1
- package/dist/builtins/res/pipeline.d.ts +16 -0
- package/dist/builtins/res/pipeline.js +38 -13
- package/dist/builtins/res/pipeline.js.map +1 -1
- package/dist/builtins/res/play.d.ts +2 -0
- package/dist/builtins/res/play.js +59 -17
- package/dist/builtins/res/play.js.map +1 -1
- package/dist/builtins/res/plugin.js +9 -30
- package/dist/builtins/res/plugin.js.map +1 -1
- package/dist/builtins/res/runWait.d.ts +10 -0
- package/dist/builtins/res/runWait.js +14 -0
- package/dist/builtins/res/runWait.js.map +1 -1
- package/dist/builtins/sys/variables.d.ts +25 -0
- package/dist/builtins/sys/variables.js +113 -0
- package/dist/builtins/sys/variables.js.map +1 -0
- package/dist/builtins/variablesPage.d.ts +9 -0
- package/dist/builtins/variablesPage.js +56 -0
- package/dist/builtins/variablesPage.js.map +1 -0
- package/dist/chris/backend.js +2 -0
- package/dist/chris/backend.js.map +1 -1
- package/dist/chris/binExecutables.d.ts +25 -0
- package/dist/chris/binExecutables.js +28 -0
- package/dist/chris/binExecutables.js.map +1 -0
- package/dist/chris/chrisCommands.js +0 -6
- package/dist/chris/chrisCommands.js.map +1 -1
- package/dist/chris/commandFallback.js +10 -24
- package/dist/chris/commandFallback.js.map +1 -1
- package/dist/chris/expectSubjects.d.ts +3 -0
- package/dist/chris/expectSubjects.js +131 -0
- package/dist/chris/expectSubjects.js.map +1 -0
- package/dist/chris/help.d.ts +2 -2
- package/dist/chris/help.js +34 -96
- package/dist/chris/help.js.map +1 -1
- package/dist/chris/references.js +14 -75
- package/dist/chris/references.js.map +1 -1
- package/dist/core/assignment.d.ts +13 -0
- package/dist/core/assignment.js +98 -0
- package/dist/core/assignment.js.map +1 -0
- package/dist/core/backend.d.ts +38 -0
- package/dist/core/backend.js.map +1 -1
- package/dist/core/coreCommands.js +11 -0
- package/dist/core/coreCommands.js.map +1 -1
- package/dist/core/dispatch.js +9 -1
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/engine.js +14 -3
- package/dist/core/engine.js.map +1 -1
- package/dist/core/expansion.d.ts +13 -7
- package/dist/core/expansion.js +36 -19
- package/dist/core/expansion.js.map +1 -1
- package/dist/core/pipeHead.d.ts +36 -0
- package/dist/core/pipeHead.js +28 -0
- package/dist/core/pipeHead.js.map +1 -0
- package/dist/core/sink.d.ts +33 -0
- package/dist/core/sink.js +48 -0
- package/dist/core/sink.js.map +1 -1
- package/dist/core/variables.d.ts +122 -0
- package/dist/core/variables.js +320 -0
- package/dist/core/variables.js.map +1 -0
- package/dist/lib/parser.js +2 -2
- package/dist/notes.json +1 -1
- package/dist/session/answerAdapters.js +12 -0
- package/dist/session/answerAdapters.js.map +1 -1
- package/package.json +5 -5
- package/dist/builtins/pronouns.d.ts +0 -8
- package/dist/builtins/pronouns.js +0 -39
- package/dist/builtins/pronouns.js.map +0 -1
- package/dist/session/recent.d.ts +0 -68
- package/dist/session/recent.js +0 -99
- package/dist/session/recent.js.map +0 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { CommandEnvelope } from '@fnndsc/menu';
|
|
2
2
|
import { duration_parse } from '../../lib/duration.js';
|
|
3
3
|
export { duration_parse };
|
|
4
|
+
import type { ListingItem } from '@fnndsc/menu';
|
|
5
|
+
import { type ExpectAsk, type ExpectReading } from '../../core/backend.js';
|
|
4
6
|
/** The model kind under which a checked claim travels to a surface. */
|
|
5
7
|
export declare const EXPECT_MODEL_KIND: string;
|
|
6
8
|
/** What a claim turned out to be. */
|
|
@@ -31,6 +33,42 @@ export declare function claim_holds(got: string, predicate: string, wanted: stri
|
|
|
31
33
|
} | {
|
|
32
34
|
refusal: string;
|
|
33
35
|
};
|
|
36
|
+
/** How far beneath a named folder a claim will look for what it was asked about. */
|
|
37
|
+
export declare const DEEP_MAX: number;
|
|
38
|
+
/**
|
|
39
|
+
* Walks a folder, gathering what it holds and the folders under it.
|
|
40
|
+
*
|
|
41
|
+
* A plugin's output is routinely NESTED — pfdicom writes under
|
|
42
|
+
* `share/incoming/<input tree>`, and a converter mirrors its input — so a
|
|
43
|
+
* claim about what a run produced, made at the node's own folder, would be
|
|
44
|
+
* false about a run that worked perfectly. The walk is bounded: a claim is
|
|
45
|
+
* a question about a result, not a crawl of the filesystem.
|
|
46
|
+
*
|
|
47
|
+
* @param root - Where to start.
|
|
48
|
+
* @param depth - How many levels below the root to visit.
|
|
49
|
+
* @returns Every item found, with the folder each was found in.
|
|
50
|
+
*/
|
|
51
|
+
export declare function folder_walkDeep(root: string, depth: number): Promise<Array<{
|
|
52
|
+
folder: string;
|
|
53
|
+
item: ListingItem;
|
|
54
|
+
}>>;
|
|
55
|
+
/** One subject as `expect` sees it: every registration of the name, merged. */
|
|
56
|
+
interface SubjectEntry {
|
|
57
|
+
named: boolean;
|
|
58
|
+
/** Each property, with the registration that answers it and the words it takes. */
|
|
59
|
+
properties: Map<string, {
|
|
60
|
+
words: number;
|
|
61
|
+
read: (ask: ExpectAsk) => Promise<ExpectReading>;
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Every subject this session can make claims about: the core's `path`, then
|
|
66
|
+
* the backend's. Two registrations of one name are one subject, each
|
|
67
|
+
* answering its own properties (ChRIS adds `tags` to `path`).
|
|
68
|
+
*
|
|
69
|
+
* @returns The subjects, by name, in the order they were registered.
|
|
70
|
+
*/
|
|
71
|
+
export declare function expectSubjects_get(): Map<string, SubjectEntry>;
|
|
34
72
|
/**
|
|
35
73
|
* Builtin handler for the `expect` command.
|
|
36
74
|
*
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* @file Builtin expect command: a claim the session can refuse.
|
|
3
3
|
*
|
|
4
4
|
* A workflow that only acts is a demonstration. `expect` is what makes one a
|
|
5
|
-
* TEST: it states a claim about the session —
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* TEST: it states a claim about the session — what a path holds, and,
|
|
6
|
+
* through the subjects a backend registers, how many things are gathered,
|
|
7
|
+
* what a run's status is, whether a domain verifies — and refuses, non-zero,
|
|
8
|
+
* when the claim does not hold. Because it is a verb rather than a
|
|
8
9
|
* harness, a workflow asserts wherever it is played: in CI, at an operator's
|
|
9
10
|
* console, or in someone else's browser after they were handed the file.
|
|
10
11
|
*
|
|
@@ -13,20 +14,21 @@
|
|
|
13
14
|
* language has no sleep: a sleep asserts nothing and lies about how long the
|
|
14
15
|
* work actually took.
|
|
15
16
|
*
|
|
17
|
+
* The grammar, the polling and the verdict are the core's, and so is `path`
|
|
18
|
+
* (`exists`, `count`). Everything else a claim can be about belongs to a
|
|
19
|
+
* backend's world, and the backend registers it (`Backend.expectSubjects`):
|
|
20
|
+
* this file names no backend.
|
|
21
|
+
*
|
|
16
22
|
* @module
|
|
17
23
|
*/
|
|
18
24
|
import chalk from 'chalk';
|
|
19
25
|
import path from 'path';
|
|
20
|
-
import { procCache_get } from '@fnndsc/cumin';
|
|
21
|
-
import { jobs_statusBatch } from '@fnndsc/salsa';
|
|
22
26
|
import { envelope_ok, envelope_error } from '@fnndsc/menu';
|
|
23
27
|
import { commandArgs_process, path_resolve } from '../utils.js';
|
|
24
28
|
import { duration_parse } from '../../lib/duration.js';
|
|
25
29
|
export { duration_parse };
|
|
26
30
|
import { vfs } from '../../lib/vfs/vfs.js';
|
|
27
|
-
import {
|
|
28
|
-
import { path_physical, tagsModel_read } from './dicom.js';
|
|
29
|
-
import { feedStatus_derive } from '../proc.helpers.js';
|
|
31
|
+
import { backendInstalled_get } from '../../core/backend.js';
|
|
30
32
|
import { commandCancellation_enable, commandCancellation_signalGet } from '../../core/cancellation.js';
|
|
31
33
|
/** The model kind under which a checked claim travels to a surface. */
|
|
32
34
|
export const EXPECT_MODEL_KIND = 'expect.result';
|
|
@@ -34,8 +36,6 @@ export const EXPECT_MODEL_KIND = 'expect.result';
|
|
|
34
36
|
const PREDICATES = [
|
|
35
37
|
'eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'contains', 'notContains', 'matches',
|
|
36
38
|
];
|
|
37
|
-
/** What a claim can be about. */
|
|
38
|
-
const SUBJECTS = ['gather', 'feed', 'run', 'path'];
|
|
39
39
|
/** Predicates that only mean anything about numbers. */
|
|
40
40
|
const NUMERIC_PREDICATES = new Set(['gt', 'gte', 'lt', 'lte']);
|
|
41
41
|
/** How often a waiting claim asks again. */
|
|
@@ -82,79 +82,8 @@ export function claim_holds(got, predicate, wanted) {
|
|
|
82
82
|
return { refusal: `matches needs a regular expression, and "${wanted}" is not one` };
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Reads how much of the cohort is home.
|
|
87
|
-
*
|
|
88
|
-
* A place gathered from the filesystem was never anywhere else, so it counts
|
|
89
|
-
* as home; a series counts once CUBE has said where it landed.
|
|
90
|
-
*
|
|
91
|
-
* @param state - The cohort.
|
|
92
|
-
* @returns How many members are in CUBE.
|
|
93
|
-
*/
|
|
94
|
-
function cohortPulled_count(state) {
|
|
95
|
-
return state.series.filter((member) => {
|
|
96
|
-
if (member.kind !== 'series')
|
|
97
|
-
return true;
|
|
98
|
-
const landed = member.folderPath;
|
|
99
|
-
return typeof landed === 'string' && landed.length > 0;
|
|
100
|
-
}).length;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Answers a claim about the cohort.
|
|
104
|
-
*
|
|
105
|
-
* @param property - `size` or `pulled`.
|
|
106
|
-
* @returns What the cohort says.
|
|
107
|
-
*/
|
|
108
|
-
async function gather_read(property) {
|
|
109
|
-
const state = await cohort_read();
|
|
110
|
-
if (property === 'size')
|
|
111
|
-
return { got: `${state.series.length}` };
|
|
112
|
-
if (property === 'pulled')
|
|
113
|
-
return { got: `${cohortPulled_count(state)}` };
|
|
114
|
-
if (property === 'name')
|
|
115
|
-
return { got: state.name ?? '' };
|
|
116
|
-
return { got: null, refusal: `gather has no property "${property}" — try size, pulled or name` };
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Answers a claim about a feed.
|
|
120
|
-
*
|
|
121
|
-
* @param target - The feed id.
|
|
122
|
-
* @param property - `status` today.
|
|
123
|
-
* @returns What the feed says.
|
|
124
|
-
*/
|
|
125
|
-
async function feed_read(target, property) {
|
|
126
|
-
const feedID = Number(target);
|
|
127
|
-
if (!Number.isInteger(feedID))
|
|
128
|
-
return { got: null, refusal: `"${target}" is not a feed id` };
|
|
129
|
-
if (property !== 'status')
|
|
130
|
-
return { got: null, refusal: `feed has no property "${property}" — try status` };
|
|
131
|
-
const feed = procCache_get().feed_get(feedID);
|
|
132
|
-
if (feed === undefined || feed === null) {
|
|
133
|
-
return { got: null, refusal: `feed ${feedID} is not in this session's index yet` };
|
|
134
|
-
}
|
|
135
|
-
return { got: feedStatus_derive(feed) };
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Answers a claim about one run.
|
|
139
|
-
*
|
|
140
|
-
* @param target - The plugin instance id.
|
|
141
|
-
* @param property - `status` today.
|
|
142
|
-
* @returns What the run says.
|
|
143
|
-
*/
|
|
144
|
-
async function run_read(target, property) {
|
|
145
|
-
const instanceID = Number(target);
|
|
146
|
-
if (!Number.isInteger(instanceID))
|
|
147
|
-
return { got: null, refusal: `"${target}" is not an instance id` };
|
|
148
|
-
if (property !== 'status')
|
|
149
|
-
return { got: null, refusal: `run has no property "${property}" — try status` };
|
|
150
|
-
const statuses = await jobs_statusBatch([instanceID]);
|
|
151
|
-
const status = statuses.get(instanceID);
|
|
152
|
-
if (status === undefined)
|
|
153
|
-
return { got: null, refusal: `instance ${instanceID} did not answer` };
|
|
154
|
-
return { got: status };
|
|
155
|
-
}
|
|
156
85
|
/** How far beneath a named folder a claim will look for what it was asked about. */
|
|
157
|
-
const DEEP_MAX = 4;
|
|
86
|
+
export const DEEP_MAX = 4;
|
|
158
87
|
/**
|
|
159
88
|
* Walks a folder, gathering what it holds and the folders under it.
|
|
160
89
|
*
|
|
@@ -168,7 +97,7 @@ const DEEP_MAX = 4;
|
|
|
168
97
|
* @param depth - How many levels below the root to visit.
|
|
169
98
|
* @returns Every item found, with the folder each was found in.
|
|
170
99
|
*/
|
|
171
|
-
async function folder_walkDeep(root, depth) {
|
|
100
|
+
export async function folder_walkDeep(root, depth) {
|
|
172
101
|
const found = [];
|
|
173
102
|
const queue = [{ path: root, level: 0 }];
|
|
174
103
|
while (queue.length > 0) {
|
|
@@ -198,19 +127,14 @@ function glob_toRegExp(pattern) {
|
|
|
198
127
|
return new RegExp(`^${escaped}$`);
|
|
199
128
|
}
|
|
200
129
|
/**
|
|
201
|
-
* Answers a claim about a path: whether it is there, what it holds
|
|
202
|
-
* headers say.
|
|
130
|
+
* Answers a claim about a path: whether it is there, and what it holds.
|
|
203
131
|
*
|
|
204
|
-
* @param
|
|
205
|
-
* @param property - `exists`, `count`, or `tags`.
|
|
206
|
-
* @param tagName - The tag to read, when the property is `tags`.
|
|
207
|
-
* @param matching - A glob narrowing a count.
|
|
208
|
-
* @param deep - Look beneath the folder, not only in it.
|
|
132
|
+
* @param ask - The claim, as the path subject is asked it.
|
|
209
133
|
* @returns What the path says.
|
|
210
134
|
*/
|
|
211
|
-
async function path_read(
|
|
212
|
-
const resolved = await path_resolve(target);
|
|
213
|
-
if (property === 'exists') {
|
|
135
|
+
async function path_read(ask) {
|
|
136
|
+
const resolved = await path_resolve(ask.target ?? '');
|
|
137
|
+
if (ask.property === 'exists') {
|
|
214
138
|
const listed = await vfs.data_get(resolved);
|
|
215
139
|
if (listed.ok)
|
|
216
140
|
return { got: 'true' };
|
|
@@ -221,85 +145,43 @@ async function path_read(target, property, tagName, matching, deep) {
|
|
|
221
145
|
const leaf = path.posix.basename(resolved);
|
|
222
146
|
return { got: `${parent.value.some((item) => item.name === leaf)}` };
|
|
223
147
|
}
|
|
224
|
-
if (
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
return { got: `${files.filter((item) => deepPattern.test(item.name)).length}` };
|
|
234
|
-
}
|
|
235
|
-
const listed = await vfs.data_get(resolved);
|
|
236
|
-
if (!listed.ok)
|
|
237
|
-
return { got: null, refusal: `${resolved} cannot be listed` };
|
|
238
|
-
if (matching === undefined)
|
|
239
|
-
return { got: `${listed.value.length}` };
|
|
240
|
-
const pattern = glob_toRegExp(matching);
|
|
241
|
-
return { got: `${listed.value.filter((item) => pattern.test(item.name)).length}` };
|
|
148
|
+
if (ask.deep) {
|
|
149
|
+
const walked = await folder_walkDeep(resolved, DEEP_MAX);
|
|
150
|
+
const files = walked
|
|
151
|
+
.map((entry) => entry.item)
|
|
152
|
+
.filter((item) => item.type !== 'dir');
|
|
153
|
+
if (ask.matching === undefined)
|
|
154
|
+
return { got: `${files.length}` };
|
|
155
|
+
const deepPattern = glob_toRegExp(ask.matching);
|
|
156
|
+
return { got: `${files.filter((item) => deepPattern.test(item.name)).length}` };
|
|
242
157
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
// node's own folder looks BENEATH it before giving up: the files a run
|
|
251
|
-
// produced are what the claim is about, wherever the plugin filed them.
|
|
252
|
-
const walked = await folder_walkDeep(resolved, DEEP_MAX);
|
|
253
|
-
const folders = [...new Set(walked
|
|
254
|
-
.filter((entry) => entry.item.type === 'dir')
|
|
255
|
-
.map((entry) => `${entry.folder.replace(/\/$/, '')}/${entry.item.name}`))];
|
|
256
|
-
for (const folder of folders) {
|
|
257
|
-
const beneath = await tagsModel_read(await path_physical(folder));
|
|
258
|
-
if (beneath.ok) {
|
|
259
|
-
model = beneath;
|
|
260
|
-
break;
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
if (!model.ok)
|
|
265
|
-
return { got: null, refusal: `${resolved} holds no readable DICOM, here or beneath it` };
|
|
266
|
-
const constant = model.value.constant.find((tag) => tag.name === tagName || tag.tag === tagName);
|
|
267
|
-
if (constant !== undefined)
|
|
268
|
-
return { got: constant.value };
|
|
269
|
-
// A tag that varies across the folder answers with every value it takes,
|
|
270
|
-
// so a claim about "the" value cannot pass by reading only the first file.
|
|
271
|
-
const varying = model.value.varying.find((tag) => tag.name === tagName || tag.tag === tagName);
|
|
272
|
-
if (varying !== undefined) {
|
|
273
|
-
const values = [...new Set(varying.values
|
|
274
|
-
.map((entry) => entry.value ?? '')
|
|
275
|
-
.filter((value) => value.length > 0))];
|
|
276
|
-
return { got: values.join(', ') };
|
|
277
|
-
}
|
|
278
|
-
return { got: '' };
|
|
279
|
-
}
|
|
280
|
-
return { got: null, refusal: `path has no property "${property}" — try exists, count or tags` };
|
|
158
|
+
const listed = await vfs.data_get(resolved);
|
|
159
|
+
if (!listed.ok)
|
|
160
|
+
return { got: null, refusal: `${resolved} cannot be listed` };
|
|
161
|
+
if (ask.matching === undefined)
|
|
162
|
+
return { got: `${listed.value.length}` };
|
|
163
|
+
const pattern = glob_toRegExp(ask.matching);
|
|
164
|
+
return { got: `${listed.value.filter((item) => pattern.test(item.name)).length}` };
|
|
281
165
|
}
|
|
166
|
+
/** The core's own subject: a path in the session's filesystem. */
|
|
167
|
+
const PATH_SUBJECT = { name: 'path', named: true, properties: { exists: 0, count: 0 }, read: path_read };
|
|
282
168
|
/**
|
|
283
|
-
*
|
|
169
|
+
* Every subject this session can make claims about: the core's `path`, then
|
|
170
|
+
* the backend's. Two registrations of one name are one subject, each
|
|
171
|
+
* answering its own properties (ChRIS adds `tags` to `path`).
|
|
284
172
|
*
|
|
285
|
-
* @
|
|
286
|
-
* @param target - Which one, for the subjects that need naming.
|
|
287
|
-
* @param property - What about it.
|
|
288
|
-
* @param tagName - The tag, when the property is `tags`.
|
|
289
|
-
* @param matching - A glob, when the property is `count`.
|
|
290
|
-
* @param deep - Whether to look beneath the path as well as in it.
|
|
291
|
-
* @returns What the session answered.
|
|
173
|
+
* @returns The subjects, by name, in the order they were registered.
|
|
292
174
|
*/
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
return
|
|
175
|
+
export function expectSubjects_get() {
|
|
176
|
+
const subjects = new Map();
|
|
177
|
+
for (const subject of [PATH_SUBJECT, ...(backendInstalled_get()?.expectSubjects ?? [])]) {
|
|
178
|
+
const entry = subjects.get(subject.name) ?? { named: subject.named, properties: new Map() };
|
|
179
|
+
for (const [property, words] of Object.entries(subject.properties)) {
|
|
180
|
+
entry.properties.set(property, { words, read: subject.read });
|
|
181
|
+
}
|
|
182
|
+
subjects.set(subject.name, entry);
|
|
183
|
+
}
|
|
184
|
+
return subjects;
|
|
303
185
|
}
|
|
304
186
|
/**
|
|
305
187
|
* Sleeps between asks, unless the command is cancelled first.
|
|
@@ -341,27 +223,36 @@ export async function builtin_expect(args) {
|
|
|
341
223
|
const parsed = commandArgs_process(args, { booleanLongOptions: ['deep'] });
|
|
342
224
|
const operands = parsed._;
|
|
343
225
|
const subject = operands[0];
|
|
226
|
+
const subjects = expectSubjects_get();
|
|
227
|
+
const names = [...subjects.keys()].join(', ');
|
|
344
228
|
if (subject === undefined) {
|
|
345
229
|
process.exitCode = 1;
|
|
346
|
-
return envelope_error('', undefined, `${chalk.red(
|
|
230
|
+
return envelope_error('', undefined, `${chalk.red(`Usage: expect <${[...subjects.keys()].join('|')}> [<target>] <property> [<predicate> <value>] [--within <duration>]`)}\n`);
|
|
347
231
|
}
|
|
348
232
|
// The subject is checked FIRST: read as a shape instead, an unknown
|
|
349
233
|
// subject refuses by complaining about whatever word happened to land
|
|
350
234
|
// where a comparison goes, which names the wrong fault.
|
|
351
|
-
|
|
235
|
+
const entry = subjects.get(subject);
|
|
236
|
+
if (entry === undefined) {
|
|
352
237
|
process.exitCode = 1;
|
|
353
|
-
return envelope_error('', undefined, `${chalk.red(`expect knows nothing about "${subject}" — try ${
|
|
238
|
+
return envelope_error('', undefined, `${chalk.red(`expect knows nothing about "${subject}" in this session — try ${names}.`)}\n`);
|
|
354
239
|
}
|
|
355
|
-
//
|
|
356
|
-
const
|
|
357
|
-
const
|
|
358
|
-
const
|
|
359
|
-
const
|
|
360
|
-
const tagName = property === 'tags' ? rest.shift() : undefined;
|
|
240
|
+
// A subject that is one thing (`gather`: there is one cohort) names nothing.
|
|
241
|
+
const target = entry.named ? operands[1] : undefined;
|
|
242
|
+
const property = entry.named ? operands[2] : operands[1];
|
|
243
|
+
const rest = entry.named ? operands.slice(3) : operands.slice(2);
|
|
244
|
+
const properties = [...entry.properties.keys()].join(', ');
|
|
361
245
|
if (property === undefined) {
|
|
362
246
|
process.exitCode = 1;
|
|
363
|
-
return envelope_error('', undefined, `${chalk.red(`expect ${subject}: say what about it —
|
|
247
|
+
return envelope_error('', undefined, `${chalk.red(`expect ${subject}: say what about it — ${properties}.`)}\n`);
|
|
248
|
+
}
|
|
249
|
+
const answering = entry.properties.get(property);
|
|
250
|
+
if (answering === undefined) {
|
|
251
|
+
process.exitCode = 1;
|
|
252
|
+
return envelope_error('', undefined, `${chalk.red(`expect: ${subject} has no property "${property}" — try ${properties}.`)}\n`);
|
|
364
253
|
}
|
|
254
|
+
// A property may take words before the comparison (`tags PatientID`).
|
|
255
|
+
const words = rest.splice(0, answering.words);
|
|
365
256
|
// `expect path <p> exists` is the claim in full; everything else compares.
|
|
366
257
|
const predicate = rest[0] ?? (property === 'exists' ? 'eq' : '');
|
|
367
258
|
const wanted = rest[1] ?? (property === 'exists' ? 'true' : '');
|
|
@@ -383,17 +274,24 @@ export async function builtin_expect(args) {
|
|
|
383
274
|
// held, and a battery is read by people who were not there.
|
|
384
275
|
const narrowing = matching_get(parsed) === undefined ? '' : `--matching '${matching_get(parsed)}'`;
|
|
385
276
|
const claim = claim_render([
|
|
386
|
-
subject, target ?? '', property,
|
|
277
|
+
subject, target ?? '', property, ...words, narrowing,
|
|
387
278
|
parsed.deep === true ? '--deep' : '', predicate, wanted,
|
|
388
279
|
]);
|
|
389
280
|
const started = Date.now();
|
|
390
281
|
if (deadlineMs > 0)
|
|
391
282
|
commandCancellation_enable();
|
|
392
283
|
const signal = deadlineMs > 0 ? commandCancellation_signalGet() : undefined;
|
|
284
|
+
const matching = matching_get(parsed);
|
|
393
285
|
let reading = { got: null };
|
|
394
286
|
let outcome = { held: false };
|
|
395
287
|
for (;;) {
|
|
396
|
-
reading = await
|
|
288
|
+
reading = await answering.read({
|
|
289
|
+
...(target !== undefined ? { target } : {}),
|
|
290
|
+
property,
|
|
291
|
+
words,
|
|
292
|
+
...(matching !== undefined ? { matching } : {}),
|
|
293
|
+
deep: parsed.deep === true,
|
|
294
|
+
});
|
|
397
295
|
if (reading.got !== null) {
|
|
398
296
|
outcome = claim_holds(reading.got, predicate, wanted);
|
|
399
297
|
if ('refusal' in outcome)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expect.js","sourceRoot":"","sources":["../../../src/builtins/res/expect.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"expect.js","sourceRoot":"","sources":["../../../src/builtins/res/expect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CommandEnvelope } from '@fnndsc/menu';
|
|
2
|
-
|
|
3
|
-
export
|
|
2
|
+
import { GATHER_MODEL_KIND } from './gather.kind.js';
|
|
3
|
+
export { GATHER_MODEL_KIND };
|
|
4
4
|
/**
|
|
5
5
|
* Builtin handler for the `gather` command.
|
|
6
6
|
*
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { GatherMember } from './gather.store.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fills in each series member's facts from the query answer its path names.
|
|
4
|
+
*
|
|
5
|
+
* A fact the answer does not have is left as it was, and an answer that
|
|
6
|
+
* cannot be read leaves the member bare: these are what a listing shows,
|
|
7
|
+
* and none of them is a reason to refuse the gather.
|
|
8
|
+
*
|
|
9
|
+
* @param members - Members being gathered, changed in place.
|
|
10
|
+
*/
|
|
11
|
+
export declare function seriesFacts_fill(members: GatherMember[]): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Whether a gathered folder is imagery, by its name and place.
|
|
14
|
+
*
|
|
15
|
+
* @param member - A member being gathered.
|
|
16
|
+
* @returns True for a directory that holds one series.
|
|
17
|
+
*/
|
|
18
|
+
export declare function placeImagery_is(member: GatherMember): boolean;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file What a gathered member is, told by the kernel rather than a surface.
|
|
3
|
+
*
|
|
4
|
+
* A member is stored by its path; what a listing shows about it — a series'
|
|
5
|
+
* description, modality, patient and study, whether a folder is imagery —
|
|
6
|
+
* is filled in here when it is gathered, so every surface reads the same
|
|
7
|
+
* row and none of them has to carry facts into the cohort itself.
|
|
8
|
+
*
|
|
9
|
+
* A series' facts come from the query answer its path names. The PACS
|
|
10
|
+
* mount already holds that answer decoded (the operator listed it to find
|
|
11
|
+
* the series), so this is usually a cache read and at most one CUBE read
|
|
12
|
+
* per query. A folder's imagery comes from its name and place alone.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import path from 'path';
|
|
17
|
+
import { queryId_extractFromFolder } from '@fnndsc/salsa';
|
|
18
|
+
import { seriesFolder_is } from '@fnndsc/menu';
|
|
19
|
+
/**
|
|
20
|
+
* The query a PACS path lives under: its id and its folder's path.
|
|
21
|
+
*
|
|
22
|
+
* @param address - A resolved `/net/pacs/queries/...` path.
|
|
23
|
+
* @returns The query, or null when the path names none.
|
|
24
|
+
*/
|
|
25
|
+
function pathQuery_of(address) {
|
|
26
|
+
if (!address.startsWith('/net/pacs/'))
|
|
27
|
+
return null;
|
|
28
|
+
const parts = address.split('/').filter(Boolean);
|
|
29
|
+
const at = parts.findIndex((part) => /_qid:\d+/.test(part));
|
|
30
|
+
if (at === -1)
|
|
31
|
+
return null;
|
|
32
|
+
const queryId = queryId_extractFromFolder(parts[at]);
|
|
33
|
+
if (Number.isNaN(queryId))
|
|
34
|
+
return null;
|
|
35
|
+
return { queryId, folder: `/${parts.slice(0, at + 1).join('/')}` };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Every series one query answered, by series UID.
|
|
39
|
+
*
|
|
40
|
+
* @param queryId - The query.
|
|
41
|
+
* @param folder - Its folder, which the answer's paths are built under.
|
|
42
|
+
* @returns The series, or an empty map when the answer cannot be read.
|
|
43
|
+
*/
|
|
44
|
+
async function answerSeries_get(queryId, folder) {
|
|
45
|
+
const byUID = new Map();
|
|
46
|
+
const { vfsDispatcher } = await import('@fnndsc/salsa');
|
|
47
|
+
const decoded = await vfsDispatcher.pacs.queryResult_fetch(queryId);
|
|
48
|
+
if (decoded === null || decoded.json === undefined || decoded.json === null)
|
|
49
|
+
return byUID;
|
|
50
|
+
// Loaded on demand: only a series gathered from an answer needs it.
|
|
51
|
+
const { pacsQueryModel_build } = await import('../net/query.model.js');
|
|
52
|
+
const model = pacsQueryModel_build(decoded, { queryId, vfsPath: folder, pacsName: '', expression: '' });
|
|
53
|
+
for (const study of model.studies) {
|
|
54
|
+
for (const series of study.series)
|
|
55
|
+
byUID.set(series.seriesUID, { series, study });
|
|
56
|
+
}
|
|
57
|
+
return byUID;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Fills in each series member's facts from the query answer its path names.
|
|
61
|
+
*
|
|
62
|
+
* A fact the answer does not have is left as it was, and an answer that
|
|
63
|
+
* cannot be read leaves the member bare: these are what a listing shows,
|
|
64
|
+
* and none of them is a reason to refuse the gather.
|
|
65
|
+
*
|
|
66
|
+
* @param members - Members being gathered, changed in place.
|
|
67
|
+
*/
|
|
68
|
+
export async function seriesFacts_fill(members) {
|
|
69
|
+
const queries = new Map();
|
|
70
|
+
for (const member of members) {
|
|
71
|
+
if (member.kind !== 'series' || member.seriesUID === undefined)
|
|
72
|
+
continue;
|
|
73
|
+
const query = pathQuery_of(member.vfsPath);
|
|
74
|
+
if (query !== null)
|
|
75
|
+
queries.set(query.queryId, query.folder);
|
|
76
|
+
}
|
|
77
|
+
const answered = new Map();
|
|
78
|
+
for (const [queryId, folder] of queries)
|
|
79
|
+
answered.set(queryId, await answerSeries_get(queryId, folder));
|
|
80
|
+
for (const member of members) {
|
|
81
|
+
if (member.kind !== 'series' || member.seriesUID === undefined)
|
|
82
|
+
continue;
|
|
83
|
+
const query = pathQuery_of(member.vfsPath);
|
|
84
|
+
if (query === null)
|
|
85
|
+
continue;
|
|
86
|
+
const found = answered.get(query.queryId)?.get(member.seriesUID);
|
|
87
|
+
if (found === undefined)
|
|
88
|
+
continue;
|
|
89
|
+
const { series, study } = found;
|
|
90
|
+
if (series.description !== '')
|
|
91
|
+
member.description = series.description;
|
|
92
|
+
if (series.modality !== '')
|
|
93
|
+
member.modality = series.modality;
|
|
94
|
+
if (series.fileCount !== undefined)
|
|
95
|
+
member.files = series.fileCount;
|
|
96
|
+
// MRN first, as the PACS listing reads a patient; the name when the
|
|
97
|
+
// answer carries no identifier.
|
|
98
|
+
const patient = study.patientId || study.patientName;
|
|
99
|
+
if (patient !== '')
|
|
100
|
+
member.patient = patient;
|
|
101
|
+
if (study.description !== '')
|
|
102
|
+
member.study = study.description;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Whether a gathered folder is imagery, by its name and place.
|
|
107
|
+
*
|
|
108
|
+
* @param member - A member being gathered.
|
|
109
|
+
* @returns True for a directory that holds one series.
|
|
110
|
+
*/
|
|
111
|
+
export function placeImagery_is(member) {
|
|
112
|
+
return member.kind === 'dir' && seriesFolder_is(member.vfsPath, path.posix.basename(member.vfsPath));
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=gather.facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gather.facts.js","sourceRoot":"","sources":["../../../src/builtins/res/gather.facts.ts"],"names":[],"mappings":"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"}
|