@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.
Files changed (107) hide show
  1. package/dist/api/models.d.ts +37 -0
  2. package/dist/api/models.js.map +1 -1
  3. package/dist/buildinfo.json +1 -1
  4. package/dist/builtins/fs/pull.args.d.ts +0 -10
  5. package/dist/builtins/fs/pull.args.js +5 -30
  6. package/dist/builtins/fs/pull.args.js.map +1 -1
  7. package/dist/builtins/fs/pull.js +25 -48
  8. package/dist/builtins/fs/pull.js.map +1 -1
  9. package/dist/builtins/help.js +76 -5
  10. package/dist/builtins/help.js.map +1 -1
  11. package/dist/builtins/helpSections.js +3 -3
  12. package/dist/builtins/helpSections.js.map +1 -1
  13. package/dist/builtins/net/query.d.ts +3 -21
  14. package/dist/builtins/net/query.js +4 -68
  15. package/dist/builtins/net/query.js.map +1 -1
  16. package/dist/builtins/net/query.model.d.ts +31 -0
  17. package/dist/builtins/net/query.model.js +66 -0
  18. package/dist/builtins/net/query.model.js.map +1 -0
  19. package/dist/builtins/pluginExecute.d.ts +4 -1
  20. package/dist/builtins/pluginExecute.js +11 -12
  21. package/dist/builtins/pluginExecute.js.map +1 -1
  22. package/dist/builtins/res/expect.d.ts +38 -0
  23. package/dist/builtins/res/expect.js +77 -179
  24. package/dist/builtins/res/expect.js.map +1 -1
  25. package/dist/builtins/res/gather.d.ts +2 -2
  26. package/dist/builtins/res/gather.facts.d.ts +18 -0
  27. package/dist/builtins/res/gather.facts.js +114 -0
  28. package/dist/builtins/res/gather.facts.js.map +1 -0
  29. package/dist/builtins/res/gather.js +50 -11
  30. package/dist/builtins/res/gather.js.map +1 -1
  31. package/dist/builtins/res/gather.kind.d.ts +9 -0
  32. package/dist/builtins/res/gather.kind.js +10 -0
  33. package/dist/builtins/res/gather.kind.js.map +1 -0
  34. package/dist/builtins/res/gather.process.d.ts +46 -0
  35. package/dist/builtins/res/gather.process.js +230 -0
  36. package/dist/builtins/res/gather.process.js.map +1 -0
  37. package/dist/builtins/res/gather.store.d.ts +36 -0
  38. package/dist/builtins/res/gather.store.js +105 -2
  39. package/dist/builtins/res/gather.store.js.map +1 -1
  40. package/dist/builtins/res/pipeline.d.ts +16 -0
  41. package/dist/builtins/res/pipeline.js +38 -13
  42. package/dist/builtins/res/pipeline.js.map +1 -1
  43. package/dist/builtins/res/play.d.ts +2 -0
  44. package/dist/builtins/res/play.js +59 -17
  45. package/dist/builtins/res/play.js.map +1 -1
  46. package/dist/builtins/res/plugin.js +9 -30
  47. package/dist/builtins/res/plugin.js.map +1 -1
  48. package/dist/builtins/res/runWait.d.ts +10 -0
  49. package/dist/builtins/res/runWait.js +14 -0
  50. package/dist/builtins/res/runWait.js.map +1 -1
  51. package/dist/builtins/sys/variables.d.ts +25 -0
  52. package/dist/builtins/sys/variables.js +113 -0
  53. package/dist/builtins/sys/variables.js.map +1 -0
  54. package/dist/builtins/variablesPage.d.ts +9 -0
  55. package/dist/builtins/variablesPage.js +56 -0
  56. package/dist/builtins/variablesPage.js.map +1 -0
  57. package/dist/chris/backend.js +2 -0
  58. package/dist/chris/backend.js.map +1 -1
  59. package/dist/chris/binExecutables.d.ts +25 -0
  60. package/dist/chris/binExecutables.js +28 -0
  61. package/dist/chris/binExecutables.js.map +1 -0
  62. package/dist/chris/chrisCommands.js +0 -6
  63. package/dist/chris/chrisCommands.js.map +1 -1
  64. package/dist/chris/commandFallback.js +10 -24
  65. package/dist/chris/commandFallback.js.map +1 -1
  66. package/dist/chris/expectSubjects.d.ts +3 -0
  67. package/dist/chris/expectSubjects.js +131 -0
  68. package/dist/chris/expectSubjects.js.map +1 -0
  69. package/dist/chris/help.d.ts +2 -2
  70. package/dist/chris/help.js +34 -96
  71. package/dist/chris/help.js.map +1 -1
  72. package/dist/chris/references.js +14 -75
  73. package/dist/chris/references.js.map +1 -1
  74. package/dist/core/assignment.d.ts +13 -0
  75. package/dist/core/assignment.js +98 -0
  76. package/dist/core/assignment.js.map +1 -0
  77. package/dist/core/backend.d.ts +38 -0
  78. package/dist/core/backend.js.map +1 -1
  79. package/dist/core/coreCommands.js +11 -0
  80. package/dist/core/coreCommands.js.map +1 -1
  81. package/dist/core/dispatch.js +9 -1
  82. package/dist/core/dispatch.js.map +1 -1
  83. package/dist/core/engine.js +14 -3
  84. package/dist/core/engine.js.map +1 -1
  85. package/dist/core/expansion.d.ts +13 -7
  86. package/dist/core/expansion.js +36 -19
  87. package/dist/core/expansion.js.map +1 -1
  88. package/dist/core/pipeHead.d.ts +36 -0
  89. package/dist/core/pipeHead.js +28 -0
  90. package/dist/core/pipeHead.js.map +1 -0
  91. package/dist/core/sink.d.ts +33 -0
  92. package/dist/core/sink.js +48 -0
  93. package/dist/core/sink.js.map +1 -1
  94. package/dist/core/variables.d.ts +122 -0
  95. package/dist/core/variables.js +320 -0
  96. package/dist/core/variables.js.map +1 -0
  97. package/dist/lib/parser.js +2 -2
  98. package/dist/notes.json +1 -1
  99. package/dist/session/answerAdapters.js +12 -0
  100. package/dist/session/answerAdapters.js.map +1 -1
  101. package/package.json +5 -5
  102. package/dist/builtins/pronouns.d.ts +0 -8
  103. package/dist/builtins/pronouns.js +0 -39
  104. package/dist/builtins/pronouns.js.map +0 -1
  105. package/dist/session/recent.d.ts +0 -68
  106. package/dist/session/recent.js +0 -99
  107. 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 — how many things are gathered,
6
- * what a feed's status is, what a produced file's tags say — and refuses,
7
- * non-zero, when the claim does not hold. Because it is a verb rather than a
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 { cohort_read } from './gather.store.js';
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, what its
202
- * headers say.
130
+ * Answers a claim about a path: whether it is there, and what it holds.
203
131
  *
204
- * @param target - The path, as the operator wrote it.
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(target, property, tagName, matching, deep) {
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 (property === 'count') {
225
- if (deep) {
226
- const walked = await folder_walkDeep(resolved, DEEP_MAX);
227
- const files = walked
228
- .map((entry) => entry.item)
229
- .filter((item) => item.type !== 'dir');
230
- if (matching === undefined)
231
- return { got: `${files.length}` };
232
- const deepPattern = glob_toRegExp(matching);
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
- if (property === 'tags') {
244
- if (tagName === undefined)
245
- return { got: null, refusal: 'expect path <p> tags <TagName> <predicate> <value>' };
246
- const physical = await path_physical(resolved);
247
- let model = await tagsModel_read(physical);
248
- if (!model.ok) {
249
- // A plugin's output is routinely nested, so a tag claim made at the
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
- * Asks the session once.
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
- * @param subject - What the claim is about.
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
- async function subject_read(subject, target, property, tagName, matching, deep) {
294
- if (subject === 'gather')
295
- return await gather_read(property);
296
- if (subject === 'feed')
297
- return await feed_read(target ?? '', property);
298
- if (subject === 'run')
299
- return await run_read(target ?? '', property);
300
- if (subject === 'path')
301
- return await path_read(target ?? '', property, tagName, matching, deep);
302
- return { got: null, refusal: `expect knows nothing about "${subject}" — try gather, feed, run or path` };
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('Usage: expect <gather|feed|run|path> [<target>] <property> [<predicate> <value>] [--within <duration>]')}\n`);
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
- if (!SUBJECTS.includes(subject)) {
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 ${SUBJECTS.join(', ')}.`)}\n`);
238
+ return envelope_error('', undefined, `${chalk.red(`expect knows nothing about "${subject}" in this session — try ${names}.`)}\n`);
354
239
  }
355
- // `gather` is the one subject that names nothing: there is one cohort.
356
- const named = subject !== 'gather';
357
- const target = named ? operands[1] : undefined;
358
- const property = named ? operands[2] : operands[1];
359
- const rest = named ? operands.slice(3) : operands.slice(2);
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 — a property such as size, status, exists or count.`)}\n`);
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, tagName ?? '', narrowing,
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 subject_read(subject, target, property, tagName, matching_get(parsed), parsed.deep === true);
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
- /** The model kind under which a cohort travels to a surface. */
3
- export declare const GATHER_MODEL_KIND: string;
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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"}