@fnndsc/brasa 0.1.0

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 (226) hide show
  1. package/dist/builtins/debug.d.ts +8 -0
  2. package/dist/builtins/debug.js +39 -0
  3. package/dist/builtins/debug.js.map +1 -0
  4. package/dist/builtins/executable.d.ts +22 -0
  5. package/dist/builtins/executable.js +115 -0
  6. package/dist/builtins/executable.js.map +1 -0
  7. package/dist/builtins/fs/cat.d.ts +16 -0
  8. package/dist/builtins/fs/cat.js +266 -0
  9. package/dist/builtins/fs/cat.js.map +1 -0
  10. package/dist/builtins/fs/cd.d.ts +42 -0
  11. package/dist/builtins/fs/cd.js +193 -0
  12. package/dist/builtins/fs/cd.js.map +1 -0
  13. package/dist/builtins/fs/cp.d.ts +10 -0
  14. package/dist/builtins/fs/cp.js +86 -0
  15. package/dist/builtins/fs/cp.js.map +1 -0
  16. package/dist/builtins/fs/download.d.ts +6 -0
  17. package/dist/builtins/fs/download.js +45 -0
  18. package/dist/builtins/fs/download.js.map +1 -0
  19. package/dist/builtins/fs/du.d.ts +58 -0
  20. package/dist/builtins/fs/du.js +210 -0
  21. package/dist/builtins/fs/du.js.map +1 -0
  22. package/dist/builtins/fs/edit.d.ts +7 -0
  23. package/dist/builtins/fs/edit.js +104 -0
  24. package/dist/builtins/fs/edit.js.map +1 -0
  25. package/dist/builtins/fs/ls.d.ts +8 -0
  26. package/dist/builtins/fs/ls.js +68 -0
  27. package/dist/builtins/fs/ls.js.map +1 -0
  28. package/dist/builtins/fs/mkdir.d.ts +9 -0
  29. package/dist/builtins/fs/mkdir.js +52 -0
  30. package/dist/builtins/fs/mkdir.js.map +1 -0
  31. package/dist/builtins/fs/mv.d.ts +10 -0
  32. package/dist/builtins/fs/mv.js +88 -0
  33. package/dist/builtins/fs/mv.js.map +1 -0
  34. package/dist/builtins/fs/pull.args.d.ts +22 -0
  35. package/dist/builtins/fs/pull.args.js +30 -0
  36. package/dist/builtins/fs/pull.args.js.map +1 -0
  37. package/dist/builtins/fs/pull.d.ts +26 -0
  38. package/dist/builtins/fs/pull.js +445 -0
  39. package/dist/builtins/fs/pull.js.map +1 -0
  40. package/dist/builtins/fs/pwd.d.ts +10 -0
  41. package/dist/builtins/fs/pwd.js +73 -0
  42. package/dist/builtins/fs/pwd.js.map +1 -0
  43. package/dist/builtins/fs/rm.d.ts +37 -0
  44. package/dist/builtins/fs/rm.js +197 -0
  45. package/dist/builtins/fs/rm.js.map +1 -0
  46. package/dist/builtins/fs/touch.d.ts +9 -0
  47. package/dist/builtins/fs/touch.js +76 -0
  48. package/dist/builtins/fs/touch.js.map +1 -0
  49. package/dist/builtins/fs/tree.d.ts +15 -0
  50. package/dist/builtins/fs/tree.js +84 -0
  51. package/dist/builtins/fs/tree.js.map +1 -0
  52. package/dist/builtins/fs/upload.d.ts +6 -0
  53. package/dist/builtins/fs/upload.js +48 -0
  54. package/dist/builtins/fs/upload.js.map +1 -0
  55. package/dist/builtins/help.d.ts +74 -0
  56. package/dist/builtins/help.js +1217 -0
  57. package/dist/builtins/help.js.map +1 -0
  58. package/dist/builtins/index.d.ts +45 -0
  59. package/dist/builtins/index.js +45 -0
  60. package/dist/builtins/index.js.map +1 -0
  61. package/dist/builtins/net/connect.d.ts +7 -0
  62. package/dist/builtins/net/connect.js +42 -0
  63. package/dist/builtins/net/connect.js.map +1 -0
  64. package/dist/builtins/net/cubepath.d.ts +18 -0
  65. package/dist/builtins/net/cubepath.js +102 -0
  66. package/dist/builtins/net/cubepath.js.map +1 -0
  67. package/dist/builtins/net/logout.d.ts +6 -0
  68. package/dist/builtins/net/logout.js +24 -0
  69. package/dist/builtins/net/logout.js.map +1 -0
  70. package/dist/builtins/net/pacs.d.ts +24 -0
  71. package/dist/builtins/net/pacs.js +121 -0
  72. package/dist/builtins/net/pacs.js.map +1 -0
  73. package/dist/builtins/net/pacsUtils.d.ts +85 -0
  74. package/dist/builtins/net/pacsUtils.js +184 -0
  75. package/dist/builtins/net/pacsUtils.js.map +1 -0
  76. package/dist/builtins/net/query.d.ts +60 -0
  77. package/dist/builtins/net/query.js +324 -0
  78. package/dist/builtins/net/query.js.map +1 -0
  79. package/dist/builtins/parametersofplugin.d.ts +13 -0
  80. package/dist/builtins/parametersofplugin.js +43 -0
  81. package/dist/builtins/parametersofplugin.js.map +1 -0
  82. package/dist/builtins/pluginExecute.d.ts +27 -0
  83. package/dist/builtins/pluginExecute.js +165 -0
  84. package/dist/builtins/pluginExecute.js.map +1 -0
  85. package/dist/builtins/proc.d.ts +6 -0
  86. package/dist/builtins/proc.helpers.d.ts +68 -0
  87. package/dist/builtins/proc.helpers.js +102 -0
  88. package/dist/builtins/proc.helpers.js.map +1 -0
  89. package/dist/builtins/proc.js +289 -0
  90. package/dist/builtins/proc.js.map +1 -0
  91. package/dist/builtins/res/compute.d.ts +6 -0
  92. package/dist/builtins/res/compute.js +55 -0
  93. package/dist/builtins/res/compute.js.map +1 -0
  94. package/dist/builtins/res/feed.d.ts +6 -0
  95. package/dist/builtins/res/feed.js +244 -0
  96. package/dist/builtins/res/feed.js.map +1 -0
  97. package/dist/builtins/res/feed.notes.d.ts +28 -0
  98. package/dist/builtins/res/feed.notes.js +24 -0
  99. package/dist/builtins/res/feed.notes.js.map +1 -0
  100. package/dist/builtins/res/files.d.ts +18 -0
  101. package/dist/builtins/res/files.js +85 -0
  102. package/dist/builtins/res/files.js.map +1 -0
  103. package/dist/builtins/res/group.d.ts +6 -0
  104. package/dist/builtins/res/group.js +54 -0
  105. package/dist/builtins/res/group.js.map +1 -0
  106. package/dist/builtins/res/pipeline.args.d.ts +22 -0
  107. package/dist/builtins/res/pipeline.args.js +28 -0
  108. package/dist/builtins/res/pipeline.args.js.map +1 -0
  109. package/dist/builtins/res/pipeline.d.ts +20 -0
  110. package/dist/builtins/res/pipeline.js +252 -0
  111. package/dist/builtins/res/pipeline.js.map +1 -0
  112. package/dist/builtins/res/plugin.d.ts +13 -0
  113. package/dist/builtins/res/plugin.js +140 -0
  114. package/dist/builtins/res/plugin.js.map +1 -0
  115. package/dist/builtins/res/plugininstance.d.ts +6 -0
  116. package/dist/builtins/res/plugininstance.js +53 -0
  117. package/dist/builtins/res/plugininstance.js.map +1 -0
  118. package/dist/builtins/res/pluginmeta.d.ts +6 -0
  119. package/dist/builtins/res/pluginmeta.js +53 -0
  120. package/dist/builtins/res/pluginmeta.js.map +1 -0
  121. package/dist/builtins/res/tag.d.ts +6 -0
  122. package/dist/builtins/res/tag.js +53 -0
  123. package/dist/builtins/res/tag.js.map +1 -0
  124. package/dist/builtins/res/workflow.d.ts +6 -0
  125. package/dist/builtins/res/workflow.js +53 -0
  126. package/dist/builtins/res/workflow.js.map +1 -0
  127. package/dist/builtins/store.d.ts +6 -0
  128. package/dist/builtins/store.js +107 -0
  129. package/dist/builtins/store.js.map +1 -0
  130. package/dist/builtins/sys/context.d.ts +6 -0
  131. package/dist/builtins/sys/context.js +50 -0
  132. package/dist/builtins/sys/context.js.map +1 -0
  133. package/dist/builtins/sys/physicalmode.d.ts +8 -0
  134. package/dist/builtins/sys/physicalmode.js +34 -0
  135. package/dist/builtins/sys/physicalmode.js.map +1 -0
  136. package/dist/builtins/sys/timing.d.ts +8 -0
  137. package/dist/builtins/sys/timing.js +34 -0
  138. package/dist/builtins/sys/timing.js.map +1 -0
  139. package/dist/builtins/sys/version.d.ts +15 -0
  140. package/dist/builtins/sys/version.js +23 -0
  141. package/dist/builtins/sys/version.js.map +1 -0
  142. package/dist/builtins/sys/whoami.d.ts +17 -0
  143. package/dist/builtins/sys/whoami.js +44 -0
  144. package/dist/builtins/sys/whoami.js.map +1 -0
  145. package/dist/builtins/utils.d.ts +55 -0
  146. package/dist/builtins/utils.js +145 -0
  147. package/dist/builtins/utils.js.map +1 -0
  148. package/dist/builtins/wildcard.d.ts +26 -0
  149. package/dist/builtins/wildcard.js +120 -0
  150. package/dist/builtins/wildcard.js.map +1 -0
  151. package/dist/command-keys.d.ts +8 -0
  152. package/dist/command-keys.js +32 -0
  153. package/dist/command-keys.js.map +1 -0
  154. package/dist/config/storeConfig.d.ts +57 -0
  155. package/dist/config/storeConfig.js +78 -0
  156. package/dist/config/storeConfig.js.map +1 -0
  157. package/dist/core/chiliDelegate.d.ts +21 -0
  158. package/dist/core/chiliDelegate.js +32 -0
  159. package/dist/core/chiliDelegate.js.map +1 -0
  160. package/dist/core/connect.d.ts +38 -0
  161. package/dist/core/connect.js +46 -0
  162. package/dist/core/connect.js.map +1 -0
  163. package/dist/core/dispatch.d.ts +95 -0
  164. package/dist/core/dispatch.js +618 -0
  165. package/dist/core/dispatch.js.map +1 -0
  166. package/dist/core/engine.d.ts +91 -0
  167. package/dist/core/engine.js +222 -0
  168. package/dist/core/engine.js.map +1 -0
  169. package/dist/core/preprocess.d.ts +46 -0
  170. package/dist/core/preprocess.js +146 -0
  171. package/dist/core/preprocess.js.map +1 -0
  172. package/dist/core/progress.d.ts +50 -0
  173. package/dist/core/progress.js +21 -0
  174. package/dist/core/progress.js.map +1 -0
  175. package/dist/core/promptContext.d.ts +49 -0
  176. package/dist/core/promptContext.js +39 -0
  177. package/dist/core/promptContext.js.map +1 -0
  178. package/dist/core/question.d.ts +27 -0
  179. package/dist/core/question.js +33 -0
  180. package/dist/core/question.js.map +1 -0
  181. package/dist/core/sink.d.ts +207 -0
  182. package/dist/core/sink.js +329 -0
  183. package/dist/core/sink.js.map +1 -0
  184. package/dist/core/surface.d.ts +172 -0
  185. package/dist/core/surface.js +105 -0
  186. package/dist/core/surface.js.map +1 -0
  187. package/dist/core/version.d.ts +20 -0
  188. package/dist/core/version.js +82 -0
  189. package/dist/core/version.js.map +1 -0
  190. package/dist/index.d.ts +31 -0
  191. package/dist/index.js +32 -0
  192. package/dist/index.js.map +1 -0
  193. package/dist/lib/completer/index.d.ts +15 -0
  194. package/dist/lib/completer/index.js +212 -0
  195. package/dist/lib/completer/index.js.map +1 -0
  196. package/dist/lib/completer/pathComplete.helpers.d.ts +22 -0
  197. package/dist/lib/completer/pathComplete.helpers.js +49 -0
  198. package/dist/lib/completer/pathComplete.helpers.js.map +1 -0
  199. package/dist/lib/parser.d.ts +13 -0
  200. package/dist/lib/parser.js +52 -0
  201. package/dist/lib/parser.js.map +1 -0
  202. package/dist/lib/pipe.d.ts +11 -0
  203. package/dist/lib/pipe.js +90 -0
  204. package/dist/lib/pipe.js.map +1 -0
  205. package/dist/lib/prefetch.d.ts +25 -0
  206. package/dist/lib/prefetch.js +64 -0
  207. package/dist/lib/prefetch.js.map +1 -0
  208. package/dist/lib/semicolonParser.d.ts +22 -0
  209. package/dist/lib/semicolonParser.js +53 -0
  210. package/dist/lib/semicolonParser.js.map +1 -0
  211. package/dist/lib/spinner.d.ts +23 -0
  212. package/dist/lib/spinner.js +71 -0
  213. package/dist/lib/spinner.js.map +1 -0
  214. package/dist/lib/vfs/providers/static.d.ts +65 -0
  215. package/dist/lib/vfs/providers/static.js +164 -0
  216. package/dist/lib/vfs/providers/static.js.map +1 -0
  217. package/dist/lib/vfs/providers/static_content.d.ts +27 -0
  218. package/dist/lib/vfs/providers/static_content.js +180 -0
  219. package/dist/lib/vfs/providers/static_content.js.map +1 -0
  220. package/dist/lib/vfs/vfs.d.ts +59 -0
  221. package/dist/lib/vfs/vfs.js +202 -0
  222. package/dist/lib/vfs/vfs.js.map +1 -0
  223. package/dist/session/index.d.ts +76 -0
  224. package/dist/session/index.js +120 -0
  225. package/dist/session/index.js.map +1 -0
  226. package/package.json +58 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @file Builtin physicalmode command.
3
+ * Toggles physical filesystem mode, reported as a command envelope.
4
+ */
5
+ import chalk from 'chalk';
6
+ import { envelope_ok, envelope_error } from '@fnndsc/cumin';
7
+ import { session } from '../../session/index.js';
8
+ /**
9
+ * Toggles or displays physical filesystem mode.
10
+ *
11
+ * @param args - Command line arguments: 'on', 'off', or empty to display status.
12
+ * @returns An envelope describing the (possibly updated) physical mode state.
13
+ */
14
+ export async function builtin_physicalmode(args) {
15
+ const subcommand = args[0];
16
+ if (!subcommand) {
17
+ const enabled = session.physicalMode_get();
18
+ const status = enabled ? 'enabled' : 'disabled';
19
+ const detail = enabled
20
+ ? chalk.gray(' Paths are used directly without logical-to-physical mapping.')
21
+ : chalk.gray(' Paths are resolved through logical-to-physical mapping.');
22
+ return envelope_ok(`Physical filesystem mode: ${chalk.yellow(status)}\n${detail}\n${chalk.gray('\nUsage: physicalmode [on|off]')}\n`, { kind: 'sys.physicalMode', data: { enabled } });
23
+ }
24
+ if (subcommand === 'on') {
25
+ session.physicalMode_set(true);
26
+ return envelope_ok(`${chalk.yellow('[!] Physical filesystem mode enabled')}\n${chalk.gray(' Paths will be used directly without logical-to-physical mapping.')}\n`, { kind: 'sys.physicalMode', data: { enabled: true } });
27
+ }
28
+ if (subcommand === 'off') {
29
+ session.physicalMode_set(false);
30
+ return envelope_ok(`${chalk.green('[+] Physical filesystem mode disabled')}\n${chalk.gray(' Paths will be resolved through logical-to-physical mapping.')}\n`, { kind: 'sys.physicalMode', data: { enabled: false } });
31
+ }
32
+ return envelope_error(`${chalk.red(`Unknown argument: ${subcommand}`)}\n${chalk.gray('Usage: physicalmode [on|off]')}\n`);
33
+ }
34
+ //# sourceMappingURL=physicalmode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physicalmode.js","sourceRoot":"","sources":["../../../src/builtins/sys/physicalmode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAmB,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAc;IACvD,MAAM,UAAU,GAAuB,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,OAAO,GAAY,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,MAAM,GAAW,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QACxD,MAAM,MAAM,GAAW,OAAO;YAC5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC;YAC9E,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC5E,OAAO,WAAW,CAChB,6BAA6B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,EACjH,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,WAAW,CAChB,GAAG,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,IAAI,EAClJ,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CACtD,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,WAAW,CAChB,GAAG,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,IAAI,EAC7I,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CACnB,GAAG,KAAK,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CACnG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { CommandEnvelope } from '@fnndsc/cumin';
2
+ /**
3
+ * Toggles or displays command timing mode.
4
+ *
5
+ * @param args - Command line arguments: 'on', 'off', or empty to display status.
6
+ * @returns An envelope describing the (possibly updated) timing state.
7
+ */
8
+ export declare function builtin_timing(args: string[]): Promise<CommandEnvelope>;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @file Builtin timing command.
3
+ * Toggles execution timing, reported as a command envelope.
4
+ */
5
+ import chalk from 'chalk';
6
+ import { envelope_ok, envelope_error } from '@fnndsc/cumin';
7
+ import { session } from '../../session/index.js';
8
+ /**
9
+ * Toggles or displays command timing mode.
10
+ *
11
+ * @param args - Command line arguments: 'on', 'off', or empty to display status.
12
+ * @returns An envelope describing the (possibly updated) timing state.
13
+ */
14
+ export async function builtin_timing(args) {
15
+ const subcommand = args[0];
16
+ if (!subcommand) {
17
+ const enabled = session.timingEnabled_get();
18
+ const status = enabled ? 'enabled' : 'disabled';
19
+ const detail = enabled
20
+ ? chalk.gray(' Execution times will be displayed after each command.')
21
+ : chalk.gray(' Execution times are hidden.');
22
+ return envelope_ok(`Command timing: ${chalk.yellow(status)}\n${detail}\n${chalk.gray('\nUsage: timing [on|off]')}\n`, { kind: 'sys.timing', data: { enabled } });
23
+ }
24
+ if (subcommand === 'on') {
25
+ session.timingEnabled_set(true);
26
+ return envelope_ok(`${chalk.green('[+] Command timing enabled')}\n${chalk.gray(' Execution times will be displayed after each command.')}\n`, { kind: 'sys.timing', data: { enabled: true } });
27
+ }
28
+ if (subcommand === 'off') {
29
+ session.timingEnabled_set(false);
30
+ return envelope_ok(`${chalk.gray('[-] Command timing disabled')}\n${chalk.gray(' Execution times will no longer be displayed.')}\n`, { kind: 'sys.timing', data: { enabled: false } });
31
+ }
32
+ return envelope_error(`${chalk.red(`Unknown argument: ${subcommand}`)}\n${chalk.gray('Usage: timing [on|off]')}\n`);
33
+ }
34
+ //# sourceMappingURL=timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.js","sourceRoot":"","sources":["../../../src/builtins/sys/timing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAmB,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,MAAM,UAAU,GAAuB,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,OAAO,GAAY,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACrD,MAAM,MAAM,GAAW,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QACxD,MAAM,MAAM,GAAW,OAAO;YAC5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC;YACvE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAChD,OAAO,WAAW,CAChB,mBAAmB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EACjG,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAC1C,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,WAAW,CAChB,GAAG,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,IAAI,EAC5H,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,WAAW,CAChB,GAAG,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,IAAI,EACnH,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CACjD,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CACnB,GAAG,KAAK,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAC7F,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @file Builtin version.
3
+ * Reports the chell stack versions (chell plus the chili/salsa/cumin layers) as
4
+ * a command envelope — the in-shell counterpart of `chell --version`.
5
+ */
6
+ import { CommandEnvelope } from '@fnndsc/cumin';
7
+ /**
8
+ * Reports the version of chell and the sandwich layers it runs with — the same
9
+ * report as `chell --version`, available from inside the shell.
10
+ *
11
+ * @param _args - Unused.
12
+ * @returns An envelope carrying the multi-line version report and a typed model
13
+ * of each layer's version.
14
+ */
15
+ export declare function builtin_version(_args: string[]): Promise<CommandEnvelope>;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @file Builtin version.
3
+ * Reports the chell stack versions (chell plus the chili/salsa/cumin layers) as
4
+ * a command envelope — the in-shell counterpart of `chell --version`.
5
+ */
6
+ import { envelope_ok } from '@fnndsc/cumin';
7
+ import { versionReport_build, versions_get } from '../../core/version.js';
8
+ /**
9
+ * Reports the version of chell and the sandwich layers it runs with — the same
10
+ * report as `chell --version`, available from inside the shell.
11
+ *
12
+ * @param _args - Unused.
13
+ * @returns An envelope carrying the multi-line version report and a typed model
14
+ * of each layer's version.
15
+ */
16
+ export async function builtin_version(_args) {
17
+ const versions = versions_get();
18
+ return envelope_ok(`${versionReport_build()}\n`, {
19
+ kind: 'sys.version',
20
+ data: versions,
21
+ });
22
+ }
23
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/builtins/sys/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAmB,WAAW,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAE9F;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAe;IACnD,MAAM,QAAQ,GAAkB,YAAY,EAAE,CAAC;IAC/C,OAAO,WAAW,CAAC,GAAG,mBAAmB,EAAE,IAAI,EAAE;QAC/C,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { CommandEnvelope } from '@fnndsc/cumin';
2
+ /**
3
+ * Reports the current authenticated ChRIS username.
4
+ *
5
+ * @param _args - Unused.
6
+ * @returns An envelope carrying the username, or an error envelope with a
7
+ * not-connected notice when no user is authenticated.
8
+ */
9
+ export declare function builtin_whoami(_args: string[]): Promise<CommandEnvelope>;
10
+ /**
11
+ * Reports the current CUBE URI.
12
+ *
13
+ * @param _args - Unused.
14
+ * @returns An envelope carrying the CUBE URL, or an error envelope with a
15
+ * not-connected notice when no connection exists.
16
+ */
17
+ export declare function builtin_whereami(_args: string[]): Promise<CommandEnvelope>;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @file Builtins whoami and whereami.
3
+ * Quick single-line identity queries, reported as command envelopes.
4
+ */
5
+ import chalk from 'chalk';
6
+ import { context_getSingle } from '@fnndsc/salsa';
7
+ import { envelope_ok, envelope_error } from '@fnndsc/cumin';
8
+ /**
9
+ * Reports the current authenticated ChRIS username.
10
+ *
11
+ * @param _args - Unused.
12
+ * @returns An envelope carrying the username, or an error envelope with a
13
+ * not-connected notice when no user is authenticated.
14
+ */
15
+ export async function builtin_whoami(_args) {
16
+ const context = await context_getSingle();
17
+ if (context.user) {
18
+ return envelope_ok(`${chalk.cyan(context.user)}\n`, {
19
+ kind: 'session.identity',
20
+ data: { user: context.user },
21
+ });
22
+ }
23
+ process.exitCode = 1;
24
+ return envelope_error(`${chalk.gray('(not connected)')}\n`);
25
+ }
26
+ /**
27
+ * Reports the current CUBE URI.
28
+ *
29
+ * @param _args - Unused.
30
+ * @returns An envelope carrying the CUBE URL, or an error envelope with a
31
+ * not-connected notice when no connection exists.
32
+ */
33
+ export async function builtin_whereami(_args) {
34
+ const context = await context_getSingle();
35
+ if (context.URL) {
36
+ return envelope_ok(`${chalk.blue(context.URL)}\n`, {
37
+ kind: 'session.cube',
38
+ data: { url: context.URL },
39
+ });
40
+ }
41
+ process.exitCode = 1;
42
+ return envelope_error(`${chalk.gray('(not connected)')}\n`);
43
+ }
44
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/builtins/sys/whoami.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAkC,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE5F;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAe;IAClD,MAAM,OAAO,GAAkB,MAAM,iBAAiB,EAAE,CAAC;IACzD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,WAAW,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;YAClD,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,OAAO,cAAc,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAe;IACpD,MAAM,OAAO,GAAkB,MAAM,iBAAiB,EAAE,CAAC;IACzD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;YACjD,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;SAC3B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,OAAO,cAAc,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Structure for parsed command line arguments.
3
+ */
4
+ export interface ParsedArgs {
5
+ _: string[];
6
+ [key: string]: string | boolean | string[];
7
+ }
8
+ /**
9
+ * Parses raw argument strings into a structured object.
10
+ * Supports `--` as an end-of-options marker (everything after is treated as positional args).
11
+ */
12
+ export declare function commandArgs_process(args: string[]): ParsedArgs;
13
+ /**
14
+ * Context required for path resolution.
15
+ */
16
+ export interface PathContext {
17
+ user: string | null;
18
+ cwd: string;
19
+ }
20
+ /**
21
+ * Resolves a path argument, handling `~` expansion and relative paths.
22
+ * Pure function version that takes context as argument.
23
+ *
24
+ * @param inputPath - The path to resolve.
25
+ * @param context - User and CWD context.
26
+ * @returns The absolute path.
27
+ */
28
+ export declare function path_resolvePure(inputPath: string, context: PathContext): string;
29
+ /**
30
+ * Resolves a path argument, handling `~` expansion and relative paths.
31
+ * @param inputPath - The path to resolve.
32
+ * @returns The absolute path.
33
+ */
34
+ export declare function path_resolve(inputPath: string): Promise<string>;
35
+ /**
36
+ * Resolves links in a path without using PathMapper (for physical mode).
37
+ * Checks each component to see if it's a link and follows it.
38
+ *
39
+ * @param targetPath - The path to resolve.
40
+ * @returns The resolved path with links followed.
41
+ */
42
+ export declare function path_resolveLinks(targetPath: string): Promise<string>;
43
+ /**
44
+ * Strips the function name padding prefix from an error message if debug mode is disabled.
45
+ *
46
+ * @param message - The raw/enhanced error message from the ErrorStack.
47
+ * @returns The cleaned or original error message based on the debug configuration.
48
+ *
49
+ * @example
50
+ * ```
51
+ * const cleaned = error_stripDebugPrefix("[PacsVfsProvider.list ] | ls: error");
52
+ * // cleaned will be "ls: error" if debug mode is disabled
53
+ * ```
54
+ */
55
+ export declare function error_stripDebugPrefix(message: string): string;
@@ -0,0 +1,145 @@
1
+ /**
2
+ * @file Builtin Utilities
3
+ * Pure functions for argument parsing and path resolution logic.
4
+ */
5
+ import * as path from 'path';
6
+ import { context_getSingle } from '@fnndsc/salsa';
7
+ import { session } from '../session/index.js';
8
+ /**
9
+ * Parses raw argument strings into a structured object.
10
+ * Supports `--` as an end-of-options marker (everything after is treated as positional args).
11
+ */
12
+ export function commandArgs_process(args) {
13
+ const result = { _: [] };
14
+ let endOfOptions = false;
15
+ for (let i = 0; i < args.length; i++) {
16
+ const arg = args[i];
17
+ // Check for -- (end of options marker)
18
+ if (arg === '--') {
19
+ endOfOptions = true;
20
+ continue; // Skip the -- itself
21
+ }
22
+ // After --, everything is a positional argument
23
+ if (endOfOptions) {
24
+ result._.push(arg);
25
+ continue;
26
+ }
27
+ if (arg.startsWith('--')) {
28
+ const key = arg.substring(2);
29
+ if (args[i + 1] && !args[i + 1].startsWith('-')) {
30
+ result[key] = args[i + 1];
31
+ i++;
32
+ }
33
+ else {
34
+ result[key] = true;
35
+ }
36
+ }
37
+ else if (arg.startsWith('-') && arg.length > 1) {
38
+ const flags = arg.substring(1).split('');
39
+ flags.forEach(flag => result[flag] = true);
40
+ }
41
+ else {
42
+ result._.push(arg);
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+ /**
48
+ * Resolves a path argument, handling `~` expansion and relative paths.
49
+ * Pure function version that takes context as argument.
50
+ *
51
+ * @param inputPath - The path to resolve.
52
+ * @param context - User and CWD context.
53
+ * @returns The absolute path.
54
+ */
55
+ export function path_resolvePure(inputPath, context) {
56
+ let resolved = inputPath;
57
+ const { user, cwd } = context;
58
+ if (inputPath.startsWith('~')) {
59
+ const home = user ? `/home/${user}` : '/';
60
+ if (inputPath === '~' || inputPath === '~/') {
61
+ resolved = home;
62
+ }
63
+ else if (inputPath.startsWith('~/')) {
64
+ resolved = path.posix.join(home, inputPath.substring(2));
65
+ }
66
+ }
67
+ if (!resolved.startsWith('/')) {
68
+ resolved = path.posix.resolve(cwd, resolved);
69
+ }
70
+ // Normalize
71
+ if (resolved.length > 1 && resolved.endsWith('/')) {
72
+ resolved = resolved.slice(0, -1);
73
+ }
74
+ return resolved;
75
+ }
76
+ /**
77
+ * Resolves a path argument, handling `~` expansion and relative paths.
78
+ * @param inputPath - The path to resolve.
79
+ * @returns The absolute path.
80
+ */
81
+ export async function path_resolve(inputPath) {
82
+ const context = await context_getSingle();
83
+ const user = context.user;
84
+ const cwd = await session.getCWD();
85
+ return path_resolvePure(inputPath, { user, cwd });
86
+ }
87
+ /**
88
+ * Resolves links in a path without using PathMapper (for physical mode).
89
+ * Checks each component to see if it's a link and follows it.
90
+ *
91
+ * @param targetPath - The path to resolve.
92
+ * @returns The resolved path with links followed.
93
+ */
94
+ export async function path_resolveLinks(targetPath) {
95
+ // We need to dynamically import files_list to avoid circular dependency
96
+ // because builtins/fs/ls.ts imports path_resolve from here
97
+ const { files_list } = await import('@fnndsc/chili/commands/fs/ls.js');
98
+ const components = targetPath.split('/').filter(c => c);
99
+ let currentPath = '';
100
+ for (const component of components) {
101
+ const parentPath = currentPath || '/';
102
+ currentPath = `${currentPath}/${component}`;
103
+ try {
104
+ // List parent directory to check if component is a link
105
+ const items = await files_list({ path: parentPath }, parentPath);
106
+ // Find the component in the listing
107
+ const item = items.find((i) => i.name === component);
108
+ if (item && item.type === 'link' && item.target) {
109
+ // Component is a link - resolve it
110
+ if (item.target.startsWith('/')) {
111
+ // Absolute link target
112
+ currentPath = item.target;
113
+ }
114
+ else {
115
+ // Relative link target
116
+ currentPath = `${parentPath}/${item.target}`.replace('//', '/');
117
+ }
118
+ }
119
+ }
120
+ catch (_error) {
121
+ // If we can't list the directory, continue with the current path
122
+ continue;
123
+ }
124
+ }
125
+ return currentPath || '/';
126
+ }
127
+ /**
128
+ * Strips the function name padding prefix from an error message if debug mode is disabled.
129
+ *
130
+ * @param message - The raw/enhanced error message from the ErrorStack.
131
+ * @returns The cleaned or original error message based on the debug configuration.
132
+ *
133
+ * @example
134
+ * ```
135
+ * const cleaned = error_stripDebugPrefix("[PacsVfsProvider.list ] | ls: error");
136
+ * // cleaned will be "ls: error" if debug mode is disabled
137
+ * ```
138
+ */
139
+ export function error_stripDebugPrefix(message) {
140
+ if (session.connection?.config?.debug) {
141
+ return message;
142
+ }
143
+ return message.replace(/^\[[^\]]+\]\s*\|\s*/, '');
144
+ }
145
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/builtins/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Result } from '@fnndsc/cumin';
2
+ /**
3
+ * Checks if a string contains wildcard characters.
4
+ *
5
+ * @param arg - The argument to check.
6
+ * @returns True if the argument contains wildcards.
7
+ */
8
+ export declare function string_checkHasWildcard(arg: string): boolean;
9
+ /**
10
+ * Expands a wildcard pattern against the current directory.
11
+ *
12
+ * @param pattern - The glob pattern (e.g., "*.ts", "test*.json").
13
+ * @returns A Promise resolving to Result<string[]>.
14
+ * Ok([]) = no matches (not an error).
15
+ * Err(...) = couldn't expand (API failure, permission denied, etc.).
16
+ */
17
+ export declare function wildcard_expand(pattern: string): Promise<Result<string[]>>;
18
+ /**
19
+ * Expands all wildcards in an argument list.
20
+ *
21
+ * @param args - The argument list potentially containing wildcards.
22
+ * @returns A Promise resolving to Result<string[]>.
23
+ * On error expanding any pattern, returns the error.
24
+ * Empty matches return the original pattern.
25
+ */
26
+ export declare function wildcards_expandAll(args: string[]): Promise<Result<string[]>>;
@@ -0,0 +1,120 @@
1
+ /**
2
+ * @file Wildcard expansion for shell commands.
3
+ *
4
+ * Provides glob pattern matching against the ChRIS filesystem.
5
+ *
6
+ * @module
7
+ */
8
+ import { minimatch } from 'minimatch';
9
+ import { session } from '../session/index.js';
10
+ import { vfsDispatcher } from '@fnndsc/salsa';
11
+ import { listCache_get, Ok, Err, errorStack } from '@fnndsc/cumin';
12
+ /**
13
+ * Checks if a string contains wildcard characters.
14
+ *
15
+ * @param arg - The argument to check.
16
+ * @returns True if the argument contains wildcards.
17
+ */
18
+ export function string_checkHasWildcard(arg) {
19
+ return /[*?[\]]/.test(arg);
20
+ }
21
+ /**
22
+ * Expands a wildcard pattern against the current directory.
23
+ *
24
+ * @param pattern - The glob pattern (e.g., "*.ts", "test*.json").
25
+ * @returns A Promise resolving to Result<string[]>.
26
+ * Ok([]) = no matches (not an error).
27
+ * Err(...) = couldn't expand (API failure, permission denied, etc.).
28
+ */
29
+ export async function wildcard_expand(pattern) {
30
+ // If no wildcard, return as-is
31
+ if (!string_checkHasWildcard(pattern)) {
32
+ return Ok([pattern]);
33
+ }
34
+ try {
35
+ // Get current directory
36
+ const cwd = await session.getCWD();
37
+ // Handle patterns with directory components (e.g., "data/*.txt")
38
+ let searchDir = cwd;
39
+ let matchPattern = pattern;
40
+ // Check if pattern has directory separator
41
+ if (pattern.includes('/')) {
42
+ const parts = pattern.split('/');
43
+ const lastPart = parts.pop() || '*';
44
+ const dirPart = parts.join('/');
45
+ // Resolve directory part (could be relative)
46
+ if (dirPart.startsWith('/')) {
47
+ searchDir = dirPart;
48
+ }
49
+ else if (dirPart === '.') {
50
+ searchDir = cwd;
51
+ }
52
+ else {
53
+ // Relative path - append to cwd
54
+ searchDir = `${cwd}/${dirPart}`.replace(/\/+/g, '/');
55
+ }
56
+ matchPattern = lastPart;
57
+ }
58
+ // List files in the directory (check cache first)
59
+ let items = [];
60
+ const listCache = listCache_get();
61
+ const cached = listCache.cache_get(searchDir);
62
+ if (cached) {
63
+ items = cached.data;
64
+ }
65
+ else {
66
+ const vfsResult = await vfsDispatcher.list(searchDir);
67
+ if (vfsResult.ok) {
68
+ items = vfsResult.value;
69
+ listCache.cache_set(searchDir, items);
70
+ }
71
+ else {
72
+ return Err();
73
+ }
74
+ }
75
+ // Filter items by pattern
76
+ const matches = items
77
+ .filter((item) => minimatch(item.name, matchPattern))
78
+ .map((item) => {
79
+ // Return full path if we searched a different directory
80
+ if (searchDir !== cwd) {
81
+ return `${searchDir}/${item.name}`.replace(/\/+/g, '/');
82
+ }
83
+ return item.name;
84
+ });
85
+ // Ok([]) for no matches (not an error)
86
+ return Ok(matches);
87
+ }
88
+ catch (error) {
89
+ const errorMsg = error instanceof Error ? error.message : String(error);
90
+ errorStack.stack_push("error", `Failed to expand wildcard '${pattern}': ${errorMsg}`);
91
+ return Err();
92
+ }
93
+ }
94
+ /**
95
+ * Expands all wildcards in an argument list.
96
+ *
97
+ * @param args - The argument list potentially containing wildcards.
98
+ * @returns A Promise resolving to Result<string[]>.
99
+ * On error expanding any pattern, returns the error.
100
+ * Empty matches return the original pattern.
101
+ */
102
+ export async function wildcards_expandAll(args) {
103
+ const expanded = [];
104
+ for (const arg of args) {
105
+ const result = await wildcard_expand(arg);
106
+ if (!result.ok) {
107
+ // Propagate error up
108
+ return result;
109
+ }
110
+ // If no matches, use original pattern (let command handle "not found")
111
+ if (result.value.length === 0) {
112
+ expanded.push(arg);
113
+ }
114
+ else {
115
+ expanded.push(...result.value);
116
+ }
117
+ }
118
+ return Ok(expanded);
119
+ }
120
+ //# sourceMappingURL=wildcard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wildcard.js","sourceRoot":"","sources":["../../src/builtins/wildcard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file Canonical list of all registered command keys in COMMAND_HANDLERS.
3
+ *
4
+ * Kept separate from chell.ts so tests can verify wiring without importing
5
+ * the full application entry point and all its transitive dependencies.
6
+ * Must stay in sync with COMMAND_HANDLERS in chell.ts.
7
+ */
8
+ export declare const COMMAND_HANDLERS_KEYS: string[];
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @file Canonical list of all registered command keys in COMMAND_HANDLERS.
3
+ *
4
+ * Kept separate from chell.ts so tests can verify wiring without importing
5
+ * the full application entry point and all its transitive dependencies.
6
+ * Must stay in sync with COMMAND_HANDLERS in chell.ts.
7
+ */
8
+ export const COMMAND_HANDLERS_KEYS = [
9
+ // filesystem
10
+ 'cd', 'pwd', 'ls', 'cat', 'cp', 'mv', 'rm', 'touch', 'mkdir', 'tree', 'du',
11
+ 'upload', 'download', 'pull',
12
+ // net
13
+ 'connect', 'logout', 'pacs', 'query', 'cubepath',
14
+ // sys
15
+ 'context', 'physicalmode', 'prompt', 'timing', 'whoami', 'whereami', 'debug', 'help', 'proc',
16
+ // resources — canonical + aliases
17
+ 'plugin', 'plugins',
18
+ 'feed', 'feeds',
19
+ 'pipeline', 'pipelines',
20
+ 'compute', 'computes',
21
+ 'files', 'links', 'dirs',
22
+ 'store',
23
+ 'tag', 'tags',
24
+ 'group', 'groups',
25
+ 'pluginmeta', 'pluginmetas', 'meta', 'metas',
26
+ 'plugininstance', 'plugininstances', 'instance', 'instances', 'job', 'jobs',
27
+ 'workflow', 'workflows',
28
+ 'parametersofplugin',
29
+ // pacs delegation
30
+ 'pacsservers', 'pacsqueries', 'pacsretrieve',
31
+ ];
32
+ //# sourceMappingURL=command-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-keys.js","sourceRoot":"","sources":["../src/command-keys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAa;IAC7C,aAAa;IACb,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI;IAC1E,QAAQ,EAAE,UAAU,EAAE,MAAM;IAC5B,MAAM;IACN,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU;IAChD,MAAM;IACN,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAC5F,kCAAkC;IAClC,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,OAAO;IACf,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,OAAO,EAAE,MAAM;IACxB,OAAO;IACP,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,QAAQ;IACjB,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO;IAC5C,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM;IAC3E,UAAU,EAAE,WAAW;IACvB,oBAAoB;IACpB,kBAAkB;IAClB,aAAa,EAAE,aAAa,EAAE,cAAc;CAC7C,CAAC"}