@fnndsc/chell 4.4.0 → 5.0.1
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/builtins/sys/prompt.js +2 -2
- package/dist/builtins/sys/prompt.js.map +1 -1
- package/dist/chell.d.ts +2 -2
- package/dist/chell.js +2 -2
- package/dist/chell.js.map +1 -1
- package/dist/config/settings.d.ts +4 -2
- package/dist/config/settings.js +7 -2
- package/dist/config/settings.js.map +1 -1
- package/dist/core/boot.js +49 -60
- package/dist/core/boot.js.map +1 -1
- package/dist/core/cliSurface.d.ts +1 -1
- package/dist/core/cliSurface.js +1 -1
- package/dist/core/cliSurface.js.map +1 -1
- package/dist/core/progressRenderer.d.ts +2 -2
- package/dist/core/prompt/session.d.ts +26 -1
- package/dist/core/prompt/session.js +25 -20
- package/dist/core/prompt/session.js.map +1 -1
- package/dist/core/repl.d.ts +2 -2
- package/dist/core/repl.js +6 -4
- package/dist/core/repl.js.map +1 -1
- package/dist/core/surfaceDispatch.d.ts +21 -0
- package/dist/core/surfaceDispatch.js +33 -0
- package/dist/core/surfaceDispatch.js.map +1 -0
- package/dist/remote/client.js +2 -2
- package/dist/remote/client.js.map +1 -1
- package/dist/remote/remoteEngine.d.ts +3 -3
- package/dist/remote/remoteEngine.js +7 -4
- package/dist/remote/remoteEngine.js.map +1 -1
- package/package.json +6 -6
- package/dist/builtins/debug.d.ts +0 -8
- package/dist/builtins/debug.js +0 -39
- package/dist/builtins/debug.js.map +0 -1
- package/dist/builtins/executable.d.ts +0 -22
- package/dist/builtins/executable.js +0 -115
- package/dist/builtins/executable.js.map +0 -1
- package/dist/builtins/fs/cat.d.ts +0 -16
- package/dist/builtins/fs/cat.js +0 -266
- package/dist/builtins/fs/cat.js.map +0 -1
- package/dist/builtins/fs/cd.d.ts +0 -42
- package/dist/builtins/fs/cd.js +0 -193
- package/dist/builtins/fs/cd.js.map +0 -1
- package/dist/builtins/fs/cp.d.ts +0 -10
- package/dist/builtins/fs/cp.js +0 -86
- package/dist/builtins/fs/cp.js.map +0 -1
- package/dist/builtins/fs/download.d.ts +0 -6
- package/dist/builtins/fs/download.js +0 -45
- package/dist/builtins/fs/download.js.map +0 -1
- package/dist/builtins/fs/du.d.ts +0 -58
- package/dist/builtins/fs/du.js +0 -210
- package/dist/builtins/fs/du.js.map +0 -1
- package/dist/builtins/fs/edit.d.ts +0 -7
- package/dist/builtins/fs/edit.js +0 -104
- package/dist/builtins/fs/edit.js.map +0 -1
- package/dist/builtins/fs/ls.d.ts +0 -8
- package/dist/builtins/fs/ls.js +0 -68
- package/dist/builtins/fs/ls.js.map +0 -1
- package/dist/builtins/fs/mkdir.d.ts +0 -9
- package/dist/builtins/fs/mkdir.js +0 -52
- package/dist/builtins/fs/mkdir.js.map +0 -1
- package/dist/builtins/fs/mv.d.ts +0 -10
- package/dist/builtins/fs/mv.js +0 -88
- package/dist/builtins/fs/mv.js.map +0 -1
- package/dist/builtins/fs/pull.args.d.ts +0 -22
- package/dist/builtins/fs/pull.args.js +0 -30
- package/dist/builtins/fs/pull.args.js.map +0 -1
- package/dist/builtins/fs/pull.d.ts +0 -26
- package/dist/builtins/fs/pull.js +0 -445
- package/dist/builtins/fs/pull.js.map +0 -1
- package/dist/builtins/fs/pwd.d.ts +0 -10
- package/dist/builtins/fs/pwd.js +0 -73
- package/dist/builtins/fs/pwd.js.map +0 -1
- package/dist/builtins/fs/rm.d.ts +0 -37
- package/dist/builtins/fs/rm.js +0 -197
- package/dist/builtins/fs/rm.js.map +0 -1
- package/dist/builtins/fs/touch.d.ts +0 -9
- package/dist/builtins/fs/touch.js +0 -76
- package/dist/builtins/fs/touch.js.map +0 -1
- package/dist/builtins/fs/tree.d.ts +0 -15
- package/dist/builtins/fs/tree.js +0 -84
- package/dist/builtins/fs/tree.js.map +0 -1
- package/dist/builtins/fs/upload.d.ts +0 -6
- package/dist/builtins/fs/upload.js +0 -48
- package/dist/builtins/fs/upload.js.map +0 -1
- package/dist/builtins/help.d.ts +0 -74
- package/dist/builtins/help.js +0 -1217
- package/dist/builtins/help.js.map +0 -1
- package/dist/builtins/index.d.ts +0 -46
- package/dist/builtins/index.js +0 -46
- package/dist/builtins/index.js.map +0 -1
- package/dist/builtins/net/connect.d.ts +0 -7
- package/dist/builtins/net/connect.js +0 -42
- package/dist/builtins/net/connect.js.map +0 -1
- package/dist/builtins/net/cubepath.d.ts +0 -18
- package/dist/builtins/net/cubepath.js +0 -102
- package/dist/builtins/net/cubepath.js.map +0 -1
- package/dist/builtins/net/logout.d.ts +0 -6
- package/dist/builtins/net/logout.js +0 -24
- package/dist/builtins/net/logout.js.map +0 -1
- package/dist/builtins/net/pacs.d.ts +0 -24
- package/dist/builtins/net/pacs.js +0 -121
- package/dist/builtins/net/pacs.js.map +0 -1
- package/dist/builtins/net/pacsUtils.d.ts +0 -85
- package/dist/builtins/net/pacsUtils.js +0 -184
- package/dist/builtins/net/pacsUtils.js.map +0 -1
- package/dist/builtins/net/query.d.ts +0 -60
- package/dist/builtins/net/query.js +0 -324
- package/dist/builtins/net/query.js.map +0 -1
- package/dist/builtins/parametersofplugin.d.ts +0 -13
- package/dist/builtins/parametersofplugin.js +0 -43
- package/dist/builtins/parametersofplugin.js.map +0 -1
- package/dist/builtins/pluginExecute.d.ts +0 -27
- package/dist/builtins/pluginExecute.js +0 -165
- package/dist/builtins/pluginExecute.js.map +0 -1
- package/dist/builtins/proc.d.ts +0 -6
- package/dist/builtins/proc.helpers.d.ts +0 -68
- package/dist/builtins/proc.helpers.js +0 -102
- package/dist/builtins/proc.helpers.js.map +0 -1
- package/dist/builtins/proc.js +0 -289
- package/dist/builtins/proc.js.map +0 -1
- package/dist/builtins/res/compute.d.ts +0 -6
- package/dist/builtins/res/compute.js +0 -55
- package/dist/builtins/res/compute.js.map +0 -1
- package/dist/builtins/res/feed.d.ts +0 -6
- package/dist/builtins/res/feed.js +0 -244
- package/dist/builtins/res/feed.js.map +0 -1
- package/dist/builtins/res/feed.notes.d.ts +0 -28
- package/dist/builtins/res/feed.notes.js +0 -24
- package/dist/builtins/res/feed.notes.js.map +0 -1
- package/dist/builtins/res/files.d.ts +0 -18
- package/dist/builtins/res/files.js +0 -85
- package/dist/builtins/res/files.js.map +0 -1
- package/dist/builtins/res/group.d.ts +0 -6
- package/dist/builtins/res/group.js +0 -54
- package/dist/builtins/res/group.js.map +0 -1
- package/dist/builtins/res/pipeline.args.d.ts +0 -22
- package/dist/builtins/res/pipeline.args.js +0 -28
- package/dist/builtins/res/pipeline.args.js.map +0 -1
- package/dist/builtins/res/pipeline.d.ts +0 -20
- package/dist/builtins/res/pipeline.js +0 -252
- package/dist/builtins/res/pipeline.js.map +0 -1
- package/dist/builtins/res/plugin.d.ts +0 -13
- package/dist/builtins/res/plugin.js +0 -140
- package/dist/builtins/res/plugin.js.map +0 -1
- package/dist/builtins/res/plugininstance.d.ts +0 -6
- package/dist/builtins/res/plugininstance.js +0 -53
- package/dist/builtins/res/plugininstance.js.map +0 -1
- package/dist/builtins/res/pluginmeta.d.ts +0 -6
- package/dist/builtins/res/pluginmeta.js +0 -53
- package/dist/builtins/res/pluginmeta.js.map +0 -1
- package/dist/builtins/res/tag.d.ts +0 -6
- package/dist/builtins/res/tag.js +0 -53
- package/dist/builtins/res/tag.js.map +0 -1
- package/dist/builtins/res/workflow.d.ts +0 -6
- package/dist/builtins/res/workflow.js +0 -53
- package/dist/builtins/res/workflow.js.map +0 -1
- package/dist/builtins/store.d.ts +0 -6
- package/dist/builtins/store.js +0 -108
- package/dist/builtins/store.js.map +0 -1
- package/dist/builtins/sys/context.d.ts +0 -6
- package/dist/builtins/sys/context.js +0 -50
- package/dist/builtins/sys/context.js.map +0 -1
- package/dist/builtins/sys/physicalmode.d.ts +0 -8
- package/dist/builtins/sys/physicalmode.js +0 -34
- package/dist/builtins/sys/physicalmode.js.map +0 -1
- package/dist/builtins/sys/timing.d.ts +0 -8
- package/dist/builtins/sys/timing.js +0 -34
- package/dist/builtins/sys/timing.js.map +0 -1
- package/dist/builtins/sys/version.d.ts +0 -15
- package/dist/builtins/sys/version.js +0 -23
- package/dist/builtins/sys/version.js.map +0 -1
- package/dist/builtins/sys/whoami.d.ts +0 -17
- package/dist/builtins/sys/whoami.js +0 -44
- package/dist/builtins/sys/whoami.js.map +0 -1
- package/dist/builtins/utils.d.ts +0 -55
- package/dist/builtins/utils.js +0 -145
- package/dist/builtins/utils.js.map +0 -1
- package/dist/builtins/wildcard.d.ts +0 -26
- package/dist/builtins/wildcard.js +0 -120
- package/dist/builtins/wildcard.js.map +0 -1
- package/dist/calypso.d.ts +0 -13
- package/dist/calypso.js +0 -44
- package/dist/calypso.js.map +0 -1
- package/dist/command-keys.d.ts +0 -8
- package/dist/command-keys.js +0 -32
- package/dist/command-keys.js.map +0 -1
- package/dist/core/dispatch.d.ts +0 -101
- package/dist/core/dispatch.js +0 -636
- package/dist/core/dispatch.js.map +0 -1
- package/dist/core/engine.d.ts +0 -91
- package/dist/core/engine.js +0 -222
- package/dist/core/engine.js.map +0 -1
- package/dist/core/preprocess.d.ts +0 -46
- package/dist/core/preprocess.js +0 -146
- package/dist/core/preprocess.js.map +0 -1
- package/dist/core/progress.d.ts +0 -25
- package/dist/core/progress.js +0 -10
- package/dist/core/progress.js.map +0 -1
- package/dist/core/question.d.ts +0 -27
- package/dist/core/question.js +0 -33
- package/dist/core/question.js.map +0 -1
- package/dist/core/sink.d.ts +0 -201
- package/dist/core/sink.js +0 -300
- package/dist/core/sink.js.map +0 -1
- package/dist/core/surface.d.ts +0 -172
- package/dist/core/surface.js +0 -105
- package/dist/core/surface.js.map +0 -1
- package/dist/core/version.d.ts +0 -20
- package/dist/core/version.js +0 -82
- package/dist/core/version.js.map +0 -1
- package/dist/daemon/launch.d.ts +0 -9
- package/dist/daemon/launch.js +0 -82
- package/dist/daemon/launch.js.map +0 -1
- package/dist/lib/completer/index.d.ts +0 -15
- package/dist/lib/completer/index.js +0 -212
- package/dist/lib/completer/index.js.map +0 -1
- package/dist/lib/completer/pathComplete.helpers.d.ts +0 -22
- package/dist/lib/completer/pathComplete.helpers.js +0 -49
- package/dist/lib/completer/pathComplete.helpers.js.map +0 -1
- package/dist/lib/parser.d.ts +0 -13
- package/dist/lib/parser.js +0 -52
- package/dist/lib/parser.js.map +0 -1
- package/dist/lib/pipe.d.ts +0 -11
- package/dist/lib/pipe.js +0 -90
- package/dist/lib/pipe.js.map +0 -1
- package/dist/lib/prefetch.d.ts +0 -25
- package/dist/lib/prefetch.js +0 -64
- package/dist/lib/prefetch.js.map +0 -1
- package/dist/lib/semicolonParser.d.ts +0 -22
- package/dist/lib/semicolonParser.js +0 -53
- package/dist/lib/semicolonParser.js.map +0 -1
- package/dist/lib/spinner.d.ts +0 -23
- package/dist/lib/spinner.js +0 -71
- package/dist/lib/spinner.js.map +0 -1
- package/dist/lib/vfs/providers/static.d.ts +0 -65
- package/dist/lib/vfs/providers/static.js +0 -164
- package/dist/lib/vfs/providers/static.js.map +0 -1
- package/dist/lib/vfs/providers/static_content.d.ts +0 -27
- package/dist/lib/vfs/providers/static_content.js +0 -180
- package/dist/lib/vfs/providers/static_content.js.map +0 -1
- package/dist/lib/vfs/vfs.d.ts +0 -59
- package/dist/lib/vfs/vfs.js +0 -202
- package/dist/lib/vfs/vfs.js.map +0 -1
- package/dist/remote/discovery.d.ts +0 -23
- package/dist/remote/discovery.js +0 -55
- package/dist/remote/discovery.js.map +0 -1
- package/dist/session/index.d.ts +0 -76
- package/dist/session/index.js +0 -120
- package/dist/session/index.js.map +0 -1
package/dist/builtins/fs/mv.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Builtin mv command.
|
|
3
|
-
* Moves or renames files/directories, reported as a command envelope.
|
|
4
|
-
*/
|
|
5
|
-
import chalk from 'chalk';
|
|
6
|
-
import path from 'path';
|
|
7
|
-
import { listCache_get, envelope_ok, envelope_error } from '@fnndsc/cumin';
|
|
8
|
-
import { commandArgs_process, path_resolve } from '../utils.js';
|
|
9
|
-
import { files_mv as chefs_mv_cmd } from '@fnndsc/chili/commands/fs/mv.js';
|
|
10
|
-
import { mv_render } from '@fnndsc/chili/views/fs.js';
|
|
11
|
-
/**
|
|
12
|
-
* Moves or renames a file or directory.
|
|
13
|
-
* Supports multiple sources when destination is a directory.
|
|
14
|
-
*
|
|
15
|
-
* @param args - [src1, src2, ..., dest] or [src, dest]
|
|
16
|
-
* @returns An envelope whose rendered text reports progress and results and
|
|
17
|
-
* whose model carries per-source outcomes.
|
|
18
|
-
*/
|
|
19
|
-
export async function builtin_mv(args) {
|
|
20
|
-
const parsed = commandArgs_process(args);
|
|
21
|
-
const pathArgs = parsed._;
|
|
22
|
-
if (pathArgs.length < 2) {
|
|
23
|
-
return envelope_error(`${chalk.red('Usage: mv <source...> <dest>')}\n`);
|
|
24
|
-
}
|
|
25
|
-
// Last arg is destination, all others are sources
|
|
26
|
-
const dest = pathArgs[pathArgs.length - 1];
|
|
27
|
-
const sources = pathArgs.slice(0, -1);
|
|
28
|
-
const destPath = await path_resolve(dest);
|
|
29
|
-
const listCache = listCache_get();
|
|
30
|
-
let successCount = 0;
|
|
31
|
-
let failCount = 0;
|
|
32
|
-
let rendered = '';
|
|
33
|
-
let renderedErr = '';
|
|
34
|
-
const outcomes = [];
|
|
35
|
-
for (const src of sources) {
|
|
36
|
-
try {
|
|
37
|
-
const srcPath = await path_resolve(src);
|
|
38
|
-
// For multiple sources, show which file we're moving
|
|
39
|
-
if (sources.length > 1) {
|
|
40
|
-
rendered += `${chalk.gray(`Moving ${srcPath}...`)}\n`;
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
rendered += `Moving ${srcPath} to ${destPath}...\n`;
|
|
44
|
-
}
|
|
45
|
-
const success = await chefs_mv_cmd(srcPath, destPath);
|
|
46
|
-
if (sources.length === 1) {
|
|
47
|
-
rendered += `${mv_render(srcPath, destPath, success)}\n`;
|
|
48
|
-
}
|
|
49
|
-
outcomes.push({ source: srcPath, moved: success });
|
|
50
|
-
if (success) {
|
|
51
|
-
successCount++;
|
|
52
|
-
// Invalidate source directory
|
|
53
|
-
const srcDir = path.posix.dirname(srcPath);
|
|
54
|
-
listCache.cache_invalidate(srcDir);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
failCount++;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
catch (e) {
|
|
61
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
62
|
-
renderedErr += `${chalk.red(`mv: ${src}: ${msg}`)}\n`;
|
|
63
|
-
outcomes.push({ source: src, moved: false });
|
|
64
|
-
failCount++;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// Invalidate destination directory (always, since files moved into it)
|
|
68
|
-
listCache.cache_invalidate(destPath);
|
|
69
|
-
const destParent = path.posix.dirname(destPath);
|
|
70
|
-
listCache.cache_invalidate(destParent);
|
|
71
|
-
// Summary for multiple files
|
|
72
|
-
if (sources.length > 1) {
|
|
73
|
-
if (failCount === 0) {
|
|
74
|
-
rendered += `${chalk.green(`✓ Moved ${successCount} file(s) to ${destPath}`)}\n`;
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
rendered += `${chalk.yellow(`⚠ Moved ${successCount} file(s), ${failCount} failed`)}\n`;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
const modelData = { dest: destPath, outcomes, moved: successCount, failed: failCount };
|
|
81
|
-
if (failCount > 0) {
|
|
82
|
-
const envelope = envelope_error(rendered, undefined, renderedErr || undefined);
|
|
83
|
-
envelope.model = { kind: 'fs.mv', data: modelData };
|
|
84
|
-
return envelope;
|
|
85
|
-
}
|
|
86
|
-
return envelope_ok(rendered, { kind: 'fs.mv', data: modelData });
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=mv.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mv.js","sourceRoot":"","sources":["../../../src/builtins/fs/mv.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Pure argument parsing for the `pull` builtin.
|
|
3
|
-
*
|
|
4
|
-
* Dependency-free so it is trivially unit-testable.
|
|
5
|
-
*
|
|
6
|
-
* @module
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Parsed `pull` arguments.
|
|
10
|
-
*/
|
|
11
|
-
export interface PullArgs {
|
|
12
|
-
nowait: boolean;
|
|
13
|
-
retryMax: number;
|
|
14
|
-
paths: string[];
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Parses `pull` arguments: the `--nowait` flag, `--retry N`, and path operands.
|
|
18
|
-
*
|
|
19
|
-
* @param args - Raw command arguments.
|
|
20
|
-
* @returns The parsed flags and paths.
|
|
21
|
-
*/
|
|
22
|
-
export declare function pullArgs_parse(args: string[]): PullArgs;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Pure argument parsing for the `pull` builtin.
|
|
3
|
-
*
|
|
4
|
-
* Dependency-free so it is trivially unit-testable.
|
|
5
|
-
*
|
|
6
|
-
* @module
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Parses `pull` arguments: the `--nowait` flag, `--retry N`, and path operands.
|
|
10
|
-
*
|
|
11
|
-
* @param args - Raw command arguments.
|
|
12
|
-
* @returns The parsed flags and paths.
|
|
13
|
-
*/
|
|
14
|
-
export function pullArgs_parse(args) {
|
|
15
|
-
const nowait = args.includes('--nowait');
|
|
16
|
-
let retryMax = 0;
|
|
17
|
-
const paths = [];
|
|
18
|
-
for (let i = 0; i < args.length; i++) {
|
|
19
|
-
if (args[i] === '--retry' && i + 1 < args.length) {
|
|
20
|
-
const n = parseInt(args[++i], 10);
|
|
21
|
-
if (!isNaN(n) && n >= 0)
|
|
22
|
-
retryMax = n;
|
|
23
|
-
}
|
|
24
|
-
else if (!args[i].startsWith('--')) {
|
|
25
|
-
paths.push(args[i]);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return { nowait, retryMax, paths };
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=pull.args.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pull.args.js","sourceRoot":"","sources":["../../../src/builtins/fs/pull.args.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,MAAM,MAAM,GAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,QAAQ,GAAW,CAAC,CAAC;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,CAAC,GAAW,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,QAAQ,GAAG,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Builtin pull command.
|
|
3
|
-
*
|
|
4
|
-
* Blocking PACS series retrieve with parallel execution and per-series structured progress.
|
|
5
|
-
* Accepts one or more `/net/pacs/queries/...` VFS paths (query, study, or series level)
|
|
6
|
-
* and materialises the matching DICOM series into ChRIS storage.
|
|
7
|
-
*
|
|
8
|
-
* Progress is driven by LONK WebSocket push notifications (api/v1/pacs/ws/).
|
|
9
|
-
* Use `--retry N` to automatically re-fire retrieves for series that received no LONK activity.
|
|
10
|
-
*
|
|
11
|
-
* @module
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* Pulls one or more `/net/pacs/queries/...` VFS paths into ChRIS storage.
|
|
15
|
-
*
|
|
16
|
-
* Blocking by default: emits per-series structured progress via LONK WebSocket,
|
|
17
|
-
* exits non-zero on partial failure.
|
|
18
|
-
* With `--nowait`: fires retrieves and prints `<seriesUID> <retrieveId>` per line, then returns.
|
|
19
|
-
* With `--retry N`: re-fires retrieves for [NO LONK] series up to N additional times.
|
|
20
|
-
*
|
|
21
|
-
* @param args - Command arguments (VFS paths, optional flags).
|
|
22
|
-
* @example
|
|
23
|
-
* pull /net/pacs/queries/42_AccessionNumber:12345678
|
|
24
|
-
* pull --retry 3 /net/pacs/queries/42_AccessionNumber:12345678/Study_1.2.3_US-Hips
|
|
25
|
-
*/
|
|
26
|
-
export declare function builtin_pull(args: string[]): Promise<void>;
|
package/dist/builtins/fs/pull.js
DELETED
|
@@ -1,445 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Builtin pull command.
|
|
3
|
-
*
|
|
4
|
-
* Blocking PACS series retrieve with parallel execution and per-series structured progress.
|
|
5
|
-
* Accepts one or more `/net/pacs/queries/...` VFS paths (query, study, or series level)
|
|
6
|
-
* and materialises the matching DICOM series into ChRIS storage.
|
|
7
|
-
*
|
|
8
|
-
* Progress is driven by LONK WebSocket push notifications (api/v1/pacs/ws/).
|
|
9
|
-
* Use `--retry N` to automatically re-fire retrieves for series that received no LONK activity.
|
|
10
|
-
*
|
|
11
|
-
* @module
|
|
12
|
-
*/
|
|
13
|
-
import chalk from 'chalk';
|
|
14
|
-
import WebSocket from 'ws';
|
|
15
|
-
import { pacsQueries_create, pacsRetrieve_create, } from '@fnndsc/cumin';
|
|
16
|
-
import { session } from '../../session/index.js';
|
|
17
|
-
import { args_checkHasHelpFlag, help_show } from '../help.js';
|
|
18
|
-
import { pacsQuery_createAndWait, queryExpr_parse } from '../net/query.js';
|
|
19
|
-
import { spinner } from '../../lib/spinner.js';
|
|
20
|
-
import { path_resolve } from '../utils.js';
|
|
21
|
-
import { pacs_seriesCollect, pacsServer_resolve, series_cubePathGet, } from '../net/pacsUtils.js';
|
|
22
|
-
import { builtin_cubepath } from '../net/cubepath.js';
|
|
23
|
-
import { pullArgs_parse } from './pull.args.js';
|
|
24
|
-
import { sink_get } from '../../core/sink.js';
|
|
25
|
-
const STALL_TIMEOUT_MS = 30_000;
|
|
26
|
-
const NO_ACTIVITY_TIMEOUT_MS = 15_000;
|
|
27
|
-
const SERIES_TIMEOUT_MS = 5 * 60 * 1_000;
|
|
28
|
-
const CHECKER_INTERVAL_MS = 2_000;
|
|
29
|
-
function progressStatus_fromSeries(status, lonkConfirmed) {
|
|
30
|
-
if (status === 'pulled')
|
|
31
|
-
return lonkConfirmed ? 'done' : 'unconfirmed';
|
|
32
|
-
if (status === 'pending' || status === 'pulling')
|
|
33
|
-
return 'running';
|
|
34
|
-
return status;
|
|
35
|
-
}
|
|
36
|
-
function pullProgress_emit(task, status, phase = 'watching') {
|
|
37
|
-
const current = task.actualFiles;
|
|
38
|
-
const total = task.expectedFiles > 0 ? Math.max(task.expectedFiles, current, 1) : Math.max(current, 1);
|
|
39
|
-
sink_get().progress_write({
|
|
40
|
-
operation: 'pull',
|
|
41
|
-
kind: 'retrieve',
|
|
42
|
-
phase,
|
|
43
|
-
itemId: task.seriesUID,
|
|
44
|
-
label: task.label,
|
|
45
|
-
current,
|
|
46
|
-
total,
|
|
47
|
-
percent: total > 0 ? Math.min(100, (current / total) * 100) : undefined,
|
|
48
|
-
unit: 'files',
|
|
49
|
-
status: status ?? progressStatus_fromSeries(task.status, task.lonkConfirmed),
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
function pullProgress_complete(allTasks, failed) {
|
|
53
|
-
const done = allTasks.filter((t) => t.status === 'pulled').length;
|
|
54
|
-
sink_get().progress_write({
|
|
55
|
-
operation: 'pull',
|
|
56
|
-
kind: 'retrieve',
|
|
57
|
-
phase: failed ? 'failed' : 'complete',
|
|
58
|
-
label: failed ? 'Pull incomplete' : 'Pull complete',
|
|
59
|
-
current: done,
|
|
60
|
-
total: allTasks.length,
|
|
61
|
-
percent: allTasks.length > 0 ? (done / allTasks.length) * 100 : 100,
|
|
62
|
-
unit: 'series',
|
|
63
|
-
status: failed ? 'error' : 'done',
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Walks a VFS path and returns SeriesPullTask array, delegating collection to pacsUtils.
|
|
68
|
-
*
|
|
69
|
-
* @param pathStr - Absolute VFS path to a query, study, or series directory.
|
|
70
|
-
* @param fallbackPacsName - PACS identifier used when RetrieveAETitle is absent.
|
|
71
|
-
* @returns Array of SeriesPullTask ready for firing.
|
|
72
|
-
*/
|
|
73
|
-
async function path_seriesCollect(pathStr, fallbackPacsName) {
|
|
74
|
-
const infos = await pacs_seriesCollect(pathStr, fallbackPacsName, 'pull');
|
|
75
|
-
return infos.map((info) => ({
|
|
76
|
-
label: info.label,
|
|
77
|
-
seriesUID: info.seriesUID,
|
|
78
|
-
studyUID: info.studyUID,
|
|
79
|
-
pacsName: info.pacsName,
|
|
80
|
-
expectedFiles: info.expectedFiles,
|
|
81
|
-
syntheticQueryId: null,
|
|
82
|
-
retrieveId: null,
|
|
83
|
-
status: 'pending',
|
|
84
|
-
actualFiles: 0,
|
|
85
|
-
lastProgressFiles: 0,
|
|
86
|
-
lastProgressTime: Date.now(),
|
|
87
|
-
startTime: 0,
|
|
88
|
-
lonkConfirmed: false,
|
|
89
|
-
cubePathDir: null,
|
|
90
|
-
}));
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Creates a synthetic PACSQuery + PACSRetrieve for a single series.
|
|
94
|
-
*
|
|
95
|
-
* @param task - The pull task to fire (mutated in place: syntheticQueryId, retrieveId, startTime).
|
|
96
|
-
* @param pacsserver - Resolved PACS server ID string.
|
|
97
|
-
*/
|
|
98
|
-
async function task_fire(task, pacsserver) {
|
|
99
|
-
const queryData = {
|
|
100
|
-
// CUBE rejects duplicate query titles per user, which used to make a
|
|
101
|
-
// re-pull of the same series fail; a timestamp keeps titles unique.
|
|
102
|
-
title: `pull_${task.seriesUID}_${Date.now().toString(36)}`,
|
|
103
|
-
query: JSON.stringify({
|
|
104
|
-
SeriesInstanceUID: task.seriesUID,
|
|
105
|
-
StudyInstanceUID: task.studyUID,
|
|
106
|
-
}),
|
|
107
|
-
execute: false,
|
|
108
|
-
};
|
|
109
|
-
const queryResult = await pacsQueries_create(pacsserver, queryData);
|
|
110
|
-
if (!queryResult.ok) {
|
|
111
|
-
task.status = 'error';
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const syntheticQueryId = queryResult.value.id;
|
|
115
|
-
const retrieveResult = await pacsRetrieve_create(syntheticQueryId);
|
|
116
|
-
if (!retrieveResult.ok) {
|
|
117
|
-
task.status = 'error';
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
task.syntheticQueryId = syntheticQueryId;
|
|
121
|
-
task.retrieveId = retrieveResult.value.id;
|
|
122
|
-
task.startTime = Date.now();
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Constructs a LONK WebSocket URL from a download token response.
|
|
126
|
-
*
|
|
127
|
-
* @param tokenUrl - The download token resource URL.
|
|
128
|
-
* @param token - The actual download token string.
|
|
129
|
-
* @returns WebSocket URL for the LONK endpoint.
|
|
130
|
-
*/
|
|
131
|
-
function lonkWsUrl_build(tokenUrl, token) {
|
|
132
|
-
return tokenUrl
|
|
133
|
-
.replace(/^http(s?):\/\//, (_m, s) => `ws${s}://`)
|
|
134
|
-
.replace(/v1\/downloadtokens\/\d+\//, `v1/pacs/ws/?token=${token}`);
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Opens a LONK WebSocket, fires retrieves for the given tasks, and blocks until all
|
|
138
|
-
* tasks reach a terminal state. Mutates each task's status, actualFiles, and lonkConfirmed.
|
|
139
|
-
*
|
|
140
|
-
* @param tasks - Tasks to subscribe, fire, and watch.
|
|
141
|
-
* @param pacsserver - Resolved PACS server identifier.
|
|
142
|
-
* @param client - Authenticated ChRIS API client.
|
|
143
|
-
* @returns Number of tasks that failed to fire their retrieve.
|
|
144
|
-
*/
|
|
145
|
-
async function tasks_pullWatch(tasks, pacsserver, client) {
|
|
146
|
-
const tokenClient = client;
|
|
147
|
-
const downloadToken = await tokenClient.createDownloadToken();
|
|
148
|
-
const tokenStr = String(downloadToken.data.token ?? '');
|
|
149
|
-
const wsUrl = lonkWsUrl_build(downloadToken.url, tokenStr);
|
|
150
|
-
const ws = new WebSocket(wsUrl);
|
|
151
|
-
await new Promise((openResolve, openReject) => {
|
|
152
|
-
ws.once('open', openResolve);
|
|
153
|
-
ws.once('error', (err) => openReject(err));
|
|
154
|
-
});
|
|
155
|
-
for (const t of tasks) {
|
|
156
|
-
ws.send(JSON.stringify({
|
|
157
|
-
SeriesInstanceUID: t.seriesUID,
|
|
158
|
-
pacs_name: t.pacsName,
|
|
159
|
-
action: 'subscribe',
|
|
160
|
-
}));
|
|
161
|
-
}
|
|
162
|
-
await Promise.all(tasks.map((t) => task_fire(t, pacsserver)));
|
|
163
|
-
const fired = tasks.filter((t) => t.status !== 'error');
|
|
164
|
-
const firingErrors = tasks.length - fired.length;
|
|
165
|
-
if (fired.length === 0) {
|
|
166
|
-
for (const t of tasks) {
|
|
167
|
-
if (t.status === 'error')
|
|
168
|
-
pullProgress_emit(t, 'error');
|
|
169
|
-
}
|
|
170
|
-
ws.close();
|
|
171
|
-
return firingErrors;
|
|
172
|
-
}
|
|
173
|
-
for (const t of tasks) {
|
|
174
|
-
pullProgress_emit(t, t.status === 'error' ? 'error' : 'running');
|
|
175
|
-
}
|
|
176
|
-
const taskByUID = new Map(tasks.map((t) => [t.seriesUID, t]));
|
|
177
|
-
await new Promise((resolve) => {
|
|
178
|
-
let resolved = false;
|
|
179
|
-
const done = () => {
|
|
180
|
-
if (resolved)
|
|
181
|
-
return;
|
|
182
|
-
resolved = true;
|
|
183
|
-
clearInterval(checker);
|
|
184
|
-
try {
|
|
185
|
-
ws.close();
|
|
186
|
-
}
|
|
187
|
-
catch { /* ignore */ }
|
|
188
|
-
resolve();
|
|
189
|
-
};
|
|
190
|
-
const checker = setInterval(() => {
|
|
191
|
-
const now = Date.now();
|
|
192
|
-
let allTerminal = true;
|
|
193
|
-
for (const t of fired) {
|
|
194
|
-
if (t.status === 'pulled' || t.status === 'error' || t.status === 'stalled' || t.status === 'timeout') {
|
|
195
|
-
continue;
|
|
196
|
-
}
|
|
197
|
-
allTerminal = false;
|
|
198
|
-
if (t.startTime > 0 && now - t.startTime > SERIES_TIMEOUT_MS) {
|
|
199
|
-
t.status = 'timeout';
|
|
200
|
-
pullProgress_emit(t, 'timeout');
|
|
201
|
-
continue;
|
|
202
|
-
}
|
|
203
|
-
if (t.actualFiles > 0 && now - t.lastProgressTime > STALL_TIMEOUT_MS) {
|
|
204
|
-
t.status = 'stalled';
|
|
205
|
-
pullProgress_emit(t, 'stalled');
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
if (t.startTime > 0 && t.actualFiles === 0 && now - t.startTime > NO_ACTIVITY_TIMEOUT_MS) {
|
|
209
|
-
t.status = 'pulled';
|
|
210
|
-
t.lonkConfirmed = false;
|
|
211
|
-
pullProgress_emit(t, 'unconfirmed');
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
if (allTerminal)
|
|
216
|
-
done();
|
|
217
|
-
}, CHECKER_INTERVAL_MS);
|
|
218
|
-
ws.on('message', (data) => {
|
|
219
|
-
try {
|
|
220
|
-
const outer = JSON.parse(data.toString());
|
|
221
|
-
const seriesUID = outer.SeriesInstanceUID;
|
|
222
|
-
const message = outer.message;
|
|
223
|
-
if (!seriesUID || !message)
|
|
224
|
-
return;
|
|
225
|
-
const t = taskByUID.get(seriesUID);
|
|
226
|
-
if (!t)
|
|
227
|
-
return;
|
|
228
|
-
if ('ndicom' in message && typeof message.ndicom === 'number') {
|
|
229
|
-
const n = message.ndicom;
|
|
230
|
-
t.actualFiles = n;
|
|
231
|
-
t.lastProgressFiles = n;
|
|
232
|
-
t.lastProgressTime = Date.now();
|
|
233
|
-
if (t.status === 'pending')
|
|
234
|
-
t.status = 'pulling';
|
|
235
|
-
pullProgress_emit(t, 'running');
|
|
236
|
-
}
|
|
237
|
-
else if ('done' in message && message.done === true) {
|
|
238
|
-
t.status = 'pulled';
|
|
239
|
-
t.lonkConfirmed = true;
|
|
240
|
-
if (t.actualFiles < t.expectedFiles)
|
|
241
|
-
t.actualFiles = t.expectedFiles;
|
|
242
|
-
pullProgress_emit(t, 'done');
|
|
243
|
-
}
|
|
244
|
-
else if ('error' in message && typeof message.error === 'string') {
|
|
245
|
-
t.status = 'error';
|
|
246
|
-
pullProgress_emit(t, 'error');
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
catch {
|
|
250
|
-
// Malformed message — ignore
|
|
251
|
-
}
|
|
252
|
-
});
|
|
253
|
-
ws.on('error', () => {
|
|
254
|
-
for (const t of fired) {
|
|
255
|
-
if (t.status === 'pending' || t.status === 'pulling') {
|
|
256
|
-
t.status = 'error';
|
|
257
|
-
pullProgress_emit(t, 'error');
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
done();
|
|
261
|
-
});
|
|
262
|
-
ws.on('close', () => { done(); });
|
|
263
|
-
});
|
|
264
|
-
return firingErrors;
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Resolves raw path/query arguments to concrete `/net/pacs` VFS paths,
|
|
268
|
-
* running PACS queries for query expressions.
|
|
269
|
-
*
|
|
270
|
-
* @param paths - Raw path or query-expression operands.
|
|
271
|
-
* @param pacsserver - The resolved PACS server identifier.
|
|
272
|
-
* @returns The resolved VFS paths.
|
|
273
|
-
*/
|
|
274
|
-
async function paths_resolveToVfs(paths, pacsserver) {
|
|
275
|
-
const resolvedPaths = [];
|
|
276
|
-
for (const rawPath of paths) {
|
|
277
|
-
const p = rawPath.startsWith('/') ? rawPath : await path_resolve(rawPath);
|
|
278
|
-
if (p.startsWith('/net/pacs')) {
|
|
279
|
-
resolvedPaths.push(p);
|
|
280
|
-
}
|
|
281
|
-
else if (queryExpr_parse(rawPath)) {
|
|
282
|
-
// Query with the RAW expression: path resolution prefixes the CWD,
|
|
283
|
-
// which would corrupt the first DICOM key (e.g. '/AccessionNumber').
|
|
284
|
-
spinner.start(`Querying PACS for ${rawPath}...`, true);
|
|
285
|
-
const qResult = await pacsQuery_createAndWait(rawPath, `pull_${rawPath}`, pacsserver, (msg) => spinner.updateMessage(msg));
|
|
286
|
-
spinner.stop();
|
|
287
|
-
if (qResult) {
|
|
288
|
-
console.log(chalk.gray(` → ${qResult.vfsPath}`));
|
|
289
|
-
resolvedPaths.push(qResult.vfsPath);
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
console.error(chalk.red(`pull: Query failed for: ${rawPath}`));
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
console.error(chalk.red(`pull: Not a PACS VFS path or valid query expression: ${rawPath}`));
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
return resolvedPaths;
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Re-fires retrieves for series that pulled without LONK confirmation, up to
|
|
303
|
-
* `retryMax` additional attempts, then permanently fails any still unconfirmed.
|
|
304
|
-
*
|
|
305
|
-
* @param allTasks - All pull tasks.
|
|
306
|
-
* @param retryMax - Maximum retry attempts.
|
|
307
|
-
* @param pacsserver - The PACS server identifier.
|
|
308
|
-
* @param client - The connected ChRIS client.
|
|
309
|
-
* @returns The number of additional retrieve-firing errors incurred.
|
|
310
|
-
*/
|
|
311
|
-
async function pullRetryLoop(allTasks, retryMax, pacsserver, client) {
|
|
312
|
-
let extraFiringErrors = 0;
|
|
313
|
-
let retryCandidates = allTasks.filter((t) => t.status === 'pulled' && !t.lonkConfirmed);
|
|
314
|
-
const pacsClient = client;
|
|
315
|
-
for (let attempt = 1; attempt <= retryMax && retryCandidates.length > 0; attempt++) {
|
|
316
|
-
await Promise.all(retryCandidates.map(async (t) => {
|
|
317
|
-
const result = await series_cubePathGet(t.seriesUID, pacsClient, 1, 0);
|
|
318
|
-
if (result) {
|
|
319
|
-
t.lonkConfirmed = true;
|
|
320
|
-
t.cubePathDir = result.folderPath;
|
|
321
|
-
}
|
|
322
|
-
}));
|
|
323
|
-
retryCandidates = retryCandidates.filter((t) => !t.lonkConfirmed);
|
|
324
|
-
if (retryCandidates.length === 0)
|
|
325
|
-
break;
|
|
326
|
-
console.log(chalk.yellow(`\nRetry ${attempt}/${retryMax} for ${retryCandidates.length} unconfirmed series...`));
|
|
327
|
-
for (const t of retryCandidates) {
|
|
328
|
-
t.status = 'pending';
|
|
329
|
-
t.actualFiles = 0;
|
|
330
|
-
t.lastProgressFiles = 0;
|
|
331
|
-
t.lastProgressTime = Date.now();
|
|
332
|
-
t.startTime = 0;
|
|
333
|
-
t.lonkConfirmed = false;
|
|
334
|
-
t.syntheticQueryId = null;
|
|
335
|
-
t.retrieveId = null;
|
|
336
|
-
pullProgress_emit(t, 'running', 'retrying');
|
|
337
|
-
}
|
|
338
|
-
extraFiringErrors += await tasks_pullWatch(retryCandidates, pacsserver, client);
|
|
339
|
-
retryCandidates = retryCandidates.filter((t) => t.status === 'pulled' && !t.lonkConfirmed);
|
|
340
|
-
}
|
|
341
|
-
for (const t of retryCandidates) {
|
|
342
|
-
t.status = 'error';
|
|
343
|
-
pullProgress_emit(t, 'error');
|
|
344
|
-
}
|
|
345
|
-
return extraFiringErrors;
|
|
346
|
-
}
|
|
347
|
-
/**
|
|
348
|
-
* Prints the pull summary and sets a non-zero exit code on any failure.
|
|
349
|
-
*
|
|
350
|
-
* @param allTasks - All pull tasks.
|
|
351
|
-
* @param totalFiringErrors - Count of retrieve-firing errors across all attempts.
|
|
352
|
-
*/
|
|
353
|
-
function pullSummary_print(allTasks, totalFiringErrors) {
|
|
354
|
-
const pulled = allTasks.filter((t) => t.status === 'pulled').length;
|
|
355
|
-
const totalCount = allTasks.length;
|
|
356
|
-
const failures = allTasks.filter((t) => t.status !== 'pulled');
|
|
357
|
-
if (failures.length === 0) {
|
|
358
|
-
console.log(chalk.green(`\n✓ ${pulled}/${totalCount} series pulled successfully.`));
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
console.log(chalk.yellow(`\n⚠ ${pulled}/${totalCount} series complete.`));
|
|
362
|
-
for (const f of failures) {
|
|
363
|
-
console.log(chalk.red(` ✗ ${f.label} [${f.status.toUpperCase()}]`));
|
|
364
|
-
}
|
|
365
|
-
process.exitCode = 1;
|
|
366
|
-
}
|
|
367
|
-
if (totalFiringErrors > 0) {
|
|
368
|
-
console.log(chalk.red(` ${totalFiringErrors} retrieve(s) failed to start.`));
|
|
369
|
-
process.exitCode = 1;
|
|
370
|
-
}
|
|
371
|
-
pullProgress_complete(allTasks, failures.length > 0 || totalFiringErrors > 0);
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Pulls one or more `/net/pacs/queries/...` VFS paths into ChRIS storage.
|
|
375
|
-
*
|
|
376
|
-
* Blocking by default: emits per-series structured progress via LONK WebSocket,
|
|
377
|
-
* exits non-zero on partial failure.
|
|
378
|
-
* With `--nowait`: fires retrieves and prints `<seriesUID> <retrieveId>` per line, then returns.
|
|
379
|
-
* With `--retry N`: re-fires retrieves for [NO LONK] series up to N additional times.
|
|
380
|
-
*
|
|
381
|
-
* @param args - Command arguments (VFS paths, optional flags).
|
|
382
|
-
* @example
|
|
383
|
-
* pull /net/pacs/queries/42_AccessionNumber:12345678
|
|
384
|
-
* pull --retry 3 /net/pacs/queries/42_AccessionNumber:12345678/Study_1.2.3_US-Hips
|
|
385
|
-
*/
|
|
386
|
-
export async function builtin_pull(args) {
|
|
387
|
-
if (args_checkHasHelpFlag(args, 'pull')) {
|
|
388
|
-
help_show('pull');
|
|
389
|
-
return;
|
|
390
|
-
}
|
|
391
|
-
const { nowait, retryMax, paths } = pullArgs_parse(args);
|
|
392
|
-
if (paths.length === 0) {
|
|
393
|
-
console.error(chalk.red('pull: No paths specified. Usage: pull [--nowait] [--retry N] <vfs-path> [...]'));
|
|
394
|
-
process.exitCode = 1;
|
|
395
|
-
return;
|
|
396
|
-
}
|
|
397
|
-
const pacsIdentifier = await pacsServer_resolve();
|
|
398
|
-
if (!pacsIdentifier) {
|
|
399
|
-
console.error(chalk.red('pull: No PACS server available. Set one with: pacs connect <id>'));
|
|
400
|
-
process.exitCode = 1;
|
|
401
|
-
return;
|
|
402
|
-
}
|
|
403
|
-
const pacsserver = pacsIdentifier;
|
|
404
|
-
const resolvedPaths = await paths_resolveToVfs(paths, pacsserver);
|
|
405
|
-
const allTasks = [];
|
|
406
|
-
for (const p of resolvedPaths) {
|
|
407
|
-
const tasks = await path_seriesCollect(p, pacsIdentifier);
|
|
408
|
-
if (tasks.length === 0) {
|
|
409
|
-
console.error(chalk.yellow(`pull: No series found under: ${p}`));
|
|
410
|
-
}
|
|
411
|
-
allTasks.push(...tasks);
|
|
412
|
-
}
|
|
413
|
-
if (allTasks.length === 0) {
|
|
414
|
-
console.error(chalk.red('pull: No series to retrieve.'));
|
|
415
|
-
process.exitCode = 1;
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
const client = await session.connection.client_get();
|
|
419
|
-
if (!client) {
|
|
420
|
-
console.error(chalk.red('pull: Not connected to ChRIS.'));
|
|
421
|
-
process.exitCode = 1;
|
|
422
|
-
return;
|
|
423
|
-
}
|
|
424
|
-
// --nowait: fire retrieves and exit without watching
|
|
425
|
-
if (nowait) {
|
|
426
|
-
for (const t of allTasks) {
|
|
427
|
-
await task_fire(t, pacsserver);
|
|
428
|
-
if (t.retrieveId !== null) {
|
|
429
|
-
console.log(`${t.seriesUID} ${t.retrieveId}`);
|
|
430
|
-
}
|
|
431
|
-
else {
|
|
432
|
-
console.log(`${t.seriesUID} ERROR`);
|
|
433
|
-
process.exitCode = 1;
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
return;
|
|
437
|
-
}
|
|
438
|
-
let totalFiringErrors = await tasks_pullWatch(allTasks, pacsserver, client);
|
|
439
|
-
totalFiringErrors += await pullRetryLoop(allTasks, retryMax, pacsserver, client);
|
|
440
|
-
pullSummary_print(allTasks, totalFiringErrors);
|
|
441
|
-
// Report CUBE paths via cubepath; --retry handles pacsseries DB lag post-pull
|
|
442
|
-
await builtin_cubepath([...resolvedPaths, '--retry']);
|
|
443
|
-
console.log(chalk.gray('Detached — use `pacsretrieve report <queryId>` to verify.'));
|
|
444
|
-
}
|
|
445
|
-
//# sourceMappingURL=pull.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/builtins/fs/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { CommandEnvelope } from '@fnndsc/cumin';
|
|
2
|
-
/**
|
|
3
|
-
* Reports the current working directory in the ChRIS filesystem context.
|
|
4
|
-
*
|
|
5
|
-
* @param args - Command arguments (--title flag supported).
|
|
6
|
-
* @returns An envelope whose rendered text is the directory (with feed and
|
|
7
|
-
* plugin segments replaced by titles under --title) and whose model
|
|
8
|
-
* carries the raw path.
|
|
9
|
-
*/
|
|
10
|
-
export declare function builtin_pwd(args?: string[]): Promise<CommandEnvelope>;
|