@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
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @file
|
|
3
|
-
*
|
|
2
|
+
* @file `download`: ChRIS files and folders to the local filesystem, with
|
|
3
|
+
* progress; under a daemon, handed to the surface instead.
|
|
4
|
+
*
|
|
5
|
+
* Declared in one record (`downloadCommand`): a CFS path operand that globs
|
|
6
|
+
* and a host path operand on one line, never globbed.
|
|
7
|
+
*
|
|
8
|
+
* Key components:
|
|
9
|
+
* - downloadCommand: the declaration.
|
|
10
|
+
* - builtin_download: the declaration run over words already split.
|
|
11
|
+
*
|
|
12
|
+
* Typical usage:
|
|
13
|
+
* ```ts
|
|
14
|
+
* await builtin_download(['/home/chris/uploads/a.nii', './data/']);
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Dependencies: chili's transfer, salsa's file listing, the session's surface.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
4
20
|
*/
|
|
5
21
|
import path from 'path';
|
|
6
22
|
import chalk from 'chalk';
|
|
7
23
|
import { files_downloadWithProgress as chefs_download_cmd, files_downloadManyWithProgress as chefs_downloadMany_cmd, bytes_format } from '@fnndsc/chili/commands/fs/download.js';
|
|
8
24
|
import { sink_get } from '../../core/sink.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
25
|
+
import { command_declare } from '../../core/commandDeclaration.js';
|
|
26
|
+
import { declaredCommand_run } from '../../core/commandParse.js';
|
|
27
|
+
import { storePath_resolve } from '../utils.js';
|
|
12
28
|
import { surface_get } from '../../core/surface.js';
|
|
13
29
|
import { repl_confirm } from '../../core/question.js';
|
|
14
30
|
import { files_path_isDirectory, files_listRecursive } from '@fnndsc/salsa';
|
|
@@ -16,25 +32,16 @@ import { directory_archive } from './archive.js';
|
|
|
16
32
|
import { envelope_ok, envelope_error } from '@fnndsc/menu';
|
|
17
33
|
import { errorStack } from '@fnndsc/fond';
|
|
18
34
|
import { exitCode_set } from '../../core/handlerRun.js';
|
|
19
|
-
/** A `/proc/jobs` path at or under a job's `data` link: the link, and what follows it. */
|
|
20
|
-
const PROC_DATA_PATH = /^(\/proc\/jobs\/feed_\d+(?:\/[^/]+_\d+)+\/data)(\/.*)?$/;
|
|
21
35
|
/**
|
|
22
|
-
* A source as the transfer reads it:
|
|
23
|
-
*
|
|
24
|
-
*
|
|
36
|
+
* A source as the transfer reads it: where the store keeps it, resolved as
|
|
37
|
+
* every reader resolves a path (a `/proc/jobs/.../data` path through the
|
|
38
|
+
* job's link to its output, #1364; the store's links at any depth).
|
|
25
39
|
*
|
|
26
40
|
* @param source - The source as typed.
|
|
27
|
-
* @returns The
|
|
41
|
+
* @returns The store path.
|
|
28
42
|
*/
|
|
29
43
|
async function source_resolve(source) {
|
|
30
|
-
|
|
31
|
-
const link = resolved.match(PROC_DATA_PATH);
|
|
32
|
-
if (link === null)
|
|
33
|
-
return resolved;
|
|
34
|
-
const target = await vfsDispatcher_get().linkTarget_resolve(link[1]);
|
|
35
|
-
if (!target.ok)
|
|
36
|
-
return resolved;
|
|
37
|
-
return `${target.value}${link[2] ?? ''}`;
|
|
44
|
+
return storePath_resolve(source);
|
|
38
45
|
}
|
|
39
46
|
/**
|
|
40
47
|
* Asks the issuing surface to confirm a local download overwrite or merge.
|
|
@@ -143,29 +150,59 @@ async function surfaceDownload_run(surface, sourceArgs, destination) {
|
|
|
143
150
|
rendered += '\n';
|
|
144
151
|
return failed.length === 0 ? envelope_ok(rendered) : envelope_error(rendered, undefined, '');
|
|
145
152
|
}
|
|
153
|
+
/** What a `download` line may hold: ChRIS paths (a wildcard matches them), then one place on this machine. */
|
|
154
|
+
const DOWNLOAD_GRAMMAR = {
|
|
155
|
+
operands: [
|
|
156
|
+
{ name: 'source', kind: 'cfsPath', repeat: true, glob: true, summary: 'What to download: a ChRIS file or folder; a wildcard matches paths' },
|
|
157
|
+
{ name: 'destination', kind: 'hostPath', summary: "Where it goes on this machine's disk; several sources go into one folder" },
|
|
158
|
+
],
|
|
159
|
+
options: {
|
|
160
|
+
force: { short: 'f', long: 'force', summary: 'Overwrite local paths that exist' },
|
|
161
|
+
},
|
|
162
|
+
};
|
|
146
163
|
/**
|
|
147
|
-
*
|
|
148
|
-
* it to the surface when the engine's disk is not the operator's.
|
|
164
|
+
* `download [-f] <source…> <destination>`: the declaration.
|
|
149
165
|
*
|
|
150
|
-
* @
|
|
151
|
-
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```ts
|
|
168
|
+
* commands_register({ declarations: [downloadCommand] }, 'backend');
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
export const downloadCommand = command_declare({
|
|
172
|
+
name: 'download',
|
|
173
|
+
grammar: DOWNLOAD_GRAMMAR,
|
|
174
|
+
help: {
|
|
175
|
+
summary: 'Download ChRIS files or folders to this machine',
|
|
176
|
+
description: 'Download a ChRIS file, folder, or the paths a wildcard matches to the local filesystem with progress tracking: files, ETA, bytes transferred. Several sources, typed or matched, go together into one folder. Under a daemon the files are handed to the surface, which puts them on its own disk or in a browser\'s downloads.',
|
|
177
|
+
category: 'Files',
|
|
178
|
+
examples: [
|
|
179
|
+
'download /home/user/data ./data',
|
|
180
|
+
'download /home/user/results/*.nii ./results/',
|
|
181
|
+
'download /feeds/feed_123 ./downloads -f',
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
handler: async (args) => download_run(args.operands.source, args.operands.destination, args.options.force, args.expanded.source),
|
|
185
|
+
});
|
|
186
|
+
/**
|
|
187
|
+
* `download` over words already split: the declaration's parse and handler.
|
|
188
|
+
*
|
|
189
|
+
* @param args - The words after `download`.
|
|
190
|
+
* @returns The download summary, or the refusal of a bad line.
|
|
152
191
|
*/
|
|
153
192
|
export async function builtin_download(args) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
.slice(0, -1)
|
|
168
|
-
.some((index) => shellArguments_pathnameExpanded(args, index));
|
|
193
|
+
return declaredCommand_run(downloadCommand, args);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Downloads remote ChRIS files or folders to the local filesystem, or hands
|
|
197
|
+
* them to the surface when the engine's disk is not the operator's.
|
|
198
|
+
*
|
|
199
|
+
* @param sourceArgs - The ChRIS paths, as typed or matched.
|
|
200
|
+
* @param localPathArg - Where they go.
|
|
201
|
+
* @param force - Overwrite local paths that exist.
|
|
202
|
+
* @param sourceWasExpanded - The sources came from a wildcard, so even one goes into a folder.
|
|
203
|
+
* @returns An envelope carrying the download summary.
|
|
204
|
+
*/
|
|
205
|
+
async function download_run(sourceArgs, localPathArg, force, sourceWasExpanded) {
|
|
169
206
|
// A path resolved here is a path on the *engine's* disk. That is the
|
|
170
207
|
// operator's disk only when a local shell hosts the engine in its own
|
|
171
208
|
// process; under a daemon it is a machine nobody attending the session is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/builtins/fs/download.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/builtins/fs/download.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins/fs/du.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ParsedArgs } from '../utils.js';
|
|
2
1
|
import { type ScanRecord } from '@fnndsc/chili/path/pathCommand.js';
|
|
3
2
|
import { type CommandEnvelope } from '@fnndsc/menu';
|
|
4
3
|
/**
|
|
@@ -13,14 +12,67 @@ export interface DuOptions {
|
|
|
13
12
|
maxDepth: number | undefined;
|
|
14
13
|
}
|
|
15
14
|
/**
|
|
16
|
-
*
|
|
17
|
-
* takes a value for: a short flag is otherwise a switch, and the depth
|
|
18
|
-
* read as a path to measure.
|
|
15
|
+
* `du [-hsacS] [-d <N>] [path…]`: the declaration.
|
|
19
16
|
*
|
|
20
|
-
* @
|
|
21
|
-
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* commands_register({ declarations: [duCommand] }, 'backend');
|
|
20
|
+
* ```
|
|
22
21
|
*/
|
|
23
|
-
export declare
|
|
22
|
+
export declare const duCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
|
|
23
|
+
readonly operands: readonly [{
|
|
24
|
+
readonly name: "path";
|
|
25
|
+
readonly kind: "cfsPath";
|
|
26
|
+
readonly optional: true;
|
|
27
|
+
readonly repeat: true;
|
|
28
|
+
readonly glob: true;
|
|
29
|
+
readonly summary: "What to measure; the working directory when none is given";
|
|
30
|
+
}];
|
|
31
|
+
readonly options: {
|
|
32
|
+
readonly humanReadable: {
|
|
33
|
+
readonly short: "h";
|
|
34
|
+
readonly long: "human-readable";
|
|
35
|
+
readonly summary: "Print sizes in human readable format";
|
|
36
|
+
};
|
|
37
|
+
readonly summarize: {
|
|
38
|
+
readonly short: "s";
|
|
39
|
+
readonly long: "summarize";
|
|
40
|
+
readonly summary: "Display only total for each argument";
|
|
41
|
+
};
|
|
42
|
+
readonly all: {
|
|
43
|
+
readonly short: "a";
|
|
44
|
+
readonly long: "all";
|
|
45
|
+
readonly summary: "Show counts for all files, not just directories";
|
|
46
|
+
};
|
|
47
|
+
readonly total: {
|
|
48
|
+
readonly short: "c";
|
|
49
|
+
readonly long: "total";
|
|
50
|
+
readonly summary: "Produce a grand total";
|
|
51
|
+
};
|
|
52
|
+
readonly separateDirs: {
|
|
53
|
+
readonly short: "S";
|
|
54
|
+
readonly long: "separate-dirs";
|
|
55
|
+
readonly summary: "Do not include size of subdirectories";
|
|
56
|
+
};
|
|
57
|
+
readonly maxDepth: {
|
|
58
|
+
readonly short: "d";
|
|
59
|
+
readonly long: "max-depth";
|
|
60
|
+
readonly summary: "Print total only if N or fewer levels below";
|
|
61
|
+
readonly value: {
|
|
62
|
+
readonly name: "N";
|
|
63
|
+
readonly kind: "int";
|
|
64
|
+
readonly min: 0;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* `du` over words already split: the declaration's parse and handler.
|
|
71
|
+
*
|
|
72
|
+
* @param args - The words after `du`.
|
|
73
|
+
* @returns The sizes, or the refusal of a bad line.
|
|
74
|
+
*/
|
|
75
|
+
export declare function builtin_du(args: string[]): Promise<CommandEnvelope>;
|
|
24
76
|
/**
|
|
25
77
|
* Formats a byte count for `du` output: human-readable string or KB integer,
|
|
26
78
|
* right-padded to 12 characters for column alignment.
|
|
@@ -30,13 +82,6 @@ export declare function depthOption_normalize(args: string[]): string[];
|
|
|
30
82
|
* @returns Right-aligned size string.
|
|
31
83
|
*/
|
|
32
84
|
export declare function duSize_format(bytes: number, humanReadable: boolean): string;
|
|
33
|
-
/**
|
|
34
|
-
* Extracts `du` flags from parsed command arguments.
|
|
35
|
-
*
|
|
36
|
-
* @param parsed - The parsed command arguments.
|
|
37
|
-
* @returns The resolved du options.
|
|
38
|
-
*/
|
|
39
|
-
export declare function duOptions_parse(parsed: ParsedArgs): DuOptions;
|
|
40
85
|
/**
|
|
41
86
|
* Accumulates per-directory sizes from a scan result, attributing each file's
|
|
42
87
|
* size to its ancestor directories up to (and including) the target path.
|
|
@@ -47,22 +92,3 @@ export declare function duOptions_parse(parsed: ParsedArgs): DuOptions;
|
|
|
47
92
|
* @returns A map of directory path to accumulated size.
|
|
48
93
|
*/
|
|
49
94
|
export declare function dirSizes_compute(scanResult: ScanRecord, targetPath: string, opts: DuOptions): Map<string, number>;
|
|
50
|
-
/**
|
|
51
|
-
* Displays disk usage statistics for ChRIS filesystem directories.
|
|
52
|
-
* Mimics standard Linux du command behavior and flags.
|
|
53
|
-
* Uses chili's scan_do machinery for recursive filesystem traversal.
|
|
54
|
-
*
|
|
55
|
-
* @param args - Command line arguments (optional path and flags).
|
|
56
|
-
* @returns A Promise that resolves when disk usage is displayed.
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* ```
|
|
60
|
-
* du # Disk usage of current directory
|
|
61
|
-
* du -h # Human-readable sizes
|
|
62
|
-
* du -s /home/user/data # Summary only
|
|
63
|
-
* du -a # Show all files, not just directories
|
|
64
|
-
* du -c # Show grand total
|
|
65
|
-
* du -d 2 # Max depth of 2 levels
|
|
66
|
-
* ```
|
|
67
|
-
*/
|
|
68
|
-
export declare function builtin_du(args: string[]): Promise<CommandEnvelope>;
|
package/dist/builtins/fs/du.js
CHANGED
|
@@ -1,49 +1,93 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @file
|
|
3
|
-
*
|
|
2
|
+
* @file `du`: how much of ChRIS's filesystem (CFS) each folder takes, as
|
|
3
|
+
* Linux du says it.
|
|
4
|
+
*
|
|
5
|
+
* Declared in one record (`duCommand`): paths that glob, and du's options;
|
|
6
|
+
* one it does not have is refused by name.
|
|
7
|
+
*
|
|
8
|
+
* Key components:
|
|
9
|
+
* - duCommand: the declaration.
|
|
10
|
+
* - builtin_du: the declaration run over words already split.
|
|
11
|
+
* - dirSizes_compute: each folder's size from a scan.
|
|
12
|
+
*
|
|
13
|
+
* Typical usage:
|
|
14
|
+
* ```ts
|
|
15
|
+
* await builtin_du(['-sh', '~/uploads']);
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Dependencies: chili's scan for the walk; the listing for what a path is.
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
4
21
|
*/
|
|
5
22
|
import chalk from 'chalk';
|
|
6
23
|
import path from 'path';
|
|
7
|
-
import {
|
|
24
|
+
import { path_resolve, storePath_resolve } from '../utils.js';
|
|
8
25
|
import { vfs } from '../../lib/vfs/vfs.js';
|
|
9
26
|
import { spinner } from '../../lib/spinner.js';
|
|
10
27
|
import { commandCancellation_enable, commandCancellation_signalGet } from '../../core/cancellation.js';
|
|
11
28
|
import { scan_do } from '@fnndsc/chili/path/pathCommand.js';
|
|
12
29
|
import { bytes_format } from '@fnndsc/chili/commands/fs/upload.js';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
/**
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
30
|
+
import { command_declare } from '../../core/commandDeclaration.js';
|
|
31
|
+
import { declaredCommand_run } from '../../core/commandParse.js';
|
|
32
|
+
/** What a `du` line may hold. */
|
|
33
|
+
const DU_GRAMMAR = {
|
|
34
|
+
operands: [
|
|
35
|
+
{ name: 'path', kind: 'cfsPath', optional: true, repeat: true, glob: true, summary: 'What to measure; the working directory when none is given' },
|
|
36
|
+
],
|
|
37
|
+
options: {
|
|
38
|
+
humanReadable: { short: 'h', long: 'human-readable', summary: 'Print sizes in human readable format' },
|
|
39
|
+
summarize: { short: 's', long: 'summarize', summary: 'Display only total for each argument' },
|
|
40
|
+
all: { short: 'a', long: 'all', summary: 'Show counts for all files, not just directories' },
|
|
41
|
+
total: { short: 'c', long: 'total', summary: 'Produce a grand total' },
|
|
42
|
+
separateDirs: { short: 'S', long: 'separate-dirs', summary: 'Do not include size of subdirectories' },
|
|
43
|
+
maxDepth: { short: 'd', long: 'max-depth', summary: 'Print total only if N or fewer levels below', value: { name: 'N', kind: 'int', min: 0 } },
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* `du [-hsacS] [-d <N>] [path…]`: the declaration.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* commands_register({ declarations: [duCommand] }, 'backend');
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export const duCommand = command_declare({
|
|
55
|
+
name: 'du',
|
|
56
|
+
grammar: DU_GRAMMAR,
|
|
57
|
+
help: {
|
|
58
|
+
summary: 'Display disk usage statistics (mimics Linux du)',
|
|
59
|
+
description: "Says how much of ChRIS's filesystem each folder under a path takes, its subfolders included, as Linux du does: the working directory when no path is given, each path given otherwise (a wildcard matches paths). A file is its own size.",
|
|
60
|
+
category: 'Navigation',
|
|
61
|
+
posix: { group: 'Files', differs: 'sizes in CFS' },
|
|
62
|
+
examples: [
|
|
63
|
+
'du # Disk usage of current directory',
|
|
64
|
+
'du -h # Human-readable sizes (1K, 234M, 2G)',
|
|
65
|
+
'du -s /home/user/data # Summary only for specified path',
|
|
66
|
+
'du -a # Show all files, not just directories',
|
|
67
|
+
'du -c # Show grand total at end',
|
|
68
|
+
'du -d 2 # Max depth of 2 levels',
|
|
69
|
+
'du -sh # Human-readable summary',
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
holds: [],
|
|
73
|
+
handler: async (args) => du_run(args.operands.path, {
|
|
74
|
+
humanReadable: args.options.humanReadable,
|
|
75
|
+
summarize: args.options.summarize,
|
|
76
|
+
showAll: args.options.all,
|
|
77
|
+
showTotal: args.options.total,
|
|
78
|
+
separateDirs: args.options.separateDirs,
|
|
79
|
+
maxDepth: args.options.maxDepth,
|
|
80
|
+
}),
|
|
81
|
+
});
|
|
19
82
|
/**
|
|
20
|
-
*
|
|
21
|
-
* takes a value for: a short flag is otherwise a switch, and the depth
|
|
22
|
-
* read as a path to measure.
|
|
83
|
+
* `du` over words already split: the declaration's parse and handler.
|
|
23
84
|
*
|
|
24
|
-
* @param args -
|
|
25
|
-
* @returns The
|
|
85
|
+
* @param args - The words after `du`.
|
|
86
|
+
* @returns The sizes, or the refusal of a bad line.
|
|
26
87
|
*/
|
|
27
|
-
export function
|
|
28
|
-
|
|
29
|
-
for (let i = 0; i < args.length; i++) {
|
|
30
|
-
const arg = args[i];
|
|
31
|
-
if (arg === '--') {
|
|
32
|
-
out.push(...args.slice(i));
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
if (arg === '-d' && args[i + 1] !== undefined) {
|
|
36
|
-
out.push(`--max-depth=${args[i + 1]}`);
|
|
37
|
-
i++;
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
const glued = arg.match(/^-d(\d+)$/);
|
|
41
|
-
out.push(glued !== null ? `--max-depth=${glued[1]}` : arg);
|
|
42
|
-
}
|
|
43
|
-
return out;
|
|
88
|
+
export async function builtin_du(args) {
|
|
89
|
+
return declaredCommand_run(duCommand, args);
|
|
44
90
|
}
|
|
45
|
-
/** Every option du reads; any other is refused by name. */
|
|
46
|
-
const DU_OPTIONS = [...DU_BOOLEAN_LONG_OPTIONS, 'max-depth', 'h', 's', 'a', 'c', 'S', 'd'];
|
|
47
91
|
/**
|
|
48
92
|
* Formats a byte count for `du` output: human-readable string or KB integer,
|
|
49
93
|
* right-padded to 12 characters for column alignment.
|
|
@@ -58,27 +102,6 @@ export function duSize_format(bytes, humanReadable) {
|
|
|
58
102
|
: Math.ceil(bytes / 1024).toString();
|
|
59
103
|
return formatted.padStart(12, ' ');
|
|
60
104
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Extracts `du` flags from parsed command arguments.
|
|
63
|
-
*
|
|
64
|
-
* @param parsed - The parsed command arguments.
|
|
65
|
-
* @returns The resolved du options.
|
|
66
|
-
*/
|
|
67
|
-
export function duOptions_parse(parsed) {
|
|
68
|
-
const maxDepth = parsed['d']
|
|
69
|
-
? parseInt(String(parsed['d']), 10)
|
|
70
|
-
: parsed['max-depth']
|
|
71
|
-
? parseInt(String(parsed['max-depth']), 10)
|
|
72
|
-
: undefined;
|
|
73
|
-
return {
|
|
74
|
-
humanReadable: !!parsed['h'] || !!parsed['human-readable'],
|
|
75
|
-
summarize: !!parsed['s'] || !!parsed['summarize'],
|
|
76
|
-
showAll: !!parsed['a'] || !!parsed['all'],
|
|
77
|
-
showTotal: !!parsed['c'] || !!parsed['total'],
|
|
78
|
-
separateDirs: !!parsed['S'] || !!parsed['separate-dirs'],
|
|
79
|
-
maxDepth,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
105
|
/**
|
|
83
106
|
* Resolves whether a target path is a directory or a file (with size).
|
|
84
107
|
*
|
|
@@ -175,34 +198,22 @@ function dirUsage_render(dirSizes, targetPath, opts) {
|
|
|
175
198
|
* Mimics standard Linux du command behavior and flags.
|
|
176
199
|
* Uses chili's scan_do machinery for recursive filesystem traversal.
|
|
177
200
|
*
|
|
178
|
-
* @param
|
|
179
|
-
* @
|
|
180
|
-
*
|
|
181
|
-
* @example
|
|
182
|
-
* ```
|
|
183
|
-
* du # Disk usage of current directory
|
|
184
|
-
* du -h # Human-readable sizes
|
|
185
|
-
* du -s /home/user/data # Summary only
|
|
186
|
-
* du -a # Show all files, not just directories
|
|
187
|
-
* du -c # Show grand total
|
|
188
|
-
* du -d 2 # Max depth of 2 levels
|
|
189
|
-
* ```
|
|
201
|
+
* @param pathArgs - The paths to measure; none measures the working directory.
|
|
202
|
+
* @param opts - The du options.
|
|
203
|
+
* @returns The sizes, and on the error channel each path that could not be read.
|
|
190
204
|
*/
|
|
191
|
-
|
|
192
|
-
const parsed = commandArgs_process(depthOption_normalize(args), { booleanLongOptions: DU_BOOLEAN_LONG_OPTIONS });
|
|
193
|
-
const unknown = optionsUnknown_refusal('du', parsed, DU_OPTIONS);
|
|
194
|
-
if (unknown !== null) {
|
|
195
|
-
exitCode_set(1);
|
|
196
|
-
return envelope_error('', undefined, `${chalk.red(unknown)}\n`);
|
|
197
|
-
}
|
|
198
|
-
const opts = duOptions_parse(parsed);
|
|
199
|
-
const pathArgs = parsed._;
|
|
205
|
+
async function du_run(pathArgs, opts) {
|
|
200
206
|
commandCancellation_enable();
|
|
201
207
|
const signal = commandCancellation_signalGet();
|
|
202
|
-
const rawTargets = pathArgs.length > 0 ? pathArgs : ['.'];
|
|
208
|
+
const rawTargets = pathArgs.length > 0 ? [...pathArgs] : ['.'];
|
|
209
|
+
// Sized where the store keeps it (a run's data path, a link on the line),
|
|
210
|
+
// and named as the session names it.
|
|
203
211
|
const resolvedTargets = [];
|
|
212
|
+
const logicalTargets = new Map();
|
|
204
213
|
for (const raw of rawTargets) {
|
|
205
|
-
|
|
214
|
+
const stored = await storePath_resolve(raw);
|
|
215
|
+
resolvedTargets.push(stored);
|
|
216
|
+
logicalTargets.set(stored, await path_resolve(raw));
|
|
206
217
|
}
|
|
207
218
|
let grandTotal = 0;
|
|
208
219
|
let rendered = '';
|
|
@@ -223,7 +234,7 @@ export async function builtin_du(args) {
|
|
|
223
234
|
if (!stat.isDirectory) {
|
|
224
235
|
grandTotal += stat.fileSize;
|
|
225
236
|
spinner.stop();
|
|
226
|
-
rendered += `${duSize_format(stat.fileSize, opts.humanReadable)}\t${targetPath}\n`;
|
|
237
|
+
rendered += `${duSize_format(stat.fileSize, opts.humanReadable)}\t${logicalTargets.get(targetPath) ?? targetPath}\n`;
|
|
227
238
|
continue;
|
|
228
239
|
}
|
|
229
240
|
// Scanned where it stands: the shared directory stays put.
|
|
@@ -246,7 +257,7 @@ export async function builtin_du(args) {
|
|
|
246
257
|
const dirSizes = dirSizes_compute(scanResult, targetPath, opts);
|
|
247
258
|
grandTotal += scanResult.totalSize;
|
|
248
259
|
spinner.stop();
|
|
249
|
-
rendered += dirUsage_render(dirSizes, targetPath, opts);
|
|
260
|
+
rendered += usageNames_logical(dirUsage_render(dirSizes, targetPath, opts), targetPath, logicalTargets.get(targetPath) ?? targetPath);
|
|
250
261
|
}
|
|
251
262
|
if (opts.showTotal && rawTargets.length > 0) {
|
|
252
263
|
rendered += `${duSize_format(grandTotal, opts.humanReadable)}\ttotal\n`;
|
|
@@ -261,4 +272,25 @@ export async function builtin_du(args) {
|
|
|
261
272
|
spinner.stop();
|
|
262
273
|
}
|
|
263
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Names each row of a folder's usage as the session names it: the store
|
|
277
|
+
* folder it was read from gives way to the path asked.
|
|
278
|
+
*
|
|
279
|
+
* @param rows - The rows, `size<TAB>path` each.
|
|
280
|
+
* @param storeRoot - The store folder scanned.
|
|
281
|
+
* @param logicalRoot - The folder as the session names it.
|
|
282
|
+
* @returns The rows, renamed.
|
|
283
|
+
*/
|
|
284
|
+
function usageNames_logical(rows, storeRoot, logicalRoot) {
|
|
285
|
+
if (storeRoot === logicalRoot)
|
|
286
|
+
return rows;
|
|
287
|
+
return rows.split('\n').map((row) => {
|
|
288
|
+
const tab = row.indexOf('\t');
|
|
289
|
+
if (tab === -1)
|
|
290
|
+
return row;
|
|
291
|
+
const named = row.slice(tab + 1);
|
|
292
|
+
const shown = named === storeRoot ? logicalRoot : named.startsWith(`${storeRoot}/`) ? `${logicalRoot}${named.slice(storeRoot.length)}` : named;
|
|
293
|
+
return `${row.slice(0, tab)}\t${shown}`;
|
|
294
|
+
}).join('\n');
|
|
295
|
+
}
|
|
264
296
|
//# sourceMappingURL=du.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"du.js","sourceRoot":"","sources":["../../../src/builtins/fs/du.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"du.js","sourceRoot":"","sources":["../../../src/builtins/fs/du.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,25 @@ import { type CommandEnvelope } from '@fnndsc/menu';
|
|
|
2
2
|
/** What `edit` says when the surface opened an editor that stays open. */
|
|
3
3
|
export declare const EDIT_OPENED_LINE: string;
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* original via delete + re-upload. No-ops if content is unchanged.
|
|
5
|
+
* `edit <file>`: the declaration.
|
|
7
6
|
*
|
|
8
|
-
* @
|
|
9
|
-
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* commands_register({ declarations: [editCommand] }, 'backend');
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export declare const editCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
|
|
13
|
+
readonly operands: readonly [{
|
|
14
|
+
readonly name: "file";
|
|
15
|
+
readonly kind: "cfsPath";
|
|
16
|
+
readonly glob: true;
|
|
17
|
+
readonly summary: "The ChRIS file to edit";
|
|
18
|
+
}];
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* `edit` over words already split: the declaration's parse and handler.
|
|
22
|
+
*
|
|
23
|
+
* @param args - The words after `edit`.
|
|
24
|
+
* @returns The edit outcome, or the refusal of a bad line.
|
|
10
25
|
*/
|
|
11
26
|
export declare function builtin_edit(args: string[]): Promise<CommandEnvelope>;
|