must-cli 1.9.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/LICENSE +22 -0
  2. package/dist/cli/index.d.ts +2 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +192 -0
  5. package/dist/cli/index.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +5 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config/index.d.ts +16 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +142 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/extractors/base.d.ts +59 -0
  15. package/dist/extractors/base.d.ts.map +1 -0
  16. package/dist/extractors/base.js +204 -0
  17. package/dist/extractors/base.js.map +1 -0
  18. package/dist/extractors/html.d.ts +8 -0
  19. package/dist/extractors/html.d.ts.map +1 -0
  20. package/dist/extractors/html.js +70 -0
  21. package/dist/extractors/html.js.map +1 -0
  22. package/dist/extractors/index.d.ts +33 -0
  23. package/dist/extractors/index.d.ts.map +1 -0
  24. package/dist/extractors/index.js +86 -0
  25. package/dist/extractors/index.js.map +1 -0
  26. package/dist/extractors/javascript.d.ts +17 -0
  27. package/dist/extractors/javascript.d.ts.map +1 -0
  28. package/dist/extractors/javascript.js +249 -0
  29. package/dist/extractors/javascript.js.map +1 -0
  30. package/dist/extractors/vue.d.ts +9 -0
  31. package/dist/extractors/vue.d.ts.map +1 -0
  32. package/dist/extractors/vue.js +99 -0
  33. package/dist/extractors/vue.js.map +1 -0
  34. package/dist/index.d.ts +36 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +414 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/transformer/index.d.ts +102 -0
  39. package/dist/transformer/index.d.ts.map +1 -0
  40. package/dist/transformer/index.js +844 -0
  41. package/dist/transformer/index.js.map +1 -0
  42. package/dist/translators/azure.d.ts +7 -0
  43. package/dist/translators/azure.d.ts.map +1 -0
  44. package/dist/translators/azure.js +43 -0
  45. package/dist/translators/azure.js.map +1 -0
  46. package/dist/translators/baidu.d.ts +8 -0
  47. package/dist/translators/baidu.d.ts.map +1 -0
  48. package/dist/translators/baidu.js +67 -0
  49. package/dist/translators/baidu.js.map +1 -0
  50. package/dist/translators/base.d.ts +15 -0
  51. package/dist/translators/base.d.ts.map +1 -0
  52. package/dist/translators/base.js +50 -0
  53. package/dist/translators/base.js.map +1 -0
  54. package/dist/translators/custom.d.ts +19 -0
  55. package/dist/translators/custom.d.ts.map +1 -0
  56. package/dist/translators/custom.js +82 -0
  57. package/dist/translators/custom.js.map +1 -0
  58. package/dist/translators/google.d.ts +6 -0
  59. package/dist/translators/google.d.ts.map +1 -0
  60. package/dist/translators/google.js +25 -0
  61. package/dist/translators/google.js.map +1 -0
  62. package/dist/translators/index.d.ts +16 -0
  63. package/dist/translators/index.d.ts.map +1 -0
  64. package/dist/translators/index.js +57 -0
  65. package/dist/translators/index.js.map +1 -0
  66. package/dist/types/index.d.ts +385 -0
  67. package/dist/types/index.d.ts.map +1 -0
  68. package/dist/types/index.js +3 -0
  69. package/dist/types/index.js.map +1 -0
  70. package/dist/utils/file.d.ts +5 -0
  71. package/dist/utils/file.d.ts.map +1 -0
  72. package/dist/utils/file.js +41 -0
  73. package/dist/utils/file.js.map +1 -0
  74. package/dist/utils/interpolation.d.ts +68 -0
  75. package/dist/utils/interpolation.d.ts.map +1 -0
  76. package/dist/utils/interpolation.js +174 -0
  77. package/dist/utils/interpolation.js.map +1 -0
  78. package/dist/utils/text.d.ts +42 -0
  79. package/dist/utils/text.d.ts.map +1 -0
  80. package/dist/utils/text.js +234 -0
  81. package/dist/utils/text.js.map +1 -0
  82. package/package.json +86 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Auto I18n Tool
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.
22
+
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const commander_1 = require("commander");
7
+ const index_1 = require("../index");
8
+ const config_1 = require("../config");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const ora_1 = __importDefault(require("ora"));
11
+ const inquirer_1 = __importDefault(require("inquirer"));
12
+ const program = new commander_1.Command();
13
+ program
14
+ .name('must')
15
+ .description('Automated internationalization tool for extracting and translating text')
16
+ .version('1.0.0');
17
+ // Default action when no command is specified
18
+ program
19
+ .option('--key-prefix <prefix>', 'Custom key prefix (e.g., CB_IBG_APPROLL_)')
20
+ .option('--key-counter-padding <num>', 'Counter padding (e.g., 5 for 00001)', parseInt)
21
+ .option('--key-counter-start <num>', 'Counter start value', parseInt)
22
+ .option('--key-prefix-only', 'Use prefix + counter only mode')
23
+ .action(async (options) => {
24
+ try {
25
+ const spinner = (0, ora_1.default)('Initializing...').start();
26
+ const configManager = new config_1.ConfigManager();
27
+ const config = configManager.getConfig();
28
+ // 应用命令行的 key 配置
29
+ if (options.keyPrefix || options.keyCounterPadding !== undefined ||
30
+ options.keyCounterStart !== undefined || options.keyPrefixOnly) {
31
+ config.keyConfig = config.keyConfig || {};
32
+ if (options.keyPrefix)
33
+ config.keyConfig.prefix = options.keyPrefix;
34
+ if (options.keyCounterPadding !== undefined)
35
+ config.keyConfig.counterPadding = options.keyCounterPadding;
36
+ if (options.keyCounterStart !== undefined)
37
+ config.keyConfig.counterStart = options.keyCounterStart;
38
+ if (options.keyPrefixOnly)
39
+ config.keyConfig.prefixOnly = true;
40
+ }
41
+ const autoI18n = new index_1.AutoI18n(config);
42
+ await autoI18n.run();
43
+ spinner.succeed('Process completed successfully!');
44
+ }
45
+ catch (error) {
46
+ console.error(chalk_1.default.red('Process failed:'), error);
47
+ process.exit(1);
48
+ }
49
+ });
50
+ // Extract command
51
+ program
52
+ .command('extract')
53
+ .description('Extract text strings from project files')
54
+ .option('-c, --config <path>', 'Path to configuration file')
55
+ .option('-o, --output <dir>', 'Output directory for extracted texts', 'i18n/strings')
56
+ .option('-p, --patterns <patterns...>', 'File patterns to include')
57
+ .option('-e, --exclude <patterns...>', 'File patterns to exclude')
58
+ .action(async (options) => {
59
+ try {
60
+ const spinner = (0, ora_1.default)('Initializing...').start();
61
+ const configManager = new config_1.ConfigManager(options.config);
62
+ const config = configManager.getConfig();
63
+ // Override config with CLI options
64
+ if (options.output)
65
+ config.outputDir = options.output;
66
+ if (options.patterns)
67
+ config.inputPatterns = options.patterns;
68
+ if (options.exclude)
69
+ config.excludePatterns = options.exclude;
70
+ const autoI18n = new index_1.AutoI18n(config);
71
+ spinner.text = 'Extracting texts...';
72
+ const extractedTexts = await autoI18n.extractTexts();
73
+ await autoI18n.generateReport(extractedTexts);
74
+ spinner.succeed(`Extracted ${extractedTexts.length} text strings`);
75
+ }
76
+ catch (error) {
77
+ console.error(chalk_1.default.red('Extraction failed:'), error);
78
+ process.exit(1);
79
+ }
80
+ });
81
+ // Translate command
82
+ program
83
+ .command('translate')
84
+ .description('Extract and translate text strings')
85
+ .option('-c, --config <path>', 'Path to configuration file')
86
+ .option('-s, --source <lang>', 'Source language code', 'en')
87
+ .option('-t, --target <languages...>', 'Target language codes', ['zh-CN'])
88
+ .option('-p, --provider <provider>', 'Translation provider', 'google')
89
+ .option('-k, --api-key <key>', 'API key for translation service')
90
+ .option('--api-secret <secret>', 'API secret (for Baidu)')
91
+ .option('--region <region>', 'Region (for Azure)')
92
+ .action(async (options) => {
93
+ try {
94
+ const spinner = (0, ora_1.default)('Initializing translation...').start();
95
+ const configManager = new config_1.ConfigManager(options.config);
96
+ const config = configManager.getConfig();
97
+ // Override config with CLI options
98
+ config.sourceLanguage = options.source;
99
+ config.targetLanguages = options.target;
100
+ config.translationProvider = options.provider;
101
+ if (options.apiKey)
102
+ config.apiKey = options.apiKey;
103
+ if (options.apiSecret)
104
+ config.apiSecret = options.apiSecret;
105
+ if (options.region)
106
+ config.region = options.region;
107
+ const autoI18n = new index_1.AutoI18n(config);
108
+ await autoI18n.run();
109
+ spinner.succeed('Translation completed successfully!');
110
+ }
111
+ catch (error) {
112
+ console.error(chalk_1.default.red('Translation failed:'), error);
113
+ process.exit(1);
114
+ }
115
+ });
116
+ // Init command
117
+ program
118
+ .command('init')
119
+ .description('Initialize configuration file')
120
+ .option('-o, --output <path>', 'Output path for config file', 'i18n.config.json')
121
+ .action(async (options) => {
122
+ try {
123
+ const answers = await inquirer_1.default.prompt([
124
+ {
125
+ type: 'input',
126
+ name: 'sourceLanguage',
127
+ message: 'Source language code:',
128
+ default: 'en'
129
+ },
130
+ {
131
+ type: 'input',
132
+ name: 'targetLanguages',
133
+ message: 'Target language codes (comma-separated):',
134
+ default: 'zh-CN'
135
+ },
136
+ {
137
+ type: 'list',
138
+ name: 'translationProvider',
139
+ message: 'Translation provider:',
140
+ choices: ['google', 'baidu', 'azure'],
141
+ default: 'google'
142
+ },
143
+ {
144
+ type: 'input',
145
+ name: 'outputDir',
146
+ message: 'Output directory:',
147
+ default: 'i18n/strings'
148
+ }
149
+ ]);
150
+ const config = {
151
+ ...(0, config_1.createDefaultConfig)(),
152
+ sourceLanguage: answers.sourceLanguage,
153
+ targetLanguages: answers.targetLanguages.split(',').map((s) => s.trim()),
154
+ translationProvider: answers.translationProvider,
155
+ outputDir: answers.outputDir
156
+ };
157
+ const fs = require('fs');
158
+ fs.writeFileSync(options.output, JSON.stringify(config, null, 2));
159
+ console.log(chalk_1.default.green(`Configuration file created at ${options.output}`));
160
+ }
161
+ catch (error) {
162
+ console.error(chalk_1.default.red('Init failed:'), error);
163
+ process.exit(1);
164
+ }
165
+ });
166
+ // Validate command
167
+ program
168
+ .command('validate')
169
+ .description('Validate configuration')
170
+ .option('-c, --config <path>', 'Path to configuration file')
171
+ .action(async (options) => {
172
+ try {
173
+ const configManager = new config_1.ConfigManager(options.config);
174
+ const validation = configManager.validateConfig();
175
+ if (validation.valid) {
176
+ console.log(chalk_1.default.green('✅ Configuration is valid'));
177
+ }
178
+ else {
179
+ console.log(chalk_1.default.red('❌ Configuration has errors:'));
180
+ validation.errors.forEach(error => {
181
+ console.log(chalk_1.default.red(` - ${error}`));
182
+ });
183
+ process.exit(1);
184
+ }
185
+ }
186
+ catch (error) {
187
+ console.error(chalk_1.default.red('Validation failed:'), error);
188
+ process.exit(1);
189
+ }
190
+ });
191
+ program.parse();
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;AAAA,yCAAoC;AACpC,oCAAoC;AACpC,sCAA+D;AAE/D,kDAA0B;AAC1B,8CAAsB;AACtB,wDAAgC;AAEhC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,yEAAyE,CAAC;KACtF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,8CAA8C;AAC9C,OAAO;KACJ,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,CAAC;KAC5E,MAAM,CAAC,6BAA6B,EAAE,qCAAqC,EAAE,QAAQ,CAAC;KACtF,MAAM,CAAC,2BAA2B,EAAE,qBAAqB,EAAE,QAAQ,CAAC;KACpE,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE/C,MAAM,aAAa,GAAG,IAAI,sBAAa,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;QAEzC,gBAAgB;QAChB,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS;YAC5D,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACnE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,SAAS;gBAAE,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;YACnE,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS;gBAAE,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;YACzG,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;gBAAE,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;YACnG,IAAI,OAAO,CAAC,aAAa;gBAAE,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;QAChE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,gBAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;QAErB,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,oBAAoB,EAAE,sCAAsC,EAAE,cAAc,CAAC;KACpF,MAAM,CAAC,8BAA8B,EAAE,0BAA0B,CAAC;KAClE,MAAM,CAAC,6BAA6B,EAAE,0BAA0B,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE/C,MAAM,aAAa,GAAG,IAAI,sBAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;QAEzC,mCAAmC;QACnC,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;QACtD,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9D,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;QAE9D,MAAM,QAAQ,GAAG,IAAI,gBAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAErC,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;QACrD,MAAM,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAE9C,OAAO,CAAC,OAAO,CAAC,aAAa,cAAc,CAAC,MAAM,eAAe,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,oBAAoB;AACpB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,qBAAqB,EAAE,sBAAsB,EAAE,IAAI,CAAC;KAC3D,MAAM,CAAC,6BAA6B,EAAE,uBAAuB,EAAE,CAAC,OAAO,CAAC,CAAC;KACzE,MAAM,CAAC,2BAA2B,EAAE,sBAAsB,EAAE,QAAQ,CAAC;KACrE,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;QAE3D,MAAM,aAAa,GAAG,IAAI,sBAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;QAEzC,mCAAmC;QACnC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;QACxC,MAAM,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAe,CAAC;QACrD,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACnD,IAAI,OAAO,CAAC,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAC5D,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAEnD,MAAM,QAAQ,GAAG,IAAI,gBAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;QAErB,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,kBAAkB,CAAC;KAChF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,uBAAuB;gBAChC,OAAO,EAAE,IAAI;aACd;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,0CAA0C;gBACnD,OAAO,EAAE,OAAO;aACjB;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,uBAAuB;gBAChC,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;gBACrC,OAAO,EAAE,QAAQ;aAClB;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,mBAAmB;gBAC5B,OAAO,EAAE,cAAc;aACxB;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAe;YACzB,GAAG,IAAA,4BAAmB,GAAE;YACxB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChF,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;QAEF,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAElE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iCAAiC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,sBAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;QAElD,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACtD,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import './cli/index';
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,aAAa,CAAC"}
package/dist/cli.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ require("./cli/index");
5
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,uBAAqB"}
@@ -0,0 +1,16 @@
1
+ import { I18nConfig } from '../types';
2
+ export declare class ConfigManager {
3
+ private config;
4
+ constructor(configPath?: string);
5
+ private loadConfig;
6
+ private loadModuleConfig;
7
+ private findConfigFile;
8
+ getConfig(): I18nConfig;
9
+ updateConfig(updates: Partial<I18nConfig>): void;
10
+ validateConfig(): {
11
+ valid: boolean;
12
+ errors: string[];
13
+ };
14
+ }
15
+ export declare function createDefaultConfig(): I18nConfig;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA0BtC,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAa;gBAEf,UAAU,CAAC,EAAE,MAAM;IAI/B,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,cAAc;IAqBf,SAAS,IAAI,UAAU;IAIvB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAIhD,cAAc,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAwB9D;AAED,wBAAgB,mBAAmB,IAAI,UAAU,CAsBhD"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigManager = void 0;
4
+ exports.createDefaultConfig = createDefaultConfig;
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const DEFAULT_CONFIG = {
8
+ sourceLanguage: 'zh-CN', // 默认源语言为中文
9
+ targetLanguages: ['en'], // 默认目标语言为英文
10
+ translationProvider: 'google',
11
+ outputDir: 'i18n/strings',
12
+ patchDir: 'i18n/patches', // 默认 patch 目录
13
+ inputPatterns: [
14
+ '**/*.js',
15
+ '**/*.jsx',
16
+ '**/*.ts',
17
+ '**/*.tsx',
18
+ '**/*.vue',
19
+ '**/*.html'
20
+ ],
21
+ excludePatterns: [
22
+ 'node_modules/**',
23
+ 'dist/**',
24
+ 'build/**',
25
+ '**/*.test.*',
26
+ '**/*.spec.*'
27
+ ]
28
+ };
29
+ class ConfigManager {
30
+ constructor(configPath) {
31
+ this.config = this.loadConfig(configPath);
32
+ }
33
+ loadConfig(configPath) {
34
+ const configFile = configPath || this.findConfigFile();
35
+ if (configFile && (0, fs_1.existsSync)(configFile)) {
36
+ try {
37
+ // Handle JavaScript/TypeScript config files
38
+ if (configFile.endsWith('.js') || configFile.endsWith('.ts')) {
39
+ return this.loadModuleConfig(configFile);
40
+ }
41
+ // Handle JSON config files
42
+ const userConfig = JSON.parse((0, fs_1.readFileSync)(configFile, 'utf-8'));
43
+ return { ...DEFAULT_CONFIG, ...userConfig };
44
+ }
45
+ catch (error) {
46
+ console.warn(`Failed to load config from ${configFile}:`, error);
47
+ }
48
+ }
49
+ return DEFAULT_CONFIG;
50
+ }
51
+ loadModuleConfig(filePath) {
52
+ try {
53
+ // For .ts files, try to use ts-node/register if available
54
+ if (filePath.endsWith('.ts')) {
55
+ try {
56
+ require('ts-node/register');
57
+ }
58
+ catch {
59
+ // ts-node not available, try to require directly
60
+ }
61
+ }
62
+ // Use require to load the module
63
+ const absolutePath = require.resolve(filePath, { paths: [process.cwd()] });
64
+ delete require.cache[absolutePath];
65
+ const config = require(absolutePath);
66
+ const userConfig = config.default || config;
67
+ return { ...DEFAULT_CONFIG, ...userConfig };
68
+ }
69
+ catch (error) {
70
+ console.warn(`Failed to load module config:`, error);
71
+ return DEFAULT_CONFIG;
72
+ }
73
+ }
74
+ findConfigFile() {
75
+ const possibleNames = [
76
+ 'must.config.js', // 优先 JS 文件(更稳定)
77
+ 'must.config.json',
78
+ 'must.config.ts',
79
+ 'i18n.config.js',
80
+ 'i18n.config.json',
81
+ 'i18n.config.ts',
82
+ '.i18nrc.json'
83
+ ];
84
+ for (const name of possibleNames) {
85
+ const fullPath = (0, path_1.join)(process.cwd(), name);
86
+ if ((0, fs_1.existsSync)(fullPath)) {
87
+ return fullPath;
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ getConfig() {
93
+ return this.config;
94
+ }
95
+ updateConfig(updates) {
96
+ this.config = { ...this.config, ...updates };
97
+ }
98
+ validateConfig() {
99
+ const errors = [];
100
+ if (!this.config.sourceLanguage) {
101
+ errors.push('sourceLanguage is required');
102
+ }
103
+ if (!this.config.targetLanguages || this.config.targetLanguages.length === 0) {
104
+ errors.push('targetLanguages must have at least one language');
105
+ }
106
+ if (!this.config.translationProvider) {
107
+ errors.push('translationProvider is required');
108
+ }
109
+ if (!this.config.outputDir) {
110
+ errors.push('outputDir is required');
111
+ }
112
+ return {
113
+ valid: errors.length === 0,
114
+ errors
115
+ };
116
+ }
117
+ }
118
+ exports.ConfigManager = ConfigManager;
119
+ function createDefaultConfig() {
120
+ return {
121
+ sourceLanguage: 'en',
122
+ targetLanguages: ['zh-CN'],
123
+ translationProvider: 'google',
124
+ outputDir: 'i18n/strings',
125
+ inputPatterns: [
126
+ '**/*.js',
127
+ '**/*.jsx',
128
+ '**/*.ts',
129
+ '**/*.tsx',
130
+ '**/*.vue',
131
+ '**/*.html'
132
+ ],
133
+ excludePatterns: [
134
+ 'node_modules/**',
135
+ 'dist/**',
136
+ 'build/**',
137
+ '**/*.test.*',
138
+ '**/*.spec.*'
139
+ ]
140
+ };
141
+ }
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { ExtractedText, ExtractorOptions, InterpolationConfig, ExtractionWarning, ExtractionWarningSeverity } from '../types';
2
+ import { InterpolationHandler } from '../utils/interpolation';
3
+ export interface ExtractorConfig {
4
+ options?: ExtractorOptions;
5
+ sourceLanguage?: string;
6
+ interpolation?: InterpolationConfig;
7
+ }
8
+ export interface ExtractResult {
9
+ texts: ExtractedText[];
10
+ warnings: ExtractionWarning[];
11
+ }
12
+ export declare abstract class BaseExtractor {
13
+ protected options: ExtractorOptions;
14
+ protected sourceLanguage: string;
15
+ protected interpolation: InterpolationHandler;
16
+ protected warnings: ExtractionWarning[];
17
+ constructor(config?: ExtractorConfig);
18
+ /**
19
+ * 清空警告列表
20
+ */
21
+ protected clearWarnings(): void;
22
+ /**
23
+ * 获取所有警告
24
+ */
25
+ getWarnings(): ExtractionWarning[];
26
+ /**
27
+ * 添加警告
28
+ */
29
+ protected addWarning(type: ExtractionWarning['type'], severity: ExtractionWarningSeverity, message: string, file: string, line: number, column: number, code?: string, suggestion?: string): void;
30
+ /**
31
+ * 分析表达式复杂度并返回警告信息(如果需要)
32
+ */
33
+ protected analyzeExpressionComplexity(expression: any, file: string, line: number, column: number): {
34
+ isComplex: boolean;
35
+ name?: string;
36
+ };
37
+ /**
38
+ * 获取表达式的代码片段(简化版)
39
+ */
40
+ private getExpressionCode;
41
+ /**
42
+ * 生成占位符
43
+ * @param index 占位符索引
44
+ * @param name 变量名(用于命名参数模式)
45
+ */
46
+ protected formatPlaceholder(index: number, name?: string): string;
47
+ /**
48
+ * 是否使用命名参数
49
+ */
50
+ protected get useNamedParams(): boolean;
51
+ /**
52
+ * 从表达式节点提取变量名
53
+ */
54
+ protected extractExpressionName(expression: any): string | undefined;
55
+ abstract extract(filePath: string): Promise<ExtractedText[]>;
56
+ protected createExtractedText(text: string, file: string, line: number, column: number, type: ExtractedText['type'], context?: string): ExtractedText;
57
+ protected isValidText(text: string): boolean;
58
+ }
59
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/extractors/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAC9H,OAAO,EAAE,oBAAoB,EAA8B,MAAM,wBAAwB,CAAC;AAE1F,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,8BAAsB,aAAa;IACjC,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACpC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC9C,SAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAM;gBAEjC,MAAM,GAAE,eAAoB;IAaxC;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B;;OAEG;IACI,WAAW,IAAI,iBAAiB,EAAE;IAIzC;;OAEG;IACH,SAAS,CAAC,UAAU,CAClB,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAC/B,QAAQ,EAAE,yBAAyB,EACnC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI;IAaP;;OAEG;IACH,SAAS,CAAC,2BAA2B,CACnC,UAAU,EAAE,GAAG,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;IAwGxC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;;;OAIG;IACH,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjE;;OAEG;IACH,SAAS,KAAK,cAAc,IAAI,OAAO,CAEtC;IAED;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS;IAkBpE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAE5D,SAAS,CAAC,mBAAmB,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,GACf,aAAa;IAWhB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CA0C7C"}