@outfitter/cli 0.3.0 → 0.4.1

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 (269) hide show
  1. package/README.md +48 -4
  2. package/dist/actions.js +0 -2
  3. package/dist/cli.d.ts +1 -1
  4. package/dist/cli.js +1 -2
  5. package/dist/{render → colors}/colors.d.ts +1 -1
  6. package/dist/{render → colors}/colors.js +2 -6
  7. package/dist/colors/index.d.ts +1 -1
  8. package/dist/colors/index.js +3 -4
  9. package/dist/command.d.ts +2 -2
  10. package/dist/command.js +11 -2
  11. package/dist/completion.d.ts +36 -0
  12. package/dist/completion.js +91 -0
  13. package/dist/flags.d.ts +167 -0
  14. package/dist/flags.js +31 -0
  15. package/dist/index.d.ts +4 -4
  16. package/dist/index.js +5 -4
  17. package/dist/input.d.ts +3 -26
  18. package/dist/input.js +1 -31
  19. package/dist/output.d.ts +2 -2
  20. package/dist/output.js +0 -1
  21. package/dist/pagination.d.ts +1 -1
  22. package/dist/pagination.js +0 -2
  23. package/dist/query.d.ts +50 -0
  24. package/dist/query.js +51 -0
  25. package/dist/shared/@outfitter/cli-b2zk8fb3.js +357 -0
  26. package/dist/shared/@outfitter/{cli-d9ad0rqj.js → cli-jbj78ac5.js} +1 -6
  27. package/dist/shared/@outfitter/{cli-e6yv2764.d.ts → cli-k0yvzn6d.d.ts} +1 -1
  28. package/dist/shared/@outfitter/{cli-ttt7r0j7.d.ts → cli-md9347gn.d.ts} +155 -13
  29. package/dist/shared/@outfitter/{cli-5g6rkv3d.js → cli-rk9zagkm.js} +24 -32
  30. package/dist/shared/@outfitter/{cli-4h4rpdra.js → cli-zahqsaby.js} +32 -10
  31. package/dist/terminal/detection.js +1 -5
  32. package/dist/terminal/index.js +1 -6
  33. package/dist/{shared/@outfitter/cli-4cb5g831.d.ts → text.d.ts} +1 -1
  34. package/dist/{shared/@outfitter/cli-mwxsh3sr.js → text.js} +15 -14
  35. package/dist/types.d.ts +2 -2
  36. package/dist/types.js +0 -2
  37. package/dist/verbs.d.ts +50 -0
  38. package/dist/verbs.js +61 -0
  39. package/package.json +50 -204
  40. package/dist/borders/index.d.ts +0 -3
  41. package/dist/borders/index.js +0 -13
  42. package/dist/box/index.d.ts +0 -4
  43. package/dist/box/index.js +0 -13
  44. package/dist/demo/index.d.ts +0 -78
  45. package/dist/demo/index.js +0 -148
  46. package/dist/demo/registry.d.ts +0 -7
  47. package/dist/demo/registry.js +0 -28
  48. package/dist/demo/renderers/borders.d.ts +0 -7
  49. package/dist/demo/renderers/borders.js +0 -17
  50. package/dist/demo/renderers/box.d.ts +0 -7
  51. package/dist/demo/renderers/box.js +0 -18
  52. package/dist/demo/renderers/colors.d.ts +0 -7
  53. package/dist/demo/renderers/colors.js +0 -18
  54. package/dist/demo/renderers/indicators.d.ts +0 -7
  55. package/dist/demo/renderers/indicators.js +0 -17
  56. package/dist/demo/renderers/list.d.ts +0 -7
  57. package/dist/demo/renderers/list.js +0 -19
  58. package/dist/demo/renderers/markdown.d.ts +0 -7
  59. package/dist/demo/renderers/markdown.js +0 -18
  60. package/dist/demo/renderers/progress.d.ts +0 -7
  61. package/dist/demo/renderers/progress.js +0 -17
  62. package/dist/demo/renderers/spinner.d.ts +0 -7
  63. package/dist/demo/renderers/spinner.js +0 -19
  64. package/dist/demo/renderers/table.d.ts +0 -7
  65. package/dist/demo/renderers/table.js +0 -19
  66. package/dist/demo/renderers/text.d.ts +0 -7
  67. package/dist/demo/renderers/text.js +0 -16
  68. package/dist/demo/renderers/tree.d.ts +0 -7
  69. package/dist/demo/renderers/tree.js +0 -18
  70. package/dist/demo/section.d.ts +0 -5
  71. package/dist/demo/section.js +0 -23
  72. package/dist/demo/templates.d.ts +0 -4
  73. package/dist/demo/templates.js +0 -10
  74. package/dist/demo/types.d.ts +0 -3
  75. package/dist/demo/types.js +0 -8
  76. package/dist/list/index.d.ts +0 -3
  77. package/dist/list/index.js +0 -9
  78. package/dist/preset/full.d.ts +0 -14
  79. package/dist/preset/full.js +0 -41
  80. package/dist/preset/standard.d.ts +0 -11
  81. package/dist/preset/standard.js +0 -30
  82. package/dist/prompt/confirm.d.ts +0 -4
  83. package/dist/prompt/confirm.js +0 -9
  84. package/dist/prompt/group.d.ts +0 -4
  85. package/dist/prompt/group.js +0 -9
  86. package/dist/prompt/index.d.ts +0 -7
  87. package/dist/prompt/index.js +0 -32
  88. package/dist/prompt/select.d.ts +0 -4
  89. package/dist/prompt/select.js +0 -11
  90. package/dist/prompt/text.d.ts +0 -4
  91. package/dist/prompt/text.js +0 -11
  92. package/dist/prompt/types.d.ts +0 -3
  93. package/dist/prompt/types.js +0 -8
  94. package/dist/prompt/validators.d.ts +0 -2
  95. package/dist/prompt/validators.js +0 -8
  96. package/dist/render/borders.d.ts +0 -2
  97. package/dist/render/borders.js +0 -15
  98. package/dist/render/box.d.ts +0 -3
  99. package/dist/render/box.js +0 -23
  100. package/dist/render/date.d.ts +0 -2
  101. package/dist/render/date.js +0 -12
  102. package/dist/render/format-relative.d.ts +0 -2
  103. package/dist/render/format-relative.js +0 -8
  104. package/dist/render/format.d.ts +0 -2
  105. package/dist/render/format.js +0 -10
  106. package/dist/render/heading.d.ts +0 -3
  107. package/dist/render/heading.js +0 -14
  108. package/dist/render/index.d.ts +0 -32
  109. package/dist/render/index.js +0 -235
  110. package/dist/render/indicators.d.ts +0 -2
  111. package/dist/render/indicators.js +0 -16
  112. package/dist/render/json.d.ts +0 -2
  113. package/dist/render/json.js +0 -10
  114. package/dist/render/layout.d.ts +0 -5
  115. package/dist/render/layout.js +0 -25
  116. package/dist/render/list.d.ts +0 -2
  117. package/dist/render/list.js +0 -8
  118. package/dist/render/markdown.d.ts +0 -2
  119. package/dist/render/markdown.js +0 -10
  120. package/dist/render/progress.d.ts +0 -2
  121. package/dist/render/progress.js +0 -8
  122. package/dist/render/separator.d.ts +0 -3
  123. package/dist/render/separator.js +0 -14
  124. package/dist/render/shapes.d.ts +0 -2
  125. package/dist/render/shapes.js +0 -35
  126. package/dist/render/spinner.d.ts +0 -2
  127. package/dist/render/spinner.js +0 -12
  128. package/dist/render/stack.d.ts +0 -3
  129. package/dist/render/stack.js +0 -38
  130. package/dist/render/table.d.ts +0 -3
  131. package/dist/render/table.js +0 -12
  132. package/dist/render/text.d.ts +0 -2
  133. package/dist/render/text.js +0 -27
  134. package/dist/render/tree.d.ts +0 -2
  135. package/dist/render/tree.js +0 -10
  136. package/dist/render/types.d.ts +0 -2
  137. package/dist/shared/@outfitter/cli-0djg8q91.js +0 -7
  138. package/dist/shared/@outfitter/cli-0w242qtv.d.ts +0 -48
  139. package/dist/shared/@outfitter/cli-1g8tt31a.d.ts +0 -119
  140. package/dist/shared/@outfitter/cli-1kwbnt86.d.ts +0 -45
  141. package/dist/shared/@outfitter/cli-1sb3xvnw.js +0 -95
  142. package/dist/shared/@outfitter/cli-1vy0vtga.js +0 -135
  143. package/dist/shared/@outfitter/cli-2g8bx1aq.d.ts +0 -50
  144. package/dist/shared/@outfitter/cli-33e97cjs.d.ts +0 -42
  145. package/dist/shared/@outfitter/cli-3b7ed3rm.d.ts +0 -97
  146. package/dist/shared/@outfitter/cli-3hk2xf3c.js +0 -82
  147. package/dist/shared/@outfitter/cli-3hp8qwx3.js +0 -11
  148. package/dist/shared/@outfitter/cli-47yw5h6a.js +0 -7
  149. package/dist/shared/@outfitter/cli-4b6tbp68.d.ts +0 -36
  150. package/dist/shared/@outfitter/cli-4fcz51qa.js +0 -70
  151. package/dist/shared/@outfitter/cli-4x6pqnez.js +0 -20
  152. package/dist/shared/@outfitter/cli-4zk2y4a2.d.ts +0 -61
  153. package/dist/shared/@outfitter/cli-60b5xh1r.js +0 -20
  154. package/dist/shared/@outfitter/cli-6bztk73z.d.ts +0 -51
  155. package/dist/shared/@outfitter/cli-6fxffp8k.js +0 -1
  156. package/dist/shared/@outfitter/cli-6hg0sg2d.d.ts +0 -93
  157. package/dist/shared/@outfitter/cli-6r3m2knf.js +0 -62
  158. package/dist/shared/@outfitter/cli-6ty1nvws.js +0 -179
  159. package/dist/shared/@outfitter/cli-7n610r63.js +0 -20
  160. package/dist/shared/@outfitter/cli-7na6p4fs.d.ts +0 -59
  161. package/dist/shared/@outfitter/cli-83jwvj1t.d.ts +0 -17
  162. package/dist/shared/@outfitter/cli-85fg2vr5.js +0 -123
  163. package/dist/shared/@outfitter/cli-8bwaw3pz.js +0 -7
  164. package/dist/shared/@outfitter/cli-8hngbjyr.d.ts +0 -164
  165. package/dist/shared/@outfitter/cli-8j5k6mr3.js +0 -71
  166. package/dist/shared/@outfitter/cli-8xsmsbbd.d.ts +0 -223
  167. package/dist/shared/@outfitter/cli-914d47mt.js +0 -20
  168. package/dist/shared/@outfitter/cli-9bcm4zhf.d.ts +0 -87
  169. package/dist/shared/@outfitter/cli-9khk3cbq.d.ts +0 -190
  170. package/dist/shared/@outfitter/cli-a4q87517.d.ts +0 -64
  171. package/dist/shared/@outfitter/cli-aem6v4c8.js +0 -146
  172. package/dist/shared/@outfitter/cli-b0tzqgnf.d.ts +0 -132
  173. package/dist/shared/@outfitter/cli-b5c2k0d7.js +0 -39
  174. package/dist/shared/@outfitter/cli-b5epywry.js +0 -1
  175. package/dist/shared/@outfitter/cli-bc17qeh2.js +0 -19
  176. package/dist/shared/@outfitter/cli-bcmcaz1b.js +0 -23
  177. package/dist/shared/@outfitter/cli-bv09nme3.d.ts +0 -56
  178. package/dist/shared/@outfitter/cli-c6pbxpw0.d.ts +0 -112
  179. package/dist/shared/@outfitter/cli-c8fqdaes.js +0 -117
  180. package/dist/shared/@outfitter/cli-c8q4f71g.js +0 -144
  181. package/dist/shared/@outfitter/cli-c9knfqn5.d.ts +0 -30
  182. package/dist/shared/@outfitter/cli-cf1xexgn.d.ts +0 -53
  183. package/dist/shared/@outfitter/cli-cf2s94s1.d.ts +0 -42
  184. package/dist/shared/@outfitter/cli-cwgj6mcs.js +0 -214
  185. package/dist/shared/@outfitter/cli-d8ahdd9d.js +0 -272
  186. package/dist/shared/@outfitter/cli-dbyteh27.d.ts +0 -24
  187. package/dist/shared/@outfitter/cli-e5ms1y0x.d.ts +0 -91
  188. package/dist/shared/@outfitter/cli-en6zn6sj.js +0 -1
  189. package/dist/shared/@outfitter/cli-evx7qcp1.d.ts +0 -300
  190. package/dist/shared/@outfitter/cli-f6fsaayd.js +0 -94
  191. package/dist/shared/@outfitter/cli-fakncnjp.d.ts +0 -106
  192. package/dist/shared/@outfitter/cli-ffa0jwb7.js +0 -122
  193. package/dist/shared/@outfitter/cli-h20jc0bs.d.ts +0 -66
  194. package/dist/shared/@outfitter/cli-h3jz0bxz.js +0 -48
  195. package/dist/shared/@outfitter/cli-h4wpzb3f.js +0 -67
  196. package/dist/shared/@outfitter/cli-hda6mc28.js +0 -126
  197. package/dist/shared/@outfitter/cli-hnpbqmc8.d.ts +0 -328
  198. package/dist/shared/@outfitter/cli-j19a91ck.js +0 -30
  199. package/dist/shared/@outfitter/cli-jejfypgf.js +0 -85
  200. package/dist/shared/@outfitter/cli-jp0k3qd9.js +0 -279
  201. package/dist/shared/@outfitter/cli-k76e7173.js +0 -128
  202. package/dist/shared/@outfitter/cli-kc3ffp1v.d.ts +0 -23
  203. package/dist/shared/@outfitter/cli-kk5hnndk.d.ts +0 -128
  204. package/dist/shared/@outfitter/cli-ktqme80d.js +0 -7
  205. package/dist/shared/@outfitter/cli-mq0jp15z.js +0 -1
  206. package/dist/shared/@outfitter/cli-n0c33vba.js +0 -25
  207. package/dist/shared/@outfitter/cli-n17gt1dz.js +0 -19
  208. package/dist/shared/@outfitter/cli-n9dbh0hp.js +0 -51
  209. package/dist/shared/@outfitter/cli-ndem6tz8.js +0 -63
  210. package/dist/shared/@outfitter/cli-nj4nqy1h.d.ts +0 -24
  211. package/dist/shared/@outfitter/cli-nkns8p4r.js +0 -61
  212. package/dist/shared/@outfitter/cli-p3dqm1vd.js +0 -22
  213. package/dist/shared/@outfitter/cli-pndwprz8.js +0 -118
  214. package/dist/shared/@outfitter/cli-pvrwv6rb.js +0 -352
  215. package/dist/shared/@outfitter/cli-py02m79x.d.ts +0 -20
  216. package/dist/shared/@outfitter/cli-qj83y5wj.d.ts +0 -71
  217. package/dist/shared/@outfitter/cli-regjbef6.d.ts +0 -26
  218. package/dist/shared/@outfitter/cli-s1tx5kha.d.ts +0 -59
  219. package/dist/shared/@outfitter/cli-sam2sq50.js +0 -37
  220. package/dist/shared/@outfitter/cli-snxj55n6.js +0 -43
  221. package/dist/shared/@outfitter/cli-symyxb0z.js +0 -20
  222. package/dist/shared/@outfitter/cli-tvw1xrdj.js +0 -20
  223. package/dist/shared/@outfitter/cli-v1tzwxkt.js +0 -32
  224. package/dist/shared/@outfitter/cli-vd60dj65.js +0 -1
  225. package/dist/shared/@outfitter/cli-vfcrskfj.d.ts +0 -41
  226. package/dist/shared/@outfitter/cli-vstbkzky.d.ts +0 -74
  227. package/dist/shared/@outfitter/cli-vtg0sqk2.d.ts +0 -54
  228. package/dist/shared/@outfitter/cli-x4cavvc0.js +0 -1
  229. package/dist/shared/@outfitter/cli-xep6v2c0.js +0 -52
  230. package/dist/shared/@outfitter/cli-xg5y5fhk.js +0 -86
  231. package/dist/shared/@outfitter/cli-y7k1t81k.js +0 -30
  232. package/dist/shared/@outfitter/cli-yfyzy95c.js +0 -67
  233. package/dist/shared/@outfitter/cli-z78mkrc7.js +0 -59
  234. package/dist/shared/@outfitter/cli-znc47004.js +0 -134
  235. package/dist/shared/@outfitter/cli-zx598p8q.d.ts +0 -26
  236. package/dist/streaming/ansi.d.ts +0 -2
  237. package/dist/streaming/ansi.js +0 -8
  238. package/dist/streaming/index.d.ts +0 -4
  239. package/dist/streaming/index.js +0 -17
  240. package/dist/streaming/spinner.d.ts +0 -3
  241. package/dist/streaming/spinner.js +0 -10
  242. package/dist/streaming/writer.d.ts +0 -2
  243. package/dist/streaming/writer.js +0 -9
  244. package/dist/table/index.d.ts +0 -4
  245. package/dist/table/index.js +0 -13
  246. package/dist/theme/context.d.ts +0 -9
  247. package/dist/theme/context.js +0 -14
  248. package/dist/theme/create.d.ts +0 -8
  249. package/dist/theme/create.js +0 -12
  250. package/dist/theme/index.d.ts +0 -17
  251. package/dist/theme/index.js +0 -42
  252. package/dist/theme/presets/bold.d.ts +0 -8
  253. package/dist/theme/presets/bold.js +0 -12
  254. package/dist/theme/presets/default.d.ts +0 -8
  255. package/dist/theme/presets/default.js +0 -11
  256. package/dist/theme/presets/index.d.ts +0 -12
  257. package/dist/theme/presets/index.js +0 -24
  258. package/dist/theme/presets/minimal.d.ts +0 -8
  259. package/dist/theme/presets/minimal.js +0 -12
  260. package/dist/theme/presets/rounded.d.ts +0 -8
  261. package/dist/theme/presets/rounded.js +0 -12
  262. package/dist/theme/resolve.d.ts +0 -8
  263. package/dist/theme/resolve.js +0 -11
  264. package/dist/theme/types.d.ts +0 -7
  265. package/dist/theme/types.js +0 -1
  266. package/dist/tree/index.d.ts +0 -3
  267. package/dist/tree/index.js +0 -11
  268. /package/dist/shared/@outfitter/{cli-ykxn7rb2.d.ts → cli-xppg982q.d.ts} +0 -0
  269. /package/dist/{render/types.js → shared/@outfitter/cli-zw75pdk8.js} +0 -0
@@ -1,23 +0,0 @@
1
- // @bun
2
- import {
3
- createCancelledError
4
- } from "./cli-8bwaw3pz.js";
5
-
6
- // packages/cli/src/prompt/confirm.ts
7
- import { confirm, isCancel } from "@clack/prompts";
8
- import { Result } from "better-result";
9
- async function promptConfirm(options) {
10
- const confirmOptions = {
11
- message: options.message
12
- };
13
- if (options.initialValue !== undefined) {
14
- confirmOptions.initialValue = options.initialValue;
15
- }
16
- const result = await confirm(confirmOptions);
17
- if (isCancel(result)) {
18
- return Result.err(createCancelledError());
19
- }
20
- return Result.ok(result);
21
- }
22
-
23
- export { promptConfirm };
@@ -1,56 +0,0 @@
1
- import { SpinnerStyle } from "./cli-e5ms1y0x";
2
- import { ListStyle } from "./cli-b0tzqgnf";
3
- import { BorderStyle } from "./cli-fakncnjp";
4
- import { PrimitiveId, PrimitiveMeta, ThemeMethodMeta, VariantMeta } from "./cli-c6pbxpw0";
5
- import { Theme } from "./cli-ykxn7rb2";
6
- /**
7
- * Type-safe metadata for all theme methods.
8
- *
9
- * Uses `keyof Theme` to ensure every theme method has metadata.
10
- * Adding a new method to Theme without updating this causes a compile error.
11
- */
12
- declare const THEME_METHOD_META: Record<keyof Theme, ThemeMethodMeta>;
13
- /**
14
- * Gets theme methods grouped by category.
15
- */
16
- declare function getThemeMethodsByCategory(): {
17
- semantic: Array<keyof Theme>;
18
- utility: Array<keyof Theme>;
19
- };
20
- /**
21
- * Type-safe metadata for all border styles.
22
- */
23
- declare const BORDER_STYLE_META: Record<BorderStyle, VariantMeta<BorderStyle>>;
24
- /**
25
- * Gets all border styles as an array.
26
- */
27
- declare function getBorderStyles(): BorderStyle[];
28
- /**
29
- * Type-safe metadata for all spinner styles.
30
- */
31
- declare const SPINNER_STYLE_META: Record<SpinnerStyle, VariantMeta<SpinnerStyle>>;
32
- /**
33
- * Gets all spinner styles as an array.
34
- */
35
- declare function getSpinnerStyles(): SpinnerStyle[];
36
- /**
37
- * Type-safe metadata for all list styles.
38
- */
39
- declare const LIST_STYLE_META: Record<ListStyle, VariantMeta<ListStyle>>;
40
- /**
41
- * Gets all list styles as an array.
42
- */
43
- declare function getListStyles(): ListStyle[];
44
- /**
45
- * Type-safe metadata for all primitives.
46
- */
47
- declare const PRIMITIVE_META: Record<PrimitiveId, PrimitiveMeta>;
48
- /**
49
- * Gets all primitive IDs as an array.
50
- */
51
- declare function getPrimitiveIds(): PrimitiveId[];
52
- /**
53
- * Gets metadata for a specific primitive.
54
- */
55
- declare function getPrimitiveMeta(id: PrimitiveId): PrimitiveMeta;
56
- export { THEME_METHOD_META, getThemeMethodsByCategory, BORDER_STYLE_META, getBorderStyles, SPINNER_STYLE_META, getSpinnerStyles, LIST_STYLE_META, getListStyles, PRIMITIVE_META, getPrimitiveIds, getPrimitiveMeta };
@@ -1,112 +0,0 @@
1
- import { Theme } from "./cli-ykxn7rb2";
2
- /**
3
- * Available primitive types for demos.
4
- */
5
- type PrimitiveId = "colors" | "borders" | "spinner" | "list" | "box" | "table" | "progress" | "tree" | "text" | "markdown" | "indicators";
6
- /**
7
- * Categorization for theme methods.
8
- */
9
- type ThemeMethodCategory = "semantic" | "utility";
10
- /**
11
- * Metadata for a theme method.
12
- */
13
- interface ThemeMethodMeta {
14
- /** Method category (semantic or utility) */
15
- category: ThemeMethodCategory;
16
- /** Human-readable description */
17
- description: string;
18
- /** Default example text */
19
- defaultExample: string;
20
- }
21
- /**
22
- * Metadata for a primitive variant (spinner styles, border styles, etc).
23
- */
24
- interface VariantMeta<T extends string> {
25
- /** The variant value */
26
- value: T;
27
- /** Human-readable label */
28
- label: string;
29
- /** Description of the variant */
30
- description: string;
31
- }
32
- /**
33
- * Metadata describing a primitive for demo generation.
34
- */
35
- interface PrimitiveMeta {
36
- /** Primitive identifier */
37
- id: PrimitiveId;
38
- /** Human-readable name */
39
- name: string;
40
- /** Brief description */
41
- description: string;
42
- /** Import statement example */
43
- importExample: string;
44
- }
45
- /**
46
- * Customizable example texts for demos.
47
- *
48
- * Keys correspond to theme method names and other example contexts.
49
- */
50
- interface ExampleTexts {
51
- success: string;
52
- warning: string;
53
- error: string;
54
- info: string;
55
- primary: string;
56
- secondary: string;
57
- muted: string;
58
- accent: string;
59
- highlight: string;
60
- link: string;
61
- destructive: string;
62
- subtle: string;
63
- bold: string;
64
- italic: string;
65
- underline: string;
66
- dim: string;
67
- boxContent: string;
68
- boxTitle: string;
69
- spinnerMessage: string;
70
- progressLabel: string;
71
- listItems: string[];
72
- tableData: Record<string, unknown>[];
73
- treeData: Record<string, unknown>;
74
- markdownSample: string;
75
- }
76
- /**
77
- * Configuration for demo rendering.
78
- */
79
- interface DemoConfig {
80
- /**
81
- * Override default example texts.
82
- */
83
- examples?: Partial<ExampleTexts>;
84
- /**
85
- * Whether to show import statements.
86
- * @default true
87
- */
88
- showCode?: boolean;
89
- /**
90
- * Whether to show method/variant descriptions.
91
- * @default true
92
- */
93
- showDescriptions?: boolean;
94
- }
95
- /**
96
- * Function that renders a demo section for a primitive.
97
- */
98
- type DemoRenderer = (config: DemoConfig, theme: Theme) => string;
99
- /**
100
- * Registry entry for a primitive demo.
101
- */
102
- interface DemoRegistryEntry {
103
- /** Primitive metadata */
104
- meta: PrimitiveMeta;
105
- /** Render function */
106
- render: DemoRenderer;
107
- }
108
- /**
109
- * Checks if a string is a valid PrimitiveId.
110
- */
111
- declare function isPrimitiveId(value: string): value is PrimitiveId;
112
- export { PrimitiveId, ThemeMethodCategory, ThemeMethodMeta, VariantMeta, PrimitiveMeta, ExampleTexts, DemoConfig, DemoRenderer, DemoRegistryEntry, isPrimitiveId };
@@ -1,117 +0,0 @@
1
- // @bun
2
- import {
3
- getStringWidth,
4
- init_text,
5
- padText,
6
- truncateText
7
- } from "./cli-mwxsh3sr.js";
8
- import {
9
- getBorderCharacters,
10
- init_borders
11
- } from "./cli-85fg2vr5.js";
12
-
13
- // packages/cli/src/render/table.ts
14
- init_borders();
15
- init_text();
16
- function renderTable(data, options) {
17
- if (data.length === 0) {
18
- return "";
19
- }
20
- const allKeys = new Set;
21
- for (const row of data) {
22
- for (const key of Object.keys(row)) {
23
- allKeys.add(key);
24
- }
25
- }
26
- const keys = Array.from(allKeys);
27
- const headers = options?.headers ?? {};
28
- const getHeader = (key) => headers[key] ?? key;
29
- const columnWidths = {};
30
- for (const key of keys) {
31
- const headerWidth = getStringWidth(getHeader(key));
32
- let maxDataWidth = 0;
33
- for (const row of data) {
34
- const value = row[key];
35
- const strValue = value === undefined || value === null ? "" : String(value);
36
- const width = getStringWidth(strValue);
37
- if (width > maxDataWidth) {
38
- maxDataWidth = width;
39
- }
40
- }
41
- const optionWidth = options?.columnWidths?.[key];
42
- columnWidths[key] = optionWidth ?? Math.max(headerWidth, maxDataWidth);
43
- }
44
- const compact = options?.compact ?? false;
45
- const borderStyle = compact ? "none" : options?.border ?? "single";
46
- const chars = getBorderCharacters(borderStyle);
47
- const hasBorders = borderStyle !== "none";
48
- return hasBorders ? renderWithBorders(data, keys, columnWidths, getHeader, chars) : renderCompact(data, keys, columnWidths, getHeader);
49
- }
50
- function renderWithBorders(data, keys, columnWidths, getHeader, chars) {
51
- const lines = [];
52
- const colWidthsForBorder = keys.map((k) => (columnWidths[k] ?? 0) + 2);
53
- lines.push(drawHorizontalBorder(chars, colWidthsForBorder, "top"));
54
- lines.push(drawDataRow(keys.map((k) => getHeader(k)), keys.map((k) => columnWidths[k] ?? 0), chars.vertical));
55
- lines.push(drawHorizontalBorder(chars, colWidthsForBorder, "middle"));
56
- for (const row of data) {
57
- const values = keys.map((k) => {
58
- const value = row[k];
59
- let strValue = value === undefined || value === null ? "" : String(value);
60
- const width = columnWidths[k] ?? 0;
61
- if (getStringWidth(strValue) > width) {
62
- strValue = truncateText(strValue, width);
63
- }
64
- return strValue;
65
- });
66
- lines.push(drawDataRow(values, keys.map((k) => columnWidths[k] ?? 0), chars.vertical));
67
- }
68
- lines.push(drawHorizontalBorder(chars, colWidthsForBorder, "bottom"));
69
- return lines.join(`
70
- `);
71
- }
72
- function renderCompact(data, keys, columnWidths, getHeader) {
73
- const lines = [];
74
- const headerValues = keys.map((k) => {
75
- const header = getHeader(k);
76
- const width = columnWidths[k] ?? 0;
77
- return padText(header, width);
78
- });
79
- lines.push(headerValues.join(" "));
80
- for (const row of data) {
81
- const values = keys.map((k) => {
82
- const value = row[k];
83
- let strValue = value === undefined || value === null ? "" : String(value);
84
- const width = columnWidths[k] ?? 0;
85
- if (getStringWidth(strValue) > width) {
86
- strValue = truncateText(strValue, width);
87
- }
88
- return padText(strValue, width);
89
- });
90
- lines.push(values.join(" "));
91
- }
92
- return lines.join(`
93
- `);
94
- }
95
- function drawHorizontalBorder(chars, colWidths, position) {
96
- const positionChars = {
97
- top: { left: chars.topLeft, right: chars.topRight, cross: chars.topT },
98
- middle: { left: chars.leftT, right: chars.rightT, cross: chars.cross },
99
- bottom: {
100
- left: chars.bottomLeft,
101
- right: chars.bottomRight,
102
- cross: chars.bottomT
103
- }
104
- };
105
- const { left, right, cross } = positionChars[position];
106
- const segments = colWidths.map((w) => chars.horizontal.repeat(w));
107
- return `${left}${segments.join(cross)}${right}`;
108
- }
109
- function drawDataRow(values, widths, vertical) {
110
- const cells = values.map((value, i) => {
111
- const width = widths[i] ?? 0;
112
- return ` ${padText(value, width)} `;
113
- });
114
- return `${vertical}${cells.join(vertical)}${vertical}`;
115
- }
116
-
117
- export { renderTable };
@@ -1,144 +0,0 @@
1
- // @bun
2
- // packages/cli/src/render/date.ts
3
- import { Result, ValidationError } from "@outfitter/contracts";
4
- var ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/;
5
- var NAMED_RANGES = ["today", "yesterday", "last week", "last month"];
6
- function startOfDay(date) {
7
- const result = new Date(date);
8
- result.setHours(0, 0, 0, 0);
9
- return result;
10
- }
11
- function endOfDay(date) {
12
- const result = new Date(date);
13
- result.setHours(23, 59, 59, 999);
14
- return result;
15
- }
16
- function isNamedRange(input) {
17
- return NAMED_RANGES.includes(input);
18
- }
19
- function parseNamedRange(name) {
20
- const now = new Date(Date.now());
21
- switch (name) {
22
- case "today": {
23
- return {
24
- start: startOfDay(now),
25
- end: endOfDay(now)
26
- };
27
- }
28
- case "yesterday": {
29
- const yesterday = new Date(now);
30
- yesterday.setDate(yesterday.getDate() - 1);
31
- return {
32
- start: startOfDay(yesterday),
33
- end: endOfDay(yesterday)
34
- };
35
- }
36
- case "last week": {
37
- const weekAgo = new Date(now);
38
- weekAgo.setDate(weekAgo.getDate() - 7);
39
- return {
40
- start: startOfDay(weekAgo),
41
- end: endOfDay(now)
42
- };
43
- }
44
- case "last month": {
45
- const monthAgo = new Date(now);
46
- monthAgo.setDate(monthAgo.getDate() - 30);
47
- return {
48
- start: startOfDay(monthAgo),
49
- end: endOfDay(now)
50
- };
51
- }
52
- default: {
53
- const _exhaustive = name;
54
- throw new Error(`Unhandled named range: ${_exhaustive}`);
55
- }
56
- }
57
- }
58
- function parseIsoDate(dateStr) {
59
- if (!ISO_DATE_REGEX.test(dateStr)) {
60
- return null;
61
- }
62
- const parts = dateStr.split("-");
63
- const yearStr = parts[0];
64
- const monthStr = parts[1];
65
- const dayStr = parts[2];
66
- if (yearStr === undefined || monthStr === undefined || dayStr === undefined) {
67
- return null;
68
- }
69
- const year = Number.parseInt(yearStr, 10);
70
- const month = Number.parseInt(monthStr, 10) - 1;
71
- const day = Number.parseInt(dayStr, 10);
72
- const date = new Date(year, month, day);
73
- if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {
74
- return null;
75
- }
76
- return date;
77
- }
78
- function parseDateRange(input) {
79
- const trimmed = input.trim();
80
- if (trimmed === "") {
81
- return Result.err(new ValidationError({
82
- message: "Date range input cannot be empty",
83
- field: "dateRange"
84
- }));
85
- }
86
- const normalized = trimmed.toLowerCase();
87
- if (isNamedRange(normalized)) {
88
- return Result.ok(parseNamedRange(normalized));
89
- }
90
- if (trimmed.includes("..")) {
91
- const parts = trimmed.split("..");
92
- if (parts.length !== 2 || parts[0] === "" || parts[1] === "") {
93
- return Result.err(new ValidationError({
94
- message: 'Invalid date range format. Expected "YYYY-MM-DD..YYYY-MM-DD"',
95
- field: "dateRange"
96
- }));
97
- }
98
- const startStr = parts[0];
99
- const endStr = parts[1];
100
- if (startStr === undefined || endStr === undefined) {
101
- return Result.err(new ValidationError({
102
- message: 'Invalid date range format. Expected "YYYY-MM-DD..YYYY-MM-DD"',
103
- field: "dateRange"
104
- }));
105
- }
106
- const startDate = parseIsoDate(startStr);
107
- const endDate = parseIsoDate(endStr);
108
- if (startDate === null) {
109
- return Result.err(new ValidationError({
110
- message: `Invalid start date: "${startStr}". Expected format: YYYY-MM-DD`,
111
- field: "dateRange"
112
- }));
113
- }
114
- if (endDate === null) {
115
- return Result.err(new ValidationError({
116
- message: `Invalid end date: "${endStr}". Expected format: YYYY-MM-DD`,
117
- field: "dateRange"
118
- }));
119
- }
120
- if (startDate.getTime() > endDate.getTime()) {
121
- return Result.err(new ValidationError({
122
- message: "Invalid date range: start date must be before or equal to end date",
123
- field: "dateRange"
124
- }));
125
- }
126
- return Result.ok({
127
- start: startOfDay(startDate),
128
- end: endOfDay(endDate)
129
- });
130
- }
131
- const singleDate = parseIsoDate(trimmed);
132
- if (singleDate !== null) {
133
- return Result.ok({
134
- start: startOfDay(singleDate),
135
- end: endOfDay(singleDate)
136
- });
137
- }
138
- return Result.err(new ValidationError({
139
- message: `Unrecognized date range: "${trimmed}". Expected "today", "yesterday", "last week", "last month", "YYYY-MM-DD", or "YYYY-MM-DD..YYYY-MM-DD"`,
140
- field: "dateRange"
141
- }));
142
- }
143
-
144
- export { startOfDay, endOfDay, parseDateRange };
@@ -1,30 +0,0 @@
1
- /**
2
- * Renders markdown to terminal with ANSI styling.
3
- *
4
- * Supports the following markdown elements:
5
- * - Headings (`# Heading`) - rendered bold
6
- * - Bold (`**text**` or `__text__`) - rendered bold
7
- * - Italic (`*text*` or `_text_`) - rendered italic
8
- * - Inline code (`` `code` ``) - rendered cyan
9
- * - Code blocks (` ``` `) - rendered dim
10
- *
11
- * When colors are not supported, markdown syntax is stripped
12
- * but text content is preserved.
13
- *
14
- * @param markdown - Markdown text to render
15
- * @returns Terminal-formatted string with ANSI codes
16
- *
17
- * @example
18
- * ```typescript
19
- * const md = `# Heading
20
- *
21
- * Some **bold** and *italic* text.
22
- *
23
- * Use \`npm install\` to install.
24
- * `;
25
- *
26
- * console.log(renderMarkdown(md));
27
- * ```
28
- */
29
- declare function renderMarkdown(markdown: string): string;
30
- export { renderMarkdown };
@@ -1,53 +0,0 @@
1
- /**
2
- * Minimal writable stream interface.
3
- */
4
- interface WritableStream {
5
- write(str: string): boolean;
6
- isTTY?: boolean;
7
- }
8
- /**
9
- * Options for creating a stream writer.
10
- */
11
- interface StreamWriterOptions {
12
- /** Target stream (defaults to process.stdout) */
13
- stream?: WritableStream;
14
- }
15
- /**
16
- * Interface for managing in-place terminal output.
17
- */
18
- interface StreamWriter {
19
- /** Write content (replaces current content) */
20
- write(content: string): void;
21
- /** Update content in place */
22
- update(content: string): void;
23
- /** Persist current content and move to new line */
24
- persist(): void;
25
- /** Clear current content */
26
- clear(): void;
27
- }
28
- /**
29
- * Creates a stream writer for in-place terminal updates.
30
- *
31
- * The writer tracks the number of lines written and can update them in place.
32
- * In non-TTY mode, it falls back to simple line-by-line output.
33
- *
34
- * @param options - Writer configuration
35
- * @returns StreamWriter instance
36
- *
37
- * @example
38
- * ```typescript
39
- * import { createStreamWriter } from "@outfitter/cli/streaming";
40
- *
41
- * const writer = createStreamWriter();
42
- *
43
- * writer.write("Processing...");
44
- * // Do some work
45
- * writer.update("Processing... 50%");
46
- * // Do more work
47
- * writer.update("Processing... 100%");
48
- * writer.persist();
49
- * writer.write("Done!");
50
- * ```
51
- */
52
- declare function createStreamWriter(options?: StreamWriterOptions): StreamWriter;
53
- export { WritableStream, StreamWriterOptions, StreamWriter, createStreamWriter };
@@ -1,42 +0,0 @@
1
- /**
2
- * Formatting utilities for human-readable output.
3
- *
4
- * Provides functions to format durations and byte sizes.
5
- *
6
- * @packageDocumentation
7
- */
8
- /**
9
- * Formats milliseconds as human-readable duration.
10
- *
11
- * Converts milliseconds to a compact, human-friendly format using
12
- * h (hours), m (minutes), s (seconds), or ms (milliseconds).
13
- *
14
- * @param ms - Duration in milliseconds
15
- * @returns Human-friendly duration string
16
- *
17
- * @example
18
- * ```typescript
19
- * formatDuration(150) // "150ms"
20
- * formatDuration(45000) // "45s"
21
- * formatDuration(9015000) // "2h 30m 15s"
22
- * ```
23
- */
24
- declare function formatDuration(ms: number): string;
25
- /**
26
- * Formats bytes as human-readable size.
27
- *
28
- * Converts bytes to a compact format using appropriate units
29
- * (B, KB, MB, GB, TB). Uses 1024-based (binary) units.
30
- *
31
- * @param bytes - Size in bytes
32
- * @returns Human-friendly size string
33
- *
34
- * @example
35
- * ```typescript
36
- * formatBytes(500) // "500 B"
37
- * formatBytes(1536) // "1.5 KB"
38
- * formatBytes(1073741824) // "1 GB"
39
- * ```
40
- */
41
- declare function formatBytes(bytes: number): string;
42
- export { formatDuration, formatBytes };