@seedcli/print 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 (54) hide show
  1. package/LICENSE +21 -0
  2. package/dist/box.d.ts +26 -0
  3. package/dist/box.d.ts.map +1 -0
  4. package/dist/box.js +30 -0
  5. package/dist/box.js.map +1 -0
  6. package/dist/colors.d.ts +3 -0
  7. package/dist/colors.d.ts.map +1 -0
  8. package/dist/colors.js +3 -0
  9. package/dist/colors.js.map +1 -0
  10. package/dist/divider.d.ts +9 -0
  11. package/dist/divider.d.ts.map +1 -0
  12. package/dist/divider.js +19 -0
  13. package/dist/divider.js.map +1 -0
  14. package/dist/figlet.d.ts +9 -0
  15. package/dist/figlet.d.ts.map +1 -0
  16. package/dist/figlet.js +12 -0
  17. package/dist/figlet.js.map +1 -0
  18. package/dist/format.d.ts +8 -0
  19. package/dist/format.d.ts.map +1 -0
  20. package/dist/format.js +44 -0
  21. package/dist/format.js.map +1 -0
  22. package/dist/index.d.ts +21 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +12 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/keyValue.d.ts +12 -0
  27. package/dist/keyValue.d.ts.map +1 -0
  28. package/dist/keyValue.js +20 -0
  29. package/dist/keyValue.js.map +1 -0
  30. package/dist/log.d.ts +15 -0
  31. package/dist/log.d.ts.map +1 -0
  32. package/dist/log.js +76 -0
  33. package/dist/log.js.map +1 -0
  34. package/dist/progress.d.ts +13 -0
  35. package/dist/progress.d.ts.map +1 -0
  36. package/dist/progress.js +27 -0
  37. package/dist/progress.js.map +1 -0
  38. package/dist/spinner.d.ts +14 -0
  39. package/dist/spinner.d.ts.map +1 -0
  40. package/dist/spinner.js +34 -0
  41. package/dist/spinner.js.map +1 -0
  42. package/dist/table.d.ts +16 -0
  43. package/dist/table.d.ts.map +1 -0
  44. package/dist/table.js +170 -0
  45. package/dist/table.js.map +1 -0
  46. package/dist/tree.d.ts +10 -0
  47. package/dist/tree.d.ts.map +1 -0
  48. package/dist/tree.js +24 -0
  49. package/dist/tree.js.map +1 -0
  50. package/dist/types.d.ts +29 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. package/package.json +51 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Seed CLI Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/box.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ export interface BoxOptions {
2
+ title?: string;
3
+ titleAlignment?: "left" | "center" | "right";
4
+ padding?: number | {
5
+ top?: number;
6
+ right?: number;
7
+ bottom?: number;
8
+ left?: number;
9
+ };
10
+ margin?: number | {
11
+ top?: number;
12
+ right?: number;
13
+ bottom?: number;
14
+ left?: number;
15
+ };
16
+ borderStyle?: "single" | "double" | "round" | "bold" | "singleDouble" | "doubleSingle" | "classic" | "arrow" | "none";
17
+ borderColor?: string;
18
+ backgroundColor?: string;
19
+ textAlignment?: "left" | "center" | "right";
20
+ width?: number;
21
+ fullscreen?: boolean;
22
+ dimBorder?: boolean;
23
+ float?: "left" | "center" | "right";
24
+ }
25
+ export declare function box(text: string, options?: BoxOptions): string;
26
+ //# sourceMappingURL=box.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../src/box.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpF,MAAM,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,WAAW,CAAC,EACT,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,MAAM,GACN,cAAc,GACd,cAAc,GACd,SAAS,GACT,OAAO,GACP,MAAM,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACpC;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAkB9D"}
package/dist/box.js ADDED
@@ -0,0 +1,30 @@
1
+ import boxen from "boxen";
2
+ export function box(text, options) {
3
+ const opts = {
4
+ borderStyle: options?.borderStyle ?? "round",
5
+ };
6
+ if (options?.title !== undefined)
7
+ opts.title = options.title;
8
+ if (options?.titleAlignment !== undefined)
9
+ opts.titleAlignment = options.titleAlignment;
10
+ if (options?.padding !== undefined)
11
+ opts.padding = options.padding;
12
+ if (options?.margin !== undefined)
13
+ opts.margin = options.margin;
14
+ if (options?.borderColor !== undefined)
15
+ opts.borderColor = options.borderColor;
16
+ if (options?.backgroundColor !== undefined)
17
+ opts.backgroundColor = options.backgroundColor;
18
+ if (options?.textAlignment !== undefined)
19
+ opts.textAlignment = options.textAlignment;
20
+ if (options?.width !== undefined)
21
+ opts.width = options.width;
22
+ if (options?.fullscreen !== undefined)
23
+ opts.fullscreen = options.fullscreen;
24
+ if (options?.dimBorder !== undefined)
25
+ opts.dimBorder = options.dimBorder;
26
+ if (options?.float !== undefined)
27
+ opts.float = options.float;
28
+ return boxen(text, opts);
29
+ }
30
+ //# sourceMappingURL=box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box.js","sourceRoot":"","sources":["../src/box.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA0B1B,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,OAAoB;IACrD,MAAM,IAAI,GAA4B;QACrC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,OAAO;KAC5C,CAAC;IAEF,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7D,IAAI,OAAO,EAAE,cAAc,KAAK,SAAS;QAAE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IACxF,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACnE,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAChE,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAC/E,IAAI,OAAO,EAAE,eAAe,KAAK,SAAS;QAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAC3F,IAAI,OAAO,EAAE,aAAa,KAAK,SAAS;QAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IACrF,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7D,IAAI,OAAO,EAAE,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAC5E,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACzE,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE7D,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import chalk from "chalk";
2
+ export { chalk as colors };
3
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,CAAC"}
package/dist/colors.js ADDED
@@ -0,0 +1,3 @@
1
+ import chalk from "chalk";
2
+ export { chalk as colors };
3
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface DividerOptions {
2
+ width?: number;
3
+ char?: string;
4
+ title?: string;
5
+ color?: (text: string) => string;
6
+ padding?: number;
7
+ }
8
+ export declare function divider(options?: DividerOptions): string;
9
+ //# sourceMappingURL=divider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divider.d.ts","sourceRoot":"","sources":["../src/divider.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAkBxD"}
@@ -0,0 +1,19 @@
1
+ import chalk from "chalk";
2
+ export function divider(options) {
3
+ const width = options?.width ?? process.stdout.columns ?? 80;
4
+ const char = options?.char ?? "─";
5
+ const color = options?.color ?? chalk.gray;
6
+ const _padding = options?.padding ?? 1;
7
+ if (!options?.title) {
8
+ return color(char.repeat(width));
9
+ }
10
+ const title = ` ${options.title} `;
11
+ const titleLen = title.length;
12
+ const remaining = width - titleLen;
13
+ if (remaining <= 0)
14
+ return color(title);
15
+ const left = Math.floor(remaining / 2);
16
+ const right = remaining - left;
17
+ return color(char.repeat(left)) + title + color(char.repeat(right));
18
+ }
19
+ //# sourceMappingURL=divider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divider.js","sourceRoot":"","sources":["../src/divider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,MAAM,UAAU,OAAO,CAAC,OAAwB;IAC/C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,GAAG,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC;IAEvC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9B,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;IACnC,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;IAExC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface FigletOptions {
2
+ font?: string;
3
+ horizontalLayout?: "default" | "full" | "fitted" | "controlled smushing" | "universal smushing";
4
+ verticalLayout?: "default" | "full" | "fitted" | "controlled smushing" | "universal smushing";
5
+ width?: number;
6
+ whitespaceBreak?: boolean;
7
+ }
8
+ export declare function ascii(text: string, options?: FigletOptions): string;
9
+ //# sourceMappingURL=figlet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figlet.d.ts","sourceRoot":"","sources":["../src/figlet.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;IAChG,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAQnE"}
package/dist/figlet.js ADDED
@@ -0,0 +1,12 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
2
+ import figlet from "figlet";
3
+ export function ascii(text, options) {
4
+ return figlet.textSync(text, {
5
+ font: options?.font ?? "Standard",
6
+ horizontalLayout: options?.horizontalLayout,
7
+ verticalLayout: options?.verticalLayout,
8
+ width: options?.width,
9
+ whitespaceBreak: options?.whitespaceBreak,
10
+ });
11
+ }
12
+ //# sourceMappingURL=figlet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figlet.js","sourceRoot":"","sources":["../src/figlet.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,OAAO,MAAM,MAAM,QAAQ,CAAC;AAU5B,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,OAAuB;IAC1D,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC5B,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,UAAU;QACjC,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;QAC3C,cAAc,EAAE,OAAO,EAAE,cAAc;QACvC,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,eAAe,EAAE,OAAO,EAAE,eAAe;KACd,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function indent(text: string, spaces?: number): string;
2
+ export declare function wrap(text: string, width?: number): string;
3
+ export declare function columns(items: string[], options?: {
4
+ width?: number;
5
+ padding?: number;
6
+ columns?: number;
7
+ }): string;
8
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAMvD;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAuBrD;AAED,wBAAgB,OAAO,CACtB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,MAAM,CAeR"}
package/dist/format.js ADDED
@@ -0,0 +1,44 @@
1
+ export function indent(text, spaces = 2) {
2
+ const pad = " ".repeat(spaces);
3
+ return text
4
+ .split("\n")
5
+ .map((line) => pad + line)
6
+ .join("\n");
7
+ }
8
+ export function wrap(text, width = 80) {
9
+ if (text.length <= width)
10
+ return text;
11
+ const words = text.split(" ");
12
+ const lines = [];
13
+ let currentLine = "";
14
+ for (const word of words) {
15
+ if (currentLine.length === 0) {
16
+ currentLine = word;
17
+ }
18
+ else if (currentLine.length + 1 + word.length <= width) {
19
+ currentLine += ` ${word}`;
20
+ }
21
+ else {
22
+ lines.push(currentLine);
23
+ currentLine = word;
24
+ }
25
+ }
26
+ if (currentLine.length > 0) {
27
+ lines.push(currentLine);
28
+ }
29
+ return lines.join("\n");
30
+ }
31
+ export function columns(items, options) {
32
+ const termWidth = options?.width ?? process.stdout.columns ?? 80;
33
+ const padding = options?.padding ?? 2;
34
+ const maxItemLen = Math.max(...items.map((i) => i.length), 0);
35
+ const colWidth = maxItemLen + padding;
36
+ const numCols = options?.columns ?? Math.max(1, Math.floor(termWidth / colWidth));
37
+ const lines = [];
38
+ for (let i = 0; i < items.length; i += numCols) {
39
+ const row = items.slice(i, i + numCols);
40
+ lines.push(row.map((item) => item.padEnd(colWidth)).join(""));
41
+ }
42
+ return lines.join("\n");
43
+ }
44
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,MAAM,GAAG,CAAC;IAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,IAAI;SACT,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC;SACzB,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,KAAK,GAAG,EAAE;IAC5C,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,WAAW,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;YAC1D,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,WAAW,GAAG,IAAI,CAAC;QACpB,CAAC;IACF,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,OAAO,CACtB,KAAe,EACf,OAAgE;IAEhE,MAAM,SAAS,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC;IAEtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;IAClF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type { BoxOptions } from "./box.js";
2
+ export { box } from "./box.js";
3
+ export { colors } from "./colors.js";
4
+ export type { DividerOptions } from "./divider.js";
5
+ export { divider } from "./divider.js";
6
+ export type { FigletOptions } from "./figlet.js";
7
+ export { ascii, ascii as figlet } from "./figlet.js";
8
+ export { columns, indent, wrap } from "./format.js";
9
+ export type { KeyValueOptions, KeyValuePair } from "./keyValue.js";
10
+ export { keyValue } from "./keyValue.js";
11
+ export { debug, error, highlight, info, muted, newline, print, setDebugMode, success, warning, } from "./log.js";
12
+ export type { ProgressBar, ProgressBarOptions } from "./progress.js";
13
+ export { progressBar } from "./progress.js";
14
+ export type { Spinner } from "./spinner.js";
15
+ export { spin } from "./spinner.js";
16
+ export type { Alignment, BorderStyle, ColumnConfig, TableOptions } from "./table.js";
17
+ export { table } from "./table.js";
18
+ export type { TreeNode, TreeOptions } from "./tree.js";
19
+ export { tree } from "./tree.js";
20
+ export type { PrintModule } from "./types.js";
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACN,KAAK,EACL,KAAK,EACL,SAAS,EACT,IAAI,EACJ,KAAK,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,OAAO,EACP,OAAO,GACP,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ export { box } from "./box.js";
2
+ export { colors } from "./colors.js";
3
+ export { divider } from "./divider.js";
4
+ export { ascii, ascii as figlet } from "./figlet.js";
5
+ export { columns, indent, wrap } from "./format.js";
6
+ export { keyValue } from "./keyValue.js";
7
+ export { debug, error, highlight, info, muted, newline, print, setDebugMode, success, warning, } from "./log.js";
8
+ export { progressBar } from "./progress.js";
9
+ export { spin } from "./spinner.js";
10
+ export { table } from "./table.js";
11
+ export { tree } from "./tree.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACN,KAAK,EACL,KAAK,EACL,SAAS,EACT,IAAI,EACJ,KAAK,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,OAAO,EACP,OAAO,GACP,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface KeyValueOptions {
2
+ separator?: string;
3
+ keyColor?: (text: string) => string;
4
+ valueColor?: (text: string) => string;
5
+ indent?: number;
6
+ }
7
+ export interface KeyValuePair {
8
+ key: string;
9
+ value: string;
10
+ }
11
+ export declare function keyValue(pairs: KeyValuePair[] | Record<string, string>, options?: KeyValueOptions): string;
12
+ //# sourceMappingURL=keyValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyValue.d.ts","sourceRoot":"","sources":["../src/keyValue.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,QAAQ,CACvB,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9C,OAAO,CAAC,EAAE,eAAe,GACvB,MAAM,CAoBR"}
@@ -0,0 +1,20 @@
1
+ import chalk from "chalk";
2
+ export function keyValue(pairs, options) {
3
+ const separator = options?.separator ?? ": ";
4
+ const keyColor = options?.keyColor ?? chalk.bold;
5
+ const valueColor = options?.valueColor ?? ((t) => t);
6
+ const indentStr = " ".repeat(options?.indent ?? 0);
7
+ const entries = Array.isArray(pairs)
8
+ ? pairs
9
+ : Object.entries(pairs).map(([key, value]) => ({ key, value }));
10
+ if (entries.length === 0)
11
+ return "";
12
+ const maxKeyLen = Math.max(...entries.map((e) => e.key.length));
13
+ return entries
14
+ .map((entry) => {
15
+ const paddedKey = entry.key.padEnd(maxKeyLen);
16
+ return `${indentStr}${keyColor(paddedKey)}${separator}${valueColor(entry.value)}`;
17
+ })
18
+ .join("\n");
19
+ }
20
+ //# sourceMappingURL=keyValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyValue.js","sourceRoot":"","sources":["../src/keyValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,MAAM,UAAU,QAAQ,CACvB,KAA8C,EAC9C,OAAyB;IAEzB,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAmB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACnD,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhE,OAAO,OAAO;SACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACd,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IACnF,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
package/dist/log.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import type { PrintModule } from "./types.js";
2
+ export declare function setDebugMode(enabled: boolean): void;
3
+ export declare function info(message: string): void;
4
+ export declare function success(message: string): void;
5
+ export declare function warning(message: string): void;
6
+ export declare function error(message: string): void;
7
+ export declare function debug(message: string): void;
8
+ export declare function highlight(message: string): void;
9
+ export declare function muted(message: string): void;
10
+ export declare function newline(count?: number): void;
11
+ /**
12
+ * The print module object — passed to commands via the toolbox.
13
+ */
14
+ export declare const print: PrintModule;
15
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEnD;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,OAAO,CAAC,KAAK,SAAI,GAAG,IAAI,CAIvC;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,WA8BnB,CAAC"}
package/dist/log.js ADDED
@@ -0,0 +1,76 @@
1
+ import chalk from "chalk";
2
+ import { box as renderBox } from "./box.js";
3
+ import { divider as renderDivider } from "./divider.js";
4
+ import { ascii as renderAscii } from "./figlet.js";
5
+ import { keyValue as renderKeyValue } from "./keyValue.js";
6
+ import { progressBar } from "./progress.js";
7
+ import { spin } from "./spinner.js";
8
+ import { table as renderTable } from "./table.js";
9
+ import { tree as renderTree } from "./tree.js";
10
+ let debugEnabled = false;
11
+ export function setDebugMode(enabled) {
12
+ debugEnabled = enabled;
13
+ }
14
+ export function info(message) {
15
+ console.log(message);
16
+ }
17
+ export function success(message) {
18
+ console.log(chalk.green(`✔ ${message}`));
19
+ }
20
+ export function warning(message) {
21
+ console.log(chalk.yellow(`⚠ ${message}`));
22
+ }
23
+ export function error(message) {
24
+ console.error(chalk.red(`✖ ${message}`));
25
+ }
26
+ export function debug(message) {
27
+ if (debugEnabled) {
28
+ console.log(chalk.gray(`● ${message}`));
29
+ }
30
+ }
31
+ export function highlight(message) {
32
+ console.log(chalk.cyan.bold(message));
33
+ }
34
+ export function muted(message) {
35
+ console.log(chalk.gray(message));
36
+ }
37
+ export function newline(count = 1) {
38
+ for (let i = 0; i < count; i++) {
39
+ console.log();
40
+ }
41
+ }
42
+ /**
43
+ * The print module object — passed to commands via the toolbox.
44
+ */
45
+ export const print = {
46
+ info,
47
+ success,
48
+ warning,
49
+ error,
50
+ debug,
51
+ highlight,
52
+ muted,
53
+ newline,
54
+ colors: chalk,
55
+ spin,
56
+ table(rows, options) {
57
+ console.log(renderTable(rows, options));
58
+ },
59
+ box(text, options) {
60
+ console.log(renderBox(text, options));
61
+ },
62
+ ascii(text, options) {
63
+ console.log(renderAscii(text, options));
64
+ },
65
+ tree(root, options) {
66
+ console.log(renderTree(root, options));
67
+ },
68
+ keyValue(pairs, options) {
69
+ console.log(renderKeyValue(pairs, options));
70
+ },
71
+ divider(options) {
72
+ console.log(renderDivider(options));
73
+ },
74
+ progressBar,
75
+ };
76
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface ProgressBarOptions {
2
+ total: number;
3
+ width?: number;
4
+ complete?: string;
5
+ incomplete?: string;
6
+ format?: string;
7
+ }
8
+ export interface ProgressBar {
9
+ update(current: number): string;
10
+ done(): string;
11
+ }
12
+ export declare function progressBar(options: ProgressBarOptions): ProgressBar;
13
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC3B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,IAAI,IAAI,MAAM,CAAC;CACf;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA4BpE"}
@@ -0,0 +1,27 @@
1
+ export function progressBar(options) {
2
+ const { total, width = 30, complete = "█", incomplete = "░" } = options;
3
+ const format = options.format ?? ":bar :percent";
4
+ function render(current) {
5
+ const ratio = Math.min(Math.max(current / total, 0), 1);
6
+ const filled = Math.round(width * ratio);
7
+ const empty = width - filled;
8
+ const bar = complete.repeat(filled) + incomplete.repeat(empty);
9
+ const percent = `${Math.round(ratio * 100)}%`;
10
+ const eta = current >= total ? "0s" : "";
11
+ return format
12
+ .replace(":bar", bar)
13
+ .replace(":percent", percent)
14
+ .replace(":current", String(current))
15
+ .replace(":total", String(total))
16
+ .replace(":eta", eta);
17
+ }
18
+ return {
19
+ update(current) {
20
+ return render(current);
21
+ },
22
+ done() {
23
+ return render(total);
24
+ },
25
+ };
26
+ }
27
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,WAAW,CAAC,OAA2B;IACtD,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,GAAG,GAAG,EAAE,UAAU,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IACxE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC;IAEjD,SAAS,MAAM,CAAC,OAAe;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;QAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;QAC9C,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzC,OAAO,MAAM;aACX,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC;aAC5B,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;aACpC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;aAChC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACN,MAAM,CAAC,OAAe;YACrB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,IAAI;YACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface Spinner {
2
+ text: string;
3
+ succeed(text?: string): void;
4
+ fail(text?: string): void;
5
+ warn(text?: string): void;
6
+ info(text?: string): void;
7
+ stop(): void;
8
+ isSpinning: boolean;
9
+ }
10
+ /**
11
+ * Create a spinner with the given message.
12
+ */
13
+ export declare function spin(message: string): Spinner;
14
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../src/spinner.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,IAAI,IAAI,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA6B7C"}
@@ -0,0 +1,34 @@
1
+ import ora from "ora";
2
+ /**
3
+ * Create a spinner with the given message.
4
+ */
5
+ export function spin(message) {
6
+ const spinner = ora(message).start();
7
+ return {
8
+ get text() {
9
+ return spinner.text;
10
+ },
11
+ set text(value) {
12
+ spinner.text = value;
13
+ },
14
+ succeed(text) {
15
+ spinner.succeed(text);
16
+ },
17
+ fail(text) {
18
+ spinner.fail(text);
19
+ },
20
+ warn(text) {
21
+ spinner.warn(text);
22
+ },
23
+ info(text) {
24
+ spinner.info(text);
25
+ },
26
+ stop() {
27
+ spinner.stop();
28
+ },
29
+ get isSpinning() {
30
+ return spinner.isSpinning;
31
+ },
32
+ };
33
+ }
34
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../src/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAYtB;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IAErC,OAAO;QACN,IAAI,IAAI;YACP,OAAO,OAAO,CAAC,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,KAAa;YACrB,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,IAAa;YACpB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,IAAa;YACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,IAAa;YACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,IAAa;YACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,UAAU;YACb,OAAO,OAAO,CAAC,UAAU,CAAC;QAC3B,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type BorderStyle = "single" | "double" | "rounded" | "bold" | "none";
2
+ export type Alignment = "left" | "center" | "right";
3
+ export interface ColumnConfig {
4
+ alignment?: Alignment;
5
+ width?: number;
6
+ truncate?: boolean;
7
+ }
8
+ export interface TableOptions {
9
+ headers?: string[];
10
+ border?: BorderStyle;
11
+ columns?: Record<number, ColumnConfig>;
12
+ maxWidth?: number;
13
+ headerColor?: (text: string) => string;
14
+ }
15
+ export declare function table(rows: string[][], options?: TableOptions): string;
16
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAC5E,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACvC;AA0GD,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAsFtE"}
package/dist/table.js ADDED
@@ -0,0 +1,170 @@
1
+ import chalk from "chalk";
2
+ const BORDERS = {
3
+ single: {
4
+ topLeft: "┌",
5
+ topRight: "┐",
6
+ bottomLeft: "└",
7
+ bottomRight: "┘",
8
+ horizontal: "─",
9
+ vertical: "│",
10
+ topMiddle: "┬",
11
+ bottomMiddle: "┴",
12
+ leftMiddle: "├",
13
+ rightMiddle: "┤",
14
+ middle: "┼",
15
+ },
16
+ double: {
17
+ topLeft: "╔",
18
+ topRight: "╗",
19
+ bottomLeft: "╚",
20
+ bottomRight: "╝",
21
+ horizontal: "═",
22
+ vertical: "║",
23
+ topMiddle: "╦",
24
+ bottomMiddle: "╩",
25
+ leftMiddle: "╠",
26
+ rightMiddle: "╣",
27
+ middle: "╬",
28
+ },
29
+ rounded: {
30
+ topLeft: "╭",
31
+ topRight: "╮",
32
+ bottomLeft: "╰",
33
+ bottomRight: "╯",
34
+ horizontal: "─",
35
+ vertical: "│",
36
+ topMiddle: "┬",
37
+ bottomMiddle: "┴",
38
+ leftMiddle: "├",
39
+ rightMiddle: "┤",
40
+ middle: "┼",
41
+ },
42
+ bold: {
43
+ topLeft: "┏",
44
+ topRight: "┓",
45
+ bottomLeft: "┗",
46
+ bottomRight: "┛",
47
+ horizontal: "━",
48
+ vertical: "┃",
49
+ topMiddle: "┳",
50
+ bottomMiddle: "┻",
51
+ leftMiddle: "┣",
52
+ rightMiddle: "┫",
53
+ middle: "╋",
54
+ },
55
+ };
56
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape sequence stripping requires control chars
57
+ const ANSI_REGEX = /\x1B\[[0-9;]*m/g;
58
+ function stripAnsi(str) {
59
+ return str.replace(ANSI_REGEX, "");
60
+ }
61
+ function visibleLength(str) {
62
+ return stripAnsi(str).length;
63
+ }
64
+ function padCell(text, width, alignment) {
65
+ const visible = visibleLength(text);
66
+ const diff = width - visible;
67
+ if (diff <= 0)
68
+ return text;
69
+ switch (alignment) {
70
+ case "right":
71
+ return " ".repeat(diff) + text;
72
+ case "center": {
73
+ const left = Math.floor(diff / 2);
74
+ const right = diff - left;
75
+ return " ".repeat(left) + text + " ".repeat(right);
76
+ }
77
+ default:
78
+ return text + " ".repeat(diff);
79
+ }
80
+ }
81
+ function truncateStr(str, maxLen) {
82
+ if (visibleLength(str) <= maxLen)
83
+ return str;
84
+ const plain = stripAnsi(str);
85
+ return `${plain.slice(0, Math.max(0, maxLen - 1))}…`;
86
+ }
87
+ export function table(rows, options) {
88
+ if (rows.length === 0 && !options?.headers)
89
+ return "";
90
+ const border = options?.border ?? "single";
91
+ const allRows = options?.headers ? [options.headers, ...rows] : rows;
92
+ const colCount = Math.max(...allRows.map((r) => r.length));
93
+ const headerColor = options?.headerColor ?? ((t) => chalk.bold(t));
94
+ // Calculate column widths
95
+ const colWidths = [];
96
+ for (let c = 0; c < colCount; c++) {
97
+ const configWidth = options?.columns?.[c]?.width;
98
+ if (configWidth) {
99
+ colWidths[c] = configWidth;
100
+ }
101
+ else {
102
+ let max = 0;
103
+ for (const row of allRows) {
104
+ const cell = row[c] ?? "";
105
+ max = Math.max(max, visibleLength(cell));
106
+ }
107
+ colWidths[c] = max;
108
+ }
109
+ }
110
+ // Apply max width constraint
111
+ const maxWidth = options?.maxWidth ?? process.stdout.columns ?? 120;
112
+ const borderOverhead = border === "none" ? (colCount - 1) * 3 : (colCount + 1) * 3 - 2;
113
+ const availableWidth = maxWidth - borderOverhead;
114
+ const totalWidth = colWidths.reduce((a, b) => a + b, 0);
115
+ if (totalWidth > availableWidth && availableWidth > 0) {
116
+ const ratio = availableWidth / totalWidth;
117
+ for (let c = 0; c < colCount; c++) {
118
+ colWidths[c] = Math.max(3, Math.floor(colWidths[c] * ratio));
119
+ }
120
+ }
121
+ if (border === "none") {
122
+ const lines = [];
123
+ for (let r = 0; r < allRows.length; r++) {
124
+ const row = allRows[r];
125
+ const cells = [];
126
+ for (let c = 0; c < colCount; c++) {
127
+ let cell = row[c] ?? "";
128
+ const alignment = options?.columns?.[c]?.alignment ?? "left";
129
+ const shouldTruncate = options?.columns?.[c]?.truncate !== false;
130
+ if (shouldTruncate)
131
+ cell = truncateStr(cell, colWidths[c]);
132
+ if (r === 0 && options?.headers)
133
+ cell = headerColor(cell);
134
+ cells.push(padCell(cell, colWidths[c], alignment));
135
+ }
136
+ lines.push(cells.join(" "));
137
+ }
138
+ return lines.join("\n");
139
+ }
140
+ const b = BORDERS[border];
141
+ const lines = [];
142
+ // Top border
143
+ const topParts = colWidths.map((w) => b.horizontal.repeat(w + 2));
144
+ lines.push(b.topLeft + topParts.join(b.topMiddle) + b.topRight);
145
+ for (let r = 0; r < allRows.length; r++) {
146
+ const row = allRows[r];
147
+ const cells = [];
148
+ for (let c = 0; c < colCount; c++) {
149
+ let cell = row[c] ?? "";
150
+ const alignment = options?.columns?.[c]?.alignment ?? "left";
151
+ const shouldTruncate = options?.columns?.[c]?.truncate !== false;
152
+ if (shouldTruncate)
153
+ cell = truncateStr(cell, colWidths[c]);
154
+ if (r === 0 && options?.headers)
155
+ cell = headerColor(cell);
156
+ cells.push(` ${padCell(cell, colWidths[c], alignment)} `);
157
+ }
158
+ lines.push(b.vertical + cells.join(b.vertical) + b.vertical);
159
+ // Header separator
160
+ if (r === 0 && options?.headers) {
161
+ const sepParts = colWidths.map((w) => b.horizontal.repeat(w + 2));
162
+ lines.push(b.leftMiddle + sepParts.join(b.middle) + b.rightMiddle);
163
+ }
164
+ }
165
+ // Bottom border
166
+ const bottomParts = colWidths.map((w) => b.horizontal.repeat(w + 2));
167
+ lines.push(b.bottomLeft + bottomParts.join(b.bottomMiddle) + b.bottomRight);
168
+ return lines.join("\n");
169
+ }
170
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
package/dist/tree.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export interface TreeNode {
2
+ label: string;
3
+ children?: TreeNode[];
4
+ }
5
+ export interface TreeOptions {
6
+ indent?: number;
7
+ guides?: boolean;
8
+ }
9
+ export declare function tree(root: TreeNode, options?: TreeOptions): string;
10
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AA8BD,wBAAgB,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAGlE"}
package/dist/tree.js ADDED
@@ -0,0 +1,24 @@
1
+ function renderNode(node, prefix, isLast, isRoot, guides) {
2
+ const lines = [];
3
+ if (isRoot) {
4
+ lines.push(node.label);
5
+ }
6
+ else {
7
+ const connector = guides ? (isLast ? "└── " : "├── ") : " ";
8
+ lines.push(prefix + connector + node.label);
9
+ }
10
+ if (node.children) {
11
+ const childPrefix = isRoot ? "" : prefix + (guides ? (isLast ? " " : "│ ") : " ");
12
+ for (let i = 0; i < node.children.length; i++) {
13
+ const child = node.children[i];
14
+ const childIsLast = i === node.children.length - 1;
15
+ lines.push(...renderNode(child, childPrefix, childIsLast, false, guides));
16
+ }
17
+ }
18
+ return lines;
19
+ }
20
+ export function tree(root, options) {
21
+ const guides = options?.guides !== false;
22
+ return renderNode(root, "", true, true, guides).join("\n");
23
+ }
24
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAUA,SAAS,UAAU,CAClB,IAAc,EACd,MAAc,EACd,MAAe,EACf,MAAe,EACf,MAAe;IAEf,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;SAAM,CAAC;QACP,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3E,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAc,EAAE,OAAqB;IACzD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC;IACzC,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type chalk from "chalk";
2
+ import type { BoxOptions } from "./box.js";
3
+ import type { DividerOptions } from "./divider.js";
4
+ import type { FigletOptions } from "./figlet.js";
5
+ import type { KeyValueOptions, KeyValuePair } from "./keyValue.js";
6
+ import type { ProgressBar, ProgressBarOptions } from "./progress.js";
7
+ import type { Spinner } from "./spinner.js";
8
+ import type { TableOptions } from "./table.js";
9
+ import type { TreeNode, TreeOptions } from "./tree.js";
10
+ export interface PrintModule {
11
+ info(message: string): void;
12
+ success(message: string): void;
13
+ warning(message: string): void;
14
+ error(message: string): void;
15
+ debug(message: string): void;
16
+ highlight(message: string): void;
17
+ muted(message: string): void;
18
+ newline(count?: number): void;
19
+ colors: typeof chalk;
20
+ spin(message: string): Spinner;
21
+ table(rows: string[][], options?: TableOptions): void;
22
+ box(text: string, options?: BoxOptions): void;
23
+ ascii(text: string, options?: FigletOptions): void;
24
+ tree(root: TreeNode, options?: TreeOptions): void;
25
+ keyValue(pairs: KeyValuePair[] | Record<string, string>, options?: KeyValueOptions): void;
26
+ divider(options?: DividerOptions): void;
27
+ progressBar(options: ProgressBarOptions): ProgressBar;
28
+ }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,OAAO,KAAK,CAAC;IACrB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACtD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACnD,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC1F,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACxC,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAAC;CACtD"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@seedcli/print",
3
+ "version": "0.1.0",
4
+ "description": "Terminal output: logging, colors, spinner, table, box, ASCII art, tree, progress bar",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Rully Ardiansyah <rully@dreamshive.io>",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/SeedCLI/seed",
11
+ "directory": "packages/print"
12
+ },
13
+ "homepage": "https://seedcli.dev",
14
+ "keywords": [
15
+ "cli",
16
+ "terminal",
17
+ "print",
18
+ "table",
19
+ "spinner",
20
+ "colors",
21
+ "box",
22
+ "ascii"
23
+ ],
24
+ "engines": {
25
+ "bun": ">=1.3.0"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "main": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "import": "./dist/index.js",
35
+ "types": "./dist/index.d.ts"
36
+ }
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "LICENSE"
41
+ ],
42
+ "dependencies": {
43
+ "boxen": "8.0.1",
44
+ "chalk": "5.6.2",
45
+ "figlet": "1.10.0",
46
+ "ora": "9.3.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/figlet": "1.7.0"
50
+ }
51
+ }