@translated/lara-cli 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +212 -0
  2. package/build/cli/cmd/glossary/glossary.js +55 -0
  3. package/build/cli/cmd/glossary/glossary.js.map +1 -0
  4. package/build/cli/cmd/init/init.input.js +177 -0
  5. package/build/cli/cmd/init/init.input.js.map +1 -0
  6. package/build/cli/cmd/init/init.js +158 -0
  7. package/build/cli/cmd/init/init.js.map +1 -0
  8. package/build/cli/cmd/init/init.types.js +2 -0
  9. package/build/cli/cmd/init/init.types.js.map +1 -0
  10. package/build/cli/cmd/init/init.utils.js +99 -0
  11. package/build/cli/cmd/init/init.utils.js.map +1 -0
  12. package/build/cli/cmd/memory/memory.js +55 -0
  13. package/build/cli/cmd/memory/memory.js.map +1 -0
  14. package/build/cli/cmd/translate/translate.js +149 -0
  15. package/build/cli/cmd/translate/translate.js.map +1 -0
  16. package/build/index.js +25 -0
  17. package/build/index.js.map +1 -0
  18. package/build/interface/parser.js +2 -0
  19. package/build/interface/parser.js.map +1 -0
  20. package/build/messages/messages.js +120 -0
  21. package/build/messages/messages.js.map +1 -0
  22. package/build/modules/common/common.const.js +424 -0
  23. package/build/modules/common/common.const.js.map +1 -0
  24. package/build/modules/common/common.types.js +15 -0
  25. package/build/modules/common/common.types.js.map +1 -0
  26. package/build/modules/config/config.provider.js +47 -0
  27. package/build/modules/config/config.provider.js.map +1 -0
  28. package/build/modules/config/config.types.js +95 -0
  29. package/build/modules/config/config.types.js.map +1 -0
  30. package/build/modules/translation/translation.engine.js +165 -0
  31. package/build/modules/translation/translation.engine.js.map +1 -0
  32. package/build/modules/translation/translation.service.js +45 -0
  33. package/build/modules/translation/translation.service.js.map +1 -0
  34. package/build/parsers/android-xml.parser.js +308 -0
  35. package/build/parsers/android-xml.parser.js.map +1 -0
  36. package/build/parsers/json.parser.js +18 -0
  37. package/build/parsers/json.parser.js.map +1 -0
  38. package/build/parsers/markdown.parser.js +74 -0
  39. package/build/parsers/markdown.parser.js.map +1 -0
  40. package/build/parsers/parser.factory.js +52 -0
  41. package/build/parsers/parser.factory.js.map +1 -0
  42. package/build/parsers/parser.types.js +2 -0
  43. package/build/parsers/parser.types.js.map +1 -0
  44. package/build/parsers/po.parser.js +175 -0
  45. package/build/parsers/po.parser.js.map +1 -0
  46. package/build/parsers/ts.parser.js +176 -0
  47. package/build/parsers/ts.parser.js.map +1 -0
  48. package/build/parsers/vue.parser.js +156 -0
  49. package/build/parsers/vue.parser.js.map +1 -0
  50. package/build/utils/checksum.js +80 -0
  51. package/build/utils/checksum.js.map +1 -0
  52. package/build/utils/cli.js +4 -0
  53. package/build/utils/cli.js.map +1 -0
  54. package/build/utils/display.js +60 -0
  55. package/build/utils/display.js.map +1 -0
  56. package/build/utils/error.js +18 -0
  57. package/build/utils/error.js.map +1 -0
  58. package/build/utils/locale.js +108 -0
  59. package/build/utils/locale.js.map +1 -0
  60. package/build/utils/parser.js +25 -0
  61. package/build/utils/parser.js.map +1 -0
  62. package/build/utils/path.js +173 -0
  63. package/build/utils/path.js.map +1 -0
  64. package/build/utils/progressWithOra.js +72 -0
  65. package/build/utils/progressWithOra.js.map +1 -0
  66. package/build/utils/prompt.js +205 -0
  67. package/build/utils/prompt.js.map +1 -0
  68. package/package.json +89 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.parser.js","sourceRoot":"/","sources":["parsers/markdown.parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AA4B/C,MAAM,OAAO,cAAc;IACR,eAAe,GAAG,EAAE,CAAC;IACrB,SAAS,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAErD,KAAK,CAAC,OAAwB;QAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAS,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAEpD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACnC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,IAA6B,EAAE,OAAkC;QACzE,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;QAEpC,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAS,CAAC;QAGtD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAGjC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAQO,mBAAmB,CAAC,IAAU;QACpC,MAAM,QAAQ,GAAkB,EAAE,CAAC;QAEnC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAU,EAAsB,EAAE;YAC7C,IACE,IAAI,CAAC,IAAI,KAAK,MAAM;gBACpB,IAAI,CAAC,IAAI,KAAK,YAAY;gBAC1B,IAAI,CAAC,IAAI,KAAK,MAAM;gBACpB,IAAI,CAAC,IAAI,KAAK,MAAM,EACpB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAY,CAAC;gBAC9B,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrC,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,QAAQ;qBACf,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IASO,eAAe,CAAC,IAAU,EAAE,cAAuC;QACzE,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,CAAC,IAAI,EAAE,CAAC,IAAU,EAAsB,EAAE;YAE7C,IACE,IAAI,CAAC,IAAI,KAAK,MAAM;gBACpB,IAAI,CAAC,IAAI,KAAK,YAAY;gBAC1B,IAAI,CAAC,IAAI,KAAK,MAAM;gBACpB,IAAI,CAAC,IAAI,KAAK,MAAM,EACpB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAGD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAY,CAAC;gBAC9B,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrC,MAAM,GAAG,GAAG,WAAW,YAAY,EAAE,CAAC;oBACtC,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;oBAE3C,IAAI,cAAc,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;wBACzD,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC;oBAClC,CAAC;oBACD,YAAY,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,52 @@
1
+ import { getFileExtension } from '../utils/path.js';
2
+ import { JsonParser } from './json.parser.js';
3
+ import { PoParser } from './po.parser.js';
4
+ import { TsParser } from './ts.parser.js';
5
+ import { VueParser } from './vue.parser.js';
6
+ import { MarkdownParser } from './markdown.parser.js';
7
+ import { AndroidXmlParser } from './android-xml.parser.js';
8
+ import { SUPPORTED_FILE_TYPES } from '#modules/common/common.const.js';
9
+ import { SupportedExtensionEnum } from '#modules/common/common.types.js';
10
+ export class ParserFactory {
11
+ parser;
12
+ constructor(filePath) {
13
+ if (!filePath) {
14
+ throw new Error('File path is required');
15
+ }
16
+ const detectedExtension = getFileExtension(filePath).toLowerCase();
17
+ if (!this.isSupportedExtension(detectedExtension)) {
18
+ throw new Error(`Unsupported file extension: ${detectedExtension}. Supported extensions: json, po, ts, vue, md, mdx, xml`);
19
+ }
20
+ this.parser = this.getParserForExtension(detectedExtension);
21
+ }
22
+ isSupportedExtension(extension) {
23
+ return SUPPORTED_FILE_TYPES.includes(extension);
24
+ }
25
+ getParserForExtension(extension) {
26
+ switch (extension) {
27
+ case SupportedExtensionEnum.JSON:
28
+ return new JsonParser();
29
+ case SupportedExtensionEnum.PO:
30
+ return new PoParser();
31
+ case SupportedExtensionEnum.TS:
32
+ return new TsParser();
33
+ case SupportedExtensionEnum.VUE:
34
+ return new VueParser();
35
+ case SupportedExtensionEnum.MD:
36
+ case SupportedExtensionEnum.MDX:
37
+ return new MarkdownParser();
38
+ case SupportedExtensionEnum.XML:
39
+ return new AndroidXmlParser();
40
+ }
41
+ }
42
+ parse(targetContent, options) {
43
+ return this.parser.parse(targetContent, options);
44
+ }
45
+ serialize(data, options) {
46
+ return this.parser.serialize(data, options);
47
+ }
48
+ getFallback() {
49
+ return this.parser.getFallback();
50
+ }
51
+ }
52
+ //# sourceMappingURL=parser.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.factory.js","sourceRoot":"/","sources":["parsers/parser.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAwBzE,MAAM,OAAO,aAAa;IACP,MAAM,CAAqD;IAQ5E,YAAY,QAAgB;QAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CACb,+BAA+B,iBAAiB,yDAAyD,CAC1G,CAAC;QACJ,CAAC;QAGD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC;IAQO,oBAAoB,CAAC,SAAiB;QAC5C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAQO,qBAAqB,CAC3B,SAAiC;QAEjC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,sBAAsB,CAAC,IAAI;gBAC9B,OAAO,IAAI,UAAU,EAAE,CAAC;YAC1B,KAAK,sBAAsB,CAAC,EAAE;gBAC5B,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,KAAK,sBAAsB,CAAC,EAAE;gBAC5B,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,KAAK,sBAAsB,CAAC,GAAG;gBAC7B,OAAO,IAAI,SAAS,EAAE,CAAC;YACzB,KAAK,sBAAsB,CAAC,EAAE,CAAC;YAC/B,KAAK,sBAAsB,CAAC,GAAG;gBAC7B,OAAO,IAAI,cAAc,EAAE,CAAC;YAC9B,KAAK,sBAAsB,CAAC,GAAG;gBAC7B,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IASD,KAAK,CAAC,aAA8B,EAAE,OAA2B;QAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAUD,SAAS,CAAC,IAA6B,EAAE,OAA0B;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parser.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.types.js","sourceRoot":"/","sources":["parsers/parser.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,175 @@
1
+ import * as gettextParser from 'gettext-parser';
2
+ export class PoParser {
3
+ foldLength = 0;
4
+ fallbackContent = 'msgid ""\nmsgstr ""\n';
5
+ charset = 'utf-8';
6
+ headers = {};
7
+ buildOrderMap(content) {
8
+ const map = new Map();
9
+ const lines = content.split(/\r?\n/);
10
+ let currentContext = '';
11
+ let orderIndex = 0;
12
+ for (let i = 0; i < lines.length; i++) {
13
+ const line = lines[i]?.trim();
14
+ if (!line) {
15
+ continue;
16
+ }
17
+ if (line.startsWith('msgctxt')) {
18
+ const match = line.match(/^msgctxt\s+"(.*)"/);
19
+ if (match) {
20
+ currentContext = match[1] || '';
21
+ }
22
+ }
23
+ else if (line.startsWith('msgid')) {
24
+ const match = line.match(/^msgid\s+"(.*)"/);
25
+ if (match) {
26
+ const msgid = match[1] || '';
27
+ if (msgid !== '' || currentContext !== '') {
28
+ const key = this.getOrderKey(currentContext, msgid);
29
+ if (!map.has(key)) {
30
+ map.set(key, orderIndex++);
31
+ }
32
+ }
33
+ currentContext = '';
34
+ }
35
+ }
36
+ }
37
+ return map;
38
+ }
39
+ getOrderKey(context, msgid) {
40
+ return `${context}\u0004${msgid}`;
41
+ }
42
+ parse(content) {
43
+ let parsed;
44
+ try {
45
+ parsed = gettextParser.po.parse(content);
46
+ }
47
+ catch (error) {
48
+ console.error('Failed to parse PO file content', error);
49
+ return {};
50
+ }
51
+ if (parsed.headers && Object.keys(parsed.headers).length > 0) {
52
+ this.headers = parsed.headers;
53
+ }
54
+ if (parsed.charset && parsed.charset.trim() !== '') {
55
+ this.charset = parsed.charset;
56
+ }
57
+ const contentStr = content.toString();
58
+ const orderMap = this.buildOrderMap(contentStr);
59
+ const translations = {};
60
+ const contexts = parsed.translations;
61
+ for (const context in contexts) {
62
+ const messages = contexts[context];
63
+ for (const msgid in messages) {
64
+ if (!msgid || msgid === '') {
65
+ continue;
66
+ }
67
+ const message = messages[msgid];
68
+ if (!message) {
69
+ continue;
70
+ }
71
+ const msgstr = message.msgstr;
72
+ const msgctxt = message.msgctxt || '';
73
+ const orderKey = this.getOrderKey(msgctxt, msgid);
74
+ const order = orderMap.get(orderKey);
75
+ if (msgstr.length > 0) {
76
+ const keyObj = {
77
+ msgid: message.msgid,
78
+ msgctxt: message.msgctxt,
79
+ msgid_plural: message.msgid_plural,
80
+ idx: 0,
81
+ order: order,
82
+ };
83
+ translations[JSON.stringify(keyObj)] = msgstr[0] || '';
84
+ }
85
+ if (message.msgid_plural && msgstr.length > 1) {
86
+ for (let i = 1; i < msgstr.length; i++) {
87
+ const keyObj = {
88
+ msgid: message.msgid,
89
+ msgctxt: message.msgctxt,
90
+ msgid_plural: message.msgid_plural,
91
+ idx: i,
92
+ order: order,
93
+ };
94
+ translations[JSON.stringify(keyObj)] = msgstr[i] || '';
95
+ }
96
+ }
97
+ }
98
+ }
99
+ return translations;
100
+ }
101
+ serialize(data, options) {
102
+ if (options?.targetLocale) {
103
+ this.headers['Language'] = options.targetLocale;
104
+ }
105
+ const now = new Date();
106
+ const iso = now.toISOString();
107
+ const dateStr = iso.replace('T', ' ').replace(/\.\d+Z$/, '+0000');
108
+ this.headers['PO-Revision-Date'] = dateStr;
109
+ this.headers['X-Generator'] = 'Lara-CLI';
110
+ if (this.headers['Plural-Forms']) {
111
+ delete this.headers['Plural-Forms'];
112
+ }
113
+ const poData = {
114
+ charset: this.charset,
115
+ headers: this.headers,
116
+ translations: {},
117
+ };
118
+ const sortedKeys = Object.keys(data).sort((a, b) => {
119
+ try {
120
+ const keyA = JSON.parse(a);
121
+ const keyB = JSON.parse(b);
122
+ const orderA = keyA.order ?? Number.MAX_SAFE_INTEGER;
123
+ const orderB = keyB.order ?? Number.MAX_SAFE_INTEGER;
124
+ if (orderA !== orderB)
125
+ return orderA - orderB;
126
+ const idxA = keyA.idx ?? 0;
127
+ const idxB = keyB.idx ?? 0;
128
+ return idxA - idxB;
129
+ }
130
+ catch {
131
+ return 0;
132
+ }
133
+ });
134
+ for (const serializedKey of sortedKeys) {
135
+ try {
136
+ const keyObj = JSON.parse(serializedKey);
137
+ const msgstrValue = typeof data[serializedKey] === 'string'
138
+ ? data[serializedKey]
139
+ : String(data[serializedKey] || '');
140
+ const context = keyObj.msgctxt || '';
141
+ if (!poData.translations[context]) {
142
+ poData.translations[context] = {};
143
+ }
144
+ const msgid = keyObj.msgid;
145
+ if (!poData.translations[context][msgid]) {
146
+ poData.translations[context][msgid] = {
147
+ msgid: msgid,
148
+ msgctxt: keyObj.msgctxt,
149
+ msgid_plural: keyObj.msgid_plural,
150
+ msgstr: [],
151
+ };
152
+ }
153
+ const message = poData.translations[context][msgid];
154
+ const idx = keyObj.idx || 0;
155
+ if (message.msgstr.length <= idx) {
156
+ while (message.msgstr.length < idx) {
157
+ message.msgstr.push('');
158
+ }
159
+ message.msgstr[idx] = msgstrValue;
160
+ }
161
+ else {
162
+ message.msgstr[idx] = msgstrValue;
163
+ }
164
+ }
165
+ catch {
166
+ continue;
167
+ }
168
+ }
169
+ return gettextParser.po.compile(poData, { foldLength: this.foldLength });
170
+ }
171
+ getFallback() {
172
+ return this.fallbackContent;
173
+ }
174
+ }
175
+ //# sourceMappingURL=po.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"po.parser.js","sourceRoot":"/","sources":["parsers/po.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ import { flatten as flat, unflatten as unflat } from 'flat';
2
+ import { deepMerge } from '#utils/parser.js';
3
+ import { parse } from '@babel/parser';
4
+ import traverseModule from '@babel/traverse';
5
+ import * as t from '@babel/types';
6
+ const traverse = traverseModule.default || traverseModule;
7
+ export class TsParser {
8
+ fallbackContent = 'const messages = {};\n\nexport default messages;';
9
+ delimiter = '/';
10
+ parse(content, options) {
11
+ const strContent = content.toString();
12
+ const messagesObj = this.extractMessagesObject(strContent);
13
+ if (!messagesObj) {
14
+ return {};
15
+ }
16
+ const flattened = flat(messagesObj, { delimiter: this.delimiter });
17
+ if (options?.targetLocale) {
18
+ const localePrefix = options.targetLocale + this.delimiter;
19
+ const filtered = {};
20
+ for (const key in flattened) {
21
+ if (key === options.targetLocale) {
22
+ filtered[key] = flattened[key];
23
+ }
24
+ else if (key.startsWith(localePrefix)) {
25
+ const relativeKey = key.substring(localePrefix.length);
26
+ filtered[relativeKey] = flattened[key];
27
+ }
28
+ }
29
+ return filtered;
30
+ }
31
+ return flattened;
32
+ }
33
+ serialize(data, options) {
34
+ const { originalContent } = options;
35
+ if (!originalContent) {
36
+ throw new Error('Original content is required for TS serialization');
37
+ }
38
+ const strContent = originalContent.toString();
39
+ let messagesObj = this.extractMessagesObject(strContent) || {};
40
+ let dataToMerge = data;
41
+ const locale = options?.targetLocale;
42
+ if (locale) {
43
+ const prefixed = {};
44
+ for (const key in data) {
45
+ prefixed[`${locale}${this.delimiter}${key}`] = data[key];
46
+ }
47
+ dataToMerge = prefixed;
48
+ }
49
+ const unflattenedData = unflat(dataToMerge, { delimiter: this.delimiter });
50
+ if (locale && unflattenedData[locale] !== undefined) {
51
+ messagesObj[locale] = unflattenedData[locale];
52
+ }
53
+ else {
54
+ messagesObj = deepMerge(messagesObj, unflattenedData);
55
+ }
56
+ const serializedObj = JSON.stringify(messagesObj, null, 4);
57
+ return this.replaceMessagesObject(strContent, serializedObj);
58
+ }
59
+ getFallback() {
60
+ return this.fallbackContent;
61
+ }
62
+ extractMessagesObject(content) {
63
+ try {
64
+ const ast = parse(content, {
65
+ sourceType: 'module',
66
+ plugins: ['typescript', 'objectRestSpread'],
67
+ allowReturnOutsideFunction: true,
68
+ });
69
+ let messagesObject = null;
70
+ const self = this;
71
+ traverse(ast, {
72
+ VariableDeclarator(path) {
73
+ const { node } = path;
74
+ if (t.isIdentifier(node.id) && node.id.name === 'messages' && node.init) {
75
+ messagesObject = self.extractObjectFromAST(node.init);
76
+ path.stop();
77
+ }
78
+ },
79
+ });
80
+ return messagesObject;
81
+ }
82
+ catch (error) {
83
+ const errorMessage = error instanceof Error ? error.message : String(error);
84
+ console.error('Failed to parse messages object in TS file', errorMessage);
85
+ return null;
86
+ }
87
+ }
88
+ extractObjectFromAST(node) {
89
+ if (t.isObjectExpression(node)) {
90
+ const result = {};
91
+ for (const prop of node.properties) {
92
+ if (t.isObjectProperty(prop)) {
93
+ const key = this.getObjectKey(prop.key);
94
+ if (key !== null) {
95
+ result[key] = this.extractValueFromAST(prop.value);
96
+ }
97
+ }
98
+ else if (t.isObjectMethod(prop) || t.isSpreadElement(prop)) {
99
+ continue;
100
+ }
101
+ }
102
+ return result;
103
+ }
104
+ return null;
105
+ }
106
+ extractValueFromAST(node) {
107
+ if (t.isObjectExpression(node)) {
108
+ return this.extractObjectFromAST(node);
109
+ }
110
+ else if (t.isArrayExpression(node)) {
111
+ return node.elements
112
+ .filter((el) => el !== null && !t.isSpreadElement(el))
113
+ .map((el) => this.extractValueFromAST(el));
114
+ }
115
+ else if (t.isStringLiteral(node)) {
116
+ return node.value;
117
+ }
118
+ else if (t.isNumericLiteral(node)) {
119
+ return node.value;
120
+ }
121
+ else if (t.isBooleanLiteral(node)) {
122
+ return node.value;
123
+ }
124
+ else if (t.isNullLiteral(node)) {
125
+ return null;
126
+ }
127
+ else if (t.isTemplateLiteral(node)) {
128
+ if (node.expressions.length === 0) {
129
+ return node.quasis[0]?.value.cooked || '';
130
+ }
131
+ return '';
132
+ }
133
+ else {
134
+ return null;
135
+ }
136
+ }
137
+ getObjectKey(key) {
138
+ if (t.isIdentifier(key)) {
139
+ return key.name;
140
+ }
141
+ else if (t.isStringLiteral(key)) {
142
+ return key.value;
143
+ }
144
+ else if (t.isNumericLiteral(key)) {
145
+ return String(key.value);
146
+ }
147
+ return null;
148
+ }
149
+ replaceMessagesObject(content, newObjStr) {
150
+ const match = content.match(/const\s+messages\s*=\s*/);
151
+ if (!match)
152
+ return content;
153
+ const startIndex = match.index + match[0].length;
154
+ let braceCount = 0;
155
+ let foundStart = false;
156
+ let endIndex = -1;
157
+ for (let i = startIndex; i < content.length; i++) {
158
+ const char = content[i];
159
+ if (char === '{') {
160
+ braceCount++;
161
+ foundStart = true;
162
+ }
163
+ else if (char === '}') {
164
+ braceCount--;
165
+ }
166
+ if (foundStart && braceCount === 0) {
167
+ endIndex = i + 1;
168
+ break;
169
+ }
170
+ }
171
+ if (endIndex === -1)
172
+ return content;
173
+ return content.substring(0, startIndex) + newObjStr + content.substring(endIndex);
174
+ }
175
+ }
176
+ //# sourceMappingURL=ts.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts.parser.js","sourceRoot":"/","sources":["parsers/ts.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import { flatten as flat, unflatten as unflat } from 'flat';
2
+ import { deepMerge } from '#utils/parser.js';
3
+ export class VueParser {
4
+ fallbackContent = '<i18n>\n{}\n</i18n>';
5
+ delimiter = '/';
6
+ parse(content, options) {
7
+ const strContent = content.toString();
8
+ const i18nContent = VueParser.extractI18nBlock(strContent);
9
+ if (!i18nContent) {
10
+ return {};
11
+ }
12
+ let messagesObj;
13
+ try {
14
+ messagesObj = JSON.parse(i18nContent);
15
+ }
16
+ catch (error) {
17
+ console.error('Failed to parse i18n JSON content in Vue file', error);
18
+ return {};
19
+ }
20
+ const flattened = flat(messagesObj, { delimiter: this.delimiter });
21
+ if (options?.targetLocale) {
22
+ const localePrefix = options.targetLocale + this.delimiter;
23
+ const filtered = {};
24
+ for (const key in flattened) {
25
+ if (key === options.targetLocale) {
26
+ filtered[key] = flattened[key];
27
+ }
28
+ else if (key.startsWith(localePrefix)) {
29
+ const relativeKey = key.substring(localePrefix.length);
30
+ filtered[relativeKey] = flattened[key];
31
+ }
32
+ }
33
+ return filtered;
34
+ }
35
+ return flattened;
36
+ }
37
+ serialize(data, options) {
38
+ const { originalContent } = options;
39
+ if (!originalContent) {
40
+ throw new Error('Original content is required for Vue serialization');
41
+ }
42
+ const strContent = originalContent.toString();
43
+ const i18nContent = VueParser.extractI18nBlock(strContent);
44
+ let messagesObj = {};
45
+ if (i18nContent) {
46
+ try {
47
+ messagesObj = JSON.parse(i18nContent);
48
+ }
49
+ catch (error) {
50
+ console.error('Failed to parse i18n JSON content in Vue file', error);
51
+ messagesObj = {};
52
+ }
53
+ }
54
+ let dataToMerge = data;
55
+ const locale = options?.targetLocale;
56
+ if (locale) {
57
+ const prefixed = {};
58
+ for (const key in data) {
59
+ prefixed[`${locale}${this.delimiter}${key}`] = data[key];
60
+ }
61
+ dataToMerge = prefixed;
62
+ }
63
+ const unflattenedData = unflat(dataToMerge, { delimiter: this.delimiter });
64
+ if (locale && unflattenedData[locale] !== undefined) {
65
+ messagesObj[locale] = unflattenedData[locale];
66
+ }
67
+ else {
68
+ messagesObj = deepMerge(messagesObj, unflattenedData);
69
+ }
70
+ const serializedObj = JSON.stringify(messagesObj, null, 2);
71
+ return this.replaceI18nBlock(strContent, serializedObj);
72
+ }
73
+ getFallback() {
74
+ return this.fallbackContent;
75
+ }
76
+ static hasI18nTag(content) {
77
+ return VueParser.extractI18nBlock(content) !== null;
78
+ }
79
+ static isInsideComment(content, position) {
80
+ const commentRegex = /<!--[\s\S]*?-->/g;
81
+ let commentMatch;
82
+ while ((commentMatch = commentRegex.exec(content)) !== null) {
83
+ const commentStart = commentMatch.index;
84
+ const commentEnd = commentMatch.index + commentMatch[0].length;
85
+ if (position >= commentStart && position < commentEnd) {
86
+ return true;
87
+ }
88
+ }
89
+ return false;
90
+ }
91
+ static extractI18nBlock(content) {
92
+ const i18nTagRegex = /<i18n(?:\s[^>]*)?>/gi;
93
+ let match;
94
+ while ((match = i18nTagRegex.exec(content)) !== null) {
95
+ if (match.index === undefined) {
96
+ continue;
97
+ }
98
+ const matchPosition = match.index;
99
+ if (VueParser.isInsideComment(content, matchPosition)) {
100
+ continue;
101
+ }
102
+ const startIndex = matchPosition + match[0].length;
103
+ const endTagRegex = /<\/i18n>/i;
104
+ const endMatch = content.substring(startIndex).match(endTagRegex);
105
+ if (!endMatch)
106
+ continue;
107
+ const endIndex = startIndex + endMatch.index;
108
+ const i18nContent = content.substring(startIndex, endIndex).trim();
109
+ return i18nContent || null;
110
+ }
111
+ return null;
112
+ }
113
+ replaceI18nBlock(content, newJsonContent) {
114
+ const i18nTagRegex = /<i18n(?:\s[^>]*)?>/gi;
115
+ let match;
116
+ let validMatch = null;
117
+ while ((match = i18nTagRegex.exec(content)) !== null) {
118
+ const matchPosition = match.index;
119
+ if (VueParser.isInsideComment(content, matchPosition)) {
120
+ continue;
121
+ }
122
+ const startIndex = matchPosition + match[0].length;
123
+ const endTagRegex = /<\/i18n>/i;
124
+ const endMatch = content.substring(startIndex).match(endTagRegex);
125
+ if (endMatch) {
126
+ validMatch = match;
127
+ break;
128
+ }
129
+ }
130
+ if (!validMatch) {
131
+ const templateEndMatch = content.match(/<\/template>/i);
132
+ if (templateEndMatch) {
133
+ const insertIndex = templateEndMatch.index + templateEndMatch[0].length;
134
+ return (content.substring(0, insertIndex) +
135
+ '\n\n<i18n>\n' +
136
+ newJsonContent +
137
+ '\n</i18n>\n' +
138
+ content.substring(insertIndex));
139
+ }
140
+ return content + '\n\n<i18n>\n' + newJsonContent + '\n</i18n>\n';
141
+ }
142
+ const startIndex = validMatch.index + validMatch[0].length;
143
+ const endTagRegex = /<\/i18n>/i;
144
+ const endMatch = content.substring(startIndex).match(endTagRegex);
145
+ if (!endMatch) {
146
+ return content.substring(0, startIndex) + '\n' + newJsonContent + '\n</i18n>\n';
147
+ }
148
+ const endIndex = startIndex + endMatch.index;
149
+ return (content.substring(0, startIndex) +
150
+ '\n' +
151
+ newJsonContent +
152
+ '\n' +
153
+ content.substring(endIndex));
154
+ }
155
+ }
156
+ //# sourceMappingURL=vue.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.parser.js","sourceRoot":"/","sources":["parsers/vue.parser.ts"],"names":[],"mappings":"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"}