shawnxixi-cli 0.3.1 → 1.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 (82) hide show
  1. package/.env.example +8 -2
  2. package/.github/workflows/ci.yml +9 -22
  3. package/.github/workflows/release.yml +30 -0
  4. package/CLAUDE.md +167 -63
  5. package/README.md +345 -65
  6. package/commitlint.config.js +10 -0
  7. package/dist/commands/biz/calendar.d.ts +17 -2
  8. package/dist/commands/biz/calendar.d.ts.map +1 -1
  9. package/dist/commands/biz/calendar.js +47 -9
  10. package/dist/commands/biz/calendar.js.map +1 -1
  11. package/dist/commands/biz/finance.d.ts +32 -1
  12. package/dist/commands/biz/finance.d.ts.map +1 -1
  13. package/dist/commands/biz/finance.js +99 -12
  14. package/dist/commands/biz/finance.js.map +1 -1
  15. package/dist/commands/biz/health.d.ts +32 -0
  16. package/dist/commands/biz/health.d.ts.map +1 -0
  17. package/dist/commands/biz/health.js +92 -0
  18. package/dist/commands/biz/health.js.map +1 -0
  19. package/dist/commands/biz/item.d.ts +41 -0
  20. package/dist/commands/biz/item.d.ts.map +1 -1
  21. package/dist/commands/biz/item.js +89 -5
  22. package/dist/commands/biz/item.js.map +1 -1
  23. package/dist/commands/biz/record.d.ts +0 -8
  24. package/dist/commands/biz/record.d.ts.map +1 -1
  25. package/dist/commands/biz/record.js +29 -8
  26. package/dist/commands/biz/record.js.map +1 -1
  27. package/dist/commands/biz/task.d.ts +38 -0
  28. package/dist/commands/biz/task.d.ts.map +1 -0
  29. package/dist/commands/biz/task.js +110 -0
  30. package/dist/commands/biz/task.js.map +1 -0
  31. package/dist/commands/biz/todo.d.ts +52 -8
  32. package/dist/commands/biz/todo.d.ts.map +1 -1
  33. package/dist/commands/biz/todo.js +167 -17
  34. package/dist/commands/biz/todo.js.map +1 -1
  35. package/dist/commands/sys/health.d.ts.map +1 -1
  36. package/dist/commands/sys/health.js +20 -3
  37. package/dist/commands/sys/health.js.map +1 -1
  38. package/dist/index.d.ts +5 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +279 -41
  41. package/dist/index.js.map +1 -1
  42. package/dist/services/api.d.ts +22 -8
  43. package/dist/services/api.d.ts.map +1 -1
  44. package/dist/services/api.js +108 -28
  45. package/dist/services/api.js.map +1 -1
  46. package/dist/utils/env.d.ts +16 -0
  47. package/dist/utils/env.d.ts.map +1 -0
  48. package/dist/utils/env.js +78 -0
  49. package/dist/utils/env.js.map +1 -0
  50. package/dist/utils/finance.model.d.ts +80 -0
  51. package/dist/utils/finance.model.d.ts.map +1 -0
  52. package/dist/utils/finance.model.js +150 -0
  53. package/dist/utils/finance.model.js.map +1 -0
  54. package/dist/utils/output.d.ts +42 -0
  55. package/dist/utils/output.d.ts.map +1 -0
  56. package/dist/utils/output.js +124 -0
  57. package/dist/utils/output.js.map +1 -0
  58. package/dist/utils/todo.model.d.ts +55 -0
  59. package/dist/utils/todo.model.d.ts.map +1 -0
  60. package/dist/utils/todo.model.js +135 -0
  61. package/dist/utils/todo.model.js.map +1 -0
  62. package/package.json +18 -2
  63. package/src/commands/biz/calendar.ts +61 -10
  64. package/src/commands/biz/finance.ts +112 -13
  65. package/src/commands/biz/health.ts +96 -0
  66. package/src/commands/biz/item.ts +113 -6
  67. package/src/commands/biz/record.ts +32 -8
  68. package/src/commands/biz/task.ts +115 -0
  69. package/src/commands/biz/todo.ts +193 -21
  70. package/src/commands/sys/health.ts +23 -3
  71. package/src/index.ts +309 -53
  72. package/src/services/api.ts +111 -30
  73. package/src/utils/env.ts +85 -0
  74. package/src/utils/finance.model.ts +182 -0
  75. package/src/utils/output.ts +126 -0
  76. package/src/utils/todo.model.ts +167 -0
  77. package/tests/commands/finance.test.ts +281 -0
  78. package/tests/commands/item.test.ts +215 -0
  79. package/tests/commands/todo.test.ts +292 -9
  80. package/tests/services/api.test.ts +292 -20
  81. package/tests/utils/finance.model.test.ts +319 -0
  82. package/tests/utils/todo.model.test.ts +315 -0
@@ -9,7 +9,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.apiService = void 0;
11
11
  const axios_1 = __importDefault(require("axios"));
12
- const API_BASE = process.env.SHAWNXIXI_API_URL || 'http://server.shawnxixi.icu';
12
+ const env_1 = require("../utils/env");
13
+ const API_BASE = env_1.envConfig.API_URL;
13
14
  /** Normalize date/datetime strings to LocalDateTime format (ISO 8601 without timezone) */
14
15
  function toLocalDateTime(value) {
15
16
  if (!value)
@@ -59,24 +60,33 @@ class ApiService {
59
60
  });
60
61
  }
61
62
  async getToken() {
62
- // TODO: Keychain 读取 token
63
- return process.env.SHAWNXIXI_API_TOKEN || null;
63
+ return env_1.envConfig.API_TOKEN || process.env.SHAWNXIXI_API_TOKEN || null;
64
64
  }
65
65
  async refreshToken() {
66
66
  // TODO: 实现 token 刷新逻辑
67
67
  }
68
68
  // ============ Todo API ============
69
- async createTodo(title, dueDate, priority) {
69
+ async createTodo(title, dueDate, priority, tags, repeatRule, repeatEndDate, parentId) {
70
70
  const { data } = await this.client.post('/api/v1/todos', {
71
71
  title,
72
72
  dueDate: toLocalDateTime(dueDate),
73
73
  priority: priority || 'medium',
74
74
  status: 'pending',
75
+ tags,
76
+ repeatRule,
77
+ repeatEndDate: toLocalDateTime(repeatEndDate),
78
+ parentId,
75
79
  });
76
80
  return data;
77
81
  }
78
- async listTodos(status) {
79
- const params = status ? { status } : {};
82
+ async listTodos(status, priority, tags) {
83
+ const params = {};
84
+ if (status)
85
+ params.status = status;
86
+ if (priority)
87
+ params.priority = priority;
88
+ if (tags)
89
+ params.tags = tags;
80
90
  const { data } = await this.client.get('/api/v1/todos', { params });
81
91
  return data;
82
92
  }
@@ -88,6 +98,17 @@ class ApiService {
88
98
  const { data } = await this.client.delete(`/api/v1/todos/${id}`);
89
99
  return data;
90
100
  }
101
+ async repeatTodo(id) {
102
+ const { data } = await this.client.post(`/api/v1/todos/${id}/repeat`);
103
+ return data;
104
+ }
105
+ async listSubtasks(parentId) {
106
+ const params = {};
107
+ if (parentId)
108
+ params.parentId = String(parentId);
109
+ const { data } = await this.client.get('/api/v1/todos', { params });
110
+ return data;
111
+ }
91
112
  // ============ Record API ============
92
113
  async createRecord(title, content, type = 'diary', tags) {
93
114
  const { data } = await this.client.post('/api/v1/records', {
@@ -108,25 +129,58 @@ class ApiService {
108
129
  return data;
109
130
  }
110
131
  // ============ Finance API ============
111
- async createFinance(amount, type, category, description) {
132
+ async createFinance(amount, type, category, description, account, transactionDate, tags) {
112
133
  const { data } = await this.client.post('/api/v1/finances', {
113
134
  amount,
114
135
  type,
115
136
  category,
116
137
  description,
138
+ account,
139
+ transactionDate: toLocalDateTime(transactionDate),
140
+ tags,
117
141
  });
118
142
  return data;
119
143
  }
120
- async listFinances(type, category) {
144
+ async listFinances(type, category, month) {
121
145
  const params = {};
122
146
  if (type)
123
147
  params.type = type;
124
148
  if (category)
125
149
  params.category = category;
150
+ if (month)
151
+ params.month = month;
126
152
  const { data } = await this.client.get('/api/v1/finances', { params });
127
153
  return data;
128
154
  }
155
+ async getFinanceStats(month) {
156
+ const { data } = await this.client.get('/api/v1/finances/stats', { params: { month } });
157
+ return data;
158
+ }
159
+ async getFinanceReport(month) {
160
+ const { data } = await this.client.get('/api/v1/finances/report', { params: { month } });
161
+ return data;
162
+ }
129
163
  // ============ Health API ============
164
+ async logHealthData(dataType, value, unit, date) {
165
+ const { data } = await this.client.post('/api/v1/health-data', {
166
+ dataType,
167
+ value,
168
+ unit,
169
+ date: toLocalDateTime(date),
170
+ });
171
+ return data;
172
+ }
173
+ async listHealthData(dataType, fromDate, toDate) {
174
+ const params = {};
175
+ if (dataType)
176
+ params.dataType = dataType;
177
+ if (fromDate)
178
+ params.fromDate = fromDate;
179
+ if (toDate)
180
+ params.toDate = toDate;
181
+ const { data } = await this.client.get('/api/v1/health-data', { params });
182
+ return data;
183
+ }
130
184
  async syncHealthData() {
131
185
  const { data } = await this.client.post('/api/v1/health-data/sync');
132
186
  return data;
@@ -143,12 +197,19 @@ class ApiService {
143
197
  return data;
144
198
  }
145
199
  // ============ Item API ============
146
- async createItem(name, category, location, expireDate) {
200
+ async createItem(name, category, location, expireDate, quantity, unit, brand, barcode, price, supplier, purchaseDate) {
147
201
  const { data } = await this.client.post('/api/v1/items', {
148
202
  name,
149
203
  category,
150
204
  location,
151
205
  expireDate: toLocalDateTime(expireDate),
206
+ quantity,
207
+ unit,
208
+ brand,
209
+ barcode,
210
+ price,
211
+ supplier,
212
+ purchaseDate: toLocalDateTime(purchaseDate),
152
213
  });
153
214
  return data;
154
215
  }
@@ -161,14 +222,23 @@ class ApiService {
161
222
  const { data } = await this.client.get('/api/v1/items', { params });
162
223
  return data;
163
224
  }
225
+ async getExpiringItems(days) {
226
+ const { data } = await this.client.get('/api/v1/items/expiring', { params: { days } });
227
+ return data;
228
+ }
229
+ async getItemStats() {
230
+ const { data } = await this.client.get('/api/v1/items/stats');
231
+ return data;
232
+ }
164
233
  // ============ Calendar API ============
165
- async createCalendarEvent(title, startTime, endTime, description, location) {
234
+ async createCalendarEvent(title, startTime, endTime, description, location, color) {
166
235
  const { data } = await this.client.post('/api/v1/calendar-events', {
167
236
  title,
168
237
  startTime: toLocalDateTime(startTime),
169
238
  endTime: toLocalDateTime(endTime),
170
239
  description,
171
240
  location,
241
+ color,
172
242
  });
173
243
  return data;
174
244
  }
@@ -181,6 +251,34 @@ class ApiService {
181
251
  const { data } = await this.client.get('/api/v1/calendar-events', { params });
182
252
  return data;
183
253
  }
254
+ // ============ Task API ============
255
+ async createTask(title, source, openclawId, priority) {
256
+ const { data } = await this.client.post('/api/v1/tasks', {
257
+ title,
258
+ source: source || 'cli',
259
+ openclawId,
260
+ priority: priority || 'medium',
261
+ status: 'pending',
262
+ });
263
+ return data;
264
+ }
265
+ async listTasks(status, source) {
266
+ const params = {};
267
+ if (status)
268
+ params.status = status;
269
+ if (source)
270
+ params.source = source;
271
+ const { data } = await this.client.get('/api/v1/tasks', { params });
272
+ return data;
273
+ }
274
+ async updateTask(id, updates) {
275
+ const { data } = await this.client.patch(`/api/v1/tasks/${id}`, updates);
276
+ return data;
277
+ }
278
+ async deleteTask(id) {
279
+ const { data } = await this.client.delete(`/api/v1/tasks/${id}`);
280
+ return data;
281
+ }
184
282
  // ============ Reminder API ============
185
283
  async createReminder(title, triggerTime, type = 'once') {
186
284
  const { data } = await this.client.post('/api/v1/reminders', {
@@ -212,24 +310,6 @@ class ApiService {
212
310
  const { data } = await this.client.get('/api/v1/audit-logs', { params });
213
311
  return data;
214
312
  }
215
- // ============ Task API ============
216
- async createTask(title, description, priority, source) {
217
- const { data } = await this.client.post('/api/v1/tasks', {
218
- title,
219
- description,
220
- priority: priority || 'medium',
221
- source: source || 'cli',
222
- status: 'pending',
223
- });
224
- return data;
225
- }
226
- async listTasks(status) {
227
- const params = {};
228
- if (status)
229
- params.status = status;
230
- const { data } = await this.client.get('/api/v1/tasks', { params });
231
- return data;
232
- }
233
313
  }
234
314
  exports.apiService = new ApiService();
235
315
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * .env 配置文件加载器
3
+ * 支持 SHAWNXIXI_API_URL 等环境变量
4
+ */
5
+ interface EnvConfig {
6
+ API_URL: string;
7
+ API_TOKEN?: string;
8
+ }
9
+ /**
10
+ * 加载 .env 文件并返回配置
11
+ * 优先级:process.env > .env 文件 > 默认值
12
+ */
13
+ export declare function loadEnvConfig(): EnvConfig;
14
+ export declare const envConfig: EnvConfig;
15
+ export {};
16
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;GAGG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAmCzC;AA8BD,eAAO,MAAM,SAAS,WAAkB,CAAC"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * .env 配置文件加载器
4
+ * 支持 SHAWNXIXI_API_URL 等环境变量
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.envConfig = void 0;
11
+ exports.loadEnvConfig = loadEnvConfig;
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const path_1 = __importDefault(require("path"));
14
+ let cachedConfig = null;
15
+ /**
16
+ * 加载 .env 文件并返回配置
17
+ * 优先级:process.env > .env 文件 > 默认值
18
+ */
19
+ function loadEnvConfig() {
20
+ if (cachedConfig)
21
+ return cachedConfig;
22
+ const defaultConfig = {
23
+ API_URL: process.env.SHAWNXIXI_API_URL || 'http://localhost:8080/api/v1',
24
+ API_TOKEN: process.env.SHAWNXIXI_API_TOKEN,
25
+ };
26
+ // 尝试从当前目录和项目根目录加载 .env
27
+ const possiblePaths = [
28
+ path_1.default.join(process.cwd(), '.env'),
29
+ path_1.default.join(__dirname, '../../.env'),
30
+ path_1.default.join(__dirname, '../../../.env'),
31
+ ];
32
+ for (const envPath of possiblePaths) {
33
+ try {
34
+ if (fs_1.default.existsSync(envPath)) {
35
+ const content = fs_1.default.readFileSync(envPath, 'utf-8');
36
+ const envVars = parseEnvFile(content);
37
+ // 合并配置,process.env 优先级最高
38
+ cachedConfig = {
39
+ API_URL: process.env.SHAWNXIXI_API_URL || envVars.SHAWNXIXI_API_URL || defaultConfig.API_URL,
40
+ API_TOKEN: process.env.SHAWNXIXI_API_TOKEN || envVars.SHAWNXIXI_API_TOKEN || defaultConfig.API_TOKEN,
41
+ };
42
+ return cachedConfig;
43
+ }
44
+ }
45
+ catch (e) {
46
+ // 忽略读取错误,继续尝试下一个路径
47
+ }
48
+ }
49
+ cachedConfig = defaultConfig;
50
+ return cachedConfig;
51
+ }
52
+ /**
53
+ * 简单 .env 文件解析器
54
+ */
55
+ function parseEnvFile(content) {
56
+ const result = {};
57
+ const lines = content.split('\n');
58
+ for (const line of lines) {
59
+ const trimmed = line.trim();
60
+ // 跳过空行和注释
61
+ if (!trimmed || trimmed.startsWith('#'))
62
+ continue;
63
+ const eqIndex = trimmed.indexOf('=');
64
+ if (eqIndex > 0) {
65
+ const key = trimmed.substring(0, eqIndex).trim();
66
+ let value = trimmed.substring(eqIndex + 1).trim();
67
+ // 去掉引号
68
+ if ((value.startsWith('"') && value.endsWith('"')) ||
69
+ (value.startsWith("'") && value.endsWith("'"))) {
70
+ value = value.slice(1, -1);
71
+ }
72
+ result[key] = value;
73
+ }
74
+ }
75
+ return result;
76
+ }
77
+ exports.envConfig = loadEnvConfig();
78
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Finance Model Utilities
3
+ * 包含收支分类、账户余额计算、金额格式化等功能
4
+ */
5
+ export type FinanceType = 'income' | 'expense';
6
+ export interface FinanceItem {
7
+ id: string;
8
+ amount: number;
9
+ type: FinanceType;
10
+ category: string;
11
+ description?: string;
12
+ createdAt: string;
13
+ }
14
+ export interface Account {
15
+ id: string;
16
+ name: string;
17
+ balance: number;
18
+ currency: string;
19
+ }
20
+ export interface FinanceStats {
21
+ totalIncome: number;
22
+ totalExpense: number;
23
+ netBalance: number;
24
+ byCategory: Record<string, {
25
+ income: number;
26
+ expense: number;
27
+ }>;
28
+ }
29
+ /**
30
+ * 收入分类
31
+ */
32
+ export declare const INCOME_CATEGORIES: readonly ["salary", "bonus", "investment", "gift", "refund", "other_income"];
33
+ /**
34
+ * 支出分类
35
+ */
36
+ export declare const EXPENSE_CATEGORIES: readonly ["food", "transport", "shopping", "entertainment", "housing", "healthcare", "education", "travel", "other"];
37
+ /**
38
+ * 判断账单类型
39
+ */
40
+ export declare function categorizeFinance(amount: number, type?: string): FinanceType;
41
+ /**
42
+ * 获取默认分类
43
+ */
44
+ export declare function getDefaultCategory(type: FinanceType): string;
45
+ /**
46
+ * 验证分类是否有效
47
+ */
48
+ export declare function isValidCategory(type: FinanceType, category: string): boolean;
49
+ /**
50
+ * 计算账户余额
51
+ */
52
+ export declare function calculateBalance(items: FinanceItem[]): number;
53
+ /**
54
+ * 计算账单统计
55
+ */
56
+ export declare function calculateFinanceStats(items: FinanceItem[]): FinanceStats;
57
+ /**
58
+ * 格式化金额
59
+ * @param amount 金额
60
+ * @param currency 货币符号,默认 ¥
61
+ * @param showSign 是否显示正负号,默认 false
62
+ */
63
+ export declare function formatAmount(amount: number, currency?: string, showSign?: boolean): string;
64
+ /**
65
+ * 解析金额字符串
66
+ */
67
+ export declare function parseAmount(amountStr: string): number;
68
+ /**
69
+ * 判断是否为有效金额
70
+ */
71
+ export declare function isValidAmount(amount: number): boolean;
72
+ /**
73
+ * 计算日均支出
74
+ */
75
+ export declare function calculateDailyAverage(expense: number, days: number): number;
76
+ /**
77
+ * 计算月度预算剩余
78
+ */
79
+ export declare function calculateBudgetRemaining(totalBudget: number, spent: number): number;
80
+ //# sourceMappingURL=finance.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finance.model.d.ts","sourceRoot":"","sources":["../../src/utils/finance.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,8EAOpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,sHAUrB,CAAC;AAEX;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAM5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAQ7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,YAAY,CAwBxE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAY,EACtB,QAAQ,GAAE,OAAe,GACxB,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * Finance Model Utilities
4
+ * 包含收支分类、账户余额计算、金额格式化等功能
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.EXPENSE_CATEGORIES = exports.INCOME_CATEGORIES = void 0;
8
+ exports.categorizeFinance = categorizeFinance;
9
+ exports.getDefaultCategory = getDefaultCategory;
10
+ exports.isValidCategory = isValidCategory;
11
+ exports.calculateBalance = calculateBalance;
12
+ exports.calculateFinanceStats = calculateFinanceStats;
13
+ exports.formatAmount = formatAmount;
14
+ exports.parseAmount = parseAmount;
15
+ exports.isValidAmount = isValidAmount;
16
+ exports.calculateDailyAverage = calculateDailyAverage;
17
+ exports.calculateBudgetRemaining = calculateBudgetRemaining;
18
+ /**
19
+ * 收入分类
20
+ */
21
+ exports.INCOME_CATEGORIES = [
22
+ 'salary',
23
+ 'bonus',
24
+ 'investment',
25
+ 'gift',
26
+ 'refund',
27
+ 'other_income',
28
+ ];
29
+ /**
30
+ * 支出分类
31
+ */
32
+ exports.EXPENSE_CATEGORIES = [
33
+ 'food',
34
+ 'transport',
35
+ 'shopping',
36
+ 'entertainment',
37
+ 'housing',
38
+ 'healthcare',
39
+ 'education',
40
+ 'travel',
41
+ 'other',
42
+ ];
43
+ /**
44
+ * 判断账单类型
45
+ */
46
+ function categorizeFinance(amount, type) {
47
+ if (type === 'income' || type === 'expense') {
48
+ return type;
49
+ }
50
+ // 根据金额正负判断
51
+ return amount >= 0 ? 'income' : 'expense';
52
+ }
53
+ /**
54
+ * 获取默认分类
55
+ */
56
+ function getDefaultCategory(type) {
57
+ return type === 'income' ? 'other_income' : 'other';
58
+ }
59
+ /**
60
+ * 验证分类是否有效
61
+ */
62
+ function isValidCategory(type, category) {
63
+ const categories = type === 'income' ? exports.INCOME_CATEGORIES : exports.EXPENSE_CATEGORIES;
64
+ return categories.some(c => c === category);
65
+ }
66
+ /**
67
+ * 计算账户余额
68
+ */
69
+ function calculateBalance(items) {
70
+ return items.reduce((balance, item) => {
71
+ if (item.type === 'income') {
72
+ return balance + item.amount;
73
+ }
74
+ else {
75
+ return balance - item.amount;
76
+ }
77
+ }, 0);
78
+ }
79
+ /**
80
+ * 计算账单统计
81
+ */
82
+ function calculateFinanceStats(items) {
83
+ const stats = {
84
+ totalIncome: 0,
85
+ totalExpense: 0,
86
+ netBalance: 0,
87
+ byCategory: {},
88
+ };
89
+ for (const item of items) {
90
+ if (!stats.byCategory[item.category]) {
91
+ stats.byCategory[item.category] = { income: 0, expense: 0 };
92
+ }
93
+ if (item.type === 'income') {
94
+ stats.totalIncome += item.amount;
95
+ stats.byCategory[item.category].income += item.amount;
96
+ }
97
+ else {
98
+ stats.totalExpense += item.amount;
99
+ stats.byCategory[item.category].expense += item.amount;
100
+ }
101
+ }
102
+ stats.netBalance = stats.totalIncome - stats.totalExpense;
103
+ return stats;
104
+ }
105
+ /**
106
+ * 格式化金额
107
+ * @param amount 金额
108
+ * @param currency 货币符号,默认 ¥
109
+ * @param showSign 是否显示正负号,默认 false
110
+ */
111
+ function formatAmount(amount, currency = '¥', showSign = false) {
112
+ const formatted = Math.abs(amount).toFixed(2);
113
+ const sign = showSign ? (amount >= 0 ? '+' : '-') : '';
114
+ // 格式化千分位
115
+ const parts = formatted.split('.');
116
+ parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
117
+ return `${sign}${currency}${parts.join('.')}`;
118
+ }
119
+ /**
120
+ * 解析金额字符串
121
+ */
122
+ function parseAmount(amountStr) {
123
+ // 移除货币符号和千分位逗号
124
+ const cleaned = amountStr
125
+ .replace(/[¥$,]/g, '')
126
+ .trim();
127
+ const num = parseFloat(cleaned);
128
+ return isNaN(num) ? 0 : num;
129
+ }
130
+ /**
131
+ * 判断是否为有效金额
132
+ */
133
+ function isValidAmount(amount) {
134
+ return !isNaN(amount) && isFinite(amount) && amount !== 0;
135
+ }
136
+ /**
137
+ * 计算日均支出
138
+ */
139
+ function calculateDailyAverage(expense, days) {
140
+ if (days <= 0)
141
+ return 0;
142
+ return expense / days;
143
+ }
144
+ /**
145
+ * 计算月度预算剩余
146
+ */
147
+ function calculateBudgetRemaining(totalBudget, spent) {
148
+ return totalBudget - spent;
149
+ }
150
+ //# sourceMappingURL=finance.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finance.model.js","sourceRoot":"","sources":["../../src/utils/finance.model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * 全局输出格式化工具
3
+ * 支持 --json / --quiet / --dry-run 全局参数
4
+ */
5
+ export declare let globalJsonFlag: boolean;
6
+ export declare let globalQuietFlag: boolean;
7
+ export declare let globalDryRunFlag: boolean;
8
+ export declare function setGlobalFlags(args: {
9
+ json?: boolean;
10
+ quiet?: boolean;
11
+ dryRun?: boolean;
12
+ }): void;
13
+ /**
14
+ * 统一输出函数
15
+ */
16
+ export declare function output(data: any, options?: {
17
+ quiet?: boolean;
18
+ }): void;
19
+ /**
20
+ * 错误输出
21
+ */
22
+ export declare function outputError(message: string, ...args: any[]): void;
23
+ /**
24
+ * 成功输出
25
+ */
26
+ export declare function outputSuccess(message: string, ...args: any[]): void;
27
+ export interface LoadingInstance {
28
+ start: () => void;
29
+ succeed: (text?: string) => void;
30
+ fail: (text?: string) => void;
31
+ stop: () => void;
32
+ }
33
+ /**
34
+ * 创建 Loading 实例(简单实现,兼容 CJS)
35
+ */
36
+ export declare function createLoading(text: string): LoadingInstance;
37
+ /**
38
+ * Dry-run 检查,如果处于预览模式则输出并返回 true
39
+ */
40
+ export declare function isDryRun(): boolean;
41
+ export declare function dryRunLog(action: string, details?: any): void;
42
+ //# sourceMappingURL=output.d.ts.map