@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.
Files changed (333) hide show
  1. package/dist/buildinfo.json +1 -1
  2. package/dist/builtins/berth/berth.d.ts +11 -0
  3. package/dist/builtins/berth/berth.js +53 -22
  4. package/dist/builtins/berth/berth.js.map +1 -1
  5. package/dist/builtins/berth/berthCube.d.ts +17 -2
  6. package/dist/builtins/berth/berthCube.js +22 -10
  7. package/dist/builtins/berth/berthCube.js.map +1 -1
  8. package/dist/builtins/debug.d.ts +24 -3
  9. package/dist/builtins/debug.js +66 -13
  10. package/dist/builtins/debug.js.map +1 -1
  11. package/dist/builtins/fs/acl.args.d.ts +5 -38
  12. package/dist/builtins/fs/acl.args.js +6 -72
  13. package/dist/builtins/fs/acl.args.js.map +1 -1
  14. package/dist/builtins/fs/acl.d.ts +100 -10
  15. package/dist/builtins/fs/acl.js +222 -68
  16. package/dist/builtins/fs/acl.js.map +1 -1
  17. package/dist/builtins/fs/cat.args.d.ts +14 -15
  18. package/dist/builtins/fs/cat.args.js +13 -40
  19. package/dist/builtins/fs/cat.args.js.map +1 -1
  20. package/dist/builtins/fs/cat.d.ts +40 -3
  21. package/dist/builtins/fs/cat.js +89 -10
  22. package/dist/builtins/fs/cat.js.map +1 -1
  23. package/dist/builtins/fs/cd.d.ts +24 -6
  24. package/dist/builtins/fs/cd.js +71 -18
  25. package/dist/builtins/fs/cd.js.map +1 -1
  26. package/dist/builtins/fs/configWrite.d.ts +24 -8
  27. package/dist/builtins/fs/configWrite.js +77 -36
  28. package/dist/builtins/fs/configWrite.js.map +1 -1
  29. package/dist/builtins/fs/cp.d.ts +39 -4
  30. package/dist/builtins/fs/cp.js +120 -55
  31. package/dist/builtins/fs/cp.js.map +1 -1
  32. package/dist/builtins/fs/download.d.ts +12 -1
  33. package/dist/builtins/fs/download.js +24 -4
  34. package/dist/builtins/fs/download.js.map +1 -1
  35. package/dist/builtins/fs/du.d.ts +59 -33
  36. package/dist/builtins/fs/du.js +111 -79
  37. package/dist/builtins/fs/du.js.map +1 -1
  38. package/dist/builtins/fs/edit.d.ts +19 -4
  39. package/dist/builtins/fs/edit.js +77 -16
  40. package/dist/builtins/fs/edit.js.map +1 -1
  41. package/dist/builtins/fs/find.d.ts +25 -0
  42. package/dist/builtins/fs/find.js +76 -5
  43. package/dist/builtins/fs/find.js.map +1 -1
  44. package/dist/builtins/fs/mkdir.d.ts +28 -18
  45. package/dist/builtins/fs/mkdir.js +95 -66
  46. package/dist/builtins/fs/mkdir.js.map +1 -1
  47. package/dist/builtins/fs/mv.d.ts +34 -4
  48. package/dist/builtins/fs/mv.js +129 -64
  49. package/dist/builtins/fs/mv.js.map +1 -1
  50. package/dist/builtins/fs/pull.args.d.ts +56 -17
  51. package/dist/builtins/fs/pull.args.js +16 -66
  52. package/dist/builtins/fs/pull.args.js.map +1 -1
  53. package/dist/builtins/fs/pull.d.ts +62 -0
  54. package/dist/builtins/fs/pull.js +86 -22
  55. package/dist/builtins/fs/pull.js.map +1 -1
  56. package/dist/builtins/fs/pwd.d.ts +19 -5
  57. package/dist/builtins/fs/pwd.js +62 -8
  58. package/dist/builtins/fs/pwd.js.map +1 -1
  59. package/dist/builtins/fs/rm.d.ts +58 -21
  60. package/dist/builtins/fs/rm.js +99 -82
  61. package/dist/builtins/fs/rm.js.map +1 -1
  62. package/dist/builtins/fs/rmdir.d.ts +29 -11
  63. package/dist/builtins/fs/rmdir.js +87 -36
  64. package/dist/builtins/fs/rmdir.js.map +1 -1
  65. package/dist/builtins/fs/touch.d.ts +44 -9
  66. package/dist/builtins/fs/touch.js +91 -27
  67. package/dist/builtins/fs/touch.js.map +1 -1
  68. package/dist/builtins/fs/transferJobs.d.ts +64 -0
  69. package/dist/builtins/fs/transferJobs.js +98 -0
  70. package/dist/builtins/fs/transferJobs.js.map +1 -0
  71. package/dist/builtins/fs/tree.d.ts +36 -9
  72. package/dist/builtins/fs/tree.js +126 -36
  73. package/dist/builtins/fs/tree.js.map +1 -1
  74. package/dist/builtins/fs/upload.d.ts +35 -3
  75. package/dist/builtins/fs/upload.js +99 -14
  76. package/dist/builtins/fs/upload.js.map +1 -1
  77. package/dist/builtins/fs/xattr.args.d.ts +12 -33
  78. package/dist/builtins/fs/xattr.args.js +17 -95
  79. package/dist/builtins/fs/xattr.args.js.map +1 -1
  80. package/dist/builtins/fs/xattr.d.ts +98 -8
  81. package/dist/builtins/fs/xattr.js +163 -24
  82. package/dist/builtins/fs/xattr.js.map +1 -1
  83. package/dist/builtins/games/bytes.d.ts +201 -5
  84. package/dist/builtins/games/bytes.js +255 -54
  85. package/dist/builtins/games/bytes.js.map +1 -1
  86. package/dist/builtins/games/chimes.d.ts +180 -3
  87. package/dist/builtins/games/chimes.js +203 -26
  88. package/dist/builtins/games/chimes.js.map +1 -1
  89. package/dist/builtins/games/chrislab.d.ts +101 -3
  90. package/dist/builtins/games/chrislab.js +117 -17
  91. package/dist/builtins/games/chrislab.js.map +1 -1
  92. package/dist/builtins/games/cowsay.d.ts +93 -2
  93. package/dist/builtins/games/cowsay.js +90 -31
  94. package/dist/builtins/games/cowsay.js.map +1 -1
  95. package/dist/builtins/games/figlet.d.ts +70 -2
  96. package/dist/builtins/games/figlet.js +83 -6
  97. package/dist/builtins/games/figlet.js.map +1 -1
  98. package/dist/builtins/games/lab.d.ts +104 -5
  99. package/dist/builtins/games/lab.js +144 -6
  100. package/dist/builtins/games/lab.js.map +1 -1
  101. package/dist/builtins/games/lolcat.d.ts +61 -1
  102. package/dist/builtins/games/lolcat.js +59 -24
  103. package/dist/builtins/games/lolcat.js.map +1 -1
  104. package/dist/builtins/games/morse.d.ts +36 -1
  105. package/dist/builtins/games/morse.js +50 -2
  106. package/dist/builtins/games/morse.js.map +1 -1
  107. package/dist/builtins/games/numbers.d.ts +241 -5
  108. package/dist/builtins/games/numbers.js +298 -23
  109. package/dist/builtins/games/numbers.js.map +1 -1
  110. package/dist/builtins/games/play.d.ts +96 -6
  111. package/dist/builtins/games/play.js +137 -6
  112. package/dist/builtins/games/play.js.map +1 -1
  113. package/dist/builtins/games/qr.d.ts +40 -1
  114. package/dist/builtins/games/qr.js +51 -2
  115. package/dist/builtins/games/qr.js.map +1 -1
  116. package/dist/builtins/games/show.d.ts +131 -6
  117. package/dist/builtins/games/show.js +208 -20
  118. package/dist/builtins/games/show.js.map +1 -1
  119. package/dist/builtins/games/sky.d.ts +178 -4
  120. package/dist/builtins/games/sky.js +228 -12
  121. package/dist/builtins/games/sky.js.map +1 -1
  122. package/dist/builtins/games/text.d.ts +258 -7
  123. package/dist/builtins/games/text.js +310 -29
  124. package/dist/builtins/games/text.js.map +1 -1
  125. package/dist/builtins/games/trek.d.ts +67 -3
  126. package/dist/builtins/games/trek.js +63 -10
  127. package/dist/builtins/games/trek.js.map +1 -1
  128. package/dist/builtins/games/wtf.d.ts +58 -1
  129. package/dist/builtins/games/wtf.js +67 -6
  130. package/dist/builtins/games/wtf.js.map +1 -1
  131. package/dist/builtins/help.d.ts +38 -2
  132. package/dist/builtins/help.js +76 -769
  133. package/dist/builtins/help.js.map +1 -1
  134. package/dist/builtins/helpSections.js +4 -1
  135. package/dist/builtins/helpSections.js.map +1 -1
  136. package/dist/builtins/net/connect.d.ts +36 -3
  137. package/dist/builtins/net/connect.js +84 -26
  138. package/dist/builtins/net/connect.js.map +1 -1
  139. package/dist/builtins/net/cubepath.d.ts +49 -5
  140. package/dist/builtins/net/cubepath.js +69 -27
  141. package/dist/builtins/net/cubepath.js.map +1 -1
  142. package/dist/builtins/net/logout.d.ts +13 -4
  143. package/dist/builtins/net/logout.js +49 -3
  144. package/dist/builtins/net/logout.js.map +1 -1
  145. package/dist/builtins/net/netstat.d.ts +29 -4
  146. package/dist/builtins/net/netstat.js +64 -23
  147. package/dist/builtins/net/netstat.js.map +1 -1
  148. package/dist/builtins/net/pacs.d.ts +169 -15
  149. package/dist/builtins/net/pacs.js +92 -33
  150. package/dist/builtins/net/pacs.js.map +1 -1
  151. package/dist/builtins/net/query.args.d.ts +95 -0
  152. package/dist/builtins/net/query.args.js +26 -0
  153. package/dist/builtins/net/query.args.js.map +1 -0
  154. package/dist/builtins/net/query.d.ts +98 -5
  155. package/dist/builtins/net/query.js +89 -83
  156. package/dist/builtins/net/query.js.map +1 -1
  157. package/dist/builtins/net/status.d.ts +5 -3
  158. package/dist/builtins/net/status.js +5 -12
  159. package/dist/builtins/net/status.js.map +1 -1
  160. package/dist/builtins/parametersofplugin.d.ts +82 -3
  161. package/dist/builtins/parametersofplugin.js +79 -23
  162. package/dist/builtins/parametersofplugin.js.map +1 -1
  163. package/dist/builtins/proc.d.ts +210 -3
  164. package/dist/builtins/proc.js +210 -119
  165. package/dist/builtins/proc.js.map +1 -1
  166. package/dist/builtins/res/compute.d.ts +67 -3
  167. package/dist/builtins/res/compute.js +121 -35
  168. package/dist/builtins/res/compute.js.map +1 -1
  169. package/dist/builtins/res/dicom.d.ts +52 -3
  170. package/dist/builtins/res/dicom.js +82 -34
  171. package/dist/builtins/res/dicom.js.map +1 -1
  172. package/dist/builtins/res/expect.d.ts +52 -3
  173. package/dist/builtins/res/expect.js +92 -29
  174. package/dist/builtins/res/expect.js.map +1 -1
  175. package/dist/builtins/res/feed.d.ts +475 -3
  176. package/dist/builtins/res/feed.js +253 -158
  177. package/dist/builtins/res/feed.js.map +1 -1
  178. package/dist/builtins/res/files.d.ts +517 -3
  179. package/dist/builtins/res/files.js +124 -44
  180. package/dist/builtins/res/files.js.map +1 -1
  181. package/dist/builtins/res/gather.d.ts +113 -3
  182. package/dist/builtins/res/gather.js +153 -44
  183. package/dist/builtins/res/gather.js.map +1 -1
  184. package/dist/builtins/res/gather.process.d.ts +27 -19
  185. package/dist/builtins/res/gather.process.js +29 -59
  186. package/dist/builtins/res/gather.process.js.map +1 -1
  187. package/dist/builtins/res/group.d.ts +284 -3
  188. package/dist/builtins/res/group.js +147 -76
  189. package/dist/builtins/res/group.js.map +1 -1
  190. package/dist/builtins/res/image.d.ts +30 -2
  191. package/dist/builtins/res/image.js +62 -10
  192. package/dist/builtins/res/image.js.map +1 -1
  193. package/dist/builtins/res/play.d.ts +71 -9
  194. package/dist/builtins/res/play.js +124 -82
  195. package/dist/builtins/res/play.js.map +1 -1
  196. package/dist/builtins/res/plugininstance.d.ts +307 -2
  197. package/dist/builtins/res/plugininstance.js +122 -50
  198. package/dist/builtins/res/plugininstance.js.map +1 -1
  199. package/dist/builtins/res/pluginmeta.d.ts +244 -2
  200. package/dist/builtins/res/pluginmeta.js +98 -40
  201. package/dist/builtins/res/pluginmeta.js.map +1 -1
  202. package/dist/builtins/res/record.d.ts +37 -3
  203. package/dist/builtins/res/record.js +127 -57
  204. package/dist/builtins/res/record.js.map +1 -1
  205. package/dist/builtins/res/resourceList.d.ts +136 -0
  206. package/dist/builtins/res/resourceList.js +51 -0
  207. package/dist/builtins/res/resourceList.js.map +1 -0
  208. package/dist/builtins/res/tag.d.ts +244 -3
  209. package/dist/builtins/res/tag.js +97 -41
  210. package/dist/builtins/res/tag.js.map +1 -1
  211. package/dist/builtins/res/user.d.ts +122 -3
  212. package/dist/builtins/res/user.js +83 -21
  213. package/dist/builtins/res/user.js.map +1 -1
  214. package/dist/builtins/res/workflow.d.ts +244 -2
  215. package/dist/builtins/res/workflow.js +97 -40
  216. package/dist/builtins/res/workflow.js.map +1 -1
  217. package/dist/builtins/store.d.ts +85 -3
  218. package/dist/builtins/store.js +135 -68
  219. package/dist/builtins/store.js.map +1 -1
  220. package/dist/builtins/sys/apropos.d.ts +80 -5
  221. package/dist/builtins/sys/apropos.js +121 -15
  222. package/dist/builtins/sys/apropos.js.map +1 -1
  223. package/dist/builtins/sys/cal.d.ts +44 -5
  224. package/dist/builtins/sys/cal.js +57 -10
  225. package/dist/builtins/sys/cal.js.map +1 -1
  226. package/dist/builtins/sys/command.d.ts +20 -0
  227. package/dist/builtins/sys/command.js +31 -0
  228. package/dist/builtins/sys/command.js.map +1 -1
  229. package/dist/builtins/sys/context.d.ts +13 -3
  230. package/dist/builtins/sys/context.js +51 -4
  231. package/dist/builtins/sys/context.js.map +1 -1
  232. package/dist/builtins/sys/date.d.ts +56 -5
  233. package/dist/builtins/sys/date.js +63 -9
  234. package/dist/builtins/sys/date.js.map +1 -1
  235. package/dist/builtins/sys/echo.d.ts +63 -2
  236. package/dist/builtins/sys/echo.js +87 -8
  237. package/dist/builtins/sys/echo.js.map +1 -1
  238. package/dist/builtins/sys/fortune.d.ts +27 -2
  239. package/dist/builtins/sys/fortune.js +44 -2
  240. package/dist/builtins/sys/fortune.js.map +1 -1
  241. package/dist/builtins/sys/grep.d.ts +245 -11
  242. package/dist/builtins/sys/grep.js +418 -131
  243. package/dist/builtins/sys/grep.js.map +1 -1
  244. package/dist/builtins/sys/joblets.d.ts +66 -7
  245. package/dist/builtins/sys/joblets.js +101 -14
  246. package/dist/builtins/sys/joblets.js.map +1 -1
  247. package/dist/builtins/sys/motd.d.ts +37 -3
  248. package/dist/builtins/sys/motd.js +49 -8
  249. package/dist/builtins/sys/motd.js.map +1 -1
  250. package/dist/builtins/sys/notes.d.ts +75 -3
  251. package/dist/builtins/sys/notes.js +90 -29
  252. package/dist/builtins/sys/notes.js.map +1 -1
  253. package/dist/builtins/sys/physicalmode.d.ts +24 -3
  254. package/dist/builtins/sys/physicalmode.js +68 -14
  255. package/dist/builtins/sys/physicalmode.js.map +1 -1
  256. package/dist/builtins/sys/tasks.d.ts +74 -5
  257. package/dist/builtins/sys/tasks.js +102 -14
  258. package/dist/builtins/sys/tasks.js.map +1 -1
  259. package/dist/builtins/sys/textFilters.d.ts +673 -41
  260. package/dist/builtins/sys/textFilters.js +718 -263
  261. package/dist/builtins/sys/textFilters.js.map +1 -1
  262. package/dist/builtins/sys/timing.d.ts +24 -3
  263. package/dist/builtins/sys/timing.js +67 -14
  264. package/dist/builtins/sys/timing.js.map +1 -1
  265. package/dist/builtins/sys/variables.d.ts +70 -4
  266. package/dist/builtins/sys/variables.js +103 -31
  267. package/dist/builtins/sys/variables.js.map +1 -1
  268. package/dist/builtins/sys/version.d.ts +27 -2
  269. package/dist/builtins/sys/version.js +48 -3
  270. package/dist/builtins/sys/version.js.map +1 -1
  271. package/dist/builtins/sys/weather.d.ts +92 -15
  272. package/dist/builtins/sys/weather.js +71 -45
  273. package/dist/builtins/sys/weather.js.map +1 -1
  274. package/dist/builtins/sys/whoami.d.ts +38 -18
  275. package/dist/builtins/sys/whoami.js +112 -8
  276. package/dist/builtins/sys/whoami.js.map +1 -1
  277. package/dist/builtins/utils.d.ts +0 -37
  278. package/dist/builtins/utils.js +0 -86
  279. package/dist/builtins/utils.js.map +1 -1
  280. package/dist/chris/chrisCommands.js +58 -152
  281. package/dist/chris/chrisCommands.js.map +1 -1
  282. package/dist/chris/commandFallback.d.ts +12 -0
  283. package/dist/chris/commandFallback.js +47 -0
  284. package/dist/chris/commandFallback.js.map +1 -1
  285. package/dist/chris/filesystem.js +7 -5
  286. package/dist/chris/filesystem.js.map +1 -1
  287. package/dist/chris/help.js +0 -1018
  288. package/dist/chris/help.js.map +1 -1
  289. package/dist/chris/kinds.d.ts +21 -0
  290. package/dist/chris/kinds.js +114 -2
  291. package/dist/chris/kinds.js.map +1 -1
  292. package/dist/chris/mounts.d.ts +4 -4
  293. package/dist/chris/mounts.js +9 -16
  294. package/dist/chris/mounts.js.map +1 -1
  295. package/dist/chris/navigation.d.ts +2 -3
  296. package/dist/chris/navigation.js +6 -20
  297. package/dist/chris/navigation.js.map +1 -1
  298. package/dist/chris/pacsResources.d.ts +259 -0
  299. package/dist/chris/pacsResources.js +168 -0
  300. package/dist/chris/pacsResources.js.map +1 -0
  301. package/dist/core/commandDeclaration.d.ts +97 -7
  302. package/dist/core/commandDeclaration.js +21 -0
  303. package/dist/core/commandDeclaration.js.map +1 -1
  304. package/dist/core/commandParse.js +65 -17
  305. package/dist/core/commandParse.js.map +1 -1
  306. package/dist/core/commandRegistry.d.ts +4 -3
  307. package/dist/core/commandRegistry.js +36 -8
  308. package/dist/core/commandRegistry.js.map +1 -1
  309. package/dist/core/commandSchema.js +5 -2
  310. package/dist/core/commandSchema.js.map +1 -1
  311. package/dist/core/commandUsage.d.ts +15 -0
  312. package/dist/core/commandUsage.js +59 -7
  313. package/dist/core/commandUsage.js.map +1 -1
  314. package/dist/core/coreCommands.js +63 -212
  315. package/dist/core/coreCommands.js.map +1 -1
  316. package/dist/core/paths.d.ts +29 -1
  317. package/dist/core/paths.js +15 -2
  318. package/dist/core/paths.js.map +1 -1
  319. package/dist/core/preprocess.d.ts +3 -4
  320. package/dist/core/preprocess.js +4 -5
  321. package/dist/core/preprocess.js.map +1 -1
  322. package/dist/lib/completer/declared.js +7 -4
  323. package/dist/lib/completer/declared.js.map +1 -1
  324. package/dist/lib/completer/index.js +2 -7
  325. package/dist/lib/completer/index.js.map +1 -1
  326. package/dist/lib/parser.d.ts +0 -8
  327. package/dist/lib/parser.js +0 -11
  328. package/dist/lib/parser.js.map +1 -1
  329. package/dist/lib/vfs/vfs.d.ts +2 -1
  330. package/dist/lib/vfs/vfs.js +5 -4
  331. package/dist/lib/vfs/vfs.js.map +1 -1
  332. package/dist/notes.json +1 -1
  333. package/package.json +5 -5
@@ -2,16 +2,42 @@
2
2
  * @file `setfattr` and `getfattr` — a feed's tags.
3
3
  *
4
4
  * CUBE's freeform tags on a feed are, in POSIX terms, the values of one
5
- * extended attribute, `tag`. The capability lives in the kernel
6
- * (`feedTags_list`, `feedTag_add`, `feedTag_remove`); this is its shell face.
5
+ * extended attribute, `tag`. Each command is declared in one record: the
6
+ * attribute's name is one of the words it answers to, the feeds are path
7
+ * operands that glob. The capability lives in the kernel (`feedTags_list`,
8
+ * `feedTag_add`, `feedTag_remove`); this is its shell face.
9
+ *
10
+ * Key components:
11
+ * - setfattrCommand, getfattrCommand: the declarations.
12
+ * - builtin_setfattr, builtin_getfattr: each declaration run over words already split.
13
+ *
14
+ * Typical usage:
15
+ * ```ts
16
+ * await builtin_setfattr(['-n', 'tag', '-v', 'urgent', 'feed_12']);
17
+ * ```
18
+ *
19
+ * Dependencies: cumin's tag calls; the target and dump words (`xattr.args.ts`).
7
20
  *
8
21
  * @module
9
22
  */
23
+ import chalk from 'chalk';
10
24
  import { feedTags_list, feedTag_add, feedTag_remove } from '@fnndsc/cumin';
11
- import { getfattrArgs_parse, setfattrArgs_parse, xattrTarget_resolve, xattr_render, } from './xattr.args.js';
25
+ import { xattrTarget_resolve, xattr_render } from './xattr.args.js';
12
26
  import { error_stripDebugPrefix } from '../utils.js';
13
27
  import { errorStack } from '@fnndsc/fond';
14
28
  import { envelope_ok, envelope_error } from '@fnndsc/menu';
29
+ import { command_declare } from '../../core/commandDeclaration.js';
30
+ import { declaredCommand_run } from '../../core/commandParse.js';
31
+ import { commandUsage_render } from '../../core/commandUsage.js';
32
+ import { exitCode_set } from '../../core/handlerRun.js';
33
+ /** The feeds a line names, as both commands take them. */
34
+ const FEEDS_OPERAND = {
35
+ name: 'path',
36
+ kind: 'cfsPath',
37
+ repeat: true,
38
+ glob: true,
39
+ summary: 'The feeds: an id, feed_N, any path through /feeds/, or /proc/jobs/feed_N',
40
+ };
15
41
  /**
16
42
  * A refusal, on a line of its own.
17
43
  *
@@ -31,19 +57,24 @@ function error_said(fallback) {
31
57
  const error = errorStack.stack_pop();
32
58
  return error?.message ?? fallback;
33
59
  }
60
+ /** What a `getfattr` line may hold. */
61
+ const GETFATTR_GRAMMAR = {
62
+ operands: [FEEDS_OPERAND],
63
+ options: {
64
+ name: { short: 'n', long: 'name', summary: 'The attribute to read (only tag exists)', value: { name: 'name', kind: 'enum', values: ['tag', 'user.tag'] } },
65
+ dump: { short: 'd', long: 'dump', summary: 'Dump every attribute (the default)' },
66
+ },
67
+ };
34
68
  /**
35
69
  * Reads the tags a feed wears, in `getfattr`'s dump shape.
36
70
  *
37
- * @param args - Raw argument tokens.
71
+ * @param args - The line, parsed.
38
72
  * @returns An envelope carrying the rendered blocks and a model of them.
39
73
  */
40
- export async function builtin_getfattr(args) {
41
- const parsed = getfattrArgs_parse(args);
42
- if (parsed.error !== null)
43
- return refusal(parsed.error);
74
+ async function getfattr_run(args) {
44
75
  const blocks = [];
45
76
  const model = [];
46
- for (const path of parsed.paths) {
77
+ for (const path of args.operands.path) {
47
78
  const feedId = xattrTarget_resolve(path);
48
79
  if (feedId === null)
49
80
  return refusal(`getfattr: '${path}' does not name a feed`);
@@ -56,45 +87,153 @@ export async function builtin_getfattr(args) {
56
87
  }
57
88
  return envelope_ok(`${blocks.join('\n\n')}\n`, { kind: 'fs.xattr', data: model });
58
89
  }
90
+ /**
91
+ * `getfattr [-d] [-n tag] <path>…`: the declaration.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * commands_register({ declarations: [getfattrCommand] }, 'backend');
96
+ * ```
97
+ */
98
+ export const getfattrCommand = command_declare({
99
+ name: 'getfattr',
100
+ grammar: GETFATTR_GRAMMAR,
101
+ help: {
102
+ summary: 'Show the tags a feed wears',
103
+ description: 'Show a feed\'s tags in getfattr\'s dump shape: a # file: line, then one tag="…" line per tag.',
104
+ category: 'Sharing',
105
+ posix: { group: 'Files', differs: 'a feed\'s tags, as extended attributes' },
106
+ examples: [
107
+ 'getfattr feed_12',
108
+ 'getfattr -n tag /home/me/feeds/feed_12',
109
+ ],
110
+ },
111
+ // Reading a feed's tags changes nothing of the session.
112
+ holds: [],
113
+ handler: getfattr_run,
114
+ });
115
+ /**
116
+ * `getfattr` over words already split: the declaration's parse and handler.
117
+ *
118
+ * @param args - The words after `getfattr`.
119
+ * @returns The tags, or the refusal of a bad line.
120
+ *
121
+ * @example
122
+ * ```ts
123
+ * await builtin_getfattr(['feed_12']);
124
+ * ```
125
+ */
126
+ export async function builtin_getfattr(args) {
127
+ return declaredCommand_run(getfattrCommand, args);
128
+ }
129
+ /** What a `setfattr` line may hold. */
130
+ const SETFATTR_GRAMMAR = {
131
+ operands: [FEEDS_OPERAND],
132
+ options: {
133
+ name: { short: 'n', long: 'name', summary: 'The attribute to set (only tag exists)', value: { name: 'name', kind: 'enum', values: ['tag', 'user.tag'] } },
134
+ value: { short: 'v', long: 'value', summary: 'The tag', value: { name: 'value', kind: 'word' } },
135
+ remove: { short: 'x', long: 'remove', summary: 'Remove the tag given by -v, or every tag without -v', value: { name: 'name', kind: 'enum', values: ['tag', 'user.tag'] } },
136
+ },
137
+ };
138
+ /**
139
+ * A refusal of a line that says neither what to set nor what to remove, or
140
+ * a set without its value, with the usage.
141
+ *
142
+ * @param reason - What is missing.
143
+ * @returns The error envelope.
144
+ */
145
+ function setfattrLine_refuse(reason) {
146
+ exitCode_set(1);
147
+ return envelope_error('', undefined, `${chalk.red(`setfattr: ${reason}; usage: ${commandUsage_render(setfattrCommand)}`)}\n`);
148
+ }
59
149
  /**
60
150
  * Hangs a tag on feeds (`-n tag -v <value>`), or takes one off (`-x tag -v
61
151
  * <value>`), or takes every tag off (`-x tag`, as setfattr removes the
62
152
  * whole attribute). Silent on success, as setfattr is; a refusal is named.
63
153
  *
64
- * @param args - Raw argument tokens.
154
+ * @param args - The line, parsed.
65
155
  * @returns An envelope, empty on success.
66
156
  */
67
- export async function builtin_setfattr(args) {
68
- const parsed = setfattrArgs_parse(args);
69
- if (parsed.error !== null)
70
- return refusal(parsed.error);
157
+ async function setfattr_run(args) {
158
+ const { name, remove } = args.options;
159
+ if (name !== undefined && remove !== undefined)
160
+ return setfattrLine_refuse('-n sets and -x removes; give one');
161
+ if (name === undefined && remove === undefined)
162
+ return setfattrLine_refuse('-n tag or -x tag is needed');
163
+ const mode = name !== undefined ? 'set' : 'remove';
164
+ const value = args.options.value === undefined ? null : args.options.value.trim();
165
+ if (mode === 'set' && (value === null || value === ''))
166
+ return setfattrLine_refuse(`-n ${name ?? 'tag'} needs -v <value>`);
71
167
  const changed = [];
72
- for (const path of parsed.paths) {
168
+ for (const path of args.operands.path) {
73
169
  const feedId = xattrTarget_resolve(path);
74
170
  if (feedId === null)
75
171
  return refusal(`setfattr: '${path}' does not name a feed`);
76
172
  let names;
77
- if (parsed.mode === 'remove' && parsed.value === null) {
173
+ if (mode === 'remove' && value === null) {
78
174
  const held = await feedTags_list(feedId);
79
175
  if (!held.ok)
80
176
  return refusal(error_said(`setfattr: could not read the tags of feed ${feedId}`));
81
177
  names = held.value.map((tag) => tag.name);
82
178
  }
83
179
  else {
84
- names = [parsed.value ?? ''];
180
+ names = [value ?? ''];
85
181
  }
86
- for (const name of names) {
87
- const done = parsed.mode === 'set' ? await feedTag_add(feedId, name) : await feedTag_remove(feedId, name);
182
+ for (const tagName of names) {
183
+ const done = mode === 'set' ? await feedTag_add(feedId, tagName) : await feedTag_remove(feedId, tagName);
88
184
  if (!done.ok) {
89
- const said = error_stripDebugPrefix(error_said(`could not ${parsed.mode === 'set' ? 'add' : 'remove'} tag ${name}`));
185
+ const said = error_stripDebugPrefix(error_said(`could not ${mode === 'set' ? 'add' : 'remove'} tag ${tagName}`));
90
186
  return refusal(`setfattr: ${path}: ${said}`);
91
187
  }
92
- if (parsed.mode === 'remove' && parsed.value !== null && !done.value) {
93
- return refusal(`setfattr: ${path}: tag="${name}": No such attribute value`);
188
+ if (mode === 'remove' && value !== null && !done.value) {
189
+ return refusal(`setfattr: ${path}: tag="${tagName}": No such attribute value`);
94
190
  }
95
- changed.push({ feedId, tag: name, done: done.value });
191
+ changed.push({ feedId, tag: tagName, done: done.value });
96
192
  }
97
193
  }
98
- return envelope_ok('', { kind: 'fs.xattr.changed', data: { mode: parsed.mode, changed } });
194
+ return envelope_ok('', { kind: 'fs.xattr.changed', data: { mode, changed } });
195
+ }
196
+ /**
197
+ * `setfattr -n tag -v <value> <path>… | -x tag [-v <value>] <path>…`: the declaration.
198
+ *
199
+ * @example
200
+ * ```ts
201
+ * commands_register({ declarations: [setfattrCommand] }, 'backend');
202
+ * ```
203
+ */
204
+ export const setfattrCommand = command_declare({
205
+ name: 'setfattr',
206
+ grammar: SETFATTR_GRAMMAR,
207
+ help: {
208
+ summary: 'Hang a tag on a feed, or take it off',
209
+ description: 'A feed\'s tags are the values of one extended attribute, tag (also user.tag): CUBE\'s '
210
+ + 'freeform labels. -n tag -v <value> hangs one of your tags (a folder under /proc/tags: '
211
+ + 'mkdir /proc/tags/<name> makes a tag, and naming one that does not exist is an error); '
212
+ + '-x tag -v <value> takes it off; -x tag alone takes every tag off, as '
213
+ + 'setfattr removes the whole attribute. A feed is named by id, by feed_N, by any path '
214
+ + 'through /feeds/, or by its projection /proc/jobs/feed_N. Silent on success.',
215
+ category: 'Sharing',
216
+ posix: { group: 'Files', differs: 'tags on a feed, as extended attributes' },
217
+ examples: [
218
+ 'setfattr -n tag -v urgent feed_12',
219
+ 'setfattr -n tag -v review feed_12 feed_13',
220
+ 'setfattr -x tag -v urgent /proc/jobs/feed_12',
221
+ ],
222
+ },
223
+ handler: setfattr_run,
224
+ });
225
+ /**
226
+ * `setfattr` over words already split: the declaration's parse and handler.
227
+ *
228
+ * @param args - The words after `setfattr`.
229
+ * @returns An envelope, empty on success, or the refusal of a bad line.
230
+ *
231
+ * @example
232
+ * ```ts
233
+ * await builtin_setfattr(['-x', 'tag', 'feed_12']);
234
+ * ```
235
+ */
236
+ export async function builtin_setfattr(args) {
237
+ return declaredCommand_run(setfattrCommand, args);
99
238
  }
100
239
  //# sourceMappingURL=xattr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xattr.js","sourceRoot":"","sources":["../../../src/builtins/fs/xattr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xattr.js","sourceRoot":"","sources":["../../../src/builtins/fs/xattr.ts"],"names":[],"mappings":"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"}
@@ -9,13 +9,209 @@ export declare function magic_derive(bytes: Buffer, name?: string): string;
9
9
  export declare function hexdump_render(bytes: Buffer, base?: number): string;
10
10
  /** The printable runs of at least `min` characters in some bytes. */
11
11
  export declare function strings_find(bytes: Buffer, min?: number): string[];
12
- /** `file <path>...` */
12
+ /**
13
+ * `file <path…>`: the declaration.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * commands_register({ declarations: [fileCommand] }, 'backend');
18
+ * ```
19
+ */
20
+ export declare const fileCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
21
+ readonly operands: readonly [{
22
+ readonly name: "path";
23
+ readonly kind: "cfsPath";
24
+ readonly repeat: true;
25
+ readonly glob: true;
26
+ readonly summary: "The ChRIS files to name; a wildcard matches paths";
27
+ }];
28
+ }>;
29
+ /**
30
+ * `file` over words already split: the declaration's parse and handler.
31
+ *
32
+ * @param args - The words after `file`.
33
+ * @returns What each file is, or the refusal of a bad line.
34
+ */
13
35
  export declare function builtin_file(args: string[]): Promise<CommandEnvelope>;
14
- /** `xxd [-s OFFSET] [-l LENGTH] <path>` */
36
+ /**
37
+ * `xxd [-s OFFSET] [-l LENGTH] <path>`: the declaration.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * commands_register({ declarations: [xxdCommand] });
42
+ * ```
43
+ */
44
+ export declare const xxdCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
45
+ readonly operands: readonly [{
46
+ readonly name: "path";
47
+ readonly kind: "cfsPath";
48
+ readonly glob: true;
49
+ readonly summary: "The file";
50
+ }];
51
+ readonly options: {
52
+ readonly offset: {
53
+ readonly short: "s";
54
+ readonly summary: "Start at this byte (default 0)";
55
+ readonly value: {
56
+ readonly name: "OFFSET";
57
+ readonly kind: "int";
58
+ readonly min: 0;
59
+ };
60
+ };
61
+ readonly length: {
62
+ readonly short: "l";
63
+ readonly summary: `Show this many bytes (default ${number})`;
64
+ readonly value: {
65
+ readonly name: "LENGTH";
66
+ readonly kind: "int";
67
+ readonly min: 0;
68
+ };
69
+ };
70
+ };
71
+ }>;
72
+ /**
73
+ * `xxd` over words already split: the declaration's parse and handler.
74
+ *
75
+ * @param args - The words after `xxd`.
76
+ * @returns The dump, or the refusal of a bad line.
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * await builtin_xxd(['-l', '16', 'a.txt']);
81
+ * ```
82
+ */
15
83
  export declare function builtin_xxd(args: string[]): Promise<CommandEnvelope>;
16
- /** `strings [-n MIN] [-l LIMIT] <path>` */
84
+ /**
85
+ * Dumps a file's bytes in hex.
86
+ *
87
+ * @param path - The CFS path.
88
+ * @param start - Where to start; absent for the beginning.
89
+ * @param span - How many bytes to show; absent for the default.
90
+ * @returns The dump and how much it showed, or why the file cannot be read.
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * await xxd_run('a.txt', 0, 16);
95
+ * ```
96
+ */
97
+ export declare function xxd_run(path: string, start: number | undefined, span: number | undefined): Promise<CommandEnvelope>;
98
+ /**
99
+ * `strings [-n MIN] [-l LIMIT] <path>`: the declaration.
100
+ *
101
+ * @example
102
+ * ```ts
103
+ * commands_register({ declarations: [stringsCommand] });
104
+ * ```
105
+ */
106
+ export declare const stringsCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
107
+ readonly operands: readonly [{
108
+ readonly name: "path";
109
+ readonly kind: "cfsPath";
110
+ readonly glob: true;
111
+ readonly summary: "The file";
112
+ }];
113
+ readonly options: {
114
+ readonly min: {
115
+ readonly short: "n";
116
+ readonly summary: "Shortest run to show (default 4)";
117
+ readonly value: {
118
+ readonly name: "MIN";
119
+ readonly kind: "int";
120
+ readonly min: 0;
121
+ };
122
+ };
123
+ readonly limit: {
124
+ readonly short: "l";
125
+ readonly summary: `Most runs to show (default ${number})`;
126
+ readonly value: {
127
+ readonly name: "LIMIT";
128
+ readonly kind: "int";
129
+ readonly min: 0;
130
+ };
131
+ };
132
+ };
133
+ }>;
134
+ /**
135
+ * `strings` over words already split: the declaration's parse and handler.
136
+ *
137
+ * @param args - The words after `strings`.
138
+ * @returns The runs, or the refusal of a bad line.
139
+ *
140
+ * @example
141
+ * ```ts
142
+ * await builtin_strings(['-n', '8', 'a.bin']);
143
+ * ```
144
+ */
17
145
  export declare function builtin_strings(args: string[]): Promise<CommandEnvelope>;
18
- /** `sha256sum <path>...` */
146
+ /**
147
+ * Lists the printable runs in a file.
148
+ *
149
+ * @param path - The CFS path.
150
+ * @param shortest - The shortest run to show; absent for 4.
151
+ * @param most - The most runs to show; absent for the default.
152
+ * @returns The runs and how many there were, or why the file cannot be read.
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * await strings_run('a.bin', 8, 50);
157
+ * ```
158
+ */
159
+ export declare function strings_run(path: string, shortest: number | undefined, most: number | undefined): Promise<CommandEnvelope>;
160
+ /**
161
+ * `sha256sum <path>...`: the declaration.
162
+ *
163
+ * @example
164
+ * ```ts
165
+ * commands_register({ declarations: [sha256sumCommand] });
166
+ * ```
167
+ */
168
+ export declare const sha256sumCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
169
+ readonly operands: readonly [{
170
+ readonly name: "paths";
171
+ readonly kind: "cfsPath";
172
+ readonly glob: true;
173
+ readonly repeat: true;
174
+ readonly summary: "The files";
175
+ }];
176
+ }>;
177
+ /**
178
+ * `md5sum <path>...`: the declaration.
179
+ *
180
+ * @example
181
+ * ```ts
182
+ * commands_register({ declarations: [md5sumCommand] });
183
+ * ```
184
+ */
185
+ export declare const md5sumCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
186
+ readonly operands: readonly [{
187
+ readonly name: "paths";
188
+ readonly kind: "cfsPath";
189
+ readonly glob: true;
190
+ readonly repeat: true;
191
+ readonly summary: "The files";
192
+ }];
193
+ }>;
194
+ /**
195
+ * `sha256sum` over words already split: the declaration's parse and handler.
196
+ *
197
+ * @param args - The words after `sha256sum`.
198
+ * @returns The digests, or the refusal of a bad line.
199
+ *
200
+ * @example
201
+ * ```ts
202
+ * await builtin_sha256sum(['a.txt']);
203
+ * ```
204
+ */
19
205
  export declare function builtin_sha256sum(args: string[]): Promise<CommandEnvelope>;
20
- /** `md5sum <path>...` */
206
+ /**
207
+ * `md5sum` over words already split: the declaration's parse and handler.
208
+ *
209
+ * @param args - The words after `md5sum`.
210
+ * @returns The digests, or the refusal of a bad line.
211
+ *
212
+ * @example
213
+ * ```ts
214
+ * await builtin_md5sum(['a.txt']);
215
+ * ```
216
+ */
21
217
  export declare function builtin_md5sum(args: string[]): Promise<CommandEnvelope>;