@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
@@ -1,8 +1,90 @@
1
1
  import { type CommandEnvelope } from '@fnndsc/menu';
2
2
  /**
3
- * Handles store commands.
3
+ * `store <list | search <query> | install <plugin> | inspect | set <url> | reset>`: the declaration.
4
4
  *
5
- * @param args - command arguments.
6
- * @returns An envelope carrying the rendered store output.
5
+ * @example
6
+ * ```ts
7
+ * commands_register({ declarations: [storeCommand] }, 'backend');
8
+ * ```
9
+ */
10
+ export declare const storeCommand: import("../core/commandDeclaration.js").CommandDeclaration<{
11
+ readonly options: {
12
+ readonly store: {
13
+ readonly long: "store";
14
+ readonly summary: "Ask this peer store instead of the one set (store inspect names it)";
15
+ readonly value: {
16
+ readonly name: "url";
17
+ readonly kind: "word";
18
+ };
19
+ };
20
+ };
21
+ readonly subcommands: {
22
+ readonly list: {
23
+ readonly summary: "Browse every plugin in the peer store";
24
+ readonly options: {
25
+ readonly long: {
26
+ readonly short: "l";
27
+ readonly summary: "One plugin per line, with its details";
28
+ };
29
+ };
30
+ };
31
+ readonly search: {
32
+ readonly summary: "Search the peer store's plugins by name";
33
+ readonly operands: readonly [{
34
+ readonly name: "query";
35
+ readonly kind: "word";
36
+ readonly summary: "Part of a plugin name";
37
+ }];
38
+ readonly options: {
39
+ readonly long: {
40
+ readonly short: "l";
41
+ readonly summary: "One plugin per line, with its details";
42
+ };
43
+ };
44
+ };
45
+ readonly install: {
46
+ readonly summary: "Install a plugin from the peer store into this CUBE (an administrator: sudo store install …)";
47
+ readonly operands: readonly [{
48
+ readonly name: "plugin";
49
+ readonly kind: "word";
50
+ readonly summary: "The plugin: its name, name-vVersion, or its image";
51
+ }];
52
+ readonly options: {
53
+ readonly compute: {
54
+ readonly long: "compute";
55
+ readonly summary: "The compute resources it runs on, comma-separated";
56
+ readonly value: {
57
+ readonly name: "names";
58
+ readonly kind: "compute";
59
+ };
60
+ };
61
+ };
62
+ };
63
+ readonly inspect: {
64
+ readonly summary: "Name the peer store, and whether it is the default";
65
+ };
66
+ readonly set: {
67
+ readonly summary: "Set the peer store (kept in ~/.config/chell/settings.json)";
68
+ readonly operands: readonly [{
69
+ readonly name: "url";
70
+ readonly kind: "word";
71
+ readonly summary: "The store's API URL";
72
+ }];
73
+ };
74
+ readonly reset: {
75
+ readonly summary: `Set the peer store back to the default (${string})`;
76
+ };
77
+ };
78
+ }>;
79
+ /**
80
+ * `store` over words already split: the declaration's parse and handler.
81
+ *
82
+ * @param args - The words after `store`.
83
+ * @returns The answer, or the refusal of a bad line.
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * await builtin_store(['search', 'dicom']);
88
+ * ```
7
89
  */
8
90
  export declare function builtin_store(args: string[]): Promise<CommandEnvelope>;
@@ -1,9 +1,18 @@
1
1
  /**
2
- * @file Builtin store command.
3
- * Manages peer store interactions (list, search, install).
2
+ * @file `store`: the peer store, another ChRIS whose plugins this CUBE can
3
+ * install. Browse and search it, install a plugin from it, and say, set or
4
+ * reset which store it is.
5
+ *
6
+ * Declared in one record (`storeCommand`): the subcommands, their operands
7
+ * and options.
8
+ *
9
+ * Key components:
10
+ * - storeCommand: the declaration.
11
+ * - builtin_store: the declaration run over words already split.
12
+ *
13
+ * @module
4
14
  */
5
15
  import chalk from 'chalk';
6
- import { commandArgs_process } from './utils.js';
7
16
  import { store_listPlugins, store_searchPlugins } from '@fnndsc/chili/commands/store/list.js';
8
17
  import { grid_render, long_render } from '@fnndsc/chili/views/ls.js';
9
18
  import { spinner } from '../lib/spinner.js';
@@ -12,6 +21,8 @@ import { envelope_ok, envelope_error } from '@fnndsc/menu';
12
21
  import { DEFAULT_STORE_URL, storeUrl_get, storeUrl_isDefault, storeUrl_set, storeUrl_clear, storeConfig_persist, } from '../config/storeConfig.js';
13
22
  import { errorStack } from '@fnndsc/fond';
14
23
  import { exitCode_set } from '../core/handlerRun.js';
24
+ import { command_declare } from '../core/commandDeclaration.js';
25
+ import { declaredCommand_run } from '../core/commandParse.js';
15
26
  /**
16
27
  * Renders a store fetch failure as an error envelope, draining the reason the
17
28
  * fetch pushed onto the error stack.
@@ -26,83 +37,96 @@ function storeFailure_envelope(fallback) {
26
37
  return envelope_error('', undefined, `${chalk.red(detail)}\n`);
27
38
  }
28
39
  /**
29
- * Handles store commands.
40
+ * The store's plugins as a listing draws them: a grid, or one per line with `-l`.
30
41
  *
31
- * @param args - command arguments.
32
- * @returns An envelope carrying the rendered store output.
42
+ * @param items - The plugins.
43
+ * @param long - Whether to draw one per line.
44
+ * @returns The listing.
33
45
  */
34
- export async function builtin_store(args) {
35
- const parsed = commandArgs_process(args);
36
- const subcommand = parsed._[0];
37
- if (!subcommand) {
38
- return envelope_ok(`${chalk.red("Usage: store <list|search|install> ...")}\n`);
39
- }
40
- const storeOptions = {
41
- store: parsed.store
42
- };
46
+ function storeItems_render(items, long) {
47
+ return long ? `${long_render(items, { human: false })}\n` : `${grid_render(items)}\n`;
48
+ }
49
+ /** What a `store` line may hold. */
50
+ const STORE_GRAMMAR = {
51
+ options: {
52
+ store: { long: 'store', summary: 'Ask this peer store instead of the one set (store inspect names it)', value: { name: 'url', kind: 'word' } },
53
+ },
54
+ subcommands: {
55
+ list: { summary: "Browse every plugin in the peer store", options: { long: { short: 'l', summary: 'One plugin per line, with its details' } } },
56
+ search: {
57
+ summary: 'Search the peer store\'s plugins by name',
58
+ operands: [{ name: 'query', kind: 'word', summary: 'Part of a plugin name' }],
59
+ options: { long: { short: 'l', summary: 'One plugin per line, with its details' } },
60
+ },
61
+ install: {
62
+ summary: 'Install a plugin from the peer store into this CUBE (an administrator: sudo store install …)',
63
+ operands: [{ name: 'plugin', kind: 'word', summary: 'The plugin: its name, name-vVersion, or its image' }],
64
+ options: { compute: { long: 'compute', summary: 'The compute resources it runs on, comma-separated', value: { name: 'names', kind: 'compute' } } },
65
+ },
66
+ inspect: { summary: 'Name the peer store, and whether it is the default' },
67
+ set: { summary: 'Set the peer store (kept in ~/.config/chell/settings.json)', operands: [{ name: 'url', kind: 'word', summary: "The store's API URL" }] },
68
+ reset: { summary: `Set the peer store back to the default (${DEFAULT_STORE_URL})` },
69
+ },
70
+ };
71
+ /**
72
+ * Runs one `store` line.
73
+ *
74
+ * @param args - The line, parsed.
75
+ * @returns The answer, or the error.
76
+ */
77
+ async function store_run(args) {
78
+ const storeOptions = { store: args.options.store };
43
79
  try {
44
80
  spinner.start('Fetching from store...');
45
- if (subcommand === 'list') {
46
- const listResult = await store_listPlugins(storeOptions);
47
- spinner.stop();
48
- if (!listResult.ok) {
49
- return storeFailure_envelope('store list failed');
81
+ switch (args.subcommand) {
82
+ case 'list': {
83
+ const listResult = await store_listPlugins(storeOptions);
84
+ spinner.stop();
85
+ if (!listResult.ok)
86
+ return storeFailure_envelope('store list failed');
87
+ if (listResult.value.length === 0)
88
+ return envelope_ok('No plugins found in store.\n');
89
+ return envelope_ok(storeItems_render(listResult.value, args.options.long));
50
90
  }
51
- const items = listResult.value;
52
- if (items.length === 0) {
53
- return envelope_ok('No plugins found in store.\n');
91
+ case 'search': {
92
+ const query = args.operands.query;
93
+ const searchResult = await store_searchPlugins(query, storeOptions);
94
+ spinner.stop();
95
+ if (!searchResult.ok)
96
+ return storeFailure_envelope(`store search failed for '${query}'`);
97
+ if (searchResult.value.length === 0)
98
+ return envelope_ok(`No plugins found matching '${query}'.\n`);
99
+ return envelope_ok(storeItems_render(searchResult.value, args.options.long));
54
100
  }
55
- // Use grid render by default, or long render if -l flag.
56
- return envelope_ok(parsed.l ? `${long_render(items, { human: !!parsed.h })}\n` : `${grid_render(items)}\n`);
57
- }
58
- else if (subcommand === 'search') {
59
- const query = parsed._[1];
60
- if (!query) {
101
+ case 'install': {
61
102
  spinner.stop();
62
- return envelope_ok(`${chalk.red("Usage: store search <query>")}\n`);
103
+ // The add is the plugin verb's, which reads its words as parsed.
104
+ const install = {
105
+ _: ['install', args.operands.plugin],
106
+ ...(args.options.compute !== undefined ? { compute: args.options.compute } : {}),
107
+ ...(args.options.store !== undefined ? { store: args.options.store } : {}),
108
+ };
109
+ return await plugin_addInteractive(install);
63
110
  }
64
- const searchResult = await store_searchPlugins(query, storeOptions);
65
- spinner.stop();
66
- if (!searchResult.ok) {
67
- return storeFailure_envelope(`store search failed for '${query}'`);
111
+ case 'inspect': {
112
+ spinner.stop();
113
+ const current = storeUrl_get();
114
+ const isDefault = storeUrl_isDefault();
115
+ return envelope_ok(`${chalk.bold('Peer store URL:')} ${chalk.blue(current)}${isDefault ? chalk.gray(' (default)') : chalk.yellow(' (custom)')}\n`);
68
116
  }
69
- const items = searchResult.value;
70
- if (items.length === 0) {
71
- return envelope_ok(`No plugins found matching '${query}'.\n`);
117
+ case 'set': {
118
+ spinner.stop();
119
+ storeUrl_set(args.operands.url);
120
+ await storeConfig_persist();
121
+ return envelope_ok(`${chalk.green(`Store URL set to: ${chalk.blue(args.operands.url)}`)}\n`);
72
122
  }
73
- return envelope_ok(parsed.l ? `${long_render(items, { human: !!parsed.h })}\n` : `${grid_render(items)}\n`);
74
- }
75
- else if (subcommand === 'install') {
76
- spinner.stop();
77
- const installParsed = { ...parsed, _: [parsed._[0], parsed._[1]] };
78
- return await plugin_addInteractive(installParsed);
79
- }
80
- else if (subcommand === 'inspect') {
81
- spinner.stop();
82
- const current = storeUrl_get();
83
- const isDefault = storeUrl_isDefault();
84
- return envelope_ok(`${chalk.bold('Peer store URL:')} ${chalk.blue(current)}${isDefault ? chalk.gray(' (default)') : chalk.yellow(' (custom)')}\n`);
85
- }
86
- else if (subcommand === 'set') {
87
- spinner.stop();
88
- const url = parsed._[1];
89
- if (!url) {
90
- exitCode_set(1);
91
- return envelope_error('', undefined, `${chalk.red('Usage: store set <url>')}\n`);
123
+ case 'reset': {
124
+ spinner.stop();
125
+ storeUrl_clear();
126
+ await storeConfig_persist();
127
+ return envelope_ok(`${chalk.green(`Store URL reset to default: ${chalk.blue(DEFAULT_STORE_URL)}`)}\n`);
92
128
  }
93
- storeUrl_set(url);
94
- await storeConfig_persist();
95
- return envelope_ok(`${chalk.green(`Store URL set to: ${chalk.blue(url)}`)}\n`);
96
- }
97
- else if (subcommand === 'reset') {
98
- spinner.stop();
99
- storeUrl_clear();
100
- await storeConfig_persist();
101
- return envelope_ok(`${chalk.green(`Store URL reset to default: ${chalk.blue(DEFAULT_STORE_URL)}`)}\n`);
102
129
  }
103
- spinner.stop();
104
- exitCode_set(1);
105
- return envelope_error('', undefined, `${chalk.red(`Unknown subcommand: ${subcommand}. Usage: store <list|search|install|inspect|set|reset>`)}\n`);
106
130
  }
107
131
  catch (e) {
108
132
  spinner.stop();
@@ -111,4 +135,47 @@ export async function builtin_store(args) {
111
135
  return envelope_error('', undefined, `${chalk.red(`Store error: ${msg}`)}\n`);
112
136
  }
113
137
  }
138
+ /**
139
+ * `store <list | search <query> | install <plugin> | inspect | set <url> | reset>`: the declaration.
140
+ *
141
+ * @example
142
+ * ```ts
143
+ * commands_register({ declarations: [storeCommand] }, 'backend');
144
+ * ```
145
+ */
146
+ export const storeCommand = command_declare({
147
+ name: 'store',
148
+ grammar: STORE_GRAMMAR,
149
+ help: {
150
+ summary: 'The peer store: browse and search its plugins, install one, say or set which store it is',
151
+ description: "The peer store is another ChRIS, by default cube.chrisproject.org, whose plugins this CUBE can install; it is not a resource of this CUBE, so the resource listing options do not apply. list and search browse it; install registers one of its plugins here, on the compute resources --compute names, and needs an administrator (sudo store install …); inspect names the store, set and reset change it.",
152
+ category: 'Resources',
153
+ examples: [
154
+ 'store list',
155
+ 'store search dicom',
156
+ 'store install pl-dcm2niix',
157
+ 'store install pl-dcm2niix-v1.2.3',
158
+ 'store install fnndsc/pl-dcm2niix:1.2.3',
159
+ 'store install pl-dcm2niix --compute moc',
160
+ 'store inspect',
161
+ 'store set https://my-cube.org/api/v1/',
162
+ 'store reset',
163
+ ],
164
+ },
165
+ handler: store_run,
166
+ });
167
+ /**
168
+ * `store` over words already split: the declaration's parse and handler.
169
+ *
170
+ * @param args - The words after `store`.
171
+ * @returns The answer, or the refusal of a bad line.
172
+ *
173
+ * @example
174
+ * ```ts
175
+ * await builtin_store(['search', 'dicom']);
176
+ * ```
177
+ */
178
+ export async function builtin_store(args) {
179
+ return declaredCommand_run(storeCommand, args);
180
+ }
114
181
  //# sourceMappingURL=store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/builtins/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/builtins/store.ts"],"names":[],"mappings":"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"}
@@ -2,21 +2,96 @@
2
2
  * @file apropos and man: find a command by a word, and read its page, in the
3
3
  * words every Unix hand already knows (builtins/helpSections.ts).
4
4
  *
5
+ * Declared in one record each (`aproposCommand`, `manCommand`): grammar,
6
+ * help and handler.
7
+ *
8
+ * Key components:
9
+ * - aproposCommand, manCommand: the declarations.
10
+ * - builtin_apropos, builtin_man: the declarations run over words already split.
11
+ * - apropos_run: the typed core of both.
12
+ *
13
+ * Typical usage:
14
+ * ```ts
15
+ * await builtin_apropos(['dicom']);
16
+ * await builtin_man(['-k', 'pull']);
17
+ * ```
18
+ *
5
19
  * @module
6
20
  */
7
21
  import { CommandEnvelope } from '@fnndsc/menu';
8
22
  /**
9
- * `apropos <word>`: every command, section and Shell topic whose name,
10
- * summary or description holds the word.
23
+ * `apropos <word…>`: the declaration.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * commands_register({ declarations: [aproposCommand] });
28
+ * ```
29
+ */
30
+ export declare const aproposCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
31
+ readonly operands: readonly [{
32
+ readonly name: "word";
33
+ readonly kind: "word";
34
+ readonly repeat: true;
35
+ readonly summary: "The word to look for; several words are one phrase";
36
+ }];
37
+ }>;
38
+ /**
39
+ * `man <topic…> | man -k <word…>`: the declaration.
11
40
  *
12
- * @param args - The word (several words are one phrase).
41
+ * @example
42
+ * ```ts
43
+ * commands_register({ declarations: [manCommand] });
44
+ * ```
45
+ */
46
+ export declare const manCommand: import("../../core/commandDeclaration.js").CommandDeclaration<{
47
+ readonly operands: readonly [{
48
+ readonly name: "topic";
49
+ readonly kind: "word";
50
+ readonly optional: true;
51
+ readonly repeat: true;
52
+ readonly summary: "A command, a section or a Shell topic; with -k, the word to look for";
53
+ }];
54
+ readonly options: {
55
+ readonly keyword: {
56
+ readonly short: "k";
57
+ readonly summary: "Look for the word, as apropos does";
58
+ };
59
+ };
60
+ }>;
61
+ /**
62
+ * Every command, section and Shell topic whose name, summary or description
63
+ * holds the words, as one phrase.
64
+ *
65
+ * @param words - The words to look for.
13
66
  * @returns The matches, or nothing appropriate (exit 1, as apropos does).
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * await apropos_run(['dicom']);
71
+ * ```
72
+ */
73
+ export declare function apropos_run(words: readonly string[]): Promise<CommandEnvelope>;
74
+ /**
75
+ * `apropos` over words already split: the declaration's parse and handler.
76
+ *
77
+ * @param args - The words after `apropos`.
78
+ * @returns The matches, or the refusal of a bad line.
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * await builtin_apropos(['dicom']);
83
+ * ```
14
84
  */
15
85
  export declare function builtin_apropos(args: string[]): Promise<CommandEnvelope>;
16
86
  /**
17
- * `man <command|Section|topic>` is `help` for it; `man -k <word>` is apropos.
87
+ * `man` over words already split: the declaration's parse and handler.
18
88
  *
19
89
  * @param args - The words after `man`.
20
- * @returns The page, or the matches.
90
+ * @returns The page, the matches, or the refusal of a bad line.
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * await builtin_man(['ls']);
95
+ * ```
21
96
  */
22
97
  export declare function builtin_man(args: string[]): Promise<CommandEnvelope>;
@@ -2,23 +2,99 @@
2
2
  * @file apropos and man: find a command by a word, and read its page, in the
3
3
  * words every Unix hand already knows (builtins/helpSections.ts).
4
4
  *
5
+ * Declared in one record each (`aproposCommand`, `manCommand`): grammar,
6
+ * help and handler.
7
+ *
8
+ * Key components:
9
+ * - aproposCommand, manCommand: the declarations.
10
+ * - builtin_apropos, builtin_man: the declarations run over words already split.
11
+ * - apropos_run: the typed core of both.
12
+ *
13
+ * Typical usage:
14
+ * ```ts
15
+ * await builtin_apropos(['dicom']);
16
+ * await builtin_man(['-k', 'pull']);
17
+ * ```
18
+ *
5
19
  * @module
6
20
  */
7
21
  import { envelope_ok, envelope_error } from '@fnndsc/menu';
8
22
  import { apropos_search } from '../helpSections.js';
9
- import { builtin_help, helpLookup_make } from '../help.js';
23
+ import { help_answer, helpLookup_make } from '../help.js';
10
24
  import { exitCode_set } from '../../core/handlerRun.js';
25
+ import { command_declare } from '../../core/commandDeclaration.js';
26
+ import { declaredCommand_run } from '../../core/commandParse.js';
27
+ /** What an `apropos` line may hold. */
28
+ const APROPOS_GRAMMAR = {
29
+ operands: [
30
+ { name: 'word', kind: 'word', repeat: true, summary: 'The word to look for; several words are one phrase' },
31
+ ],
32
+ };
33
+ /** What a `man` line may hold. */
34
+ const MAN_GRAMMAR = {
35
+ operands: [
36
+ { name: 'topic', kind: 'word', optional: true, repeat: true, summary: 'A command, a section or a Shell topic; with -k, the word to look for' },
37
+ ],
38
+ options: {
39
+ keyword: { short: 'k', summary: 'Look for the word, as apropos does' },
40
+ },
41
+ };
42
+ /**
43
+ * `apropos <word…>`: the declaration.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * commands_register({ declarations: [aproposCommand] });
48
+ * ```
49
+ */
50
+ export const aproposCommand = command_declare({
51
+ name: 'apropos',
52
+ grammar: APROPOS_GRAMMAR,
53
+ help: {
54
+ summary: 'Find commands by a word in their name, summary or description',
55
+ description: 'Search every command, section and Shell topic for a word, in any case. Nothing found is exit 1, as apropos is. man -k <word> is the same.',
56
+ category: 'General',
57
+ posix: { group: 'Shell', differs: 'as apropos: searches every command\'s line and description' },
58
+ examples: ['apropos dicom', 'apropos link', 'man -k pull'],
59
+ },
60
+ holds: [],
61
+ handler: async (args) => apropos_run(args.operands.word),
62
+ });
11
63
  /**
12
- * `apropos <word>`: every command, section and Shell topic whose name,
13
- * summary or description holds the word.
64
+ * `man <topic…> | man -k <word…>`: the declaration.
14
65
  *
15
- * @param args - The word (several words are one phrase).
66
+ * @example
67
+ * ```ts
68
+ * commands_register({ declarations: [manCommand] });
69
+ * ```
70
+ */
71
+ export const manCommand = command_declare({
72
+ name: 'man',
73
+ grammar: MAN_GRAMMAR,
74
+ help: {
75
+ summary: 'The page for a command, a section or a Shell topic (help, by its Unix name)',
76
+ description: 'man <name> is help <name>; man -k <word> is apropos <word>',
77
+ category: 'General',
78
+ posix: { group: 'Shell', differs: 'man <name> is help <name>; man -k is apropos' },
79
+ examples: ['man grep', 'man PACS', 'man -k dicom'],
80
+ },
81
+ holds: [],
82
+ handler: async (args) => man_run(args.operands.topic, args.options.keyword),
83
+ });
84
+ /**
85
+ * Every command, section and Shell topic whose name, summary or description
86
+ * holds the words, as one phrase.
87
+ *
88
+ * @param words - The words to look for.
16
89
  * @returns The matches, or nothing appropriate (exit 1, as apropos does).
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * await apropos_run(['dicom']);
94
+ * ```
17
95
  */
18
- export async function builtin_apropos(args) {
19
- const word = args.join(' ').trim();
20
- if (word === '')
21
- return envelope_error('', undefined, 'apropos: a word to look for: apropos <word>\n');
96
+ export async function apropos_run(words) {
97
+ const word = words.join(' ').trim();
22
98
  const hits = apropos_search(word, helpLookup_make());
23
99
  if (hits.length === 0) {
24
100
  exitCode_set(1);
@@ -27,16 +103,46 @@ export async function builtin_apropos(args) {
27
103
  return envelope_ok(`${hits.join('\n')}\n`);
28
104
  }
29
105
  /**
30
- * `man <command|Section|topic>` is `help` for it; `man -k <word>` is apropos.
106
+ * `man <topic>` is `help` for it; `man -k <word>` is apropos.
107
+ *
108
+ * @param topic - The words after the options.
109
+ * @param keyword - Whether -k asked for apropos.
110
+ * @returns The page, the matches, or a refusal for nothing asked.
111
+ */
112
+ async function man_run(topic, keyword) {
113
+ if (topic.length === 0) {
114
+ return envelope_error('', undefined, keyword
115
+ ? 'apropos: a word to look for: apropos <word>\n'
116
+ : 'man: what manual page do you want? man <command>, man <Section>, man -k <word>\n');
117
+ }
118
+ return keyword ? apropos_run(topic) : help_answer(topic);
119
+ }
120
+ /**
121
+ * `apropos` over words already split: the declaration's parse and handler.
122
+ *
123
+ * @param args - The words after `apropos`.
124
+ * @returns The matches, or the refusal of a bad line.
125
+ *
126
+ * @example
127
+ * ```ts
128
+ * await builtin_apropos(['dicom']);
129
+ * ```
130
+ */
131
+ export async function builtin_apropos(args) {
132
+ return declaredCommand_run(aproposCommand, args);
133
+ }
134
+ /**
135
+ * `man` over words already split: the declaration's parse and handler.
31
136
  *
32
137
  * @param args - The words after `man`.
33
- * @returns The page, or the matches.
138
+ * @returns The page, the matches, or the refusal of a bad line.
139
+ *
140
+ * @example
141
+ * ```ts
142
+ * await builtin_man(['ls']);
143
+ * ```
34
144
  */
35
145
  export async function builtin_man(args) {
36
- if (args[0] === '-k')
37
- return builtin_apropos(args.slice(1));
38
- if (args.length === 0)
39
- return envelope_error('', undefined, 'man: what manual page do you want? man <command>, man <Section>, man -k <word>\n');
40
- return builtin_help(args);
146
+ return declaredCommand_run(manCommand, args);
41
147
  }
42
148
  //# sourceMappingURL=apropos.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apropos.js","sourceRoot":"","sources":["../../../src/builtins/sys/apropos.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAmB,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAc;IAClD,MAAM,IAAI,GAAW,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,+CAA+C,CAAC,CAAC;IACvG,MAAM,IAAI,GAAa,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,YAAY,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,WAAW,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,kFAAkF,CAAC,CAAC;IAChJ,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"apropos.js","sourceRoot":"","sources":["../../../src/builtins/sys/apropos.ts"],"names":[],"mappings":"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"}