@fnndsc/brasa 0.56.2 → 0.56.4
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 +11 -0
- package/dist/builtins/berth/berth.js +53 -22
- package/dist/builtins/berth/berth.js.map +1 -1
- package/dist/builtins/berth/berthCube.d.ts +17 -2
- package/dist/builtins/berth/berthCube.js +22 -10
- package/dist/builtins/berth/berthCube.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 +89 -10
- 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 +120 -55
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/download.d.ts +12 -1
- package/dist/builtins/fs/download.js +24 -4
- 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/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 +86 -22
- 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/transferJobs.d.ts +64 -0
- package/dist/builtins/fs/transferJobs.js +98 -0
- package/dist/builtins/fs/transferJobs.js.map +1 -0
- 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 +35 -3
- package/dist/builtins/fs/upload.js +99 -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 +38 -2
- package/dist/builtins/help.js +76 -769
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/helpSections.js +4 -1
- package/dist/builtins/helpSections.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 +52 -3
- package/dist/builtins/res/dicom.js +82 -34
- 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 +718 -263
- 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 +0 -37
- package/dist/builtins/utils.js +0 -86
- package/dist/builtins/utils.js.map +1 -1
- package/dist/chris/chrisCommands.js +58 -152
- 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/filesystem.js +7 -5
- package/dist/chris/filesystem.js.map +1 -1
- package/dist/chris/help.js +0 -1018
- package/dist/chris/help.js.map +1 -1
- package/dist/chris/kinds.d.ts +21 -0
- package/dist/chris/kinds.js +114 -2
- package/dist/chris/kinds.js.map +1 -1
- 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/core/commandDeclaration.d.ts +97 -7
- package/dist/core/commandDeclaration.js +21 -0
- package/dist/core/commandDeclaration.js.map +1 -1
- package/dist/core/commandParse.js +65 -17
- package/dist/core/commandParse.js.map +1 -1
- package/dist/core/commandRegistry.d.ts +4 -3
- package/dist/core/commandRegistry.js +36 -8
- package/dist/core/commandRegistry.js.map +1 -1
- package/dist/core/commandSchema.js +5 -2
- package/dist/core/commandSchema.js.map +1 -1
- package/dist/core/commandUsage.d.ts +15 -0
- package/dist/core/commandUsage.js +59 -7
- package/dist/core/commandUsage.js.map +1 -1
- package/dist/core/coreCommands.js +63 -212
- package/dist/core/coreCommands.js.map +1 -1
- package/dist/core/paths.d.ts +29 -1
- package/dist/core/paths.js +15 -2
- package/dist/core/paths.js.map +1 -1
- package/dist/core/preprocess.d.ts +3 -4
- package/dist/core/preprocess.js +4 -5
- package/dist/core/preprocess.js.map +1 -1
- package/dist/lib/completer/declared.js +7 -4
- package/dist/lib/completer/declared.js.map +1 -1
- package/dist/lib/completer/index.js +2 -7
- package/dist/lib/completer/index.js.map +1 -1
- package/dist/lib/parser.d.ts +0 -8
- package/dist/lib/parser.js +0 -11
- package/dist/lib/parser.js.map +1 -1
- package/dist/lib/vfs/vfs.d.ts +2 -1
- package/dist/lib/vfs/vfs.js +5 -4
- package/dist/lib/vfs/vfs.js.map +1 -1
- package/dist/notes.json +1 -1
- package/package.json +5 -5
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAgE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAClJ,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAA8C,MAAM,kCAAkC,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;;;;;GAQG;AACH,KAAK,UAAU,aAAa,CAAC,MAAqB;IAChD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,OAAO,GAAW,UAAU,CAAC,SAAS,EAAE,EAAE,OAAO,IAAI,8BAA8B,CAAC;QAC1F,kEAAkE;QAClE,iCAAiC;QACjC,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/D,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACpE,IAAI,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC;YAAE,YAAY,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAW,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,QAAQ,GACZ,MAAM,KAAK,IAAI;YACf,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,GAAW,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,KAAK,GAAW,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAChD,aAAa,CAAC,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC;AAGD;;;;;;;;;GASG;AACH,KAAK,UAAU,kBAAkB,CAAC,MAAqB;IACrD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,UAAU,GAAuB,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC;QACxE,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE;YAAE,SAAS;QAC5D,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,UAAU;YACV,MAAM,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;SACnF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,gFAAgF;AAChF,MAAM,YAAY,GAAG;IACnB,IAAI,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE;IAChD,WAAW,EAAE;QACX,OAAO,EAAE;YACP,OAAO,EAAE,wFAAwF;YACjG,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC;SAC5G;QACD,UAAU,EAAE,EAAE,OAAO,EAAE,8BAA8B,EAAE;QACvD,IAAI,EAAE,EAAE,OAAO,EAAE,6DAA6D,EAAE;QAChF,KAAK,EAAE,EAAE,OAAO,EAAE,yEAAyE,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE;QAC/J,IAAI,EAAE,EAAE,OAAO,EAAE,gEAAgE,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE;QACnJ,MAAM,EAAE;YACN,OAAO,EAAE,6EAA6E;YACtF,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,iEAAiE,EAAE,CAAC;SAC1I;KACF;CACgC,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;IACzC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE;QACJ,OAAO,EAAE,8DAA8D;QACvE,WAAW,EAAE,kGAAkG;cAC3G,oFAAoF;QACxF,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE;YACR,wDAAwD;YACxD,sDAAsD;YACtD,qEAAqE;YACrE,qEAAqE;YACrE,yDAAyD;YACzD,sDAAsD;YACtD,gDAAgD;YAChD,yDAAyD;YACzD,mFAAmF;SACpF;KACF;IACD,OAAO,EAAE,QAAQ;CAClB,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,OAAO,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,QAAQ,CAAC,IAA2C;IACjE,qCAAqC;IACrC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAkB,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;QAClE,IAAI,MAAM,EAAE,CAAC;YACX,aAAa,CAAC,uBAAuB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3D,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;YACvE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACnD,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC7E,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAuB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAkB,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;gBAClE,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;oBACnC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAChB,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;YACD,MAAM,EAAE,GAAY,MAAM,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,EAAE,EAAE,CAAC;gBACP,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,MAAM,GAAG,CAAC,CAAC,CAAC;gBACjE,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;YACD,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1E,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,GAAY,MAAM,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC1D,IAAI,EAAE,EAAE,CAAC;gBACP,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBAC/D,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;YACD,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;YACjF,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAkB,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;YAClE,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACnC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;YACD,oEAAoE;YACpE,mEAAmE;YACnE,iEAAiE;YACjE,mEAAmE;YACnE,uBAAuB;YACvB,MAAM,KAAK,GAA4B,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACxE,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;YAC3C,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,KAAK,OAAO;YACV,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;QAE7B,KAAK,MAAM;YACT,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QAE5B,KAAK,QAAQ;YACX,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file What a PACS query's line may hold, as `query` and `pacs query` both
|
|
3
|
+
* take it: the question, and how its answer should read.
|
|
4
|
+
*
|
|
5
|
+
* One grammar, so the standalone verb and the subcommand cannot drift. It
|
|
6
|
+
* lives apart from the query verb so `pacs` reads it without loading that
|
|
7
|
+
* verb's graph.
|
|
8
|
+
*
|
|
9
|
+
* Key components:
|
|
10
|
+
* - QUERY_GRAMMAR: the operands and options.
|
|
11
|
+
* - QueryLine: what a handler of either line reads.
|
|
12
|
+
*
|
|
13
|
+
* Dependencies: the declaration types only.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import type { CommandArguments } from '../../core/commandDeclaration.js';
|
|
18
|
+
/**
|
|
19
|
+
* A PACS query's operands and options.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const queryCommand = command_declare({ name: 'query', grammar: QUERY_GRAMMAR, help, handler });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare const QUERY_GRAMMAR: {
|
|
27
|
+
readonly operands: readonly [{
|
|
28
|
+
readonly name: "expression";
|
|
29
|
+
readonly kind: "word";
|
|
30
|
+
readonly optional: true;
|
|
31
|
+
readonly repeat: true;
|
|
32
|
+
readonly summary: "The question: Key:Value[,Key:Value…] (Key:a,b,c asks for each), or a JSON object";
|
|
33
|
+
}];
|
|
34
|
+
readonly options: {
|
|
35
|
+
readonly title: {
|
|
36
|
+
readonly long: "title";
|
|
37
|
+
readonly summary: "Title for the query record (default: Query <timestamp>)";
|
|
38
|
+
readonly value: {
|
|
39
|
+
readonly name: "title";
|
|
40
|
+
readonly kind: "word";
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
readonly pacsserver: {
|
|
44
|
+
readonly long: "pacsserver";
|
|
45
|
+
readonly summary: "Override the PACS server (default: the context's); a comma-separated list asks each";
|
|
46
|
+
readonly value: {
|
|
47
|
+
readonly name: "id";
|
|
48
|
+
readonly kind: "word";
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
readonly patients: {
|
|
52
|
+
readonly long: "patients";
|
|
53
|
+
readonly summary: "Ask after several patients: MRNs comma-separated, or @<cfs-file> (one per line)";
|
|
54
|
+
readonly value: {
|
|
55
|
+
readonly name: "list";
|
|
56
|
+
readonly kind: "word";
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
readonly csv: {
|
|
60
|
+
readonly long: "csv";
|
|
61
|
+
readonly summary: "Render the answer as CSV (a row per study, and one per patient with none)";
|
|
62
|
+
};
|
|
63
|
+
readonly csvTo: {
|
|
64
|
+
readonly long: "csv-to";
|
|
65
|
+
readonly asks: true;
|
|
66
|
+
readonly summary: "Write that CSV into ChRIS storage; given no path, the destination is asked for";
|
|
67
|
+
readonly value: {
|
|
68
|
+
readonly name: "cfs-path";
|
|
69
|
+
readonly kind: "cfsPath";
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
readonly force: {
|
|
73
|
+
readonly long: "force";
|
|
74
|
+
readonly summary: "Overwrite the table at that path; without it, an existing file is kept";
|
|
75
|
+
};
|
|
76
|
+
readonly table: {
|
|
77
|
+
readonly long: "table";
|
|
78
|
+
readonly summary: "Show the answer's rows as an aligned table: the CSV's columns, for a screen";
|
|
79
|
+
};
|
|
80
|
+
readonly series: {
|
|
81
|
+
readonly long: "series";
|
|
82
|
+
readonly summary: "One row per series instead of per study; alone, it shows the series table";
|
|
83
|
+
};
|
|
84
|
+
readonly anon: {
|
|
85
|
+
readonly long: "anon";
|
|
86
|
+
readonly summary: "Stand in for names and record numbers (for demonstrating on a live PACS)";
|
|
87
|
+
};
|
|
88
|
+
readonly fresh: {
|
|
89
|
+
readonly long: "fresh";
|
|
90
|
+
readonly summary: "Ask the PACS even if this question was answered before";
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
/** What a handler of a query line reads: the question and the options, from `query` or `pacs query`. */
|
|
95
|
+
export type QueryLine = Pick<CommandArguments<typeof QUERY_GRAMMAR>, 'operands' | 'options'>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A PACS query's operands and options.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* const queryCommand = command_declare({ name: 'query', grammar: QUERY_GRAMMAR, help, handler });
|
|
7
|
+
* ```
|
|
8
|
+
*/
|
|
9
|
+
export const QUERY_GRAMMAR = {
|
|
10
|
+
operands: [
|
|
11
|
+
{ name: 'expression', kind: 'word', optional: true, repeat: true, summary: 'The question: Key:Value[,Key:Value…] (Key:a,b,c asks for each), or a JSON object' },
|
|
12
|
+
],
|
|
13
|
+
options: {
|
|
14
|
+
title: { long: 'title', summary: 'Title for the query record (default: Query <timestamp>)', value: { name: 'title', kind: 'word' } },
|
|
15
|
+
pacsserver: { long: 'pacsserver', summary: 'Override the PACS server (default: the context\'s); a comma-separated list asks each', value: { name: 'id', kind: 'word' } },
|
|
16
|
+
patients: { long: 'patients', summary: 'Ask after several patients: MRNs comma-separated, or @<cfs-file> (one per line)', value: { name: 'list', kind: 'word' } },
|
|
17
|
+
csv: { long: 'csv', summary: 'Render the answer as CSV (a row per study, and one per patient with none)' },
|
|
18
|
+
csvTo: { long: 'csv-to', asks: true, summary: 'Write that CSV into ChRIS storage; given no path, the destination is asked for', value: { name: 'cfs-path', kind: 'cfsPath' } },
|
|
19
|
+
force: { long: 'force', summary: 'Overwrite the table at that path; without it, an existing file is kept' },
|
|
20
|
+
table: { long: 'table', summary: 'Show the answer\'s rows as an aligned table: the CSV\'s columns, for a screen' },
|
|
21
|
+
series: { long: 'series', summary: 'One row per series instead of per study; alone, it shows the series table' },
|
|
22
|
+
anon: { long: 'anon', summary: 'Stand in for names and record numbers (for demonstrating on a live PACS)' },
|
|
23
|
+
fresh: { long: 'fresh', summary: 'Ask the PACS even if this question was answered before' },
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=query.args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.args.js","sourceRoot":"","sources":["../../../src/builtins/net/query.args.ts"],"names":[],"mappings":"AAkBA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,QAAQ,EAAE;QACR,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,kFAAkF,EAAE;KAChK;IACD,OAAO,EAAE;QACP,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,yDAAyD,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACpI,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,sFAAsF,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACxK,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iFAAiF,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACjK,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,2EAA2E,EAAE;QAC1G,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,gFAAgF,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QAC9K,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,wEAAwE,EAAE;QAC3G,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,+EAA+E,EAAE;QAClH,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,2EAA2E,EAAE;QAChH,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,0EAA0E,EAAE;QAC3G,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,wDAAwD,EAAE;KAC5F;CACgC,CAAC"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import { PACSQueryDecodedResult, type SeriesStorageFilter } from '@fnndsc/cumin';
|
|
12
12
|
import { type PacsQueryModel, type CommandEnvelope } from '@fnndsc/menu';
|
|
13
13
|
import { pacsQueryModel_build } from './query.model.js';
|
|
14
|
+
import { type QueryLine } from './query.args.js';
|
|
14
15
|
/**
|
|
15
16
|
* Result of a successful query-create-and-wait operation.
|
|
16
17
|
*
|
|
@@ -88,12 +89,104 @@ export declare function pacsIdentifier_resolve(pacsserver: string): Promise<stri
|
|
|
88
89
|
*/
|
|
89
90
|
export declare function age_describe(at: string): string | null;
|
|
90
91
|
/**
|
|
91
|
-
*
|
|
92
|
+
* `query <Key:Value…> [options]`: the declaration. `pacs query` takes the
|
|
93
|
+
* same line (`QUERY_GRAMMAR`) and runs the same handler.
|
|
92
94
|
*
|
|
93
|
-
* @param args - `<queryExpression> [--title <title>] [--pacsserver <id>] [--table] [--help]`
|
|
94
95
|
* @example
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* commands_register({ declarations: [queryCommand] }, 'backend');
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export declare const queryCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
|
|
101
|
+
readonly operands: readonly [{
|
|
102
|
+
readonly name: "expression";
|
|
103
|
+
readonly kind: "word";
|
|
104
|
+
readonly optional: true;
|
|
105
|
+
readonly repeat: true;
|
|
106
|
+
readonly summary: "The question: Key:Value[,Key:Value…] (Key:a,b,c asks for each), or a JSON object";
|
|
107
|
+
}];
|
|
108
|
+
readonly options: {
|
|
109
|
+
readonly title: {
|
|
110
|
+
readonly long: "title";
|
|
111
|
+
readonly summary: "Title for the query record (default: Query <timestamp>)";
|
|
112
|
+
readonly value: {
|
|
113
|
+
readonly name: "title";
|
|
114
|
+
readonly kind: "word";
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
readonly pacsserver: {
|
|
118
|
+
readonly long: "pacsserver";
|
|
119
|
+
readonly summary: "Override the PACS server (default: the context's); a comma-separated list asks each";
|
|
120
|
+
readonly value: {
|
|
121
|
+
readonly name: "id";
|
|
122
|
+
readonly kind: "word";
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
readonly patients: {
|
|
126
|
+
readonly long: "patients";
|
|
127
|
+
readonly summary: "Ask after several patients: MRNs comma-separated, or @<cfs-file> (one per line)";
|
|
128
|
+
readonly value: {
|
|
129
|
+
readonly name: "list";
|
|
130
|
+
readonly kind: "word";
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
readonly csv: {
|
|
134
|
+
readonly long: "csv";
|
|
135
|
+
readonly summary: "Render the answer as CSV (a row per study, and one per patient with none)";
|
|
136
|
+
};
|
|
137
|
+
readonly csvTo: {
|
|
138
|
+
readonly long: "csv-to";
|
|
139
|
+
readonly asks: true;
|
|
140
|
+
readonly summary: "Write that CSV into ChRIS storage; given no path, the destination is asked for";
|
|
141
|
+
readonly value: {
|
|
142
|
+
readonly name: "cfs-path";
|
|
143
|
+
readonly kind: "cfsPath";
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
readonly force: {
|
|
147
|
+
readonly long: "force";
|
|
148
|
+
readonly summary: "Overwrite the table at that path; without it, an existing file is kept";
|
|
149
|
+
};
|
|
150
|
+
readonly table: {
|
|
151
|
+
readonly long: "table";
|
|
152
|
+
readonly summary: "Show the answer's rows as an aligned table: the CSV's columns, for a screen";
|
|
153
|
+
};
|
|
154
|
+
readonly series: {
|
|
155
|
+
readonly long: "series";
|
|
156
|
+
readonly summary: "One row per series instead of per study; alone, it shows the series table";
|
|
157
|
+
};
|
|
158
|
+
readonly anon: {
|
|
159
|
+
readonly long: "anon";
|
|
160
|
+
readonly summary: "Stand in for names and record numbers (for demonstrating on a live PACS)";
|
|
161
|
+
};
|
|
162
|
+
readonly fresh: {
|
|
163
|
+
readonly long: "fresh";
|
|
164
|
+
readonly summary: "Ask the PACS even if this question was answered before";
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
}>;
|
|
168
|
+
/**
|
|
169
|
+
* `query` over words already split: the declaration's parse and handler.
|
|
170
|
+
*
|
|
171
|
+
* @param args - The words after `query`.
|
|
172
|
+
* @returns The answer, or the refusal of a bad line.
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```ts
|
|
176
|
+
* await builtin_query(['PatientID:1234', '--table']);
|
|
177
|
+
* ```
|
|
98
178
|
*/
|
|
99
179
|
export declare function builtin_query(args: string[]): Promise<CommandEnvelope>;
|
|
180
|
+
/**
|
|
181
|
+
* Creates a PACS query, waits for results, displays findings, and prints the
|
|
182
|
+
* VFS path: the handler of `query` and of `pacs query`.
|
|
183
|
+
*
|
|
184
|
+
* @param args - The line, parsed.
|
|
185
|
+
* @returns The answer, its model beside it.
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```ts
|
|
189
|
+
* await queryLine_run({ operands: { expression: ['PatientID:1234'] }, options: { …, table: true } });
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
export declare function queryLine_run(args: QueryLine): Promise<CommandEnvelope>;
|
|
@@ -20,8 +20,10 @@ import { ignoredKeys_hint } from './query.ignored.js';
|
|
|
20
20
|
import { csvFile_write, pacsAnswer_renderCsv, pacsAnswer_renderTable } from './query.csv.js';
|
|
21
21
|
import { series_cubePathGet } from './pacsUtils.js';
|
|
22
22
|
import { spinner } from '../../lib/spinner.js';
|
|
23
|
-
import { args_checkHasHelpFlag, help_render } from '../help.js';
|
|
24
23
|
import { pacsRefusal_hint, pacsRefusal_is } from './pacsAccess.js';
|
|
24
|
+
import { QUERY_GRAMMAR } from './query.args.js';
|
|
25
|
+
import { command_declare } from '../../core/commandDeclaration.js';
|
|
26
|
+
import { declaredCommand_run } from '../../core/commandParse.js';
|
|
25
27
|
import { errorStack } from '@fnndsc/fond';
|
|
26
28
|
import { exitCode_set } from '../../core/handlerRun.js';
|
|
27
29
|
const QUERY_POLL_INTERVAL_MS = 2_000;
|
|
@@ -817,92 +819,96 @@ async function cohort_answer(asks, facts) {
|
|
|
817
819
|
return envelope_ok(rendered, { kind: PACS_QUERY_MODEL_KIND, data: model });
|
|
818
820
|
}
|
|
819
821
|
/**
|
|
820
|
-
*
|
|
822
|
+
* `query <Key:Value…> [options]`: the declaration. `pacs query` takes the
|
|
823
|
+
* same line (`QUERY_GRAMMAR`) and runs the same handler.
|
|
821
824
|
*
|
|
822
|
-
* @param args - `<queryExpression> [--title <title>] [--pacsserver <id>] [--table] [--help]`
|
|
823
825
|
* @example
|
|
824
|
-
*
|
|
825
|
-
*
|
|
826
|
-
*
|
|
826
|
+
* ```ts
|
|
827
|
+
* commands_register({ declarations: [queryCommand] }, 'backend');
|
|
828
|
+
* ```
|
|
829
|
+
*/
|
|
830
|
+
export const queryCommand = command_declare({
|
|
831
|
+
name: 'query',
|
|
832
|
+
grammar: QUERY_GRAMMAR,
|
|
833
|
+
help: {
|
|
834
|
+
summary: 'Create a PACS query, wait for results, and print the VFS path',
|
|
835
|
+
description: 'Create a PACS query, wait for its answer, show it, and print the VFS path a pull or a cd takes. '
|
|
836
|
+
+ 'A question already answered is replayed from the index, its age said; --fresh asks again. '
|
|
837
|
+
+ 'A PACS matches one patient at a time, so several MRNs (PatientID:1,2,3 or --patients) is several queries, one table. '
|
|
838
|
+
+ 'Some PACS ignore keys: PACSDCM answers SeriesDescription and StudyDescription as if they were not asked (query says so); '
|
|
839
|
+
+ 'narrow the answer with grep. The keys each server ignores are in ~/.config/mise/pacs.json, as '
|
|
840
|
+
+ '{"ignoredKeys": {"PACSDCM": ["SeriesDescription", "StudyDescription"]}}.',
|
|
841
|
+
category: 'PACS',
|
|
842
|
+
examples: [
|
|
843
|
+
'query PatientID:1234',
|
|
844
|
+
'query PatientID:1234 --fresh # ignore the stored answer',
|
|
845
|
+
'query AccessionNumber:12345678 --title "Hip DDH workup"',
|
|
846
|
+
'query PatientID:1234,StudyDate:20240101',
|
|
847
|
+
'query PatientID:1234567,Modality:MR | grep -i t1 | grep -vi gadavist',
|
|
848
|
+
'',
|
|
849
|
+
'# A PACS matches one patient at a time, so several MRNs is several queries',
|
|
850
|
+
'query PatientID:1234,4532,6654 # three questions, one table',
|
|
851
|
+
'query --patients @~/cohorts/ddh.txt # a cohort from a file in ChRIS',
|
|
852
|
+
'query StudyDate:20240101 --patients 1234,4532 # narrowed, per patient',
|
|
853
|
+
'query PatientID:1234 --pacsserver PACSDCM,ORTHANC # ask both, one listing',
|
|
854
|
+
'',
|
|
855
|
+
'# A cohort audit, as a table a spreadsheet reads',
|
|
856
|
+
'query --patients @~/cohorts/ddh.txt --csv > audit.csv # a local terminal',
|
|
857
|
+
'query --patients @~/cohorts/ddh.txt --csv-to ~/audits/ddh.csv # any surface',
|
|
858
|
+
'query PatientID:1234 --csv-to ~/audit.csv --table --series',
|
|
859
|
+
'',
|
|
860
|
+
'# Use output path directly with pull',
|
|
861
|
+
'pull $(query PatientID:1234 | grep "VFS path" | awk \'{print $3}\')',
|
|
862
|
+
],
|
|
863
|
+
},
|
|
864
|
+
handler: queryLine_run,
|
|
865
|
+
});
|
|
866
|
+
/**
|
|
867
|
+
* `query` over words already split: the declaration's parse and handler.
|
|
868
|
+
*
|
|
869
|
+
* @param args - The words after `query`.
|
|
870
|
+
* @returns The answer, or the refusal of a bad line.
|
|
871
|
+
*
|
|
872
|
+
* @example
|
|
873
|
+
* ```ts
|
|
874
|
+
* await builtin_query(['PatientID:1234', '--table']);
|
|
875
|
+
* ```
|
|
827
876
|
*/
|
|
828
877
|
export async function builtin_query(args) {
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
else if (args[i] === '--patients' && i + 1 < args.length) {
|
|
864
|
-
patientsArg = args[++i];
|
|
865
|
-
}
|
|
866
|
-
else if (args[i] === '--csv') {
|
|
867
|
-
csv = true;
|
|
868
|
-
}
|
|
869
|
-
else if (args[i] === '--csv-to') {
|
|
870
|
-
// A value-taking flag given no value is an ASK. `--csv-to` with
|
|
871
|
-
// nothing after it means "ask me where", which is how a graphical
|
|
872
|
-
// surface opens its errand and how a terminal gets a prompt. Given
|
|
873
|
-
// nothing and treated as nothing — which is what happened before —
|
|
874
|
-
// the operator asked for a CSV and silently got none.
|
|
875
|
-
const value = args[i + 1];
|
|
876
|
-
if (value !== undefined && !value.startsWith('--')) {
|
|
877
|
-
csvTo = args[++i];
|
|
878
|
-
}
|
|
879
|
-
else {
|
|
880
|
-
csvToAsk = true;
|
|
881
|
-
}
|
|
882
|
-
}
|
|
883
|
-
else if (args[i] === '--force') {
|
|
884
|
-
force = true;
|
|
885
|
-
}
|
|
886
|
-
else if (args[i] === '--fresh') {
|
|
887
|
-
fresh = true;
|
|
888
|
-
}
|
|
889
|
-
else if (args[i] === '--anon') {
|
|
890
|
-
anon = true;
|
|
891
|
-
}
|
|
892
|
-
else if (args[i] === '--series') {
|
|
893
|
-
level = 'series';
|
|
894
|
-
}
|
|
895
|
-
else if (args[i].startsWith('--')) {
|
|
896
|
-
// A flag this command does not know is refused by name. Dropped in
|
|
897
|
-
// silence, `--series` on a build without it answered at the study
|
|
898
|
-
// level and looked like it had been heard.
|
|
899
|
-
exitCode_set(1);
|
|
900
|
-
return envelope_error('', undefined, `${chalk.red(`query: unknown flag ${args[i]} (see pacs query --help)`)}\n`);
|
|
901
|
-
}
|
|
902
|
-
else {
|
|
903
|
-
positional.push(args[i]);
|
|
904
|
-
}
|
|
905
|
-
}
|
|
878
|
+
return declaredCommand_run(queryCommand, args);
|
|
879
|
+
}
|
|
880
|
+
/**
|
|
881
|
+
* Creates a PACS query, waits for results, displays findings, and prints the
|
|
882
|
+
* VFS path: the handler of `query` and of `pacs query`.
|
|
883
|
+
*
|
|
884
|
+
* @param args - The line, parsed.
|
|
885
|
+
* @returns The answer, its model beside it.
|
|
886
|
+
*
|
|
887
|
+
* @example
|
|
888
|
+
* ```ts
|
|
889
|
+
* await queryLine_run({ operands: { expression: ['PatientID:1234'] }, options: { …, table: true } });
|
|
890
|
+
* ```
|
|
891
|
+
*/
|
|
892
|
+
export async function queryLine_run(args) {
|
|
893
|
+
const { options } = args;
|
|
894
|
+
const title = options.title ?? `Query ${Date.now()}`;
|
|
895
|
+
const pacsserverOverride = options.pacsserver ?? null;
|
|
896
|
+
let tableMode = options.table;
|
|
897
|
+
const fresh = options.fresh;
|
|
898
|
+
const patientsArg = options.patients ?? null;
|
|
899
|
+
const csv = options.csv;
|
|
900
|
+
// A value-taking flag given no value is an ASK: `--csv-to` with nothing
|
|
901
|
+
// after it means "ask me where", which is how a graphical surface opens
|
|
902
|
+
// its errand and how a terminal gets a prompt.
|
|
903
|
+
const csvTo = options.csvTo ?? null;
|
|
904
|
+
const csvToAsk = options.csvTo === null;
|
|
905
|
+
const force = options.force;
|
|
906
|
+
// Standing in for what the answer says about a person is for
|
|
907
|
+
// demonstrating against a live hospital PACS, where every answer carries
|
|
908
|
+
// somebody's name and record number onto the screen.
|
|
909
|
+
const anon = options.anon;
|
|
910
|
+
const level = options.series ? 'series' : 'study';
|
|
911
|
+
const positional = args.operands.expression;
|
|
906
912
|
// Two renderings for one screen: CSV is the answer's text, the table is
|
|
907
913
|
// its rows aligned. Asked for both, neither is guessed; writing the CSV
|
|
908
914
|
// to a file (`--csv-to`) leaves the screen free for the table.
|