transcripto-cli 1.0.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 (58) hide show
  1. package/README.md +576 -0
  2. package/dist/cli/generate.d.ts +2 -0
  3. package/dist/cli/generate.d.ts.map +1 -0
  4. package/dist/cli/generate.js +416 -0
  5. package/dist/cli/generate.js.map +1 -0
  6. package/dist/cli/index.d.ts +3 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +43 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/init.d.ts +2 -0
  11. package/dist/cli/init.d.ts.map +1 -0
  12. package/dist/cli/init.js +81 -0
  13. package/dist/cli/init.js.map +1 -0
  14. package/dist/cli/report.d.ts +2 -0
  15. package/dist/cli/report.d.ts.map +1 -0
  16. package/dist/cli/report.js +137 -0
  17. package/dist/cli/report.js.map +1 -0
  18. package/dist/cli/scan.d.ts +2 -0
  19. package/dist/cli/scan.d.ts.map +1 -0
  20. package/dist/cli/scan.js +62 -0
  21. package/dist/cli/scan.js.map +1 -0
  22. package/dist/cli/watch-i18n.d.ts +2 -0
  23. package/dist/cli/watch-i18n.d.ts.map +1 -0
  24. package/dist/cli/watch-i18n.js +73 -0
  25. package/dist/cli/watch-i18n.js.map +1 -0
  26. package/dist/cli/watch.d.ts +2 -0
  27. package/dist/cli/watch.d.ts.map +1 -0
  28. package/dist/cli/watch.js +147 -0
  29. package/dist/cli/watch.js.map +1 -0
  30. package/dist/core/i18nGenerator.d.ts +16 -0
  31. package/dist/core/i18nGenerator.d.ts.map +1 -0
  32. package/dist/core/i18nGenerator.js +139 -0
  33. package/dist/core/i18nGenerator.js.map +1 -0
  34. package/dist/core/projectScanner.d.ts +12 -0
  35. package/dist/core/projectScanner.d.ts.map +1 -0
  36. package/dist/core/projectScanner.js +53 -0
  37. package/dist/core/projectScanner.js.map +1 -0
  38. package/dist/core/stringExtractor.d.ts +21 -0
  39. package/dist/core/stringExtractor.d.ts.map +1 -0
  40. package/dist/core/stringExtractor.js +268 -0
  41. package/dist/core/stringExtractor.js.map +1 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +10 -0
  45. package/dist/index.js.map +1 -0
  46. package/package.json +44 -0
  47. package/src/cli/generate.ts +422 -0
  48. package/src/cli/index.ts +50 -0
  49. package/src/cli/init.ts +96 -0
  50. package/src/cli/report.ts +160 -0
  51. package/src/cli/scan.ts +69 -0
  52. package/src/cli/watch-i18n.ts +77 -0
  53. package/src/cli/watch.ts +129 -0
  54. package/src/core/i18nGenerator.ts +127 -0
  55. package/src/core/projectScanner.ts +62 -0
  56. package/src/core/stringExtractor.ts +276 -0
  57. package/src/index.ts +7 -0
  58. package/tsconfig.json +20 -0
@@ -0,0 +1,12 @@
1
+ export interface FileInfo {
2
+ path: string;
3
+ content: string;
4
+ size: number;
5
+ }
6
+ export declare class ProjectScanner {
7
+ private readonly extensions;
8
+ private readonly excludePatterns;
9
+ scanProject(rootPath?: string): Promise<FileInfo[]>;
10
+ getProjectStructure(rootPath?: string): Promise<string[]>;
11
+ }
12
+ //# sourceMappingURL=projectScanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectScanner.d.ts","sourceRoot":"","sources":["../../src/core/projectScanner.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2C;IACtE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAM9B;IAEI,WAAW,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA6BlE,mBAAmB,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAY/E"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectScanner = void 0;
4
+ const glob_1 = require("glob");
5
+ const fs_1 = require("fs");
6
+ class ProjectScanner {
7
+ constructor() {
8
+ this.extensions = ['.ts', '.tsx', '.js', '.jsx', '.html'];
9
+ this.excludePatterns = [
10
+ '**/node_modules/**',
11
+ '**/dist/**',
12
+ '**/build/**',
13
+ '**/.git/**',
14
+ '**/coverage/**'
15
+ ];
16
+ }
17
+ async scanProject(rootPath = process.cwd()) {
18
+ const pattern = `**/*.{${this.extensions.map(ext => ext.slice(1)).join(',')}}`;
19
+ const files = await (0, glob_1.glob)(pattern, {
20
+ cwd: rootPath,
21
+ ignore: this.excludePatterns,
22
+ absolute: true
23
+ });
24
+ const fileInfos = [];
25
+ for (const filePath of files) {
26
+ try {
27
+ const content = await fs_1.promises.readFile(filePath, 'utf-8');
28
+ const stats = await fs_1.promises.stat(filePath);
29
+ fileInfos.push({
30
+ path: filePath,
31
+ content,
32
+ size: stats.size
33
+ });
34
+ }
35
+ catch (error) {
36
+ console.warn(`Warning: Could not read file ${filePath}:`, error);
37
+ }
38
+ }
39
+ return fileInfos;
40
+ }
41
+ async getProjectStructure(rootPath = process.cwd()) {
42
+ const pattern = '**/*';
43
+ const files = await (0, glob_1.glob)(pattern, {
44
+ cwd: rootPath,
45
+ ignore: this.excludePatterns,
46
+ absolute: false,
47
+ nodir: true
48
+ });
49
+ return files.sort();
50
+ }
51
+ }
52
+ exports.ProjectScanner = ProjectScanner;
53
+ //# sourceMappingURL=projectScanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectScanner.js","sourceRoot":"","sources":["../../src/core/projectScanner.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,2BAAoC;AASpC,MAAa,cAAc;IAA3B;QACmB,eAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,oBAAe,GAAG;YACjC,oBAAoB;YACpB,YAAY;YACZ,aAAa;YACb,YAAY;YACZ,gBAAgB;SACjB,CAAC;IA2CJ,CAAC;IAzCC,KAAK,CAAC,WAAW,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;QAChD,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAE/E,MAAM,KAAK,GAAG,MAAM,IAAA,WAAI,EAAC,OAAO,EAAE;YAChC,GAAG,EAAE,QAAQ;YACb,MAAM,EAAE,IAAI,CAAC,eAAe;YAC5B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,MAAM,SAAS,GAAe,EAAE,CAAC;QAEjC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,KAAK,GAAG,MAAM,aAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEtC,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,QAAQ;oBACd,OAAO;oBACP,IAAI,EAAE,KAAK,CAAC,IAAI;iBACjB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;QACxD,MAAM,OAAO,GAAG,MAAM,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,IAAA,WAAI,EAAC,OAAO,EAAE;YAChC,GAAG,EAAE,QAAQ;YACb,MAAM,EAAE,IAAI,CAAC,eAAe;YAC5B,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;CACF;AAnDD,wCAmDC"}
@@ -0,0 +1,21 @@
1
+ import { FileInfo } from './projectScanner';
2
+ export interface ExtractedString {
3
+ text: string;
4
+ key: string;
5
+ filePath: string;
6
+ line: number;
7
+ column: number;
8
+ type: 'jsx' | 'string' | 'template';
9
+ }
10
+ export declare class StringExtractor {
11
+ private readonly minStringLength;
12
+ private readonly excludePatterns;
13
+ extractStrings(files: FileInfo[]): Promise<ExtractedString[]>;
14
+ private extractFromFile;
15
+ private isValidString;
16
+ private isUIText;
17
+ private isTechnicalString;
18
+ private generateKey;
19
+ private deduplicateStrings;
20
+ }
21
+ //# sourceMappingURL=stringExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringExtractor.d.ts","sourceRoot":"","sources":["../../src/core/stringExtractor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;CACrC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAK;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAK9B;IAEI,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAWrD,eAAe;IAyF7B,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,QAAQ;IA2DhB,OAAO,CAAC,iBAAiB;IA0CzB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,kBAAkB;CAY3B"}
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.StringExtractor = void 0;
40
+ const parser_1 = require("@babel/parser");
41
+ const traverse_1 = __importDefault(require("@babel/traverse"));
42
+ const t = __importStar(require("@babel/types"));
43
+ class StringExtractor {
44
+ constructor() {
45
+ this.minStringLength = 2;
46
+ this.excludePatterns = [
47
+ /^[a-zA-Z]+\.[a-zA-Z]+$/, // property access
48
+ /^[{}()\[\]]$/, // single brackets
49
+ /^\d+$/, // numbers only
50
+ /^[a-zA-Z]$/, // single letters
51
+ ];
52
+ }
53
+ async extractStrings(files) {
54
+ const extractedStrings = [];
55
+ for (const file of files) {
56
+ const strings = await this.extractFromFile(file);
57
+ extractedStrings.push(...strings);
58
+ }
59
+ return this.deduplicateStrings(extractedStrings);
60
+ }
61
+ async extractFromFile(file) {
62
+ const strings = [];
63
+ try {
64
+ const ast = (0, parser_1.parse)(file.content, {
65
+ sourceType: 'module',
66
+ plugins: [
67
+ 'jsx',
68
+ 'typescript',
69
+ 'decorators-legacy',
70
+ 'classProperties',
71
+ 'objectRestSpread',
72
+ 'asyncGenerators',
73
+ 'functionBind',
74
+ 'exportDefaultFrom',
75
+ 'exportNamespaceFrom',
76
+ 'dynamicImport',
77
+ 'nullishCoalescingOperator',
78
+ 'optionalChaining'
79
+ ]
80
+ });
81
+ const lines = file.content.split('\n');
82
+ (0, traverse_1.default)(ast, {
83
+ // JSX text content
84
+ JSXText: (path) => {
85
+ const text = path.node.value.trim();
86
+ if (this.isValidString(text)) {
87
+ const loc = path.node.loc;
88
+ if (loc) {
89
+ strings.push({
90
+ text,
91
+ key: this.generateKey(text),
92
+ filePath: file.path,
93
+ line: loc.start.line,
94
+ column: loc.start.column,
95
+ type: 'jsx'
96
+ });
97
+ }
98
+ }
99
+ },
100
+ // String literals
101
+ StringLiteral: (path) => {
102
+ const text = path.node.value;
103
+ if (this.isValidString(text) && this.isUIText(path)) {
104
+ const loc = path.node.loc;
105
+ if (loc) {
106
+ strings.push({
107
+ text,
108
+ key: this.generateKey(text),
109
+ filePath: file.path,
110
+ line: loc.start.line,
111
+ column: loc.start.column,
112
+ type: 'string'
113
+ });
114
+ }
115
+ }
116
+ },
117
+ // Template literals
118
+ TemplateLiteral: (path) => {
119
+ if (path.node.expressions.length === 0) {
120
+ const text = path.node.quasis[0]?.value.raw;
121
+ if (text && this.isValidString(text)) {
122
+ const loc = path.node.loc;
123
+ if (loc) {
124
+ strings.push({
125
+ text,
126
+ key: this.generateKey(text),
127
+ filePath: file.path,
128
+ line: loc.start.line,
129
+ column: loc.start.column,
130
+ type: 'template'
131
+ });
132
+ }
133
+ }
134
+ }
135
+ }
136
+ });
137
+ }
138
+ catch (error) {
139
+ console.warn(`Warning: Could not parse file ${file.path}:`, error);
140
+ }
141
+ return strings;
142
+ }
143
+ isValidString(text) {
144
+ if (!text || text.length < this.minStringLength) {
145
+ return false;
146
+ }
147
+ // Check if it's likely UI text (contains letters and spaces)
148
+ const hasLetters = /[a-zA-Z]/.test(text);
149
+ const hasSpaces = /\s/.test(text);
150
+ const isSentence = /[.!?]$/.test(text);
151
+ const isPhrase = text.split(' ').length >= 2;
152
+ // Must have letters and either spaces or be a complete sentence
153
+ if (!hasLetters) {
154
+ return false;
155
+ }
156
+ // Accept if it has spaces (likely a phrase) or is a complete sentence
157
+ if (hasSpaces || isSentence || isPhrase) {
158
+ return true;
159
+ }
160
+ // For single words, only accept if they're longer and look like UI text
161
+ if (text.length >= 4 && /^[A-Z][a-z]+$/.test(text)) {
162
+ return true;
163
+ }
164
+ // Reject technical strings, single words, or very short strings
165
+ return false;
166
+ }
167
+ isUIText(path) {
168
+ const parent = path.parent;
169
+ const text = path.node.value;
170
+ // Exclude technical strings that should never be localized
171
+ if (this.isTechnicalString(text)) {
172
+ return false;
173
+ }
174
+ // Exclude keys in objects
175
+ if (t.isObjectProperty(parent) && parent.key === path.node) {
176
+ return false;
177
+ }
178
+ // Exclude import statements
179
+ if (t.isImportDeclaration(parent)) {
180
+ return false;
181
+ }
182
+ // Exclude import() calls (dynamic imports)
183
+ if (t.isCallExpression(parent) &&
184
+ parent.callee.type === 'Import') {
185
+ return false;
186
+ }
187
+ // Exclude require calls
188
+ if (t.isCallExpression(parent) &&
189
+ t.isIdentifier(parent.callee) &&
190
+ parent.callee.name === 'require') {
191
+ return false;
192
+ }
193
+ // Exclude document.getElementById calls
194
+ if (t.isCallExpression(parent) &&
195
+ t.isMemberExpression(parent.callee) &&
196
+ t.isIdentifier(parent.callee.object) &&
197
+ parent.callee.object.name === 'document' &&
198
+ t.isIdentifier(parent.callee.property) &&
199
+ parent.callee.property.name === 'getElementById') {
200
+ return false;
201
+ }
202
+ // Exclude variable declarations that look like constants
203
+ if (t.isVariableDeclarator(parent) &&
204
+ t.isIdentifier(parent.id) &&
205
+ /^[A-Z_]+$/.test(parent.id.name)) {
206
+ return false;
207
+ }
208
+ // Exclude test function names
209
+ if (t.isCallExpression(parent) &&
210
+ t.isIdentifier(parent.callee) &&
211
+ parent.callee.name === 'test') {
212
+ return false;
213
+ }
214
+ return true;
215
+ }
216
+ isTechnicalString(text) {
217
+ // DOM IDs that should never be localized
218
+ const domIds = ['root', 'app', 'main', 'header', 'footer', 'nav', 'sidebar', 'content'];
219
+ // Package names that should never be localized
220
+ const packageNames = ['web-vitals', 'react', 'react-dom', 'react-scripts'];
221
+ // File extensions and paths
222
+ const filePatterns = /\.(js|ts|tsx|jsx|json|css|html|svg|png|jpg|jpeg|gif|ico)$/;
223
+ // URLs and protocols
224
+ const urlPatterns = /^(https?:\/\/|ftp:\/\/|mailto:|tel:)/;
225
+ // Environment variables and config keys
226
+ const envPatterns = /^[A-Z_]+$/;
227
+ // Technical identifiers (short, lowercase with underscores/hyphens)
228
+ const technicalPatterns = /^[a-z][a-z0-9_-]*$/;
229
+ // Additional patterns for React-specific technical strings
230
+ const reactPatterns = /^(app|src|component|element|container|wrapper|header|footer|nav|sidebar|content|main|root)([A-Z][a-z0-9]*)*$/;
231
+ // Check if it's a CSS class or ID pattern
232
+ const cssPatterns = /^[a-z][a-z0-9-]*-[a-z][a-z0-9-]*$/;
233
+ // Check if it's a file path or component name
234
+ const filePathPatterns = /^[a-z][a-z0-9]*\.[a-z]+$/;
235
+ // Check against all patterns
236
+ return domIds.includes(text) ||
237
+ packageNames.includes(text) ||
238
+ filePatterns.test(text) ||
239
+ urlPatterns.test(text) ||
240
+ envPatterns.test(text) ||
241
+ (technicalPatterns.test(text) && text.length < 20) ||
242
+ reactPatterns.test(text) ||
243
+ cssPatterns.test(text) ||
244
+ filePathPatterns.test(text) ||
245
+ text.includes('.') && text.includes('/') ||
246
+ text.includes('_') && text.length < 15;
247
+ }
248
+ generateKey(text) {
249
+ return text
250
+ .toLowerCase()
251
+ .replace(/[^a-z0-9\s]/g, '')
252
+ .replace(/\s+/g, '_')
253
+ .replace(/^[^a-z]/, '')
254
+ .substring(0, 50);
255
+ }
256
+ deduplicateStrings(strings) {
257
+ const seen = new Map();
258
+ for (const str of strings) {
259
+ const existing = seen.get(str.text);
260
+ if (!existing || str.type === 'jsx') {
261
+ seen.set(str.text, str);
262
+ }
263
+ }
264
+ return Array.from(seen.values());
265
+ }
266
+ }
267
+ exports.StringExtractor = StringExtractor;
268
+ //# sourceMappingURL=stringExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringExtractor.js","sourceRoot":"","sources":["../../src/core/stringExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { ProjectScanner } from './core/projectScanner';
2
+ export { StringExtractor } from './core/stringExtractor';
3
+ export { I18nGenerator } from './core/i18nGenerator';
4
+ export type { FileInfo } from './core/projectScanner';
5
+ export type { ExtractedString } from './core/stringExtractor';
6
+ export type { I18nConfig } from './core/i18nGenerator';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.I18nGenerator = exports.StringExtractor = exports.ProjectScanner = void 0;
4
+ var projectScanner_1 = require("./core/projectScanner");
5
+ Object.defineProperty(exports, "ProjectScanner", { enumerable: true, get: function () { return projectScanner_1.ProjectScanner; } });
6
+ var stringExtractor_1 = require("./core/stringExtractor");
7
+ Object.defineProperty(exports, "StringExtractor", { enumerable: true, get: function () { return stringExtractor_1.StringExtractor; } });
8
+ var i18nGenerator_1 = require("./core/i18nGenerator");
9
+ Object.defineProperty(exports, "I18nGenerator", { enumerable: true, get: function () { return i18nGenerator_1.I18nGenerator; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wDAAuD;AAA9C,gHAAA,cAAc,OAAA;AACvB,0DAAyD;AAAhD,kHAAA,eAAe,OAAA;AACxB,sDAAqD;AAA5C,8GAAA,aAAa,OAAA"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "transcripto-cli",
3
+ "version": "1.0.0",
4
+ "description": "Enhanced Transcripto CLI - Interactive localization with automatic lingo.dev integration and language dropdown generation",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "transcripto": "dist/cli/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "ts-node src/cli/index.ts",
12
+ "start": "node dist/cli/index.js"
13
+ },
14
+ "keywords": [
15
+ "i18n",
16
+ "localization",
17
+ "automation",
18
+ "cli",
19
+ "lingo.dev"
20
+ ],
21
+ "author": "rashmi-b-r",
22
+ "license": "MIT",
23
+ "dependencies": {
24
+ "@babel/generator": "^7.23.0",
25
+ "@babel/parser": "^7.23.0",
26
+ "@babel/traverse": "^7.23.0",
27
+ "@babel/types": "^7.23.0",
28
+ "chalk": "^4.1.2",
29
+ "chokidar": "^3.5.3",
30
+ "commander": "^11.0.0",
31
+ "fs-extra": "^11.1.1",
32
+ "glob": "^10.3.0",
33
+ "inquirer": "^8.2.6"
34
+ },
35
+ "devDependencies": {
36
+ "@types/babel__generator": "^7.27.0",
37
+ "@types/babel__traverse": "^7.28.0",
38
+ "@types/fs-extra": "^11.0.1",
39
+ "@types/inquirer": "^9.0.3",
40
+ "@types/node": "^20.0.0",
41
+ "ts-node": "^10.9.0",
42
+ "typescript": "^5.0.0"
43
+ }
44
+ }