@fnndsc/brasa 0.56.1 → 0.56.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/buildinfo.json +1 -1
- package/dist/builtins/berth/berth.d.ts +90 -3
- package/dist/builtins/berth/berth.js +129 -76
- package/dist/builtins/berth/berth.js.map +1 -1
- package/dist/builtins/berth/berthClose.d.ts +25 -6
- package/dist/builtins/berth/berthClose.js +8 -64
- package/dist/builtins/berth/berthClose.js.map +1 -1
- package/dist/builtins/berth/berthCube.d.ts +3 -2
- package/dist/builtins/berth/berthCube.js +9 -16
- package/dist/builtins/berth/berthCube.js.map +1 -1
- package/dist/builtins/berth/berthProcesses.js +33 -3
- package/dist/builtins/berth/berthProcesses.js.map +1 -1
- package/dist/builtins/debug.d.ts +24 -3
- package/dist/builtins/debug.js +66 -13
- package/dist/builtins/debug.js.map +1 -1
- package/dist/builtins/fs/acl.args.d.ts +5 -38
- package/dist/builtins/fs/acl.args.js +6 -72
- package/dist/builtins/fs/acl.args.js.map +1 -1
- package/dist/builtins/fs/acl.d.ts +100 -10
- package/dist/builtins/fs/acl.js +222 -68
- package/dist/builtins/fs/acl.js.map +1 -1
- package/dist/builtins/fs/cat.args.d.ts +14 -15
- package/dist/builtins/fs/cat.args.js +13 -40
- package/dist/builtins/fs/cat.args.js.map +1 -1
- package/dist/builtins/fs/cat.d.ts +40 -3
- package/dist/builtins/fs/cat.js +92 -13
- package/dist/builtins/fs/cat.js.map +1 -1
- package/dist/builtins/fs/cd.d.ts +24 -6
- package/dist/builtins/fs/cd.js +71 -18
- package/dist/builtins/fs/cd.js.map +1 -1
- package/dist/builtins/fs/configWrite.d.ts +24 -8
- package/dist/builtins/fs/configWrite.js +77 -36
- package/dist/builtins/fs/configWrite.js.map +1 -1
- package/dist/builtins/fs/cp.d.ts +39 -4
- package/dist/builtins/fs/cp.js +122 -56
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/download.d.ts +31 -4
- package/dist/builtins/fs/download.js +75 -38
- package/dist/builtins/fs/download.js.map +1 -1
- package/dist/builtins/fs/du.d.ts +59 -33
- package/dist/builtins/fs/du.js +111 -79
- package/dist/builtins/fs/du.js.map +1 -1
- package/dist/builtins/fs/edit.d.ts +19 -4
- package/dist/builtins/fs/edit.js +77 -16
- package/dist/builtins/fs/edit.js.map +1 -1
- package/dist/builtins/fs/find.d.ts +25 -0
- package/dist/builtins/fs/find.js +76 -5
- package/dist/builtins/fs/find.js.map +1 -1
- package/dist/builtins/fs/ls.d.ts +69 -4
- package/dist/builtins/fs/ls.js +84 -45
- package/dist/builtins/fs/ls.js.map +1 -1
- package/dist/builtins/fs/mkdir.d.ts +28 -18
- package/dist/builtins/fs/mkdir.js +95 -66
- package/dist/builtins/fs/mkdir.js.map +1 -1
- package/dist/builtins/fs/mv.d.ts +34 -4
- package/dist/builtins/fs/mv.js +129 -64
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/pull.args.d.ts +56 -17
- package/dist/builtins/fs/pull.args.js +16 -66
- package/dist/builtins/fs/pull.args.js.map +1 -1
- package/dist/builtins/fs/pull.d.ts +62 -0
- package/dist/builtins/fs/pull.js +123 -31
- package/dist/builtins/fs/pull.js.map +1 -1
- package/dist/builtins/fs/pwd.d.ts +19 -5
- package/dist/builtins/fs/pwd.js +62 -8
- package/dist/builtins/fs/pwd.js.map +1 -1
- package/dist/builtins/fs/rm.d.ts +58 -21
- package/dist/builtins/fs/rm.js +99 -82
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/fs/rmdir.d.ts +29 -11
- package/dist/builtins/fs/rmdir.js +87 -36
- package/dist/builtins/fs/rmdir.js.map +1 -1
- package/dist/builtins/fs/touch.d.ts +44 -9
- package/dist/builtins/fs/touch.js +91 -27
- package/dist/builtins/fs/touch.js.map +1 -1
- package/dist/builtins/fs/tree.d.ts +36 -9
- package/dist/builtins/fs/tree.js +126 -36
- package/dist/builtins/fs/tree.js.map +1 -1
- package/dist/builtins/fs/upload.d.ts +22 -3
- package/dist/builtins/fs/upload.js +82 -14
- package/dist/builtins/fs/upload.js.map +1 -1
- package/dist/builtins/fs/xattr.args.d.ts +12 -33
- package/dist/builtins/fs/xattr.args.js +17 -95
- package/dist/builtins/fs/xattr.args.js.map +1 -1
- package/dist/builtins/fs/xattr.d.ts +98 -8
- package/dist/builtins/fs/xattr.js +163 -24
- package/dist/builtins/fs/xattr.js.map +1 -1
- package/dist/builtins/games/bytes.d.ts +201 -5
- package/dist/builtins/games/bytes.js +255 -54
- package/dist/builtins/games/bytes.js.map +1 -1
- package/dist/builtins/games/chimes.d.ts +180 -3
- package/dist/builtins/games/chimes.js +203 -26
- package/dist/builtins/games/chimes.js.map +1 -1
- package/dist/builtins/games/chrislab.d.ts +101 -3
- package/dist/builtins/games/chrislab.js +117 -17
- package/dist/builtins/games/chrislab.js.map +1 -1
- package/dist/builtins/games/cowsay.d.ts +93 -2
- package/dist/builtins/games/cowsay.js +90 -31
- package/dist/builtins/games/cowsay.js.map +1 -1
- package/dist/builtins/games/figlet.d.ts +70 -2
- package/dist/builtins/games/figlet.js +83 -6
- package/dist/builtins/games/figlet.js.map +1 -1
- package/dist/builtins/games/lab.d.ts +104 -5
- package/dist/builtins/games/lab.js +144 -6
- package/dist/builtins/games/lab.js.map +1 -1
- package/dist/builtins/games/lolcat.d.ts +61 -1
- package/dist/builtins/games/lolcat.js +59 -24
- package/dist/builtins/games/lolcat.js.map +1 -1
- package/dist/builtins/games/morse.d.ts +36 -1
- package/dist/builtins/games/morse.js +50 -2
- package/dist/builtins/games/morse.js.map +1 -1
- package/dist/builtins/games/numbers.d.ts +241 -5
- package/dist/builtins/games/numbers.js +298 -23
- package/dist/builtins/games/numbers.js.map +1 -1
- package/dist/builtins/games/play.d.ts +96 -6
- package/dist/builtins/games/play.js +137 -6
- package/dist/builtins/games/play.js.map +1 -1
- package/dist/builtins/games/qr.d.ts +40 -1
- package/dist/builtins/games/qr.js +51 -2
- package/dist/builtins/games/qr.js.map +1 -1
- package/dist/builtins/games/show.d.ts +131 -6
- package/dist/builtins/games/show.js +208 -20
- package/dist/builtins/games/show.js.map +1 -1
- package/dist/builtins/games/sky.d.ts +178 -4
- package/dist/builtins/games/sky.js +228 -12
- package/dist/builtins/games/sky.js.map +1 -1
- package/dist/builtins/games/text.d.ts +258 -7
- package/dist/builtins/games/text.js +310 -29
- package/dist/builtins/games/text.js.map +1 -1
- package/dist/builtins/games/trek.d.ts +67 -3
- package/dist/builtins/games/trek.js +63 -10
- package/dist/builtins/games/trek.js.map +1 -1
- package/dist/builtins/games/wtf.d.ts +58 -1
- package/dist/builtins/games/wtf.js +67 -6
- package/dist/builtins/games/wtf.js.map +1 -1
- package/dist/builtins/help.d.ts +41 -3
- package/dist/builtins/help.js +92 -796
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/net/connect.d.ts +36 -3
- package/dist/builtins/net/connect.js +84 -26
- package/dist/builtins/net/connect.js.map +1 -1
- package/dist/builtins/net/cubepath.d.ts +49 -5
- package/dist/builtins/net/cubepath.js +69 -27
- package/dist/builtins/net/cubepath.js.map +1 -1
- package/dist/builtins/net/logout.d.ts +13 -4
- package/dist/builtins/net/logout.js +49 -3
- package/dist/builtins/net/logout.js.map +1 -1
- package/dist/builtins/net/netstat.d.ts +29 -4
- package/dist/builtins/net/netstat.js +64 -23
- package/dist/builtins/net/netstat.js.map +1 -1
- package/dist/builtins/net/pacs.d.ts +169 -15
- package/dist/builtins/net/pacs.js +92 -33
- package/dist/builtins/net/pacs.js.map +1 -1
- package/dist/builtins/net/query.args.d.ts +95 -0
- package/dist/builtins/net/query.args.js +26 -0
- package/dist/builtins/net/query.args.js.map +1 -0
- package/dist/builtins/net/query.d.ts +98 -5
- package/dist/builtins/net/query.js +89 -83
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/net/status.d.ts +5 -3
- package/dist/builtins/net/status.js +5 -12
- package/dist/builtins/net/status.js.map +1 -1
- package/dist/builtins/parametersofplugin.d.ts +82 -3
- package/dist/builtins/parametersofplugin.js +79 -23
- package/dist/builtins/parametersofplugin.js.map +1 -1
- package/dist/builtins/proc.d.ts +210 -3
- package/dist/builtins/proc.js +210 -119
- package/dist/builtins/proc.js.map +1 -1
- package/dist/builtins/res/compute.d.ts +67 -3
- package/dist/builtins/res/compute.js +121 -35
- package/dist/builtins/res/compute.js.map +1 -1
- package/dist/builtins/res/dicom.d.ts +55 -7
- package/dist/builtins/res/dicom.js +86 -52
- package/dist/builtins/res/dicom.js.map +1 -1
- package/dist/builtins/res/expect.d.ts +52 -3
- package/dist/builtins/res/expect.js +92 -29
- package/dist/builtins/res/expect.js.map +1 -1
- package/dist/builtins/res/feed.d.ts +475 -3
- package/dist/builtins/res/feed.js +253 -158
- package/dist/builtins/res/feed.js.map +1 -1
- package/dist/builtins/res/files.d.ts +517 -3
- package/dist/builtins/res/files.js +124 -44
- package/dist/builtins/res/files.js.map +1 -1
- package/dist/builtins/res/gather.d.ts +113 -3
- package/dist/builtins/res/gather.js +153 -44
- package/dist/builtins/res/gather.js.map +1 -1
- package/dist/builtins/res/gather.process.d.ts +27 -19
- package/dist/builtins/res/gather.process.js +29 -59
- package/dist/builtins/res/gather.process.js.map +1 -1
- package/dist/builtins/res/group.d.ts +284 -3
- package/dist/builtins/res/group.js +147 -76
- package/dist/builtins/res/group.js.map +1 -1
- package/dist/builtins/res/image.d.ts +30 -2
- package/dist/builtins/res/image.js +62 -10
- package/dist/builtins/res/image.js.map +1 -1
- package/dist/builtins/res/play.d.ts +71 -9
- package/dist/builtins/res/play.js +124 -82
- package/dist/builtins/res/play.js.map +1 -1
- package/dist/builtins/res/plugininstance.d.ts +307 -2
- package/dist/builtins/res/plugininstance.js +122 -50
- package/dist/builtins/res/plugininstance.js.map +1 -1
- package/dist/builtins/res/pluginmeta.d.ts +244 -2
- package/dist/builtins/res/pluginmeta.js +98 -40
- package/dist/builtins/res/pluginmeta.js.map +1 -1
- package/dist/builtins/res/record.d.ts +37 -3
- package/dist/builtins/res/record.js +127 -57
- package/dist/builtins/res/record.js.map +1 -1
- package/dist/builtins/res/resourceList.d.ts +136 -0
- package/dist/builtins/res/resourceList.js +51 -0
- package/dist/builtins/res/resourceList.js.map +1 -0
- package/dist/builtins/res/tag.d.ts +244 -3
- package/dist/builtins/res/tag.js +97 -41
- package/dist/builtins/res/tag.js.map +1 -1
- package/dist/builtins/res/user.d.ts +122 -3
- package/dist/builtins/res/user.js +83 -21
- package/dist/builtins/res/user.js.map +1 -1
- package/dist/builtins/res/workflow.d.ts +244 -2
- package/dist/builtins/res/workflow.js +97 -40
- package/dist/builtins/res/workflow.js.map +1 -1
- package/dist/builtins/store.d.ts +85 -3
- package/dist/builtins/store.js +135 -68
- package/dist/builtins/store.js.map +1 -1
- package/dist/builtins/sys/apropos.d.ts +80 -5
- package/dist/builtins/sys/apropos.js +121 -15
- package/dist/builtins/sys/apropos.js.map +1 -1
- package/dist/builtins/sys/cal.d.ts +44 -5
- package/dist/builtins/sys/cal.js +57 -10
- package/dist/builtins/sys/cal.js.map +1 -1
- package/dist/builtins/sys/command.d.ts +20 -0
- package/dist/builtins/sys/command.js +31 -0
- package/dist/builtins/sys/command.js.map +1 -1
- package/dist/builtins/sys/context.d.ts +13 -3
- package/dist/builtins/sys/context.js +51 -4
- package/dist/builtins/sys/context.js.map +1 -1
- package/dist/builtins/sys/date.d.ts +56 -5
- package/dist/builtins/sys/date.js +63 -9
- package/dist/builtins/sys/date.js.map +1 -1
- package/dist/builtins/sys/echo.d.ts +63 -2
- package/dist/builtins/sys/echo.js +87 -8
- package/dist/builtins/sys/echo.js.map +1 -1
- package/dist/builtins/sys/fortune.d.ts +27 -2
- package/dist/builtins/sys/fortune.js +44 -2
- package/dist/builtins/sys/fortune.js.map +1 -1
- package/dist/builtins/sys/grep.d.ts +245 -11
- package/dist/builtins/sys/grep.js +418 -131
- package/dist/builtins/sys/grep.js.map +1 -1
- package/dist/builtins/sys/joblets.d.ts +66 -7
- package/dist/builtins/sys/joblets.js +101 -14
- package/dist/builtins/sys/joblets.js.map +1 -1
- package/dist/builtins/sys/motd.d.ts +37 -3
- package/dist/builtins/sys/motd.js +49 -8
- package/dist/builtins/sys/motd.js.map +1 -1
- package/dist/builtins/sys/notes.d.ts +75 -3
- package/dist/builtins/sys/notes.js +90 -29
- package/dist/builtins/sys/notes.js.map +1 -1
- package/dist/builtins/sys/physicalmode.d.ts +24 -3
- package/dist/builtins/sys/physicalmode.js +68 -14
- package/dist/builtins/sys/physicalmode.js.map +1 -1
- package/dist/builtins/sys/tasks.d.ts +74 -5
- package/dist/builtins/sys/tasks.js +102 -14
- package/dist/builtins/sys/tasks.js.map +1 -1
- package/dist/builtins/sys/textFilters.d.ts +673 -41
- package/dist/builtins/sys/textFilters.js +719 -264
- package/dist/builtins/sys/textFilters.js.map +1 -1
- package/dist/builtins/sys/timing.d.ts +24 -3
- package/dist/builtins/sys/timing.js +67 -14
- package/dist/builtins/sys/timing.js.map +1 -1
- package/dist/builtins/sys/variables.d.ts +70 -4
- package/dist/builtins/sys/variables.js +103 -31
- package/dist/builtins/sys/variables.js.map +1 -1
- package/dist/builtins/sys/version.d.ts +27 -2
- package/dist/builtins/sys/version.js +48 -3
- package/dist/builtins/sys/version.js.map +1 -1
- package/dist/builtins/sys/weather.d.ts +92 -15
- package/dist/builtins/sys/weather.js +71 -45
- package/dist/builtins/sys/weather.js.map +1 -1
- package/dist/builtins/sys/whoami.d.ts +38 -18
- package/dist/builtins/sys/whoami.js +112 -8
- package/dist/builtins/sys/whoami.js.map +1 -1
- package/dist/builtins/utils.d.ts +1 -38
- package/dist/builtins/utils.js +1 -87
- package/dist/builtins/utils.js.map +1 -1
- package/dist/chris/backend.js +2 -0
- package/dist/chris/backend.js.map +1 -1
- package/dist/chris/chrisCommands.js +62 -159
- package/dist/chris/chrisCommands.js.map +1 -1
- package/dist/chris/commandFallback.d.ts +12 -0
- package/dist/chris/commandFallback.js +47 -0
- package/dist/chris/commandFallback.js.map +1 -1
- package/dist/chris/files.js +24 -85
- package/dist/chris/files.js.map +1 -1
- package/dist/chris/filesystem.js +7 -5
- package/dist/chris/filesystem.js.map +1 -1
- package/dist/chris/help.js +0 -1082
- package/dist/chris/help.js.map +1 -1
- package/dist/chris/kinds.d.ts +30 -0
- package/dist/chris/kinds.js +154 -0
- package/dist/chris/kinds.js.map +1 -0
- package/dist/chris/mounts.d.ts +4 -4
- package/dist/chris/mounts.js +9 -16
- package/dist/chris/mounts.js.map +1 -1
- package/dist/chris/navigation.d.ts +2 -3
- package/dist/chris/navigation.js +6 -20
- package/dist/chris/navigation.js.map +1 -1
- package/dist/chris/pacsResources.d.ts +259 -0
- package/dist/chris/pacsResources.js +168 -0
- package/dist/chris/pacsResources.js.map +1 -0
- package/dist/chris/promptContext.d.ts +6 -0
- package/dist/chris/promptContext.js +3 -1
- package/dist/chris/promptContext.js.map +1 -1
- package/dist/core/argumentKinds.d.ts +107 -0
- package/dist/core/argumentKinds.js +223 -0
- package/dist/core/argumentKinds.js.map +1 -0
- package/dist/core/backend.d.ts +4 -1
- package/dist/core/backend.js.map +1 -1
- package/dist/core/commandDeclaration.d.ts +453 -0
- package/dist/core/commandDeclaration.js +52 -0
- package/dist/core/commandDeclaration.js.map +1 -0
- package/dist/core/commandParse.d.ts +64 -0
- package/dist/core/commandParse.js +468 -0
- package/dist/core/commandParse.js.map +1 -0
- package/dist/core/commandRegistry.d.ts +37 -0
- package/dist/core/commandRegistry.js +100 -3
- package/dist/core/commandRegistry.js.map +1 -1
- package/dist/core/commandSchema.d.ts +32 -0
- package/dist/core/commandSchema.js +117 -0
- package/dist/core/commandSchema.js.map +1 -0
- package/dist/core/commandUsage.d.ts +62 -0
- package/dist/core/commandUsage.js +247 -0
- package/dist/core/commandUsage.js.map +1 -0
- package/dist/core/coreCommands.js +66 -214
- package/dist/core/coreCommands.js.map +1 -1
- package/dist/core/dispatch.js +15 -8
- package/dist/core/dispatch.js.map +1 -1
- package/dist/core/paths.d.ts +51 -0
- package/dist/core/paths.js +86 -2
- package/dist/core/paths.js.map +1 -1
- package/dist/core/preprocess.d.ts +10 -9
- package/dist/core/preprocess.js +10 -20
- package/dist/core/preprocess.js.map +1 -1
- package/dist/core/warmupFailures.d.ts +34 -2
- package/dist/core/warmupFailures.js +43 -2
- package/dist/core/warmupFailures.js.map +1 -1
- package/dist/lib/completer/cfsPaths.d.ts +14 -0
- package/dist/lib/completer/cfsPaths.js +91 -0
- package/dist/lib/completer/cfsPaths.js.map +1 -0
- package/dist/lib/completer/declared.d.ts +15 -0
- package/dist/lib/completer/declared.js +189 -0
- package/dist/lib/completer/declared.js.map +1 -0
- package/dist/lib/completer/index.js +33 -79
- package/dist/lib/completer/index.js.map +1 -1
- package/dist/lib/parser.d.ts +5 -8
- package/dist/lib/parser.js +2 -11
- package/dist/lib/parser.js.map +1 -1
- package/dist/lib/vfs/vfs.d.ts +2 -1
- package/dist/lib/vfs/vfs.js +9 -6
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/dist/lib/wildcard.js +2 -3
- package/dist/lib/wildcard.js.map +1 -1
- package/dist/notes.json +1 -1
- package/package.json +6 -5
|
@@ -9,10 +9,35 @@ import { type CommandEnvelope } from '@fnndsc/menu';
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function netstat_render(snapshot: LedgerSnapshot, last: number): string;
|
|
11
11
|
/**
|
|
12
|
-
* `netstat [-n <count>]
|
|
12
|
+
* `netstat [-r] [-n <count>]`: the declaration.
|
|
13
13
|
*
|
|
14
|
-
* @
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* commands_register({ declarations: [netstatCommand] }, 'backend');
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare const netstatCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
|
|
20
|
+
readonly options: {
|
|
21
|
+
readonly reset: {
|
|
22
|
+
readonly short: "r";
|
|
23
|
+
readonly long: "reset";
|
|
24
|
+
readonly summary: "Forget the count after showing it";
|
|
25
|
+
};
|
|
26
|
+
readonly count: {
|
|
27
|
+
readonly short: "n";
|
|
28
|
+
readonly summary: `List that many recent requests (default ${number})`;
|
|
29
|
+
readonly value: {
|
|
30
|
+
readonly name: "count";
|
|
31
|
+
readonly kind: "int";
|
|
32
|
+
readonly min: 0;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* `netstat` over words already split: the declaration's parse and handler.
|
|
39
|
+
*
|
|
40
|
+
* @param args - The words after `netstat`.
|
|
41
|
+
* @returns The ledger, or the refusal of a bad line.
|
|
17
42
|
*/
|
|
18
43
|
export declare function builtin_netstat(args?: string[]): Promise<CommandEnvelope>;
|
|
@@ -7,13 +7,32 @@
|
|
|
7
7
|
* `netstat -r`), by endpoint family with the time spent, and the last few
|
|
8
8
|
* timed. Smoke asserts budgets against the same model; an operator on a
|
|
9
9
|
* slow day asks it before guessing where the time went.
|
|
10
|
+
*
|
|
11
|
+
* Declared in one record (`netstatCommand`): how many recent requests to
|
|
12
|
+
* list, and whether to reset the count.
|
|
13
|
+
*
|
|
14
|
+
* Key components:
|
|
15
|
+
* - netstatCommand: the declaration.
|
|
16
|
+
* - builtin_netstat: the declaration run over words already split.
|
|
17
|
+
* - netstat_render: the ledger as text.
|
|
18
|
+
*
|
|
19
|
+
* Typical usage:
|
|
20
|
+
* ```ts
|
|
21
|
+
* await builtin_netstat(['-n', '30']);
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* Dependencies: cumin's request ledger.
|
|
25
|
+
*
|
|
26
|
+
* @module
|
|
10
27
|
*/
|
|
11
28
|
import chalk from 'chalk';
|
|
29
|
+
import { command_declare } from '../../core/commandDeclaration.js';
|
|
30
|
+
import { declaredCommand_run } from '../../core/commandParse.js';
|
|
12
31
|
// The ledger by its own door: a jest ESM test importing a name from the
|
|
13
32
|
// cumin ROOT overflows cjs-module-lexer on that index and sees none of
|
|
14
33
|
// the names added after the overflow — the subpath is small and seen whole.
|
|
15
34
|
import { requestLedger_snapshot, requestLedger_reset } from '@fnndsc/cumin/request-ledger';
|
|
16
|
-
import { NET_STATS_MODEL_KIND, envelope_ok
|
|
35
|
+
import { NET_STATS_MODEL_KIND, envelope_ok } from '@fnndsc/menu';
|
|
17
36
|
/** How many recent requests the table shows unless asked otherwise. */
|
|
18
37
|
const LAST_SHOWN = 10;
|
|
19
38
|
/**
|
|
@@ -42,32 +61,54 @@ export function netstat_render(snapshot, last) {
|
|
|
42
61
|
}
|
|
43
62
|
return `${lines.join('\n')}\n`;
|
|
44
63
|
}
|
|
64
|
+
/** What a `netstat` line may hold. */
|
|
65
|
+
const NETSTAT_GRAMMAR = {
|
|
66
|
+
options: {
|
|
67
|
+
reset: { short: 'r', long: 'reset', summary: 'Forget the count after showing it' },
|
|
68
|
+
count: { short: 'n', summary: `List that many recent requests (default ${LAST_SHOWN})`, value: { name: 'count', kind: 'int', min: 0 } },
|
|
69
|
+
},
|
|
70
|
+
};
|
|
45
71
|
/**
|
|
46
|
-
* `netstat [-n <count>]
|
|
72
|
+
* `netstat [-r] [-n <count>]`: the declaration.
|
|
47
73
|
*
|
|
48
|
-
* @
|
|
49
|
-
*
|
|
50
|
-
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* commands_register({ declarations: [netstatCommand] }, 'backend');
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export const netstatCommand = command_declare({
|
|
80
|
+
name: 'netstat',
|
|
81
|
+
grammar: NETSTAT_GRAMMAR,
|
|
82
|
+
help: {
|
|
83
|
+
summary: 'What the session has asked of CUBE',
|
|
84
|
+
description: 'What the session has asked of CUBE: requests since the session (or the last reset), by endpoint family with the time spent, and the last few timed',
|
|
85
|
+
category: 'Connection',
|
|
86
|
+
examples: [
|
|
87
|
+
'netstat # the count, by family, the last 10',
|
|
88
|
+
'netstat -n 30 # the last 30 requests, timed',
|
|
89
|
+
'netstat -r; cd ~/feeds; netstat # what one navigation costs',
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
handler: async (args) => netstat_run(args.options.count ?? LAST_SHOWN, args.options.reset),
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* `netstat` over words already split: the declaration's parse and handler.
|
|
96
|
+
*
|
|
97
|
+
* @param args - The words after `netstat`.
|
|
98
|
+
* @returns The ledger, or the refusal of a bad line.
|
|
51
99
|
*/
|
|
52
100
|
export async function builtin_netstat(args = []) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return envelope_error('', undefined, `${chalk.red('netstat: -n takes a count')}\n`);
|
|
65
|
-
last = value;
|
|
66
|
-
index += 1;
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
return envelope_error('', undefined, `${chalk.red(`netstat: unknown option ${arg}`)}\n`);
|
|
70
|
-
}
|
|
101
|
+
return declaredCommand_run(netstatCommand, args);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Reads the ledger, and resets it when asked; the readout then shows what
|
|
105
|
+
* was forgotten.
|
|
106
|
+
*
|
|
107
|
+
* @param last - How many recent requests to list.
|
|
108
|
+
* @param reset - Forget the count after reading it.
|
|
109
|
+
* @returns The ledger as text and as the `net.stats` model.
|
|
110
|
+
*/
|
|
111
|
+
function netstat_run(last, reset) {
|
|
71
112
|
const snapshot = requestLedger_snapshot({ last: Math.max(last, LAST_SHOWN) });
|
|
72
113
|
if (reset)
|
|
73
114
|
requestLedger_reset();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"netstat.js","sourceRoot":"","sources":["../../../src/builtins/net/netstat.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"netstat.js","sourceRoot":"","sources":["../../../src/builtins/net/netstat.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,27 +2,181 @@
|
|
|
2
2
|
* @file Compound `pacs` command.
|
|
3
3
|
*
|
|
4
4
|
* Entry point for all PACS operations: server context management, querying,
|
|
5
|
-
* and series retrieval.
|
|
6
|
-
*
|
|
5
|
+
* and series retrieval. Declared in one record (`pacsCommand`) with a
|
|
6
|
+
* subcommand each; `pacs query` and `pacs pull` take the very lines of the
|
|
7
|
+
* standalone `query` and `pull` (one grammar each) and run their handlers.
|
|
8
|
+
*
|
|
9
|
+
* Key components:
|
|
10
|
+
* - pacsCommand: the declaration.
|
|
11
|
+
* - builtin_pacs: the declaration run over words already split.
|
|
12
|
+
*
|
|
13
|
+
* Typical usage:
|
|
14
|
+
* ```ts
|
|
15
|
+
* await builtin_pacs(['connect', 'PACSDCM']);
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Dependencies: cumin's context and server listing; the query, pull and
|
|
19
|
+
* status verbs.
|
|
7
20
|
*
|
|
8
21
|
* @module
|
|
9
22
|
*/
|
|
10
23
|
import { type CommandEnvelope } from '@fnndsc/menu';
|
|
11
24
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
* `pacs [connect [server] | disconnect | list | query … | pull … | status <target>]`: the declaration.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* commands_register({ declarations: [pacsCommand] }, 'backend');
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare const pacsCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
|
|
33
|
+
readonly bare: {
|
|
34
|
+
readonly summary: "Show the active PACS server";
|
|
35
|
+
};
|
|
36
|
+
readonly subcommands: {
|
|
37
|
+
readonly connect: {
|
|
38
|
+
readonly summary: "List the registered PACS servers with the active one marked; given one, make it active";
|
|
39
|
+
readonly operands: readonly [{
|
|
40
|
+
readonly name: "server";
|
|
41
|
+
readonly kind: "word";
|
|
42
|
+
readonly optional: true;
|
|
43
|
+
readonly summary: "The server, by identifier or by id";
|
|
44
|
+
}];
|
|
45
|
+
};
|
|
46
|
+
readonly disconnect: {
|
|
47
|
+
readonly summary: "Clear the active PACS server";
|
|
48
|
+
};
|
|
49
|
+
readonly list: {
|
|
50
|
+
readonly summary: "List the registered PACS servers with the active one marked";
|
|
51
|
+
};
|
|
52
|
+
readonly query: {
|
|
53
|
+
readonly summary: "Create a PACS query and wait for its answer, as query does (help query)";
|
|
54
|
+
readonly operands: readonly [{
|
|
55
|
+
readonly name: "expression";
|
|
56
|
+
readonly kind: "word";
|
|
57
|
+
readonly optional: true;
|
|
58
|
+
readonly repeat: true;
|
|
59
|
+
readonly summary: "The question: Key:Value[,Key:Value…] (Key:a,b,c asks for each), or a JSON object";
|
|
60
|
+
}];
|
|
61
|
+
readonly options: {
|
|
62
|
+
readonly title: {
|
|
63
|
+
readonly long: "title";
|
|
64
|
+
readonly summary: "Title for the query record (default: Query <timestamp>)";
|
|
65
|
+
readonly value: {
|
|
66
|
+
readonly name: "title";
|
|
67
|
+
readonly kind: "word";
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
readonly pacsserver: {
|
|
71
|
+
readonly long: "pacsserver";
|
|
72
|
+
readonly summary: "Override the PACS server (default: the context's); a comma-separated list asks each";
|
|
73
|
+
readonly value: {
|
|
74
|
+
readonly name: "id";
|
|
75
|
+
readonly kind: "word";
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
readonly patients: {
|
|
79
|
+
readonly long: "patients";
|
|
80
|
+
readonly summary: "Ask after several patients: MRNs comma-separated, or @<cfs-file> (one per line)";
|
|
81
|
+
readonly value: {
|
|
82
|
+
readonly name: "list";
|
|
83
|
+
readonly kind: "word";
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
readonly csv: {
|
|
87
|
+
readonly long: "csv";
|
|
88
|
+
readonly summary: "Render the answer as CSV (a row per study, and one per patient with none)";
|
|
89
|
+
};
|
|
90
|
+
readonly csvTo: {
|
|
91
|
+
readonly long: "csv-to";
|
|
92
|
+
readonly asks: true;
|
|
93
|
+
readonly summary: "Write that CSV into ChRIS storage; given no path, the destination is asked for";
|
|
94
|
+
readonly value: {
|
|
95
|
+
readonly name: "cfs-path";
|
|
96
|
+
readonly kind: "cfsPath";
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
readonly force: {
|
|
100
|
+
readonly long: "force";
|
|
101
|
+
readonly summary: "Overwrite the table at that path; without it, an existing file is kept";
|
|
102
|
+
};
|
|
103
|
+
readonly table: {
|
|
104
|
+
readonly long: "table";
|
|
105
|
+
readonly summary: "Show the answer's rows as an aligned table: the CSV's columns, for a screen";
|
|
106
|
+
};
|
|
107
|
+
readonly series: {
|
|
108
|
+
readonly long: "series";
|
|
109
|
+
readonly summary: "One row per series instead of per study; alone, it shows the series table";
|
|
110
|
+
};
|
|
111
|
+
readonly anon: {
|
|
112
|
+
readonly long: "anon";
|
|
113
|
+
readonly summary: "Stand in for names and record numbers (for demonstrating on a live PACS)";
|
|
114
|
+
};
|
|
115
|
+
readonly fresh: {
|
|
116
|
+
readonly long: "fresh";
|
|
117
|
+
readonly summary: "Ask the PACS even if this question was answered before";
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
readonly pull: {
|
|
122
|
+
readonly summary: "Pull DICOM series into ChRIS storage, as pull does (help pull)";
|
|
123
|
+
readonly operands: readonly [{
|
|
124
|
+
readonly name: "target";
|
|
125
|
+
readonly kind: "pacsQuery";
|
|
126
|
+
readonly repeat: true;
|
|
127
|
+
readonly glob: true;
|
|
128
|
+
readonly summary: "A /net/pacs/queries/… path (a query, a study or a series), or a Key:Value question asked first";
|
|
129
|
+
}];
|
|
130
|
+
readonly options: {
|
|
131
|
+
readonly detach: {
|
|
132
|
+
readonly long: "detach";
|
|
133
|
+
readonly summary: "Fire the retrieves and return the handles at once: <seriesUID> <retrieveId> per line";
|
|
134
|
+
};
|
|
135
|
+
readonly nowait: {
|
|
136
|
+
readonly long: "nowait";
|
|
137
|
+
readonly summary: "The older spelling of --detach";
|
|
138
|
+
};
|
|
139
|
+
readonly retry: {
|
|
140
|
+
readonly long: "retry";
|
|
141
|
+
readonly summary: "Re-fire retrieves for [NO LONK] series up to N more times";
|
|
142
|
+
readonly value: {
|
|
143
|
+
readonly name: "N";
|
|
144
|
+
readonly kind: "int";
|
|
145
|
+
readonly min: 0;
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
readonly newFeed: {
|
|
149
|
+
readonly long: "new-feed";
|
|
150
|
+
readonly repeat: true;
|
|
151
|
+
readonly summary: "Create one named feed from the complete retrieved selection";
|
|
152
|
+
readonly value: {
|
|
153
|
+
readonly name: "title";
|
|
154
|
+
readonly kind: "word";
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
readonly status: {
|
|
160
|
+
readonly summary: "Per series, what has landed in CUBE and what is missing, with in-CUBE paths";
|
|
161
|
+
readonly operands: readonly [{
|
|
162
|
+
readonly name: "target";
|
|
163
|
+
readonly kind: "pacsQuery";
|
|
164
|
+
readonly glob: true;
|
|
165
|
+
readonly summary: "A query id, a /net/pacs/queries/… path, or a Key:Value question";
|
|
166
|
+
}];
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
}>;
|
|
170
|
+
/**
|
|
171
|
+
* `pacs` over words already split: the declaration's parse and handler.
|
|
172
|
+
*
|
|
173
|
+
* @param args - The subcommand and its words.
|
|
25
174
|
* @returns An envelope; streaming subcommands carry empty rendered text and
|
|
26
175
|
* emit their output live, while query/pull return their own envelopes.
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```ts
|
|
179
|
+
* await builtin_pacs(['list']);
|
|
180
|
+
* ```
|
|
27
181
|
*/
|
|
28
182
|
export declare function builtin_pacs(args: string[]): Promise<CommandEnvelope>;
|
|
@@ -2,22 +2,38 @@
|
|
|
2
2
|
* @file Compound `pacs` command.
|
|
3
3
|
*
|
|
4
4
|
* Entry point for all PACS operations: server context management, querying,
|
|
5
|
-
* and series retrieval.
|
|
6
|
-
*
|
|
5
|
+
* and series retrieval. Declared in one record (`pacsCommand`) with a
|
|
6
|
+
* subcommand each; `pacs query` and `pacs pull` take the very lines of the
|
|
7
|
+
* standalone `query` and `pull` (one grammar each) and run their handlers.
|
|
8
|
+
*
|
|
9
|
+
* Key components:
|
|
10
|
+
* - pacsCommand: the declaration.
|
|
11
|
+
* - builtin_pacs: the declaration run over words already split.
|
|
12
|
+
*
|
|
13
|
+
* Typical usage:
|
|
14
|
+
* ```ts
|
|
15
|
+
* await builtin_pacs(['connect', 'PACSDCM']);
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Dependencies: cumin's context and server listing; the query, pull and
|
|
19
|
+
* status verbs.
|
|
7
20
|
*
|
|
8
21
|
* @module
|
|
9
22
|
*/
|
|
10
23
|
import chalk from 'chalk';
|
|
11
24
|
import { chrisContext, pacsServers_list } from '@fnndsc/cumin';
|
|
12
25
|
import { PACS_SERVERS_MODEL_KIND, envelope_ok, envelope_error } from '@fnndsc/menu';
|
|
13
|
-
import {
|
|
26
|
+
import { queryLine_run } from './query.js';
|
|
27
|
+
import { QUERY_GRAMMAR } from './query.args.js';
|
|
14
28
|
import { pacsRefusal_hint, pacsRefusal_is } from './pacsAccess.js';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
29
|
+
import { pacsStatus_run } from './status.js';
|
|
30
|
+
import { pullLine_run } from '../fs/pull.js';
|
|
31
|
+
import { PULL_GRAMMAR } from '../fs/pull.args.js';
|
|
18
32
|
import { sink_dataLine, sink_errLine } from '../../core/sink.js';
|
|
19
33
|
import { errorStack } from '@fnndsc/fond';
|
|
20
34
|
import { exitCode_set } from '../../core/handlerRun.js';
|
|
35
|
+
import { command_declare } from '../../core/commandDeclaration.js';
|
|
36
|
+
import { declaredCommand_run } from '../../core/commandParse.js';
|
|
21
37
|
/**
|
|
22
38
|
* Streams the list of registered PACS servers, marking the active one.
|
|
23
39
|
*
|
|
@@ -84,30 +100,79 @@ async function serversModel_build(active) {
|
|
|
84
100
|
}
|
|
85
101
|
return servers.length > 0 ? { servers } : null;
|
|
86
102
|
}
|
|
103
|
+
/** What a `pacs` line may hold: a subcommand, or none for the active server. */
|
|
104
|
+
const PACS_GRAMMAR = {
|
|
105
|
+
bare: { summary: 'Show the active PACS server' },
|
|
106
|
+
subcommands: {
|
|
107
|
+
connect: {
|
|
108
|
+
summary: 'List the registered PACS servers with the active one marked; given one, make it active',
|
|
109
|
+
operands: [{ name: 'server', kind: 'word', optional: true, summary: 'The server, by identifier or by id' }],
|
|
110
|
+
},
|
|
111
|
+
disconnect: { summary: 'Clear the active PACS server' },
|
|
112
|
+
list: { summary: 'List the registered PACS servers with the active one marked' },
|
|
113
|
+
query: { summary: 'Create a PACS query and wait for its answer, as query does (help query)', operands: QUERY_GRAMMAR.operands, options: QUERY_GRAMMAR.options },
|
|
114
|
+
pull: { summary: 'Pull DICOM series into ChRIS storage, as pull does (help pull)', operands: PULL_GRAMMAR.operands, options: PULL_GRAMMAR.options },
|
|
115
|
+
status: {
|
|
116
|
+
summary: 'Per series, what has landed in CUBE and what is missing, with in-CUBE paths',
|
|
117
|
+
operands: [{ name: 'target', kind: 'pacsQuery', glob: true, summary: 'A query id, a /net/pacs/queries/… path, or a Key:Value question' }],
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
};
|
|
87
121
|
/**
|
|
88
|
-
*
|
|
122
|
+
* `pacs [connect [server] | disconnect | list | query … | pull … | status <target>]`: the declaration.
|
|
89
123
|
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* commands_register({ declarations: [pacsCommand] }, 'backend');
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
export const pacsCommand = command_declare({
|
|
130
|
+
name: 'pacs',
|
|
131
|
+
grammar: PACS_GRAMMAR,
|
|
132
|
+
help: {
|
|
133
|
+
summary: 'PACS subsystem — server context, query, and series retrieval',
|
|
134
|
+
description: 'PACS subsystem — server context, query, and series retrieval. Bare, it names the active server. '
|
|
135
|
+
+ 'pacs query and pacs pull take the lines query and pull take; their pages say more.',
|
|
136
|
+
category: 'PACS',
|
|
137
|
+
examples: [
|
|
138
|
+
'pacs # Show active server',
|
|
139
|
+
'pacs connect # List all servers',
|
|
140
|
+
'pacs connect PACSDCM # Set active server by identifier',
|
|
141
|
+
'pacs connect 1 # Set active server by numeric ID',
|
|
142
|
+
'pacs disconnect # Clear active server',
|
|
143
|
+
'pacs list # List all servers',
|
|
144
|
+
'pacs query PatientID:1234 # Query PACS',
|
|
145
|
+
'pacs pull /net/pacs/queries/42_AccessionNumber:12345678',
|
|
146
|
+
'pacs status AccessionNumber:22119730 # What has landed in CUBE, what is missing',
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
handler: pacs_run,
|
|
150
|
+
});
|
|
151
|
+
/**
|
|
152
|
+
* `pacs` over words already split: the declaration's parse and handler.
|
|
99
153
|
*
|
|
100
|
-
* @param args -
|
|
154
|
+
* @param args - The subcommand and its words.
|
|
101
155
|
* @returns An envelope; streaming subcommands carry empty rendered text and
|
|
102
156
|
* emit their output live, while query/pull return their own envelopes.
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```ts
|
|
160
|
+
* await builtin_pacs(['list']);
|
|
161
|
+
* ```
|
|
103
162
|
*/
|
|
104
163
|
export async function builtin_pacs(args) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
164
|
+
return declaredCommand_run(pacsCommand, args);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* PACS subsystem command — server context management, query, and pull.
|
|
168
|
+
*
|
|
169
|
+
* @param args - The line, parsed.
|
|
170
|
+
* @returns An envelope; streaming subcommands carry empty rendered text and
|
|
171
|
+
* emit their output live, while query/pull return their own envelopes.
|
|
172
|
+
*/
|
|
173
|
+
async function pacs_run(args) {
|
|
109
174
|
// No subcommand — show active server
|
|
110
|
-
if (
|
|
175
|
+
if (args.subcommand === null) {
|
|
111
176
|
const active = await chrisContext.PACSserver_get();
|
|
112
177
|
if (active) {
|
|
113
178
|
sink_dataLine(`Active PACS server: ${chalk.cyan(active)}`);
|
|
@@ -121,9 +186,9 @@ export async function builtin_pacs(args) {
|
|
|
121
186
|
}
|
|
122
187
|
return envelope_ok('');
|
|
123
188
|
}
|
|
124
|
-
switch (subcommand) {
|
|
189
|
+
switch (args.subcommand) {
|
|
125
190
|
case 'connect': {
|
|
126
|
-
const target = args
|
|
191
|
+
const target = args.operands.server;
|
|
127
192
|
if (!target) {
|
|
128
193
|
const active = await chrisContext.PACSserver_get();
|
|
129
194
|
if (!(await servers_print(active))) {
|
|
@@ -168,17 +233,11 @@ export async function builtin_pacs(args) {
|
|
|
168
233
|
return envelope_ok('', { kind: PACS_SERVERS_MODEL_KIND, data: model });
|
|
169
234
|
}
|
|
170
235
|
case 'query':
|
|
171
|
-
return
|
|
236
|
+
return queryLine_run(args);
|
|
172
237
|
case 'pull':
|
|
173
|
-
return
|
|
238
|
+
return pullLine_run(args);
|
|
174
239
|
case 'status':
|
|
175
|
-
return
|
|
176
|
-
default:
|
|
177
|
-
sink_errLine(chalk.red(`pacs: Unknown subcommand '${subcommand}'`));
|
|
178
|
-
sink_dataLine(chalk.gray(' Subcommands: connect, disconnect, list, query, pull, status'));
|
|
179
|
-
sink_dataLine(chalk.gray(' Try: help pacs'));
|
|
180
|
-
exitCode_set(1);
|
|
181
|
-
return envelope_error('');
|
|
240
|
+
return pacsStatus_run(args.operands.target);
|
|
182
241
|
}
|
|
183
242
|
}
|
|
184
243
|
//# sourceMappingURL=pacs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pacs.js","sourceRoot":"","sources":["../../../src/builtins/net/pacs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pacs.js","sourceRoot":"","sources":["../../../src/builtins/net/pacs.ts"],"names":[],"mappings":"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"}
|