@execufunction/cli 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 (217) hide show
  1. package/README.md +161 -0
  2. package/bin/dev.js +13 -0
  3. package/bin/run.js +13 -0
  4. package/dist/commands/auth/login.d.ts +14 -0
  5. package/dist/commands/auth/login.d.ts.map +1 -0
  6. package/dist/commands/auth/login.js +33 -0
  7. package/dist/commands/auth/login.js.map +1 -0
  8. package/dist/commands/auth/logout.d.ts +13 -0
  9. package/dist/commands/auth/logout.d.ts.map +1 -0
  10. package/dist/commands/auth/logout.js +20 -0
  11. package/dist/commands/auth/logout.js.map +1 -0
  12. package/dist/commands/auth/status.d.ts +14 -0
  13. package/dist/commands/auth/status.d.ts.map +1 -0
  14. package/dist/commands/auth/status.js +32 -0
  15. package/dist/commands/auth/status.js.map +1 -0
  16. package/dist/commands/calendar/create.d.ts +17 -0
  17. package/dist/commands/calendar/create.d.ts.map +1 -0
  18. package/dist/commands/calendar/create.js +37 -0
  19. package/dist/commands/calendar/create.js.map +1 -0
  20. package/dist/commands/calendar/delete.d.ts +15 -0
  21. package/dist/commands/calendar/delete.d.ts.map +1 -0
  22. package/dist/commands/calendar/delete.js +31 -0
  23. package/dist/commands/calendar/delete.js.map +1 -0
  24. package/dist/commands/calendar/list.d.ts +14 -0
  25. package/dist/commands/calendar/list.d.ts.map +1 -0
  26. package/dist/commands/calendar/list.js +37 -0
  27. package/dist/commands/calendar/list.js.map +1 -0
  28. package/dist/commands/calendar/update.d.ts +19 -0
  29. package/dist/commands/calendar/update.d.ts.map +1 -0
  30. package/dist/commands/calendar/update.js +41 -0
  31. package/dist/commands/calendar/update.js.map +1 -0
  32. package/dist/commands/code/blame.d.ts +15 -0
  33. package/dist/commands/code/blame.d.ts.map +1 -0
  34. package/dist/commands/code/blame.js +32 -0
  35. package/dist/commands/code/blame.js.map +1 -0
  36. package/dist/commands/code/expertise.d.ts +14 -0
  37. package/dist/commands/code/expertise.d.ts.map +1 -0
  38. package/dist/commands/code/expertise.js +25 -0
  39. package/dist/commands/code/expertise.js.map +1 -0
  40. package/dist/commands/code/history.d.ts +16 -0
  41. package/dist/commands/code/history.d.ts.map +1 -0
  42. package/dist/commands/code/history.js +37 -0
  43. package/dist/commands/code/history.js.map +1 -0
  44. package/dist/commands/code/link.d.ts +18 -0
  45. package/dist/commands/code/link.d.ts.map +1 -0
  46. package/dist/commands/code/link.js +34 -0
  47. package/dist/commands/code/link.js.map +1 -0
  48. package/dist/commands/code/memory/delete.d.ts +15 -0
  49. package/dist/commands/code/memory/delete.d.ts.map +1 -0
  50. package/dist/commands/code/memory/delete.js +31 -0
  51. package/dist/commands/code/memory/delete.js.map +1 -0
  52. package/dist/commands/code/memory/list.d.ts +13 -0
  53. package/dist/commands/code/memory/list.d.ts.map +1 -0
  54. package/dist/commands/code/memory/list.js +34 -0
  55. package/dist/commands/code/memory/list.js.map +1 -0
  56. package/dist/commands/code/memory/search.d.ts +17 -0
  57. package/dist/commands/code/memory/search.d.ts.map +1 -0
  58. package/dist/commands/code/memory/search.js +43 -0
  59. package/dist/commands/code/memory/search.js.map +1 -0
  60. package/dist/commands/code/memory/store.d.ts +15 -0
  61. package/dist/commands/code/memory/store.d.ts.map +1 -0
  62. package/dist/commands/code/memory/store.js +36 -0
  63. package/dist/commands/code/memory/store.js.map +1 -0
  64. package/dist/commands/code/who-knows.d.ts +16 -0
  65. package/dist/commands/code/who-knows.d.ts.map +1 -0
  66. package/dist/commands/code/who-knows.js +34 -0
  67. package/dist/commands/code/who-knows.js.map +1 -0
  68. package/dist/commands/codebase/delete.d.ts +15 -0
  69. package/dist/commands/codebase/delete.d.ts.map +1 -0
  70. package/dist/commands/codebase/delete.js +31 -0
  71. package/dist/commands/codebase/delete.js.map +1 -0
  72. package/dist/commands/codebase/index.d.ts +18 -0
  73. package/dist/commands/codebase/index.d.ts.map +1 -0
  74. package/dist/commands/codebase/index.js +52 -0
  75. package/dist/commands/codebase/index.js.map +1 -0
  76. package/dist/commands/codebase/list.d.ts +11 -0
  77. package/dist/commands/codebase/list.d.ts.map +1 -0
  78. package/dist/commands/codebase/list.js +28 -0
  79. package/dist/commands/codebase/list.js.map +1 -0
  80. package/dist/commands/codebase/register.d.ts +15 -0
  81. package/dist/commands/codebase/register.d.ts.map +1 -0
  82. package/dist/commands/codebase/register.js +31 -0
  83. package/dist/commands/codebase/register.js.map +1 -0
  84. package/dist/commands/codebase/search.d.ts +18 -0
  85. package/dist/commands/codebase/search.d.ts.map +1 -0
  86. package/dist/commands/codebase/search.js +50 -0
  87. package/dist/commands/codebase/search.js.map +1 -0
  88. package/dist/commands/codebase/snapshot.d.ts +16 -0
  89. package/dist/commands/codebase/snapshot.d.ts.map +1 -0
  90. package/dist/commands/codebase/snapshot.js +52 -0
  91. package/dist/commands/codebase/snapshot.js.map +1 -0
  92. package/dist/commands/codebase/status.d.ts +14 -0
  93. package/dist/commands/codebase/status.d.ts.map +1 -0
  94. package/dist/commands/codebase/status.js +34 -0
  95. package/dist/commands/codebase/status.js.map +1 -0
  96. package/dist/commands/documents/upload.d.ts +17 -0
  97. package/dist/commands/documents/upload.d.ts.map +1 -0
  98. package/dist/commands/documents/upload.js +37 -0
  99. package/dist/commands/documents/upload.js.map +1 -0
  100. package/dist/commands/notes/create.d.ts +15 -0
  101. package/dist/commands/notes/create.d.ts.map +1 -0
  102. package/dist/commands/notes/create.js +35 -0
  103. package/dist/commands/notes/create.js.map +1 -0
  104. package/dist/commands/notes/delete.d.ts +15 -0
  105. package/dist/commands/notes/delete.d.ts.map +1 -0
  106. package/dist/commands/notes/delete.js +31 -0
  107. package/dist/commands/notes/delete.js.map +1 -0
  108. package/dist/commands/notes/get.d.ts +14 -0
  109. package/dist/commands/notes/get.d.ts.map +1 -0
  110. package/dist/commands/notes/get.js +38 -0
  111. package/dist/commands/notes/get.js.map +1 -0
  112. package/dist/commands/notes/list.d.ts +14 -0
  113. package/dist/commands/notes/list.d.ts.map +1 -0
  114. package/dist/commands/notes/list.js +39 -0
  115. package/dist/commands/notes/list.js.map +1 -0
  116. package/dist/commands/notes/search.d.ts +16 -0
  117. package/dist/commands/notes/search.d.ts.map +1 -0
  118. package/dist/commands/notes/search.js +37 -0
  119. package/dist/commands/notes/search.js.map +1 -0
  120. package/dist/commands/notes/update.d.ts +17 -0
  121. package/dist/commands/notes/update.d.ts.map +1 -0
  122. package/dist/commands/notes/update.js +38 -0
  123. package/dist/commands/notes/update.js.map +1 -0
  124. package/dist/commands/people/list.d.ts +12 -0
  125. package/dist/commands/people/list.d.ts.map +1 -0
  126. package/dist/commands/people/list.js +30 -0
  127. package/dist/commands/people/list.js.map +1 -0
  128. package/dist/commands/people/search.d.ts +15 -0
  129. package/dist/commands/people/search.d.ts.map +1 -0
  130. package/dist/commands/people/search.js +33 -0
  131. package/dist/commands/people/search.js.map +1 -0
  132. package/dist/commands/projects/archive.d.ts +15 -0
  133. package/dist/commands/projects/archive.d.ts.map +1 -0
  134. package/dist/commands/projects/archive.js +31 -0
  135. package/dist/commands/projects/archive.js.map +1 -0
  136. package/dist/commands/projects/context.d.ts +14 -0
  137. package/dist/commands/projects/context.d.ts.map +1 -0
  138. package/dist/commands/projects/context.js +52 -0
  139. package/dist/commands/projects/context.js.map +1 -0
  140. package/dist/commands/projects/create.d.ts +15 -0
  141. package/dist/commands/projects/create.d.ts.map +1 -0
  142. package/dist/commands/projects/create.js +35 -0
  143. package/dist/commands/projects/create.js.map +1 -0
  144. package/dist/commands/projects/list.d.ts +13 -0
  145. package/dist/commands/projects/list.d.ts.map +1 -0
  146. package/dist/commands/projects/list.js +37 -0
  147. package/dist/commands/projects/list.js.map +1 -0
  148. package/dist/commands/projects/update.d.ts +18 -0
  149. package/dist/commands/projects/update.d.ts.map +1 -0
  150. package/dist/commands/projects/update.js +41 -0
  151. package/dist/commands/projects/update.js.map +1 -0
  152. package/dist/commands/tasks/complete.d.ts +14 -0
  153. package/dist/commands/tasks/complete.d.ts.map +1 -0
  154. package/dist/commands/tasks/complete.js +25 -0
  155. package/dist/commands/tasks/complete.js.map +1 -0
  156. package/dist/commands/tasks/create.d.ts +17 -0
  157. package/dist/commands/tasks/create.d.ts.map +1 -0
  158. package/dist/commands/tasks/create.js +41 -0
  159. package/dist/commands/tasks/create.js.map +1 -0
  160. package/dist/commands/tasks/delete.d.ts +15 -0
  161. package/dist/commands/tasks/delete.d.ts.map +1 -0
  162. package/dist/commands/tasks/delete.js +31 -0
  163. package/dist/commands/tasks/delete.js.map +1 -0
  164. package/dist/commands/tasks/get.d.ts +14 -0
  165. package/dist/commands/tasks/get.d.ts.map +1 -0
  166. package/dist/commands/tasks/get.js +37 -0
  167. package/dist/commands/tasks/get.js.map +1 -0
  168. package/dist/commands/tasks/list.d.ts +15 -0
  169. package/dist/commands/tasks/list.d.ts.map +1 -0
  170. package/dist/commands/tasks/list.js +45 -0
  171. package/dist/commands/tasks/list.js.map +1 -0
  172. package/dist/commands/tasks/update.d.ts +20 -0
  173. package/dist/commands/tasks/update.d.ts.map +1 -0
  174. package/dist/commands/tasks/update.js +50 -0
  175. package/dist/commands/tasks/update.js.map +1 -0
  176. package/dist/commands/vault/create.d.ts +20 -0
  177. package/dist/commands/vault/create.d.ts.map +1 -0
  178. package/dist/commands/vault/create.js +53 -0
  179. package/dist/commands/vault/create.js.map +1 -0
  180. package/dist/commands/vault/list.d.ts +14 -0
  181. package/dist/commands/vault/list.d.ts.map +1 -0
  182. package/dist/commands/vault/list.js +39 -0
  183. package/dist/commands/vault/list.js.map +1 -0
  184. package/dist/commands/vault/read.d.ts +14 -0
  185. package/dist/commands/vault/read.d.ts.map +1 -0
  186. package/dist/commands/vault/read.js +33 -0
  187. package/dist/commands/vault/read.js.map +1 -0
  188. package/dist/commands/vault/search.d.ts +15 -0
  189. package/dist/commands/vault/search.d.ts.map +1 -0
  190. package/dist/commands/vault/search.js +33 -0
  191. package/dist/commands/vault/search.js.map +1 -0
  192. package/dist/commands/vault/update.d.ts +19 -0
  193. package/dist/commands/vault/update.d.ts.map +1 -0
  194. package/dist/commands/vault/update.js +41 -0
  195. package/dist/commands/vault/update.js.map +1 -0
  196. package/dist/hooks/init.d.ts +4 -0
  197. package/dist/hooks/init.d.ts.map +1 -0
  198. package/dist/hooks/init.js +8 -0
  199. package/dist/hooks/init.js.map +1 -0
  200. package/dist/lib/auth.d.ts +9 -0
  201. package/dist/lib/auth.d.ts.map +1 -0
  202. package/dist/lib/auth.js +22 -0
  203. package/dist/lib/auth.js.map +1 -0
  204. package/dist/lib/base-command.d.ts +31 -0
  205. package/dist/lib/base-command.d.ts.map +1 -0
  206. package/dist/lib/base-command.js +76 -0
  207. package/dist/lib/base-command.js.map +1 -0
  208. package/dist/lib/config.d.ts +8 -0
  209. package/dist/lib/config.d.ts.map +1 -0
  210. package/dist/lib/config.js +36 -0
  211. package/dist/lib/config.js.map +1 -0
  212. package/dist/lib/output.d.ts +12 -0
  213. package/dist/lib/output.d.ts.map +1 -0
  214. package/dist/lib/output.js +95 -0
  215. package/dist/lib/output.js.map +1 -0
  216. package/oclif.manifest.json +3740 -0
  217. package/package.json +73 -0
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class VaultRead extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'no-input': import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<unknown>;
13
+ }
14
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/commands/vault/read.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAGtD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,WAAW,SAAoD;IAEtE,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;MAEV;IAEI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;CAmB9B"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_js_1 = require("../../lib/base-command.js");
5
+ const output_js_1 = require("../../lib/output.js");
6
+ class VaultRead extends base_command_js_1.BaseCommand {
7
+ static description = 'Decrypt and read a vault secret (audit-logged)';
8
+ static args = {
9
+ id: core_1.Args.string({ description: 'Vault entry ID', required: true }),
10
+ };
11
+ static flags = {
12
+ ...base_command_js_1.BaseCommand.baseFlags,
13
+ };
14
+ async run() {
15
+ const { args, flags } = await this.parse(VaultRead);
16
+ const client = await this.client(flags);
17
+ const response = await client.readVaultSecret(args.id);
18
+ this.handleApiError(response);
19
+ const secret = response.data;
20
+ if (!this.jsonEnabled()) {
21
+ const payload = secret.payload;
22
+ if (payload) {
23
+ (0, output_js_1.renderDetail)(Object.entries(payload).map(([k, v]) => [k, v]));
24
+ }
25
+ else {
26
+ this.log(JSON.stringify(secret, null, 2));
27
+ }
28
+ }
29
+ return response.data;
30
+ }
31
+ }
32
+ exports.default = VaultRead;
33
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/commands/vault/read.ts"],"names":[],"mappings":";;AAAA,sCAAiC;AACjC,+DAAsD;AACtD,mDAAiD;AAEjD,MAAqB,SAAU,SAAQ,6BAAW;IAChD,MAAM,CAAC,WAAW,GAAG,gDAAgD,CAAC;IAEtE,MAAM,CAAC,IAAI,GAAG;QACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KACjE,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,6BAAW,CAAC,SAAS;KACzB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAA+B,CAAC;QAExD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,CAAC,OAA8C,CAAC;YACtE,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAA,wBAAY,EAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;;AA7BH,4BA8BC"}
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class VaultSearch extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ query: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ limit: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'no-input': import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<unknown>;
14
+ }
15
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/vault/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAGtD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,WAAW,SAA0B;IAE5C,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;MAGV;IAEI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;CAmB9B"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_js_1 = require("../../lib/base-command.js");
5
+ const output_js_1 = require("../../lib/output.js");
6
+ class VaultSearch extends base_command_js_1.BaseCommand {
7
+ static description = 'Search vault entries';
8
+ static args = {
9
+ query: core_1.Args.string({ description: 'Search query', required: true }),
10
+ };
11
+ static flags = {
12
+ ...base_command_js_1.BaseCommand.baseFlags,
13
+ limit: core_1.Flags.integer({ description: 'Maximum number of results' }),
14
+ };
15
+ async run() {
16
+ const { args, flags } = await this.parse(VaultSearch);
17
+ const client = await this.client(flags);
18
+ const response = await client.searchVaultEntries(args.query, flags.limit);
19
+ this.handleApiError(response);
20
+ const entries = this.unwrapList(response, 'entries');
21
+ if (!this.jsonEnabled()) {
22
+ (0, output_js_1.renderTable)(entries, [
23
+ { key: 'id', header: 'ID' },
24
+ { key: 'name', header: 'Name' },
25
+ { key: 'entryType', header: 'Type' },
26
+ { key: 'category', header: 'Category' },
27
+ ]);
28
+ }
29
+ return entries;
30
+ }
31
+ }
32
+ exports.default = VaultSearch;
33
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/vault/search.ts"],"names":[],"mappings":";;AAAA,sCAAwC;AACxC,+DAAsD;AACtD,mDAAgD;AAEhD,MAAqB,WAAY,SAAQ,6BAAW;IAClD,MAAM,CAAC,WAAW,GAAG,sBAAsB,CAAC;IAE5C,MAAM,CAAC,IAAI,GAAG;QACZ,KAAK,EAAE,WAAI,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KAClE,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,6BAAW,CAAC,SAAS;QACxB,KAAK,EAAE,YAAK,CAAC,OAAO,CAAC,EAAC,WAAW,EAAE,2BAA2B,EAAC,CAAC;KACjE,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAA,uBAAW,EAAC,OAAO,EAAE;gBACnB,EAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC;gBACzB,EAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAC;gBAC7B,EAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAC;gBAClC,EAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAC;aACtC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;;AA9BH,8BA+BC"}
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../lib/base-command.js';
2
+ export default class VaultUpdate extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ tags: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'no-input': import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ };
17
+ run(): Promise<unknown>;
18
+ }
19
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/vault/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAEtD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,WAAW,SAAiC;IAEnD,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;;;;MAOV;IAEI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;CAoB9B"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_js_1 = require("../../lib/base-command.js");
5
+ class VaultUpdate extends base_command_js_1.BaseCommand {
6
+ static description = 'Update vault entry metadata';
7
+ static args = {
8
+ id: core_1.Args.string({ description: 'Vault entry ID', required: true }),
9
+ };
10
+ static flags = {
11
+ ...base_command_js_1.BaseCommand.baseFlags,
12
+ name: core_1.Flags.string({ description: 'Entry name' }),
13
+ description: core_1.Flags.string({ description: 'Description' }),
14
+ tags: core_1.Flags.string({ description: 'Comma-separated tags' }),
15
+ category: core_1.Flags.string({ description: 'Category' }),
16
+ url: core_1.Flags.string({ description: 'Associated URL' }),
17
+ };
18
+ async run() {
19
+ const { args, flags } = await this.parse(VaultUpdate);
20
+ const client = await this.client(flags);
21
+ const updates = {};
22
+ if (flags.name !== undefined)
23
+ updates.name = flags.name;
24
+ if (flags.description !== undefined)
25
+ updates.description = flags.description;
26
+ if (flags.tags !== undefined)
27
+ updates.tags = flags.tags.split(',').map(t => t.trim());
28
+ if (flags.category !== undefined)
29
+ updates.category = flags.category;
30
+ if (flags.url !== undefined)
31
+ updates.url = flags.url;
32
+ const response = await client.updateVaultEntry(args.id, updates);
33
+ this.handleApiError(response);
34
+ if (!this.jsonEnabled()) {
35
+ this.log(`Vault entry ${args.id} updated`);
36
+ }
37
+ return response.data;
38
+ }
39
+ }
40
+ exports.default = VaultUpdate;
41
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/vault/update.ts"],"names":[],"mappings":";;AAAA,sCAAwC;AACxC,+DAAsD;AAEtD,MAAqB,WAAY,SAAQ,6BAAW;IAClD,MAAM,CAAC,WAAW,GAAG,6BAA6B,CAAC;IAEnD,MAAM,CAAC,IAAI,GAAG;QACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;KACjE,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,6BAAW,CAAC,SAAS;QACxB,IAAI,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,YAAY,EAAC,CAAC;QAC/C,WAAW,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,aAAa,EAAC,CAAC;QACvD,IAAI,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,sBAAsB,EAAC,CAAC;QACzD,QAAQ,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,UAAU,EAAC,CAAC;QACjD,GAAG,EAAE,YAAK,CAAC,MAAM,CAAC,EAAC,WAAW,EAAE,gBAAgB,EAAC,CAAC;KACnD,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAExC,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC7E,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACpE,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QAErD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;;AAnCH,8BAoCC"}
@@ -0,0 +1,4 @@
1
+ import type { Hook } from '@oclif/core';
2
+ declare const hook: Hook<'init'>;
3
+ export default hook;
4
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/hooks/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AAEtC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,CAGtB,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const hook = async function () {
4
+ // Placeholder for update check or initialization logic.
5
+ // Future: check for CLI updates and notify user.
6
+ };
7
+ exports.default = hook;
8
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/hooks/init.ts"],"names":[],"mappings":";;AAEA,MAAM,IAAI,GAAiB,KAAK;IAC9B,wDAAwD;IACxD,iDAAiD;AACnD,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Resolve token from config file.
3
+ * Note: flag and env var resolution are handled by oclif's Flags.string({ env: 'EXF_TOKEN' }).
4
+ * This function is the final fallback — reads from ~/.config/exf/auth.json.
5
+ */
6
+ export declare function resolveToken(): string | undefined;
7
+ export declare function storeToken(token: string): void;
8
+ export declare function clearToken(): void;
9
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAGjD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveToken = resolveToken;
4
+ exports.storeToken = storeToken;
5
+ exports.clearToken = clearToken;
6
+ const config_js_1 = require("./config.js");
7
+ /**
8
+ * Resolve token from config file.
9
+ * Note: flag and env var resolution are handled by oclif's Flags.string({ env: 'EXF_TOKEN' }).
10
+ * This function is the final fallback — reads from ~/.config/exf/auth.json.
11
+ */
12
+ function resolveToken() {
13
+ const config = (0, config_js_1.readConfig)();
14
+ return config?.token;
15
+ }
16
+ function storeToken(token) {
17
+ (0, config_js_1.writeConfig)({ token });
18
+ }
19
+ function clearToken() {
20
+ (0, config_js_1.deleteConfig)();
21
+ }
22
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":";;AAOA,oCAGC;AAED,gCAEC;AAED,gCAEC;AAlBD,2CAAkE;AAElE;;;;GAIG;AACH,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAC5B,OAAO,MAAM,EAAE,KAAK,CAAC;AACvB,CAAC;AAED,SAAgB,UAAU,CAAC,KAAa;IACtC,IAAA,uBAAW,EAAC,EAAC,KAAK,EAAC,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,UAAU;IACxB,IAAA,wBAAY,GAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { Command } from '@oclif/core';
2
+ import { ExfClient } from '@execufunction/mcp-server/dist/exfClient.js';
3
+ export declare abstract class BaseCommand extends Command {
4
+ static enableJsonFlag: boolean;
5
+ static baseFlags: {
6
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ 'api-url': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ 'no-input': import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ protected client(flags: {
11
+ token?: string;
12
+ 'api-url'?: string;
13
+ }): Promise<ExfClient>;
14
+ protected unwrapList(response: {
15
+ data?: unknown;
16
+ }, key: string): Record<string, unknown>[];
17
+ protected unwrapOne(response: {
18
+ data?: unknown;
19
+ }, key: string): Record<string, unknown>;
20
+ protected handleApiError(response: {
21
+ statusCode: number;
22
+ error?: string;
23
+ data?: unknown;
24
+ }): void;
25
+ protected confirmAction(message: string, flags: {
26
+ yes?: boolean;
27
+ 'no-input'?: boolean;
28
+ }): Promise<boolean>;
29
+ protected idempotencyKey(): string;
30
+ }
31
+ //# sourceMappingURL=base-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../../src/lib/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAQ,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAC,SAAS,EAAC,MAAM,6CAA6C,CAAC;AAItE,8BAAsB,WAAY,SAAQ,OAAO;IAC/C,MAAM,CAAC,cAAc,UAAQ;IAE7B,MAAM,CAAC,SAAS;;;;MAgBd;cAEc,MAAM,CAAC,KAAK,EAAE;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAYvF,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAKxF,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKrF,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI;cAsB9E,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAC,GAC3C,OAAO,CAAC,OAAO,CAAC;IASnB,SAAS,CAAC,cAAc,IAAI,MAAM;CAGnC"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseCommand = void 0;
4
+ const core_1 = require("@oclif/core");
5
+ const node_crypto_1 = require("node:crypto");
6
+ const exfClient_js_1 = require("@execufunction/mcp-server/dist/exfClient.js");
7
+ const auth_js_1 = require("./auth.js");
8
+ const output_js_1 = require("./output.js");
9
+ class BaseCommand extends core_1.Command {
10
+ static enableJsonFlag = true;
11
+ static baseFlags = {
12
+ token: core_1.Flags.string({
13
+ description: 'Personal access token',
14
+ env: 'EXF_TOKEN',
15
+ helpGroup: 'GLOBAL',
16
+ }),
17
+ 'api-url': core_1.Flags.string({
18
+ description: 'API base URL',
19
+ env: 'EXF_API_URL',
20
+ default: 'https://execufunction.com',
21
+ helpGroup: 'GLOBAL',
22
+ }),
23
+ 'no-input': core_1.Flags.boolean({
24
+ description: 'Disable interactive prompts',
25
+ helpGroup: 'GLOBAL',
26
+ }),
27
+ };
28
+ async client(flags) {
29
+ const token = flags.token || (0, auth_js_1.resolveToken)();
30
+ if (!token) {
31
+ this.error('No authentication token found. Run `exf auth login` or set EXF_TOKEN.');
32
+ }
33
+ return new exfClient_js_1.ExfClient({
34
+ apiUrl: flags['api-url'] || 'https://execufunction.com',
35
+ pat: token,
36
+ });
37
+ }
38
+ unwrapList(response, key) {
39
+ const data = response.data;
40
+ return (data?.[key] ?? []);
41
+ }
42
+ unwrapOne(response, key) {
43
+ const data = response.data;
44
+ return (data?.[key] ?? data ?? {});
45
+ }
46
+ handleApiError(response) {
47
+ if (response.error) {
48
+ if (response.statusCode === 401) {
49
+ this.error(`Authentication failed: ${response.error}\nRun \`exf auth login\` to authenticate.`);
50
+ }
51
+ if (response.statusCode === 403) {
52
+ this.error(`Permission denied: ${response.error}`);
53
+ }
54
+ if (response.statusCode === 404) {
55
+ this.error(`Not found: ${response.error}`);
56
+ }
57
+ if (response.statusCode === 429) {
58
+ this.error(`Rate limited: ${response.error}\nPlease try again shortly.`);
59
+ }
60
+ this.error(`API error (${response.statusCode}): ${response.error}`);
61
+ }
62
+ }
63
+ async confirmAction(message, flags) {
64
+ if (flags.yes)
65
+ return true;
66
+ if (flags['no-input']) {
67
+ this.error(`${message} Use --yes to confirm in non-interactive mode.`);
68
+ }
69
+ return (0, output_js_1.confirm)(message);
70
+ }
71
+ idempotencyKey() {
72
+ return `cli-${Date.now()}-${(0, node_crypto_1.randomUUID)()}`;
73
+ }
74
+ }
75
+ exports.BaseCommand = BaseCommand;
76
+ //# sourceMappingURL=base-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-command.js","sourceRoot":"","sources":["../../src/lib/base-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface AuthConfig {
2
+ token: string;
3
+ }
4
+ export declare function getConfigDir(): string;
5
+ export declare function readConfig(): AuthConfig | null;
6
+ export declare function writeConfig(config: AuthConfig): void;
7
+ export declare function deleteConfig(): void;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,UAAU,IAAI,UAAU,GAAG,IAAI,CAO9C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGpD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAMnC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConfigDir = getConfigDir;
4
+ exports.readConfig = readConfig;
5
+ exports.writeConfig = writeConfig;
6
+ exports.deleteConfig = deleteConfig;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = require("node:path");
9
+ const node_os_1 = require("node:os");
10
+ const CONFIG_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.config', 'exf');
11
+ const AUTH_FILE = (0, node_path_1.join)(CONFIG_DIR, 'auth.json');
12
+ function getConfigDir() {
13
+ return CONFIG_DIR;
14
+ }
15
+ function readConfig() {
16
+ try {
17
+ const content = (0, node_fs_1.readFileSync)(AUTH_FILE, 'utf-8');
18
+ return JSON.parse(content);
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ function writeConfig(config) {
25
+ (0, node_fs_1.mkdirSync)(CONFIG_DIR, { recursive: true, mode: 0o700 });
26
+ (0, node_fs_1.writeFileSync)(AUTH_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
27
+ }
28
+ function deleteConfig() {
29
+ try {
30
+ (0, node_fs_1.unlinkSync)(AUTH_FILE);
31
+ }
32
+ catch {
33
+ // Already gone
34
+ }
35
+ }
36
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;AAWA,oCAEC;AAED,gCAOC;AAED,kCAGC;AAED,oCAMC;AAnCD,qCAA2E;AAC3E,yCAA+B;AAC/B,qCAAgC;AAEhC,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACrD,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAMhD,SAAgB,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,MAAkB;IAC5C,IAAA,mBAAS,EAAC,UAAU,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;IACtD,IAAA,uBAAa,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,YAAY;IAC1B,IAAI,CAAC;QACH,IAAA,oBAAU,EAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface Column {
2
+ key: string;
3
+ header: string;
4
+ get?: (row: Record<string, unknown>) => string;
5
+ }
6
+ export declare function renderTable(data: Record<string, unknown>[], columns: Column[]): void;
7
+ export declare function renderDetail(pairs: [string, unknown][]): void;
8
+ export declare function formatDate(isoString?: string | null): string;
9
+ export declare function formatDateTime(isoString?: string | null): string;
10
+ export declare function confirm(message: string): Promise<boolean>;
11
+ export declare function truncate(str: string, len: number): string;
12
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAChD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CA0BpF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAK7D;AAED,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG5D;AAED,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAIhE;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzD"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.renderTable = renderTable;
37
+ exports.renderDetail = renderDetail;
38
+ exports.formatDate = formatDate;
39
+ exports.formatDateTime = formatDateTime;
40
+ exports.confirm = confirm;
41
+ exports.truncate = truncate;
42
+ const readline = __importStar(require("node:readline"));
43
+ function renderTable(data, columns) {
44
+ if (data.length === 0) {
45
+ console.log('No results found.');
46
+ return;
47
+ }
48
+ const getValue = (row, col) => {
49
+ const val = col.get ? col.get(row) : row[col.key];
50
+ return val != null ? String(val) : '—';
51
+ };
52
+ const widths = columns.map(col => {
53
+ const maxData = Math.max(...data.map(row => getValue(row, col).length));
54
+ return Math.max(col.header.length, maxData, 2);
55
+ });
56
+ const header = columns.map((col, i) => col.header.padEnd(widths[i])).join(' ');
57
+ const separator = columns.map((_, i) => '─'.repeat(widths[i])).join(' ');
58
+ console.log(header);
59
+ console.log(separator);
60
+ for (const row of data) {
61
+ const line = columns.map((col, i) => getValue(row, col).padEnd(widths[i])).join(' ');
62
+ console.log(line);
63
+ }
64
+ }
65
+ function renderDetail(pairs) {
66
+ const maxKey = Math.max(...pairs.map(([key]) => key.length));
67
+ for (const [key, value] of pairs) {
68
+ console.log(`${key.padEnd(maxKey)} ${value ?? '—'}`);
69
+ }
70
+ }
71
+ function formatDate(isoString) {
72
+ if (!isoString)
73
+ return '—';
74
+ return new Date(isoString).toLocaleDateString();
75
+ }
76
+ function formatDateTime(isoString) {
77
+ if (!isoString)
78
+ return '—';
79
+ const d = new Date(isoString);
80
+ return `${d.toLocaleDateString()} ${d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;
81
+ }
82
+ async function confirm(message) {
83
+ const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
84
+ const answer = await new Promise(resolve => {
85
+ rl.question(`${message} (y/N) `, resolve);
86
+ });
87
+ rl.close();
88
+ return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';
89
+ }
90
+ function truncate(str, len) {
91
+ if (str.length <= len)
92
+ return str;
93
+ return str.slice(0, len - 1) + '…';
94
+ }
95
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}