@termdock/twlint 1.0.0 → 1.0.2

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 (55) hide show
  1. package/README.md +176 -63
  2. package/bin/twlint +4 -2
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +63 -12
  6. package/dist/cli.js.map +1 -1
  7. package/dist/core/config-schema.d.ts +1 -0
  8. package/dist/core/config-schema.d.ts.map +1 -1
  9. package/dist/core/config-schema.js +33 -7
  10. package/dist/core/config-schema.js.map +1 -1
  11. package/dist/core/dictionary-loading-strategies.d.ts +45 -0
  12. package/dist/core/dictionary-loading-strategies.d.ts.map +1 -0
  13. package/dist/core/dictionary-loading-strategies.js +75 -0
  14. package/dist/core/dictionary-loading-strategies.js.map +1 -0
  15. package/dist/core/dictionary-manager.d.ts +2 -1
  16. package/dist/core/dictionary-manager.d.ts.map +1 -1
  17. package/dist/core/dictionary-manager.js +51 -16
  18. package/dist/core/dictionary-manager.js.map +1 -1
  19. package/dist/core/linter.d.ts +2 -6
  20. package/dist/core/linter.d.ts.map +1 -1
  21. package/dist/core/linter.js +82 -58
  22. package/dist/core/linter.js.map +1 -1
  23. package/dist/core/lru-cache.d.ts +18 -0
  24. package/dist/core/lru-cache.d.ts.map +1 -0
  25. package/dist/core/lru-cache.js +57 -0
  26. package/dist/core/lru-cache.js.map +1 -0
  27. package/dist/core/matching/match-strategies.d.ts +19 -11
  28. package/dist/core/matching/match-strategies.d.ts.map +1 -1
  29. package/dist/core/matching/match-strategies.js +44 -74
  30. package/dist/core/matching/match-strategies.js.map +1 -1
  31. package/dist/core/rules/mainland-terms.d.ts +3 -1
  32. package/dist/core/rules/mainland-terms.d.ts.map +1 -1
  33. package/dist/core/rules/mainland-terms.js +25 -4
  34. package/dist/core/rules/mainland-terms.js.map +1 -1
  35. package/dist/dictionaries/academic.json +242 -22
  36. package/dist/dictionaries/ai-emerging-tech.json +3209 -0
  37. package/dist/dictionaries/business-finance.json +3449 -0
  38. package/dist/dictionaries/core.json +2902 -248
  39. package/dist/dictionaries/hardware-3c.json +2649 -0
  40. package/dist/dictionaries/index.json +70 -8
  41. package/dist/dictionaries/network-cloud.json +2953 -0
  42. package/dist/dictionaries/operating-system.json +2889 -0
  43. package/dist/dictionaries/social-media.json +2833 -0
  44. package/dist/dictionaries/software-development.json +3809 -0
  45. package/dist/dictionaries/user-interface.json +3225 -0
  46. package/dist/formatters/stylish.d.ts.map +1 -1
  47. package/dist/formatters/stylish.js +5 -15
  48. package/dist/formatters/stylish.js.map +1 -1
  49. package/dist/types.d.ts +20 -8
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/utils/error-utils.d.ts +9 -0
  52. package/dist/utils/error-utils.d.ts.map +1 -0
  53. package/dist/utils/error-utils.js +15 -0
  54. package/dist/utils/error-utils.js.map +1 -0
  55. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"stylish.d.ts","sourceRoot":"","sources":["../../src/formatters/stylish.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAExD,qBAAa,gBAAiB,YAAW,SAAS;IAChD,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;CA8CtC"}
1
+ {"version":3,"file":"stylish.d.ts","sourceRoot":"","sources":["../../src/formatters/stylish.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAExD,qBAAa,gBAAiB,YAAW,SAAS;IAChD,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;CAoCtC"}
@@ -12,7 +12,10 @@ export class StylishFormatter {
12
12
  const { line, column, severity, message: msg, rule } = message;
13
13
  const icon = severity === 'error' ? chalk.red('✖') : chalk.yellow('⚠');
14
14
  const severityText = severity === 'error' ? chalk.red('error') : chalk.yellow('warning');
15
- output += ` ${String(line).padStart(3)}:${String(column).padEnd(3)} ${icon} ${severityText} ${msg} ${chalk.dim(rule)}\n`;
15
+ // info 級別用不同圖示和顏色
16
+ const infoIcon = severity === 'info' ? chalk.blue('ℹ') : icon;
17
+ const infoSeverityText = severity === 'info' ? chalk.blue('info') : severityText;
18
+ output += ` ${String(line).padStart(3)}:${String(column).padEnd(3)} ${infoIcon} ${infoSeverityText} ${msg} ${chalk.dim(rule)}\n`;
16
19
  if (severity === 'error')
17
20
  totalErrors++;
18
21
  if (severity === 'warning')
@@ -21,20 +24,7 @@ export class StylishFormatter {
21
24
  }
22
25
  if (totalErrors > 0 || totalWarnings > 0) {
23
26
  output += `\n${chalk.red('✖')} ${totalErrors + totalWarnings} problems (${totalErrors} errors, ${totalWarnings} warnings)`;
24
- const fixableErrors = results.reduce((sum, result) => sum + result.messages.filter(msg => msg.fixable && msg.severity === 'error').length, 0);
25
- const fixableWarnings = results.reduce((sum, result) => sum + result.messages.filter(msg => msg.fixable && msg.severity === 'warning').length, 0);
26
- if (fixableErrors > 0 || fixableWarnings > 0) {
27
- output += `\n ${fixableErrors + fixableWarnings} problems potentially fixable with the \`--fix\` option`;
28
- if (fixableErrors > 0 && fixableWarnings > 0) {
29
- output += ` (${fixableErrors} errors, ${fixableWarnings} warnings).`;
30
- }
31
- else if (fixableErrors > 0) {
32
- output += ` (${fixableErrors} errors).`;
33
- }
34
- else {
35
- output += ` (${fixableWarnings} warnings).`;
36
- }
37
- }
27
+ // 修復提示由 CLI 統一處理,這裡不輸出
38
28
  }
39
29
  else {
40
30
  output += `\n${chalk.green('✓')} No problems found!`;
@@ -1 +1 @@
1
- {"version":3,"file":"stylish.js","sourceRoot":"","sources":["../../src/formatters/stylish.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,OAAqB;QAC1B,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,WAAW,GAAG,CAAC,CAAA;QACnB,IAAI,aAAa,GAAG,CAAC,CAAA;QAErB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAQ;YAE1C,MAAM,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA;YAEnD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;gBAC9D,MAAM,IAAI,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACtE,MAAM,YAAY,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBAExF,MAAM,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,YAAY,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;gBAE3H,IAAI,QAAQ,KAAK,OAAO;oBAAE,WAAW,EAAE,CAAA;gBACvC,IAAI,QAAQ,KAAK,SAAS;oBAAE,aAAa,EAAE,CAAA;YAC7C,CAAC;QACH,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,cAAc,WAAW,YAAY,aAAa,YAAY,CAAA;YAE1H,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CACnD,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACzF,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CACrD,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAE3F,IAAI,aAAa,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,OAAO,aAAa,GAAG,eAAe,yDAAyD,CAAA;gBACzG,IAAI,aAAa,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;oBAC7C,MAAM,IAAI,KAAK,aAAa,YAAY,eAAe,aAAa,CAAA;gBACtE,CAAC;qBAAM,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,aAAa,WAAW,CAAA;gBACzC,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,eAAe,aAAa,CAAA;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAA;QACtD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"stylish.js","sourceRoot":"","sources":["../../src/formatters/stylish.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,OAAqB;QAC1B,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,WAAW,GAAG,CAAC,CAAA;QACnB,IAAI,aAAa,GAAG,CAAC,CAAA;QAErB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAQ;YAE1C,MAAM,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA;YAEnD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;gBAC9D,MAAM,IAAI,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACtE,MAAM,YAAY,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBAExF,kBAAkB;gBAClB,MAAM,QAAQ,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBAC7D,MAAM,gBAAgB,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;gBAEhF,MAAM,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,gBAAgB,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;gBAEnI,IAAI,QAAQ,KAAK,OAAO;oBAAE,WAAW,EAAE,CAAA;gBACvC,IAAI,QAAQ,KAAK,SAAS;oBAAE,aAAa,EAAE,CAAA;YAC7C,CAAC;QACH,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,cAAc,WAAW,YAAY,aAAa,YAAY,CAAA;YAE1H,uBAAuB;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAA;QACtD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { PositionMapper } from './core/position-mapper.js';
1
2
  export interface Issue {
2
3
  line: number;
3
4
  column: number;
@@ -14,6 +15,7 @@ export interface LintResult {
14
15
  export interface TWLintConfig {
15
16
  files?: string[];
16
17
  dictionaries?: string[];
18
+ domains?: string[];
17
19
  rules?: Record<string, 'error' | 'warning' | 'info' | 'off'>;
18
20
  }
19
21
  export type MatchType = 'exact' | 'word_boundary' | 'context_sensitive';
@@ -34,6 +36,7 @@ export interface DictEntry {
34
36
  domain: string;
35
37
  match_type: MatchType;
36
38
  context?: ContextRule;
39
+ autofix_safe?: boolean;
37
40
  }
38
41
  export interface MatchResult {
39
42
  term: string;
@@ -42,6 +45,16 @@ export interface MatchResult {
42
45
  end: number;
43
46
  confidence: number;
44
47
  rule: string;
48
+ autofix_safe?: boolean;
49
+ }
50
+ export interface DictLookupEntry {
51
+ taiwan: string;
52
+ confidence: number;
53
+ category: string;
54
+ reason: string;
55
+ match_type: MatchType;
56
+ context?: ContextRule;
57
+ autofix_safe?: boolean;
45
58
  }
46
59
  export interface CompiledDict {
47
60
  metadata: {
@@ -49,21 +62,20 @@ export interface CompiledDict {
49
62
  version: string;
50
63
  entries: number;
51
64
  };
52
- lookup: Record<string, {
53
- taiwan: string;
54
- confidence: number;
55
- category: string;
56
- reason: string;
57
- match_type: MatchType;
58
- context?: ContextRule;
59
- }>;
65
+ lookup: Record<string, DictLookupEntry>;
60
66
  }
61
67
  export interface MatchStrategy {
62
68
  name: MatchType;
63
69
  match(text: string, term: string, context?: ContextRule): MatchResult[];
64
70
  }
71
+ export interface TextProcessingContext {
72
+ originalText: string;
73
+ processedText: string;
74
+ positionMapper?: PositionMapper;
75
+ }
65
76
  export interface Rule {
66
77
  name: string;
78
+ preprocess?(text: string): Promise<TextProcessingContext>;
67
79
  check(text: string): Promise<Issue[]>;
68
80
  fix?(text: string): Promise<string>;
69
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,KAAK,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,CAAA;CAC7D;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,eAAe,GAAG,mBAAmB,CAAA;AAEvE,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,SAAS,CAAA;IACrB,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,MAAM,CAAA;QAClB,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,SAAS,CAAA;QACrB,OAAO,CAAC,EAAE,WAAW,CAAA;KACtB,CAAC,CAAA;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAA;CACxE;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IACrC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;CACtC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE/D,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,KAAK,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,CAAA;CAC7D;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,eAAe,GAAG,mBAAmB,CAAA;AAEvE,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,SAAS,CAAA;IACrB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,SAAS,CAAA;IACrB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAA;CACxE;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,cAAc,CAAA;CAChC;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;IACzD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IACrC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;CACtC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 統一錯誤處理工具 - 消除重複的錯誤處理代碼
3
+ */
4
+ export declare function formatError(error: unknown): string;
5
+ export declare class ErrorHandler {
6
+ static handle(error: unknown, context: string): void;
7
+ static throw(error: unknown, context: string): never;
8
+ }
9
+ //# sourceMappingURL=error-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-utils.d.ts","sourceRoot":"","sources":["../../src/utils/error-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAElD;AAED,qBAAa,YAAY;IACvB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIpD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK;CAGrD"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 統一錯誤處理工具 - 消除重複的錯誤處理代碼
3
+ */
4
+ export function formatError(error) {
5
+ return error instanceof Error ? error.message : String(error);
6
+ }
7
+ export class ErrorHandler {
8
+ static handle(error, context) {
9
+ console.warn(`Warning: ${context} failed: ${formatError(error)}`);
10
+ }
11
+ static throw(error, context) {
12
+ throw new Error(`${context}: ${formatError(error)}`);
13
+ }
14
+ }
15
+ //# sourceMappingURL=error-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-utils.js","sourceRoot":"","sources":["../../src/utils/error-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,MAAM,CAAC,KAAc,EAAE,OAAe;QAC3C,OAAO,CAAC,IAAI,CAAC,YAAY,OAAO,YAAY,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAc,EAAE,OAAe;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACtD,CAAC;CACF"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@termdock/twlint",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "A CLI tool for detecting simplified Chinese terms and suggesting Taiwan traditional alternatives",
5
5
  "main": "dist/cli.js",
6
6
  "type": "module",
7
7
  "bin": {
8
- "twlint": "./bin/twlint"
8
+ "twlint": "bin/twlint"
9
9
  },
10
10
  "scripts": {
11
11
  "dev": "npm run dict:build && tsx watch src/cli.ts",
@@ -18,7 +18,7 @@
18
18
  "dict:check": "tsx tools/dict-manager.ts validate",
19
19
  "dict:list": "tsx tools/dict-manager.ts list",
20
20
  "dict:merge": "tsx tools/dict-manager.ts merge",
21
- "lint": "eslint src/ --fix",
21
+ "lint": "eslint \"src/**/*.ts\" --fix",
22
22
  "format": "prettier --write src/",
23
23
  "prepublishOnly": "npm run build"
24
24
  },
@@ -42,10 +42,10 @@
42
42
  "@types/papaparse": "^5.3.7",
43
43
  "@typescript-eslint/eslint-plugin": "^8.44.0",
44
44
  "@typescript-eslint/parser": "^8.44.0",
45
- "eslint": "^8.0.0",
45
+ "eslint": "^9.36.0",
46
46
  "prettier": "^3.0.0",
47
47
  "tsx": "^3.12.0",
48
- "typescript": "^5.0.0",
48
+ "typescript": "^5.9.2",
49
49
  "vitest": "^0.34.0"
50
50
  },
51
51
  "keywords": [