@firela/billclaw-cli 0.1.3

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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +204 -0
  3. package/bin/billclaw.js +10 -0
  4. package/dist/commands/config.d.ts +11 -0
  5. package/dist/commands/config.d.ts.map +1 -0
  6. package/dist/commands/config.js +112 -0
  7. package/dist/commands/config.js.map +1 -0
  8. package/dist/commands/export.d.ts +11 -0
  9. package/dist/commands/export.d.ts.map +1 -0
  10. package/dist/commands/export.js +106 -0
  11. package/dist/commands/export.js.map +1 -0
  12. package/dist/commands/index.d.ts +46 -0
  13. package/dist/commands/index.d.ts.map +1 -0
  14. package/dist/commands/index.js +22 -0
  15. package/dist/commands/index.js.map +1 -0
  16. package/dist/commands/registry.d.ts +62 -0
  17. package/dist/commands/registry.d.ts.map +1 -0
  18. package/dist/commands/registry.js +77 -0
  19. package/dist/commands/registry.js.map +1 -0
  20. package/dist/commands/setup.d.ts +11 -0
  21. package/dist/commands/setup.d.ts.map +1 -0
  22. package/dist/commands/setup.js +214 -0
  23. package/dist/commands/setup.js.map +1 -0
  24. package/dist/commands/status.d.ts +11 -0
  25. package/dist/commands/status.d.ts.map +1 -0
  26. package/dist/commands/status.js +187 -0
  27. package/dist/commands/status.js.map +1 -0
  28. package/dist/commands/sync.d.ts +11 -0
  29. package/dist/commands/sync.d.ts.map +1 -0
  30. package/dist/commands/sync.js +150 -0
  31. package/dist/commands/sync.js.map +1 -0
  32. package/dist/index.d.ts +15 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +45 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/runtime/config.d.ts +32 -0
  37. package/dist/runtime/config.d.ts.map +1 -0
  38. package/dist/runtime/config.js +105 -0
  39. package/dist/runtime/config.js.map +1 -0
  40. package/dist/runtime/context.d.ts +33 -0
  41. package/dist/runtime/context.d.ts.map +1 -0
  42. package/dist/runtime/context.js +35 -0
  43. package/dist/runtime/context.js.map +1 -0
  44. package/dist/runtime/events.d.ts +24 -0
  45. package/dist/runtime/events.d.ts.map +1 -0
  46. package/dist/runtime/events.js +54 -0
  47. package/dist/runtime/events.js.map +1 -0
  48. package/dist/runtime/index.d.ts +10 -0
  49. package/dist/runtime/index.d.ts.map +1 -0
  50. package/dist/runtime/index.js +10 -0
  51. package/dist/runtime/index.js.map +1 -0
  52. package/dist/runtime/logger.d.ts +41 -0
  53. package/dist/runtime/logger.d.ts.map +1 -0
  54. package/dist/runtime/logger.js +95 -0
  55. package/dist/runtime/logger.js.map +1 -0
  56. package/dist/utils/format.d.ts +62 -0
  57. package/dist/utils/format.d.ts.map +1 -0
  58. package/dist/utils/format.js +153 -0
  59. package/dist/utils/format.js.map +1 -0
  60. package/dist/utils/index.d.ts +6 -0
  61. package/dist/utils/index.d.ts.map +1 -0
  62. package/dist/utils/index.js +6 -0
  63. package/dist/utils/index.js.map +1 -0
  64. package/dist/utils/progress.d.ts +38 -0
  65. package/dist/utils/progress.d.ts.map +1 -0
  66. package/dist/utils/progress.js +70 -0
  67. package/dist/utils/progress.js.map +1 -0
  68. package/package.json +72 -0
@@ -0,0 +1,95 @@
1
+ /**
2
+ * CLI logger implementation
3
+ *
4
+ * Console-based logger with colored output and severity levels.
5
+ */
6
+ /**
7
+ * Log level enum
8
+ */
9
+ export var LogLevel;
10
+ (function (LogLevel) {
11
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
12
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
13
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
14
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
15
+ })(LogLevel || (LogLevel = {}));
16
+ /**
17
+ * Default logger configuration
18
+ */
19
+ const defaultConfig = {
20
+ level: process.env.DEBUG ? LogLevel.DEBUG : LogLevel.INFO,
21
+ colors: process.stdout.isTTY ?? false,
22
+ timestamps: true,
23
+ };
24
+ /**
25
+ * ANSI color codes
26
+ */
27
+ const colors = {
28
+ reset: "\x1b[0m",
29
+ dim: "\x1b[2m",
30
+ red: "\x1b[31m",
31
+ yellow: "\x1b[33m",
32
+ blue: "\x1b[34m",
33
+ green: "\x1b[32m",
34
+ };
35
+ /**
36
+ * CLI logger implementation
37
+ */
38
+ export class CliLogger {
39
+ config;
40
+ constructor(config = {}) {
41
+ this.config = { ...defaultConfig, ...config };
42
+ }
43
+ setLevel(level) {
44
+ this.config.level = level;
45
+ }
46
+ debug(...args) {
47
+ if (this.config.level <= LogLevel.DEBUG) {
48
+ this.log("DEBUG", args, colors.dim);
49
+ }
50
+ }
51
+ info(...args) {
52
+ if (this.config.level <= LogLevel.INFO) {
53
+ this.log("INFO", args, colors.blue);
54
+ }
55
+ }
56
+ warn(...args) {
57
+ if (this.config.level <= LogLevel.WARN) {
58
+ this.log("WARN", args, colors.yellow);
59
+ }
60
+ }
61
+ error(...args) {
62
+ if (this.config.level <= LogLevel.ERROR) {
63
+ this.log("ERROR", args, colors.red);
64
+ }
65
+ }
66
+ log(level, args, color) {
67
+ const timestamp = this.config.timestamps
68
+ ? `${new Date().toISOString()} `
69
+ : "";
70
+ const prefix = this.config.colors
71
+ ? `${color}${timestamp}[${level}]${colors.reset} `
72
+ : `${timestamp}[${level}] `;
73
+ const output = args
74
+ .map((arg) => {
75
+ if (typeof arg === "string") {
76
+ return arg;
77
+ }
78
+ try {
79
+ return JSON.stringify(arg, null, 2);
80
+ }
81
+ catch {
82
+ return String(arg);
83
+ }
84
+ })
85
+ .join(" ");
86
+ console.log(prefix + output);
87
+ }
88
+ }
89
+ /**
90
+ * Create a default CLI logger instance
91
+ */
92
+ export function createLogger(config) {
93
+ return new CliLogger(config);
94
+ }
95
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/runtime/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Table configuration options
3
+ */
4
+ export interface TableOptions {
5
+ head: string[];
6
+ style?: Record<string, unknown>;
7
+ }
8
+ /**
9
+ * Simple table implementation
10
+ */
11
+ export declare class CliTable {
12
+ private _head;
13
+ private rows;
14
+ constructor(options: TableOptions);
15
+ push(row: string[]): void;
16
+ toString(): string;
17
+ }
18
+ /**
19
+ * Create a formatted table
20
+ */
21
+ export declare function createTable(options: TableOptions): CliTable;
22
+ /**
23
+ * Print a table to console
24
+ */
25
+ export declare function printTable(table: CliTable): void;
26
+ /**
27
+ * Format a status badge
28
+ */
29
+ export declare function formatStatus(status: string): string;
30
+ /**
31
+ * Format an account type badge
32
+ */
33
+ export declare function formatAccountType(type: string): string;
34
+ /**
35
+ * Format currency amount
36
+ */
37
+ export declare function formatCurrency(amount: number, currency?: string): string;
38
+ /**
39
+ * Format date
40
+ */
41
+ export declare function formatDate(date: Date | string): string;
42
+ /**
43
+ * Format datetime
44
+ */
45
+ export declare function formatDateTime(date: Date | string): string;
46
+ /**
47
+ * Print success message
48
+ */
49
+ export declare function success(message: string): void;
50
+ /**
51
+ * Print error message
52
+ */
53
+ export declare function error(message: string): void;
54
+ /**
55
+ * Print warning message
56
+ */
57
+ export declare function warn(message: string): void;
58
+ /**
59
+ * Print info message
60
+ */
61
+ export declare function info(message: string): void;
62
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,IAAI,CAAiB;gBAEjB,OAAO,EAAE,YAAY;IAIjC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAIzB,QAAQ,IAAI,MAAM;CA8BnB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,QAAQ,CAE3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmBnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAQ,GAAG,MAAM,CAKvE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAOtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAS1D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * CLI utilities for formatted output
3
+ *
4
+ * Provides table formatting, colored output, and status displays.
5
+ */
6
+ import chalk from "chalk";
7
+ /**
8
+ * Simple table implementation
9
+ */
10
+ export class CliTable {
11
+ _head;
12
+ rows = [];
13
+ constructor(options) {
14
+ this._head = options.head;
15
+ }
16
+ push(row) {
17
+ this.rows.push(row);
18
+ }
19
+ toString() {
20
+ // Calculate column widths
21
+ const colCount = this._head.length;
22
+ const widths = [];
23
+ for (let i = 0; i < colCount; i++) {
24
+ let maxLen = this._head[i].length;
25
+ for (const row of this.rows) {
26
+ if (row[i] && row[i].length > maxLen) {
27
+ maxLen = row[i].length;
28
+ }
29
+ }
30
+ widths.push(maxLen + 2);
31
+ }
32
+ // Build output
33
+ const lines = [];
34
+ // Header
35
+ const header = this._head.map((h, i) => h.padEnd(widths[i])).join("");
36
+ lines.push(chalk.cyan(header));
37
+ // Rows
38
+ for (const row of this.rows) {
39
+ const line = row.map((cell, i) => (cell ?? "").padEnd(widths[i])).join("");
40
+ lines.push(line);
41
+ }
42
+ return lines.join("\n");
43
+ }
44
+ }
45
+ /**
46
+ * Create a formatted table
47
+ */
48
+ export function createTable(options) {
49
+ return new CliTable(options);
50
+ }
51
+ /**
52
+ * Print a table to console
53
+ */
54
+ export function printTable(table) {
55
+ console.log(table.toString());
56
+ }
57
+ /**
58
+ * Format a status badge
59
+ */
60
+ export function formatStatus(status) {
61
+ const normalized = status.toLowerCase();
62
+ switch (normalized) {
63
+ case "active":
64
+ case "connected":
65
+ case "ok":
66
+ case "success":
67
+ return chalk.green(status);
68
+ case "pending":
69
+ case "syncing":
70
+ return chalk.yellow(status);
71
+ case "inactive":
72
+ case "disconnected":
73
+ case "error":
74
+ case "failed":
75
+ return chalk.red(status);
76
+ default:
77
+ return chalk.gray(status);
78
+ }
79
+ }
80
+ /**
81
+ * Format an account type badge
82
+ */
83
+ export function formatAccountType(type) {
84
+ const normalized = type.toLowerCase();
85
+ switch (normalized) {
86
+ case "plaid":
87
+ return chalk.blue(type);
88
+ case "gmail":
89
+ return chalk.red(type);
90
+ case "gocardless":
91
+ return chalk.green(type);
92
+ default:
93
+ return chalk.gray(type);
94
+ }
95
+ }
96
+ /**
97
+ * Format currency amount
98
+ */
99
+ export function formatCurrency(amount, currency = "USD") {
100
+ return new Intl.NumberFormat("en-US", {
101
+ style: "currency",
102
+ currency,
103
+ }).format(amount);
104
+ }
105
+ /**
106
+ * Format date
107
+ */
108
+ export function formatDate(date) {
109
+ const d = typeof date === "string" ? new Date(date) : date;
110
+ return d.toLocaleDateString("en-US", {
111
+ year: "numeric",
112
+ month: "short",
113
+ day: "numeric",
114
+ });
115
+ }
116
+ /**
117
+ * Format datetime
118
+ */
119
+ export function formatDateTime(date) {
120
+ const d = typeof date === "string" ? new Date(date) : date;
121
+ return d.toLocaleString("en-US", {
122
+ year: "numeric",
123
+ month: "short",
124
+ day: "numeric",
125
+ hour: "2-digit",
126
+ minute: "2-digit",
127
+ });
128
+ }
129
+ /**
130
+ * Print success message
131
+ */
132
+ export function success(message) {
133
+ console.log(chalk.green("✓") + " " + message);
134
+ }
135
+ /**
136
+ * Print error message
137
+ */
138
+ export function error(message) {
139
+ console.error(chalk.red("✗") + " " + message);
140
+ }
141
+ /**
142
+ * Print warning message
143
+ */
144
+ export function warn(message) {
145
+ console.warn(chalk.yellow("⚠") + " " + message);
146
+ }
147
+ /**
148
+ * Print info message
149
+ */
150
+ export function info(message) {
151
+ console.log(chalk.blue("ℹ") + " " + message);
152
+ }
153
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * CLI utilities module
3
+ */
4
+ export * from "./format.js";
5
+ export * from "./progress.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * CLI utilities module
3
+ */
4
+ export * from "./format.js";
5
+ export * from "./progress.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Progress utilities for CLI operations
3
+ *
4
+ * Provides spinner and progress bar functionality.
5
+ */
6
+ import ora from "ora";
7
+ /**
8
+ * Progress spinner options
9
+ */
10
+ export interface SpinnerOptions {
11
+ text: string;
12
+ color?: typeof ora.prototype["color"];
13
+ hideCursor?: boolean;
14
+ interval?: number;
15
+ }
16
+ /**
17
+ * Progress spinner wrapper
18
+ */
19
+ export declare class Spinner {
20
+ private ora;
21
+ constructor(options: SpinnerOptions);
22
+ start(): Spinner;
23
+ stop(): Spinner;
24
+ succeed(text?: string): Spinner;
25
+ fail(text?: string): Spinner;
26
+ warn(text?: string): Spinner;
27
+ info(text?: string): Spinner;
28
+ update(text: string): Spinner;
29
+ /**
30
+ * Execute an async function with loading indicator
31
+ */
32
+ static withLoading<T>(text: string, fn: () => Promise<T>): Promise<T>;
33
+ }
34
+ /**
35
+ * Create a progress spinner
36
+ */
37
+ export declare function createSpinner(options: SpinnerOptions): Spinner;
38
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,GAAY,MAAM,KAAK,CAAA;AAE9B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACrC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAK;gBAEJ,OAAO,EAAE,cAAc;IASnC,KAAK,IAAI,OAAO;IAKhB,IAAI,IAAI,OAAO;IAKf,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAK/B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAK5B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAK5B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAK5B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK7B;;OAEG;WACU,WAAW,CAAC,CAAC,EAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAW7E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAE9D"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Progress utilities for CLI operations
3
+ *
4
+ * Provides spinner and progress bar functionality.
5
+ */
6
+ import ora from "ora";
7
+ /**
8
+ * Progress spinner wrapper
9
+ */
10
+ export class Spinner {
11
+ ora;
12
+ constructor(options) {
13
+ this.ora = ora({
14
+ text: options.text,
15
+ color: options.color ?? "cyan",
16
+ hideCursor: options.hideCursor ?? true,
17
+ interval: options.interval,
18
+ });
19
+ }
20
+ start() {
21
+ this.ora.start();
22
+ return this;
23
+ }
24
+ stop() {
25
+ this.ora.stop();
26
+ return this;
27
+ }
28
+ succeed(text) {
29
+ this.ora.succeed(text);
30
+ return this;
31
+ }
32
+ fail(text) {
33
+ this.ora.fail(text);
34
+ return this;
35
+ }
36
+ warn(text) {
37
+ this.ora.warn(text);
38
+ return this;
39
+ }
40
+ info(text) {
41
+ this.ora.info(text);
42
+ return this;
43
+ }
44
+ update(text) {
45
+ this.ora.text = text;
46
+ return this;
47
+ }
48
+ /**
49
+ * Execute an async function with loading indicator
50
+ */
51
+ static async withLoading(text, fn) {
52
+ const spinner = new Spinner({ text }).start();
53
+ try {
54
+ const result = await fn();
55
+ spinner.succeed();
56
+ return result;
57
+ }
58
+ catch (err) {
59
+ spinner.fail();
60
+ throw err;
61
+ }
62
+ }
63
+ }
64
+ /**
65
+ * Create a progress spinner
66
+ */
67
+ export function createSpinner(options) {
68
+ return new Spinner(options);
69
+ }
70
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,GAAY,MAAM,KAAK,CAAA;AAY9B;;GAEG;AACH,MAAM,OAAO,OAAO;IACV,GAAG,CAAK;IAEhB,YAAY,OAAuB;QACjC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACb,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACf,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CAAC,IAAa;QACnB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAK,IAAY,EAAE,EAAoB;QAC7D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;YACzB,OAAO,CAAC,OAAO,EAAE,CAAA;YACjB,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAA;YACd,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@firela/billclaw-cli",
3
+ "version": "0.1.3",
4
+ "description": "BillClaw CLI - Standalone command-line interface for financial data management",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "bin": {
16
+ "billclaw": "./bin/billclaw.js"
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "bin",
21
+ "README.md"
22
+ ],
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "keywords": [
27
+ "billclaw",
28
+ "cli",
29
+ "financial-data",
30
+ "plaid",
31
+ "banking",
32
+ "transactions",
33
+ "beancount",
34
+ "ledger"
35
+ ],
36
+ "author": "fire-la",
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/fire-la/billclaw.git",
41
+ "directory": "packages/cli"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^25.2.0",
45
+ "@vitest/coverage-v8": "^4.0.18",
46
+ "oxfmt": "^0.1.0",
47
+ "oxlint": "^0.15.0",
48
+ "typescript": "^5.8.0",
49
+ "vitest": "^3.0.0"
50
+ },
51
+ "dependencies": {
52
+ "chalk": "^5.4.0",
53
+ "cli-table3": "^0.6.5",
54
+ "commander": "^13.1.0",
55
+ "inquirer": "^12.0.0",
56
+ "ora": "^8.1.0",
57
+ "@firela/billclaw-core": "0.1.3"
58
+ },
59
+ "engines": {
60
+ "node": ">=20.0.0"
61
+ },
62
+ "scripts": {
63
+ "build": "tsc",
64
+ "dev": "tsc --watch",
65
+ "test": "vitest",
66
+ "test:coverage": "vitest --coverage",
67
+ "lint": "oxlint",
68
+ "format": "oxfmt src/",
69
+ "format:write": "oxfmt -w src/",
70
+ "clean": "rm -rf dist"
71
+ }
72
+ }