@localheroai/cli 0.0.3 → 0.0.6

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 (114) hide show
  1. package/README +1 -1
  2. package/dist/api/auth.d.ts +2 -0
  3. package/dist/api/auth.js +28 -0
  4. package/dist/api/auth.js.map +1 -0
  5. package/dist/api/client.d.ts +3 -0
  6. package/dist/api/client.js +80 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/imports.d.ts +5 -0
  9. package/dist/api/imports.js +43 -0
  10. package/dist/api/imports.js.map +1 -0
  11. package/dist/api/projects.d.ts +2 -0
  12. package/dist/api/projects.js +42 -0
  13. package/dist/api/projects.js.map +1 -0
  14. package/dist/api/translations.d.ts +15 -0
  15. package/dist/api/translations.js +71 -0
  16. package/dist/api/translations.js.map +1 -0
  17. package/dist/cli.d.ts +2 -0
  18. package/dist/cli.js +79 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/commands/_sync.js +22 -0
  21. package/dist/commands/_sync.js.map +1 -0
  22. package/dist/commands/_translate.js +3 -0
  23. package/dist/commands/_translate.js.map +1 -0
  24. package/dist/commands/init.d.ts +1 -0
  25. package/dist/commands/init.js +439 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/login.d.ts +16 -0
  28. package/dist/commands/login.js +58 -0
  29. package/dist/commands/login.js.map +1 -0
  30. package/dist/commands/pull.js +22 -0
  31. package/dist/commands/pull.js.map +1 -0
  32. package/dist/commands/push.js +56 -0
  33. package/dist/commands/push.js.map +1 -0
  34. package/dist/commands/sync.d.ts +20 -0
  35. package/dist/commands/sync.js +22 -0
  36. package/dist/commands/sync.js.map +1 -0
  37. package/dist/commands/translate.d.ts +14 -0
  38. package/dist/commands/translate.js +145 -0
  39. package/dist/commands/translate.js.map +1 -0
  40. package/dist/index.d.ts +5 -0
  41. package/dist/index.js +8 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/types/index.d.ts +75 -0
  44. package/dist/types/index.js +17 -0
  45. package/dist/types/index.js.map +1 -0
  46. package/dist/types/translate/index.js +2 -0
  47. package/dist/types/translate/index.js.map +1 -0
  48. package/dist/utils/auth.d.ts +2 -0
  49. package/dist/utils/auth.js +29 -0
  50. package/dist/utils/auth.js.map +1 -0
  51. package/dist/utils/common.js +9 -0
  52. package/dist/utils/common.js.map +1 -0
  53. package/dist/utils/config.d.ts +23 -0
  54. package/dist/utils/config.js +137 -0
  55. package/dist/utils/config.js.map +1 -0
  56. package/dist/utils/errors.js +37 -0
  57. package/dist/utils/errors.js.map +1 -0
  58. package/dist/utils/files.d.ts +32 -0
  59. package/dist/utils/files.js +347 -0
  60. package/dist/utils/files.js.map +1 -0
  61. package/dist/utils/git.d.ts +21 -0
  62. package/dist/utils/git.js +87 -0
  63. package/dist/utils/git.js.map +1 -0
  64. package/dist/utils/github.d.ts +241 -0
  65. package/dist/utils/github.js +161 -0
  66. package/dist/utils/github.js.map +1 -0
  67. package/dist/utils/import-service.d.ts +4 -0
  68. package/dist/utils/import-service.js +218 -0
  69. package/dist/utils/import-service.js.map +1 -0
  70. package/dist/utils/prompt-service.d.ts +44 -0
  71. package/dist/utils/prompt-service.js +104 -0
  72. package/dist/utils/prompt-service.js.map +1 -0
  73. package/dist/utils/sync-service.d.ts +58 -0
  74. package/dist/utils/sync-service.js +159 -0
  75. package/dist/utils/sync-service.js.map +1 -0
  76. package/dist/utils/translation-processor.js +197 -0
  77. package/dist/utils/translation-processor.js.map +1 -0
  78. package/dist/utils/translation-updater/common.d.ts +6 -0
  79. package/{src → dist}/utils/translation-updater/common.js +16 -10
  80. package/dist/utils/translation-updater/common.js.map +1 -0
  81. package/dist/utils/translation-updater/index.d.ts +5 -0
  82. package/{src → dist}/utils/translation-updater/index.js +21 -9
  83. package/dist/utils/translation-updater/index.js.map +1 -0
  84. package/dist/utils/translation-updater/json-handler.d.ts +5 -0
  85. package/{src → dist}/utils/translation-updater/json-handler.js +42 -31
  86. package/dist/utils/translation-updater/json-handler.js.map +1 -0
  87. package/dist/utils/translation-updater/yaml-handler.d.ts +5 -0
  88. package/{src → dist}/utils/translation-updater/yaml-handler.js +40 -41
  89. package/dist/utils/translation-updater/yaml-handler.js.map +1 -0
  90. package/dist/utils/translation-utils.d.ts +30 -0
  91. package/dist/utils/translation-utils.js +324 -0
  92. package/dist/utils/translation-utils.js.map +1 -0
  93. package/dist/utils/updater.js +38 -0
  94. package/dist/utils/updater.js.map +1 -0
  95. package/package.json +33 -28
  96. package/src/api/auth.js +0 -24
  97. package/src/api/client.js +0 -83
  98. package/src/api/imports.js +0 -22
  99. package/src/api/projects.js +0 -24
  100. package/src/api/translations.js +0 -58
  101. package/src/cli.js +0 -78
  102. package/src/commands/init.js +0 -485
  103. package/src/commands/login.js +0 -80
  104. package/src/commands/sync.js +0 -28
  105. package/src/commands/translate.js +0 -262
  106. package/src/utils/auth.js +0 -23
  107. package/src/utils/config.js +0 -125
  108. package/src/utils/files.js +0 -361
  109. package/src/utils/git.js +0 -72
  110. package/src/utils/github.js +0 -122
  111. package/src/utils/import-service.js +0 -129
  112. package/src/utils/prompt-service.js +0 -67
  113. package/src/utils/sync-service.js +0 -147
  114. package/src/utils/translation-utils.js +0 -237
@@ -2,35 +2,47 @@ import path from 'path';
2
2
  import { fileExists, ensureDirectoryExists } from './common.js';
3
3
  import { updateYamlFile, deleteKeysFromYamlFile } from './yaml-handler.js';
4
4
  import { updateJsonFile, deleteKeysFromJsonFile } from './json-handler.js';
5
-
6
- export async function updateTranslationFile(filePath, translations, languageCode = 'en') {
5
+ /**
6
+ * Updates a translation file with new translations
7
+ *
8
+ * @param filePath Path to the file to update
9
+ * @param translations Dictionary of translations to add/update
10
+ * @param languageCode The language code (default: 'en')
11
+ * @param sourceFilePath Optional path to source file (needed for new files)
12
+ * @returns Information about the update operation
13
+ */
14
+ export async function updateTranslationFile(filePath, translations, languageCode = 'en', sourceFilePath = null) {
7
15
  const fileExt = path.extname(filePath).slice(1).toLowerCase();
8
16
  const result = {
9
17
  updatedKeys: Object.keys(translations),
10
18
  created: false
11
19
  };
12
-
13
20
  await ensureDirectoryExists(filePath);
14
-
15
21
  if (fileExt === 'json') {
16
- const jsonResult = await updateJsonFile(filePath, translations, languageCode);
22
+ const jsonResult = await updateJsonFile(filePath, translations, languageCode, sourceFilePath);
17
23
  return {
18
24
  updatedKeys: result.updatedKeys,
19
25
  created: jsonResult.created
20
26
  };
21
27
  }
22
-
23
28
  return updateYamlFile(filePath, translations, languageCode);
24
29
  }
25
-
30
+ /**
31
+ * Deletes keys from a translation file
32
+ *
33
+ * @param filePath Path to the file to update
34
+ * @param keysToDelete Array of dot-notation keys to delete
35
+ * @param languageCode The language code (default: 'en')
36
+ * @returns Array of keys that were successfully deleted
37
+ */
26
38
  export async function deleteKeysFromTranslationFile(filePath, keysToDelete, languageCode = 'en') {
27
39
  const exists = await fileExists(filePath);
28
40
  if (!exists) {
29
41
  return [];
30
42
  }
31
-
32
43
  const fileExt = path.extname(filePath).slice(1).toLowerCase();
33
44
  return fileExt === 'json'
34
45
  ? deleteKeysFromJsonFile(filePath, keysToDelete, languageCode)
35
46
  : deleteKeysFromYamlFile(filePath, keysToDelete, languageCode);
36
- }
47
+ }
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/translation-updater/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAU3E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,YAAqC,EACrC,eAAuB,IAAI,EAC3B,iBAAgC,IAAI;IAEpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAiB;QAC3B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,MAAM,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAEtC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QAC9F,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;SAC5B,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,QAAgB,EAChB,YAAsB,EACtB,eAAuB,IAAI;IAE3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,OAAO,KAAK,MAAM;QACvB,CAAC,CAAC,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC;QAC9D,CAAC,CAAC,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export function updateJsonFile(filePath: any, translations: any, languageCode: any, sourceFilePath?: null): Promise<{
2
+ updatedKeys: string[];
3
+ created: boolean;
4
+ }>;
5
+ export function deleteKeysFromJsonFile(filePath: any, keysToDelete: any, languageCode: any): Promise<any[]>;
@@ -1,9 +1,21 @@
1
1
  import { promises as fs } from 'fs';
2
- import path from 'path';
3
2
  import { detectJsonFormat, preserveJsonStructure } from '../files.js';
4
3
  import { ensureDirectoryExists } from './common.js';
5
-
6
- export async function updateJsonFile(filePath, translations, languageCode) {
4
+ async function detectSourceFileStructure(sourceFilePath) {
5
+ try {
6
+ const content = await fs.readFile(sourceFilePath, 'utf8');
7
+ const sourceContent = JSON.parse(content);
8
+ const hasLanguageWrapper = Object.entries(sourceContent).some(([key, value]) => {
9
+ // Check if any top-level key is a language code with an object value
10
+ return typeof value === 'object' && value !== null && /^[a-zA-Z]{2}(-[a-zA-Z]{2})?$/.test(key);
11
+ });
12
+ return hasLanguageWrapper;
13
+ }
14
+ catch (error) {
15
+ throw new Error(`Failed to read source file ${sourceFilePath}: ${error instanceof Error ? error.message : String(error)}`);
16
+ }
17
+ }
18
+ export async function updateJsonFile(filePath, translations, languageCode, sourceFilePath = null) {
7
19
  try {
8
20
  let existingContent = {};
9
21
  let jsonFormat = 'nested';
@@ -12,49 +24,50 @@ export async function updateJsonFile(filePath, translations, languageCode) {
12
24
  updatedKeys: Object.keys(translations),
13
25
  created: false
14
26
  };
15
-
16
27
  try {
17
28
  const content = await fs.readFile(filePath, 'utf8');
18
29
  existingContent = JSON.parse(content);
19
30
  if (existingContent[languageCode] && typeof existingContent[languageCode] === 'object') {
20
31
  hasLanguageWrapper = true;
21
32
  jsonFormat = detectJsonFormat(existingContent[languageCode]);
22
- } else {
33
+ }
34
+ else {
23
35
  jsonFormat = detectJsonFormat(existingContent);
24
36
  }
25
- } catch {
37
+ }
38
+ catch {
39
+ if (!sourceFilePath) {
40
+ throw new Error('Source file is required for creating new JSON translation files');
41
+ }
26
42
  console.warn(`Creating new JSON file: ${filePath}`);
27
43
  result.created = true;
28
44
  await ensureDirectoryExists(filePath);
45
+ // Use source file structure
46
+ hasLanguageWrapper = await detectSourceFileStructure(sourceFilePath);
29
47
  }
30
-
31
48
  let updatedContent;
32
-
33
49
  if (result.created) {
34
- updatedContent = {
35
- [languageCode]: preserveJsonStructure({}, translations, jsonFormat)
36
- };
37
- } else if (hasLanguageWrapper) {
50
+ updatedContent = hasLanguageWrapper ?
51
+ { [languageCode]: preserveJsonStructure({}, translations, jsonFormat) } :
52
+ preserveJsonStructure({}, translations, jsonFormat);
53
+ }
54
+ else if (hasLanguageWrapper) {
38
55
  existingContent[languageCode] = existingContent[languageCode] || {};
39
56
  updatedContent = JSON.parse(JSON.stringify(existingContent));
40
- const mergedContent = preserveJsonStructure(
41
- existingContent[languageCode],
42
- translations,
43
- jsonFormat
44
- );
57
+ const mergedContent = preserveJsonStructure(existingContent[languageCode], translations, jsonFormat);
45
58
  updatedContent[languageCode] = mergedContent;
46
- } else {
59
+ }
60
+ else {
47
61
  const existingCopy = JSON.parse(JSON.stringify(existingContent));
48
62
  updatedContent = preserveJsonStructure(existingCopy, translations, jsonFormat);
49
63
  }
50
-
51
64
  await fs.writeFile(filePath, JSON.stringify(updatedContent, null, 2));
52
65
  return result;
53
- } catch (error) {
54
- throw new Error(`Failed to update JSON file ${filePath}: ${error.message}`);
66
+ }
67
+ catch (error) {
68
+ throw new Error(`Failed to update JSON file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
55
69
  }
56
70
  }
57
-
58
71
  export async function deleteKeysFromJsonFile(filePath, keysToDelete, languageCode) {
59
72
  try {
60
73
  const content = await fs.readFile(filePath, 'utf8');
@@ -65,9 +78,7 @@ export async function deleteKeysFromJsonFile(filePath, keysToDelete, languageCod
65
78
  hasLanguageWrapper = true;
66
79
  rootContent = jsonContent[languageCode];
67
80
  }
68
-
69
81
  const deletedKeys = [];
70
-
71
82
  for (const keyPath of keysToDelete) {
72
83
  const keys = keyPath.split('.');
73
84
  const lastIndex = keys.length - 1;
@@ -75,7 +86,6 @@ export async function deleteKeysFromJsonFile(filePath, keysToDelete, languageCod
75
86
  let parent = null;
76
87
  let keyInParent = '';
77
88
  let found = true;
78
-
79
89
  for (let i = 0; i < lastIndex; i++) {
80
90
  const key = keys[i];
81
91
  if (!current[key] || typeof current[key] !== 'object') {
@@ -86,7 +96,6 @@ export async function deleteKeysFromJsonFile(filePath, keysToDelete, languageCod
86
96
  keyInParent = key;
87
97
  current = current[key];
88
98
  }
89
-
90
99
  if (found) {
91
100
  const lastKey = keys[lastIndex];
92
101
  if (current[lastKey] !== undefined) {
@@ -100,13 +109,15 @@ export async function deleteKeysFromJsonFile(filePath, keysToDelete, languageCod
100
109
  }
101
110
  if (hasLanguageWrapper) {
102
111
  jsonContent[languageCode] = rootContent;
103
- } else {
112
+ }
113
+ else {
104
114
  jsonContent = rootContent;
105
115
  }
106
116
  await fs.writeFile(filePath, JSON.stringify(jsonContent, null, 2));
107
-
108
117
  return deletedKeys;
109
- } catch (error) {
110
- throw new Error(`Failed to delete keys from JSON file ${filePath}: ${error.message}`);
111
118
  }
112
- }
119
+ catch (error) {
120
+ throw new Error(`Failed to delete keys from JSON file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
121
+ }
122
+ }
123
+ //# sourceMappingURL=json-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-handler.js","sourceRoot":"","sources":["../../../src/utils/translation-updater/json-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export function updateYamlFile(filePath: any, translations: any, languageCode: any): Promise<{
2
+ updatedKeys: string[];
3
+ created: boolean;
4
+ }>;
5
+ export function deleteKeysFromYamlFile(filePath: any, keysToDelete: any, languageCode: any): Promise<any[]>;
@@ -1,18 +1,17 @@
1
1
  import { promises as fs } from 'fs';
2
2
  import yaml from 'yaml';
3
3
  import { SPECIAL_CHARS_REGEX, INTERPOLATION, fileExists, tryParseJsonArray } from './common.js';
4
-
4
+ const NEEDS_QUOTES_REGEX = /[:,%{}[\]|><!&*?-]/;
5
+ const LINE_WIDTH = 80;
5
6
  function detectYamlOptions(content) {
6
7
  const lines = content
7
8
  .split('\n')
8
9
  .filter(line => line.trim())
9
10
  .slice(0, 10);
10
-
11
11
  const options = {
12
12
  indent: 2,
13
13
  indentSeq: true
14
14
  };
15
-
16
15
  const indentMatch = lines.find(line => /^\s+\S/.test(line))?.match(/^(\s+)\S/);
17
16
  if (indentMatch) {
18
17
  options.indent = indentMatch[1].length;
@@ -20,62 +19,70 @@ function detectYamlOptions(content) {
20
19
  options.indent = 2;
21
20
  }
22
21
  }
23
-
24
22
  const seqMatch = lines.find(line => /^\s*-\s+\S/.test(line));
25
23
  if (seqMatch) {
26
24
  options.indentSeq = /^\s+-\s+/.test(seqMatch);
27
25
  }
28
-
29
26
  return options;
30
27
  }
31
-
28
+ function needsQuotes(str) {
29
+ if (typeof str !== 'string')
30
+ return false;
31
+ return (SPECIAL_CHARS_REGEX.test(str) ||
32
+ str.includes(INTERPOLATION) ||
33
+ NEEDS_QUOTES_REGEX.test(str) ||
34
+ (str.includes(' ') && /[:"']/g.test(str)));
35
+ }
36
+ function shouldForceQuotes(str) {
37
+ if (typeof str !== 'string')
38
+ return false;
39
+ // Special case: strings containing quotes but no interpolation
40
+ // don't need outer quotes
41
+ if (str.includes('"') && !str.includes(INTERPOLATION)) {
42
+ return false;
43
+ }
44
+ return needsQuotes(str);
45
+ }
32
46
  function processArrayItems(array, yamlDoc) {
33
47
  return array.map(item => {
34
48
  const itemNode = yamlDoc.createNode(item);
35
- if (typeof item === 'string') {
36
- const needsQuotes = item.includes(INTERPOLATION) || SPECIAL_CHARS_REGEX.test(item);
37
- if (needsQuotes) {
38
- itemNode.type = 'QUOTE_DOUBLE';
39
- }
49
+ if (shouldForceQuotes(item)) {
50
+ itemNode.type = 'QUOTE_DOUBLE';
40
51
  }
41
52
  return itemNode;
42
53
  });
43
54
  }
44
-
45
55
  async function createYamlDocument(filePath) {
46
56
  const exists = await fileExists(filePath);
47
57
  if (!exists) {
48
58
  console.warn(`Creating new file: ${filePath}`);
49
59
  const doc = new yaml.Document();
50
60
  doc.contents = doc.createNode({});
51
- return { doc, created: true, options: { indent: 2, indentSeq: true } };
61
+ return { doc, created: true, options: { indent: 2, indentSeq: true, lineWidth: LINE_WIDTH } };
52
62
  }
53
-
54
63
  const content = await fs.readFile(filePath, 'utf8');
55
64
  const options = detectYamlOptions(content);
65
+ const doc = yaml.parseDocument(content);
66
+ // @ts-ignore - lineWidth exists on options
67
+ doc.options.lineWidth = LINE_WIDTH;
56
68
  return {
57
- doc: yaml.parseDocument(content),
69
+ doc,
58
70
  created: false,
59
71
  options
60
72
  };
61
73
  }
62
-
63
74
  async function updateYamlTranslations(yamlDoc, translations, languageCode) {
64
75
  if (!yamlDoc.contents) {
65
76
  yamlDoc.contents = yamlDoc.createNode({});
66
77
  }
67
-
68
78
  const rootNode = yamlDoc.contents;
69
79
  if (!rootNode.has(languageCode)) {
70
80
  rootNode.set(languageCode, yamlDoc.createNode({}));
71
81
  }
72
-
73
82
  const langNode = rootNode.get(languageCode);
74
-
75
83
  for (const [keyPath, newValue] of Object.entries(translations)) {
76
84
  const keys = keyPath.split('.');
77
85
  let current = langNode;
78
-
79
86
  for (let i = 0; i < keys.length - 1; i++) {
80
87
  const key = keys[i];
81
88
  if (!current.has(key)) {
@@ -83,16 +90,13 @@ async function updateYamlTranslations(yamlDoc, translations, languageCode) {
83
90
  }
84
91
  current = current.get(key);
85
92
  }
86
-
87
93
  const lastKey = keys[keys.length - 1];
88
-
89
94
  if (Array.isArray(newValue)) {
90
95
  const arrayNode = new yaml.YAMLSeq();
91
96
  processArrayItems(newValue, yamlDoc).forEach(item => arrayNode.add(item));
92
97
  current.set(lastKey, arrayNode);
93
98
  continue;
94
99
  }
95
-
96
100
  const array = tryParseJsonArray(newValue);
97
101
  if (array) {
98
102
  const arrayNode = new yaml.YAMLSeq();
@@ -100,48 +104,44 @@ async function updateYamlTranslations(yamlDoc, translations, languageCode) {
100
104
  current.set(lastKey, arrayNode);
101
105
  continue;
102
106
  }
103
-
104
107
  if (typeof newValue === 'string' && newValue.includes('\n')) {
105
108
  const scalar = new yaml.Scalar(newValue);
106
109
  scalar.type = 'BLOCK_LITERAL';
107
110
  current.set(lastKey, scalar);
108
111
  continue;
109
112
  }
110
-
111
113
  const node = yamlDoc.createNode(newValue);
112
- if (typeof newValue === 'string' && (newValue.includes(INTERPOLATION) || SPECIAL_CHARS_REGEX.test(newValue))) {
114
+ if (needsQuotes(newValue)) {
113
115
  node.type = 'QUOTE_DOUBLE';
114
116
  }
115
117
  current.set(lastKey, node);
116
118
  }
117
119
  }
118
-
119
120
  export async function updateYamlFile(filePath, translations, languageCode) {
120
121
  const { doc: yamlDoc, created, options } = await createYamlDocument(filePath);
121
-
122
122
  await updateYamlTranslations(yamlDoc, translations, languageCode);
123
-
123
+ // @ts-ignore - yaml options exist at runtime
124
124
  yamlDoc.options.indent = options.indent;
125
+ // @ts-ignore - yaml options exist at runtime
125
126
  yamlDoc.options.indentSeq = options.indentSeq;
126
-
127
+ // @ts-ignore - yaml options exist at runtime
128
+ yamlDoc.options.lineWidth = LINE_WIDTH;
127
129
  await fs.writeFile(filePath, yamlDoc.toString());
128
130
  return {
129
131
  updatedKeys: Object.keys(translations),
130
132
  created
131
133
  };
132
134
  }
133
-
134
135
  export async function deleteKeysFromYamlFile(filePath, keysToDelete, languageCode) {
135
136
  try {
136
137
  const content = await fs.readFile(filePath, 'utf8');
137
138
  const yamlDoc = yaml.parseDocument(content);
138
- if (!yamlDoc.contents || !yamlDoc.contents.has(languageCode)) {
139
+ const contents = yamlDoc.contents;
140
+ if (!contents || !contents.has(languageCode)) {
139
141
  return [];
140
142
  }
141
-
142
- const langNode = yamlDoc.contents.get(languageCode);
143
+ const langNode = contents.get(languageCode);
143
144
  const deletedKeys = [];
144
-
145
145
  for (const keyPath of keysToDelete) {
146
146
  const keys = keyPath.split('.');
147
147
  const lastIndex = keys.length - 1;
@@ -149,7 +149,6 @@ export async function deleteKeysFromYamlFile(filePath, keysToDelete, languageCod
149
149
  let parent = null;
150
150
  let keyInParent = '';
151
151
  let found = true;
152
-
153
152
  for (let i = 0; i < lastIndex; i++) {
154
153
  const key = keys[i];
155
154
  if (!current.has(key)) {
@@ -160,7 +159,6 @@ export async function deleteKeysFromYamlFile(filePath, keysToDelete, languageCod
160
159
  keyInParent = key;
161
160
  current = current.get(key);
162
161
  }
163
-
164
162
  if (found) {
165
163
  const lastKey = keys[lastIndex];
166
164
  if (current.has(lastKey)) {
@@ -172,10 +170,11 @@ export async function deleteKeysFromYamlFile(filePath, keysToDelete, languageCod
172
170
  }
173
171
  }
174
172
  }
175
-
176
173
  await fs.writeFile(filePath, yamlDoc.toString());
177
174
  return deletedKeys;
178
- } catch (error) {
179
- throw new Error(`Failed to delete keys from YAML file ${filePath}: ${error.message}`);
180
175
  }
181
- }
176
+ catch (error) {
177
+ throw new Error(`Failed to delete keys from YAML file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
178
+ }
179
+ }
180
+ //# sourceMappingURL=yaml-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-handler.js","sourceRoot":"","sources":["../../../src/utils/translation-updater/yaml-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAyBhG,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAChD,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,KAAK,GAAG,OAAO;SAClB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAgB;QAC3B,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,IAAI;KAChB,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/E,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE1C,OAAO,CACL,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC3B,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAY;IACrC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE1C,+DAA+D;IAC/D,0BAA0B;IAC1B,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAgB,EAAE,OAAsB;IACjE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAa,CAAC;QACtD,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,QAAuB,CAAC,IAAI,GAAG,cAAc,CAAC;QACjD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC;IAChG,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,2CAA2C;IAC3C,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC;IACnC,OAAO;QACL,GAAG;QACH,OAAO,EAAE,KAAK;QACd,OAAO;KACR,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAAsB,EACtB,YAAqC,EACrC,YAAoB;IAEpB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAmB,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAY,CAAC;IAEvD,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,OAAO,GAAG,QAAmB,CAAC;QAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAY,CAAC;QACxC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEtC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,EAAa,CAAC;YAChD,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,EAAa,CAAC;YAChD,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAe,CAAC;YACvD,MAAM,CAAC,IAAI,GAAG,eAAe,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAe,CAAC;QACxD,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,YAAqC,EACrC,YAAoB;IAEpB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAE9E,MAAM,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAElE,6CAA6C;IAC7C,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,6CAA6C;IAC7C,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAC9C,6CAA6C;IAC7C,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC;IAEvC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QACtC,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAgB,EAChB,YAAsB,EACtB,YAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAA0B,CAAC;QAEpD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAY,CAAC;QACvD,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,IAAI,OAAO,GAAG,QAAmB,CAAC;YAClC,IAAI,MAAM,GAAmB,IAAI,CAAC;YAClC,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,KAAK,GAAG,IAAI,CAAC;YAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;gBACR,CAAC;gBACD,MAAM,GAAG,OAAO,CAAC;gBACjB,WAAW,GAAG,GAAG,CAAC;gBAClB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAY,CAAC;YACxC,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACxB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC1B,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjI,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ export function findMissingTranslations(sourceKeys: any, targetKeys: any): {
2
+ missingKeys: {};
3
+ skippedKeys: {};
4
+ };
5
+ export function batchKeysWithMissing(sourceFiles: any, missingByLocale: any, batchSize?: number): {
6
+ batches: {
7
+ sourceFilePath: string;
8
+ sourceFile: {
9
+ path: any;
10
+ format: any;
11
+ content: string;
12
+ };
13
+ localeEntries: any;
14
+ locales: any[];
15
+ }[];
16
+ errors: {
17
+ type: string;
18
+ message: string;
19
+ path: string;
20
+ }[];
21
+ };
22
+ export function findTargetFile(targetFiles: any, targetLocale: any, sourceFile: any, sourceLocale: any): any;
23
+ export function generateTargetPath(sourceFile: any, targetLocale: any, sourceLocale: any): string;
24
+ export function processTargetContent(targetContent: any, targetLocale: any): {};
25
+ export function processLocaleTranslations(sourceKeys: any, targetLocale: any, targetFiles: any, sourceFile: any, sourceLocale: any): {
26
+ targetPath: string;
27
+ missingKeys: {};
28
+ skippedKeys: {};
29
+ targetFile: any;
30
+ };