@intlayer/chokidar 5.5.0-canary.0 → 5.5.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 (53) hide show
  1. package/dist/cjs/checkDictionaryChanges.cjs +10 -8
  2. package/dist/cjs/checkDictionaryChanges.cjs.map +1 -1
  3. package/dist/cjs/chokidar/watcher.cjs +23 -24
  4. package/dist/cjs/chokidar/watcher.cjs.map +1 -1
  5. package/dist/cjs/fetchDistantDictionaries.cjs +4 -3
  6. package/dist/cjs/fetchDistantDictionaries.cjs.map +1 -1
  7. package/dist/cjs/listGitFiles.cjs +3 -1
  8. package/dist/cjs/listGitFiles.cjs.map +1 -1
  9. package/dist/cjs/loadDictionaries/loadDictionaries.cjs +3 -2
  10. package/dist/cjs/loadDictionaries/loadDictionaries.cjs.map +1 -1
  11. package/dist/cjs/mergeDictionaries.cjs +2 -1
  12. package/dist/cjs/mergeDictionaries.cjs.map +1 -1
  13. package/dist/cjs/prepareIntlayer.cjs +5 -4
  14. package/dist/cjs/prepareIntlayer.cjs.map +1 -1
  15. package/dist/cjs/transpiler/dictionary_to_main/createDictionaryEntryPoint.cjs +7 -2
  16. package/dist/cjs/transpiler/dictionary_to_main/createDictionaryEntryPoint.cjs.map +1 -1
  17. package/dist/cjs/writeContentDeclaration/formatCode.cjs +14 -2
  18. package/dist/cjs/writeContentDeclaration/formatCode.cjs.map +1 -1
  19. package/dist/cjs/writeContentDeclaration/writeJSFile.cjs +17 -15
  20. package/dist/cjs/writeContentDeclaration/writeJSFile.cjs.map +1 -1
  21. package/dist/esm/checkDictionaryChanges.mjs +10 -5
  22. package/dist/esm/checkDictionaryChanges.mjs.map +1 -1
  23. package/dist/esm/chokidar/watcher.mjs +13 -14
  24. package/dist/esm/chokidar/watcher.mjs.map +1 -1
  25. package/dist/esm/fetchDistantDictionaries.mjs +3 -2
  26. package/dist/esm/fetchDistantDictionaries.mjs.map +1 -1
  27. package/dist/esm/listGitFiles.mjs +3 -1
  28. package/dist/esm/listGitFiles.mjs.map +1 -1
  29. package/dist/esm/loadDictionaries/loadDictionaries.mjs +6 -1
  30. package/dist/esm/loadDictionaries/loadDictionaries.mjs.map +1 -1
  31. package/dist/esm/mergeDictionaries.mjs +2 -1
  32. package/dist/esm/mergeDictionaries.mjs.map +1 -1
  33. package/dist/esm/prepareIntlayer.mjs +2 -1
  34. package/dist/esm/prepareIntlayer.mjs.map +1 -1
  35. package/dist/esm/transpiler/dictionary_to_main/createDictionaryEntryPoint.mjs +7 -2
  36. package/dist/esm/transpiler/dictionary_to_main/createDictionaryEntryPoint.mjs.map +1 -1
  37. package/dist/esm/writeContentDeclaration/formatCode.mjs +3 -1
  38. package/dist/esm/writeContentDeclaration/formatCode.mjs.map +1 -1
  39. package/dist/esm/writeContentDeclaration/writeJSFile.mjs +3 -1
  40. package/dist/esm/writeContentDeclaration/writeJSFile.mjs.map +1 -1
  41. package/dist/types/checkDictionaryChanges.d.ts.map +1 -1
  42. package/dist/types/chokidar/watcher.d.ts +2 -1
  43. package/dist/types/chokidar/watcher.d.ts.map +1 -1
  44. package/dist/types/fetchDistantDictionaries.d.ts.map +1 -1
  45. package/dist/types/listGitFiles.d.ts.map +1 -1
  46. package/dist/types/loadDictionaries/loadDictionaries.d.ts.map +1 -1
  47. package/dist/types/mergeDictionaries.d.ts.map +1 -1
  48. package/dist/types/prepareIntlayer.d.ts.map +1 -1
  49. package/dist/types/transpiler/dictionary_to_main/createDictionaryEntryPoint.d.ts +1 -1
  50. package/dist/types/transpiler/dictionary_to_main/createDictionaryEntryPoint.d.ts.map +1 -1
  51. package/dist/types/writeContentDeclaration/formatCode.d.ts.map +1 -1
  52. package/dist/types/writeContentDeclaration/writeJSFile.d.ts.map +1 -1
  53. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/prepareIntlayer.ts"],"sourcesContent":["import {\n ESMxCJSRequire,\n type IntlayerConfig,\n appLogger,\n getConfiguration,\n} from '@intlayer/config';\nimport { cleanOutputDir } from './cleanOutputDir';\nimport { listDictionaries } from './listDictionariesPath';\nimport { loadDictionaries } from './loadDictionaries/loadDictionaries';\nimport { buildDictionary } from './transpiler/declaration_file_to_dictionary/index';\nimport { createDictionaryEntryPoint } from './transpiler/dictionary_to_main/createDictionaryEntryPoint';\nimport {\n createModuleAugmentation,\n createTypes,\n} from './transpiler/dictionary_to_type/index';\nimport { writeConfiguration } from './writeConfiguration';\n\nexport const prepareIntlayer = async (\n configuration: IntlayerConfig = getConfiguration(),\n projectRequire = ESMxCJSRequire\n) => {\n cleanOutputDir(configuration);\n\n appLogger('Output directory cleaned', {\n isVerbose: true,\n });\n\n const files: string[] = listDictionaries(configuration);\n\n const dictionaries = await loadDictionaries(\n files,\n configuration,\n projectRequire\n );\n\n // Build locale dictionaries\n const dictionariesPaths = await buildDictionary(dictionaries, configuration);\n\n createTypes(dictionariesPaths, configuration);\n\n createDictionaryEntryPoint(configuration);\n\n appLogger('Dictionaries built');\n\n createModuleAugmentation(configuration);\n\n appLogger('Module augmentation built', {\n isVerbose: true,\n });\n\n writeConfiguration(configuration);\n\n appLogger('Configuration written', {\n isVerbose: true,\n });\n};\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAChC,SAAS,kCAAkC;AAC3C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,0BAA0B;AAE5B,MAAM,kBAAkB,OAC7B,gBAAgC,iBAAiB,GACjD,iBAAiB,mBACd;AACH,iBAAe,aAAa;AAE5B,YAAU,4BAA4B;AAAA,IACpC,WAAW;AAAA,EACb,CAAC;AAED,QAAM,QAAkB,iBAAiB,aAAa;AAEtD,QAAM,eAAe,MAAM;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAGA,QAAM,oBAAoB,MAAM,gBAAgB,cAAc,aAAa;AAE3E,cAAY,mBAAmB,aAAa;AAE5C,6BAA2B,aAAa;AAExC,YAAU,oBAAoB;AAE9B,2BAAyB,aAAa;AAEtC,YAAU,6BAA6B;AAAA,IACrC,WAAW;AAAA,EACb,CAAC;AAED,qBAAmB,aAAa;AAEhC,YAAU,yBAAyB;AAAA,IACjC,WAAW;AAAA,EACb,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../src/prepareIntlayer.ts"],"sourcesContent":["import {\n ESMxCJSRequire,\n type IntlayerConfig,\n getAppLogger,\n getConfiguration,\n} from '@intlayer/config';\nimport { cleanOutputDir } from './cleanOutputDir';\nimport { listDictionaries } from './listDictionariesPath';\nimport { loadDictionaries } from './loadDictionaries/loadDictionaries';\nimport { buildDictionary } from './transpiler/declaration_file_to_dictionary/index';\nimport { createDictionaryEntryPoint } from './transpiler/dictionary_to_main/createDictionaryEntryPoint';\nimport {\n createModuleAugmentation,\n createTypes,\n} from './transpiler/dictionary_to_type/index';\nimport { writeConfiguration } from './writeConfiguration';\n\nexport const prepareIntlayer = async (\n configuration: IntlayerConfig = getConfiguration(),\n projectRequire = ESMxCJSRequire\n) => {\n const appLogger = getAppLogger(configuration);\n\n cleanOutputDir(configuration);\n\n appLogger('Output directory cleaned', {\n isVerbose: true,\n });\n\n const files: string[] = listDictionaries(configuration);\n\n const dictionaries = await loadDictionaries(\n files,\n configuration,\n projectRequire\n );\n\n // Build locale dictionaries\n const dictionariesPaths = await buildDictionary(dictionaries, configuration);\n\n createTypes(dictionariesPaths, configuration);\n\n createDictionaryEntryPoint(configuration);\n\n appLogger('Dictionaries built');\n\n createModuleAugmentation(configuration);\n\n appLogger('Module augmentation built', {\n isVerbose: true,\n });\n\n writeConfiguration(configuration);\n\n appLogger('Configuration written', {\n isVerbose: true,\n });\n};\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAChC,SAAS,kCAAkC;AAC3C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,0BAA0B;AAE5B,MAAM,kBAAkB,OAC7B,gBAAgC,iBAAiB,GACjD,iBAAiB,mBACd;AACH,QAAM,YAAY,aAAa,aAAa;AAE5C,iBAAe,aAAa;AAE5B,YAAU,4BAA4B;AAAA,IACpC,WAAW;AAAA,EACb,CAAC;AAED,QAAM,QAAkB,iBAAiB,aAAa;AAEtD,QAAM,eAAe,MAAM;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAGA,QAAM,oBAAoB,MAAM,gBAAgB,cAAc,aAAa;AAE3E,cAAY,mBAAmB,aAAa;AAE5C,6BAA2B,aAAa;AAExC,YAAU,oBAAoB;AAE9B,2BAAyB,aAAa;AAEtC,YAAU,6BAA6B;AAAA,IACrC,WAAW;AAAA,EACb,CAAC;AAED,qBAAmB,aAAa;AAEhC,YAAU,yBAAyB;AAAA,IACjC,WAAW;AAAA,EACb,CAAC;AACH;","names":[]}
@@ -36,12 +36,17 @@ ${formattedDictionaryMap}
36
36
  `;
37
37
  return content;
38
38
  };
39
- const createDictionaryEntryPoint = (configuration = getConfiguration()) => {
39
+ const createDictionaryEntryPoint = (configuration = getConfiguration(), dictionariesKeys) => {
40
40
  const { mainDir } = configuration.content;
41
41
  if (!existsSync(mainDir)) {
42
42
  mkdirSync(mainDir, { recursive: true });
43
43
  }
44
- const dictionariesPath = getBuiltDictionariesPath(configuration);
44
+ let dictionariesPath = getBuiltDictionariesPath(configuration);
45
+ if (dictionariesKeys) {
46
+ dictionariesPath = dictionariesPath.filter(
47
+ (dictionaryPath) => dictionariesKeys.some((key) => dictionaryPath.endsWith(`${key}.json`))
48
+ );
49
+ }
45
50
  const cjsContent = generateDictionaryListContent(
46
51
  dictionariesPath,
47
52
  "cjs",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/transpiler/dictionary_to_main/createDictionaryEntryPoint.ts"],"sourcesContent":["import { getConfiguration } from '@intlayer/config';\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { basename, extname, relative, resolve } from 'path';\nimport { getBuiltDictionariesPath } from '../../getBuiltDictionariesPath';\nimport { getBuiltUnmergedDictionariesPath } from '../../getBuiltUnmergedDictionariesPath';\nimport { getFileHash } from '../../utils';\n\n/**\n * This function generates the content of the dictionary list file\n */\nconst generateDictionaryListContent = (\n dictionaries: string[],\n format: 'cjs' | 'esm' = 'esm',\n configuration = getConfiguration()\n): string => {\n const { mainDir } = configuration.content;\n\n let content = '';\n\n const dictionariesRef = dictionaries.map((dictionaryPath) => ({\n relativePath: relative(mainDir, dictionaryPath),\n id: basename(dictionaryPath, extname(dictionaryPath)), // Get the base name as the dictionary id\n hash: `_${getFileHash(dictionaryPath)}`, // Get the hash of the dictionary to avoid conflicts\n }));\n\n // Import all dictionaries\n dictionariesRef.forEach((dictionary) => {\n if (format === 'esm')\n content += `import ${dictionary.hash} from '${dictionary.relativePath}';\\n`;\n if (format === 'cjs')\n content += `const ${dictionary.hash} = require('${dictionary.relativePath}');\\n`;\n });\n\n content += '\\n';\n\n // Format Dictionary Map\n const formattedDictionaryMap: string = dictionariesRef\n .map((dictionary) => ` \"${dictionary.id}\": ${dictionary.hash}`)\n .join(',\\n');\n\n if (format === 'esm')\n content += `export default {\\n${formattedDictionaryMap}\\n};\\n`;\n if (format === 'cjs')\n content += `module.exports = {\\n${formattedDictionaryMap}\\n};\\n`;\n\n return content;\n};\n\n/**\n * This function generates a list of dictionaries in the main directory\n */\nexport const createDictionaryEntryPoint = (\n configuration = getConfiguration()\n) => {\n const { mainDir } = configuration.content;\n\n // Create main directory if it doesn't exist\n if (!existsSync(mainDir)) {\n mkdirSync(mainDir, { recursive: true });\n }\n\n const dictionariesPath: string[] = getBuiltDictionariesPath(configuration);\n\n // Create the dictionary list file\n const cjsContent = generateDictionaryListContent(\n dictionariesPath,\n 'cjs',\n configuration\n );\n writeFileSync(resolve(mainDir, 'dictionaries.cjs'), cjsContent);\n\n const esmContent = generateDictionaryListContent(\n dictionariesPath,\n 'esm',\n configuration\n );\n writeFileSync(resolve(mainDir, 'dictionaries.mjs'), esmContent);\n\n const unmergedDictionariesPath: string[] =\n getBuiltUnmergedDictionariesPath(configuration);\n\n const unmergedCjsContent = generateDictionaryListContent(\n unmergedDictionariesPath,\n 'cjs',\n configuration\n );\n writeFileSync(\n resolve(mainDir, 'unmerged_dictionaries.cjs'),\n unmergedCjsContent\n );\n\n const unmergedEsmContent = generateDictionaryListContent(\n unmergedDictionariesPath,\n 'esm',\n configuration\n );\n writeFileSync(\n resolve(mainDir, 'unmerged_dictionaries.mjs'),\n unmergedEsmContent\n );\n};\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,SAAS,YAAY,WAAW,qBAAqB;AACrD,SAAS,UAAU,SAAS,UAAU,eAAe;AACrD,SAAS,gCAAgC;AACzC,SAAS,wCAAwC;AACjD,SAAS,mBAAmB;AAK5B,MAAM,gCAAgC,CACpC,cACA,SAAwB,OACxB,gBAAgB,iBAAiB,MACtB;AACX,QAAM,EAAE,QAAQ,IAAI,cAAc;AAElC,MAAI,UAAU;AAEd,QAAM,kBAAkB,aAAa,IAAI,CAAC,oBAAoB;AAAA,IAC5D,cAAc,SAAS,SAAS,cAAc;AAAA,IAC9C,IAAI,SAAS,gBAAgB,QAAQ,cAAc,CAAC;AAAA;AAAA,IACpD,MAAM,IAAI,YAAY,cAAc,CAAC;AAAA;AAAA,EACvC,EAAE;AAGF,kBAAgB,QAAQ,CAAC,eAAe;AACtC,QAAI,WAAW;AACb,iBAAW,UAAU,WAAW,IAAI,UAAU,WAAW,YAAY;AAAA;AACvE,QAAI,WAAW;AACb,iBAAW,SAAS,WAAW,IAAI,eAAe,WAAW,YAAY;AAAA;AAAA,EAC7E,CAAC;AAED,aAAW;AAGX,QAAM,yBAAiC,gBACpC,IAAI,CAAC,eAAe,MAAM,WAAW,EAAE,MAAM,WAAW,IAAI,EAAE,EAC9D,KAAK,KAAK;AAEb,MAAI,WAAW;AACb,eAAW;AAAA,EAAqB,sBAAsB;AAAA;AAAA;AACxD,MAAI,WAAW;AACb,eAAW;AAAA,EAAuB,sBAAsB;AAAA;AAAA;AAE1D,SAAO;AACT;AAKO,MAAM,6BAA6B,CACxC,gBAAgB,iBAAiB,MAC9B;AACH,QAAM,EAAE,QAAQ,IAAI,cAAc;AAGlC,MAAI,CAAC,WAAW,OAAO,GAAG;AACxB,cAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,EACxC;AAEA,QAAM,mBAA6B,yBAAyB,aAAa;AAGzE,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,gBAAc,QAAQ,SAAS,kBAAkB,GAAG,UAAU;AAE9D,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,gBAAc,QAAQ,SAAS,kBAAkB,GAAG,UAAU;AAE9D,QAAM,2BACJ,iCAAiC,aAAa;AAEhD,QAAM,qBAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA;AAAA,IACE,QAAQ,SAAS,2BAA2B;AAAA,IAC5C;AAAA,EACF;AAEA,QAAM,qBAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA;AAAA,IACE,QAAQ,SAAS,2BAA2B;AAAA,IAC5C;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/transpiler/dictionary_to_main/createDictionaryEntryPoint.ts"],"sourcesContent":["import { getConfiguration } from '@intlayer/config';\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { basename, extname, relative, resolve } from 'path';\nimport { getBuiltDictionariesPath } from '../../getBuiltDictionariesPath';\nimport { getBuiltUnmergedDictionariesPath } from '../../getBuiltUnmergedDictionariesPath';\nimport { getFileHash } from '../../utils';\n\n/**\n * This function generates the content of the dictionary list file\n */\nconst generateDictionaryListContent = (\n dictionaries: string[],\n format: 'cjs' | 'esm' = 'esm',\n configuration = getConfiguration()\n): string => {\n const { mainDir } = configuration.content;\n\n let content = '';\n\n const dictionariesRef = dictionaries.map((dictionaryPath) => ({\n relativePath: relative(mainDir, dictionaryPath),\n id: basename(dictionaryPath, extname(dictionaryPath)), // Get the base name as the dictionary id\n hash: `_${getFileHash(dictionaryPath)}`, // Get the hash of the dictionary to avoid conflicts\n }));\n\n // Import all dictionaries\n dictionariesRef.forEach((dictionary) => {\n if (format === 'esm')\n content += `import ${dictionary.hash} from '${dictionary.relativePath}';\\n`;\n if (format === 'cjs')\n content += `const ${dictionary.hash} = require('${dictionary.relativePath}');\\n`;\n });\n\n content += '\\n';\n\n // Format Dictionary Map\n const formattedDictionaryMap: string = dictionariesRef\n .map((dictionary) => ` \"${dictionary.id}\": ${dictionary.hash}`)\n .join(',\\n');\n\n if (format === 'esm')\n content += `export default {\\n${formattedDictionaryMap}\\n};\\n`;\n if (format === 'cjs')\n content += `module.exports = {\\n${formattedDictionaryMap}\\n};\\n`;\n\n return content;\n};\n\n/**\n * This function generates a list of dictionaries in the main directory\n */\nexport const createDictionaryEntryPoint = (\n configuration = getConfiguration(),\n dictionariesKeys?: string[]\n) => {\n const { mainDir } = configuration.content;\n\n // Create main directory if it doesn't exist\n if (!existsSync(mainDir)) {\n mkdirSync(mainDir, { recursive: true });\n }\n\n let dictionariesPath: string[] = getBuiltDictionariesPath(configuration);\n\n if (dictionariesKeys) {\n dictionariesPath = dictionariesPath.filter((dictionaryPath) =>\n dictionariesKeys.some((key) => dictionaryPath.endsWith(`${key}.json`))\n );\n }\n\n // Create the dictionary list file\n const cjsContent = generateDictionaryListContent(\n dictionariesPath,\n 'cjs',\n configuration\n );\n writeFileSync(resolve(mainDir, 'dictionaries.cjs'), cjsContent);\n\n const esmContent = generateDictionaryListContent(\n dictionariesPath,\n 'esm',\n configuration\n );\n writeFileSync(resolve(mainDir, 'dictionaries.mjs'), esmContent);\n\n const unmergedDictionariesPath: string[] =\n getBuiltUnmergedDictionariesPath(configuration);\n\n const unmergedCjsContent = generateDictionaryListContent(\n unmergedDictionariesPath,\n 'cjs',\n configuration\n );\n writeFileSync(\n resolve(mainDir, 'unmerged_dictionaries.cjs'),\n unmergedCjsContent\n );\n\n const unmergedEsmContent = generateDictionaryListContent(\n unmergedDictionariesPath,\n 'esm',\n configuration\n );\n writeFileSync(\n resolve(mainDir, 'unmerged_dictionaries.mjs'),\n unmergedEsmContent\n );\n};\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,SAAS,YAAY,WAAW,qBAAqB;AACrD,SAAS,UAAU,SAAS,UAAU,eAAe;AACrD,SAAS,gCAAgC;AACzC,SAAS,wCAAwC;AACjD,SAAS,mBAAmB;AAK5B,MAAM,gCAAgC,CACpC,cACA,SAAwB,OACxB,gBAAgB,iBAAiB,MACtB;AACX,QAAM,EAAE,QAAQ,IAAI,cAAc;AAElC,MAAI,UAAU;AAEd,QAAM,kBAAkB,aAAa,IAAI,CAAC,oBAAoB;AAAA,IAC5D,cAAc,SAAS,SAAS,cAAc;AAAA,IAC9C,IAAI,SAAS,gBAAgB,QAAQ,cAAc,CAAC;AAAA;AAAA,IACpD,MAAM,IAAI,YAAY,cAAc,CAAC;AAAA;AAAA,EACvC,EAAE;AAGF,kBAAgB,QAAQ,CAAC,eAAe;AACtC,QAAI,WAAW;AACb,iBAAW,UAAU,WAAW,IAAI,UAAU,WAAW,YAAY;AAAA;AACvE,QAAI,WAAW;AACb,iBAAW,SAAS,WAAW,IAAI,eAAe,WAAW,YAAY;AAAA;AAAA,EAC7E,CAAC;AAED,aAAW;AAGX,QAAM,yBAAiC,gBACpC,IAAI,CAAC,eAAe,MAAM,WAAW,EAAE,MAAM,WAAW,IAAI,EAAE,EAC9D,KAAK,KAAK;AAEb,MAAI,WAAW;AACb,eAAW;AAAA,EAAqB,sBAAsB;AAAA;AAAA;AACxD,MAAI,WAAW;AACb,eAAW;AAAA,EAAuB,sBAAsB;AAAA;AAAA;AAE1D,SAAO;AACT;AAKO,MAAM,6BAA6B,CACxC,gBAAgB,iBAAiB,GACjC,qBACG;AACH,QAAM,EAAE,QAAQ,IAAI,cAAc;AAGlC,MAAI,CAAC,WAAW,OAAO,GAAG;AACxB,cAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,EACxC;AAEA,MAAI,mBAA6B,yBAAyB,aAAa;AAEvE,MAAI,kBAAkB;AACpB,uBAAmB,iBAAiB;AAAA,MAAO,CAAC,mBAC1C,iBAAiB,KAAK,CAAC,QAAQ,eAAe,SAAS,GAAG,GAAG,OAAO,CAAC;AAAA,IACvE;AAAA,EACF;AAGA,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,gBAAc,QAAQ,SAAS,kBAAkB,GAAG,UAAU;AAE9D,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,gBAAc,QAAQ,SAAS,kBAAkB,GAAG,UAAU;AAE9D,QAAM,2BACJ,iCAAiC,aAAa;AAEhD,QAAM,qBAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA;AAAA,IACE,QAAQ,SAAS,2BAA2B;AAAA,IAC5C;AAAA,EACF;AAEA,QAAM,qBAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA;AAAA,IACE,QAAQ,SAAS,2BAA2B;AAAA,IAC5C;AAAA,EACF;AACF;","names":[]}
@@ -1,5 +1,7 @@
1
- import { appLogger } from "@intlayer/config";
1
+ import { getAppLogger } from "@intlayer/config";
2
+ import configuration from "@intlayer/config/built";
2
3
  const formatCode = async (filePath, code) => {
4
+ const appLogger = getAppLogger(configuration);
3
5
  let prettier;
4
6
  try {
5
7
  prettier = require("prettier");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/writeContentDeclaration/formatCode.ts"],"sourcesContent":["import { appLogger } from '@intlayer/config';\n\nexport const formatCode = async (filePath: string, code: string) => {\n // Try to import prettier if it exists\n let prettier: any;\n try {\n prettier = require('prettier');\n } catch (error) {\n // Prettier is not installed, continue without it\n }\n\n // Apply Prettier formatting if it's available\n if (prettier) {\n try {\n // Try to find a prettier config file\n const prettierConfig = await prettier.resolveConfig(filePath ?? '');\n\n // Format the code with Prettier\n const formattedCode = await prettier.format(code, {\n ...prettierConfig,\n filepath: filePath, // Explicitly provide the filepath so Prettier can infer the parser\n });\n\n appLogger(`Applied Prettier formatting to ${filePath}`, {\n level: 'info',\n isVerbose: true,\n });\n\n return formattedCode;\n } catch (error) {\n const err = error as Error;\n appLogger(\n `Failed to apply Prettier formatting to ${filePath}: ${err.message}`,\n {\n level: 'warn',\n isVerbose: true,\n }\n );\n // Continue with unformatted code on prettier error\n }\n }\n\n return code;\n};\n"],"mappings":"AAAA,SAAS,iBAAiB;AAEnB,MAAM,aAAa,OAAO,UAAkB,SAAiB;AAElE,MAAI;AACJ,MAAI;AACF,eAAW,QAAQ,UAAU;AAAA,EAC/B,SAAS,OAAO;AAAA,EAEhB;AAGA,MAAI,UAAU;AACZ,QAAI;AAEF,YAAM,iBAAiB,MAAM,SAAS,cAAc,YAAY,EAAE;AAGlE,YAAM,gBAAgB,MAAM,SAAS,OAAO,MAAM;AAAA,QAChD,GAAG;AAAA,QACH,UAAU;AAAA;AAAA,MACZ,CAAC;AAED,gBAAU,kCAAkC,QAAQ,IAAI;AAAA,QACtD,OAAO;AAAA,QACP,WAAW;AAAA,MACb,CAAC;AAED,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,MAAM;AACZ;AAAA,QACE,0CAA0C,QAAQ,KAAK,IAAI,OAAO;AAAA,QAClE;AAAA,UACE,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IAEF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/writeContentDeclaration/formatCode.ts"],"sourcesContent":["import { getAppLogger } from '@intlayer/config';\nimport configuration from '@intlayer/config/built';\n\nexport const formatCode = async (filePath: string, code: string) => {\n const appLogger = getAppLogger(configuration);\n // Try to import prettier if it exists\n let prettier: any;\n try {\n prettier = require('prettier');\n } catch (error) {\n // Prettier is not installed, continue without it\n }\n\n // Apply Prettier formatting if it's available\n if (prettier) {\n try {\n // Try to find a prettier config file\n const prettierConfig = await prettier.resolveConfig(filePath ?? '');\n\n // Format the code with Prettier\n const formattedCode = await prettier.format(code, {\n ...prettierConfig,\n filepath: filePath, // Explicitly provide the filepath so Prettier can infer the parser\n });\n\n appLogger(`Applied Prettier formatting to ${filePath}`, {\n level: 'info',\n isVerbose: true,\n });\n\n return formattedCode;\n } catch (error) {\n const err = error as Error;\n appLogger(\n `Failed to apply Prettier formatting to ${filePath}: ${err.message}`,\n {\n level: 'warn',\n isVerbose: true,\n }\n );\n // Continue with unformatted code on prettier error\n }\n }\n\n return code;\n};\n"],"mappings":"AAAA,SAAS,oBAAoB;AAC7B,OAAO,mBAAmB;AAEnB,MAAM,aAAa,OAAO,UAAkB,SAAiB;AAClE,QAAM,YAAY,aAAa,aAAa;AAE5C,MAAI;AACJ,MAAI;AACF,eAAW,QAAQ,UAAU;AAAA,EAC/B,SAAS,OAAO;AAAA,EAEhB;AAGA,MAAI,UAAU;AACZ,QAAI;AAEF,YAAM,iBAAiB,MAAM,SAAS,cAAc,YAAY,EAAE;AAGlE,YAAM,gBAAgB,MAAM,SAAS,OAAO,MAAM;AAAA,QAChD,GAAG;AAAA,QACH,UAAU;AAAA;AAAA,MACZ,CAAC;AAED,gBAAU,kCAAkC,QAAQ,IAAI;AAAA,QACtD,OAAO;AAAA,QACP,WAAW;AAAA,MACb,CAAC;AAED,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,MAAM;AACZ;AAAA,QACE,0CAA0C,QAAQ,KAAK,IAAI,OAAO;AAAA,QAClE;AAAA,UACE,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IAEF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -2,7 +2,8 @@ import generator from "@babel/generator";
2
2
  import * as babelParser from "@babel/parser";
3
3
  import traverse from "@babel/traverse";
4
4
  import * as t from "@babel/types";
5
- import { appLogger, logger } from "@intlayer/config";
5
+ import { getAppLogger, logger } from "@intlayer/config";
6
+ import configuration from "@intlayer/config/built";
6
7
  import {
7
8
  NodeType
8
9
  } from "@intlayer/core";
@@ -12,6 +13,7 @@ import { extname } from "path";
12
13
  import { getContentDeclarationFileTemplate } from "../getContentDeclarationFileTemplate/getContentDeclarationFileTemplate.mjs";
13
14
  import { formatCode } from "./formatCode.mjs";
14
15
  const writeJSFile = async (filePath, dictionary) => {
16
+ const appLogger = getAppLogger(configuration);
15
17
  const {
16
18
  key: dictionaryIdentifierKey,
17
19
  content: updatesToApply,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/writeContentDeclaration/writeJSFile.ts"],"sourcesContent":["import generator from '@babel/generator';\nimport * as babelParser from '@babel/parser';\nimport traverse, { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { appLogger, logger } from '@intlayer/config';\nimport {\n Dictionary,\n NodeType,\n TranslationContent,\n TypedNode,\n} from '@intlayer/core';\nimport { existsSync } from 'fs';\nimport { readFile, writeFile } from 'fs/promises';\nimport { extname } from 'path';\nimport { getContentDeclarationFileTemplate } from '../getContentDeclarationFileTemplate/getContentDeclarationFileTemplate';\nimport { formatCode } from './formatCode';\n\n/**\n * Updates a JavaScript/TypeScript file based on the provided JSON instructions.\n * It targets a specific dictionary object within the file (identified by its 'key' property)\n * and updates its 'content' entries. Currently, it focuses on modifying arguments\n * of 't' (translation) function calls.\n */\nexport const writeJSFile = async (\n filePath: string,\n dictionary: Dictionary\n): Promise<void> => {\n const {\n key: dictionaryIdentifierKey,\n content: updatesToApply,\n locale,\n autoFilled,\n } = dictionary;\n const isPerLocaleDeclarationFile = typeof locale === 'string';\n\n // Check if the file exist\n if (!existsSync(filePath)) {\n const fileExtension = extname(filePath);\n\n let format = 'ts' as 'ts' | 'cjs' | 'esm';\n\n if (fileExtension === '.ts' || fileExtension === '.tsx') {\n format = 'ts';\n } else if (fileExtension === '.cjs' || fileExtension === '.cjsx') {\n format = 'cjs';\n } else {\n format = 'esm';\n }\n\n appLogger('File does not exist, creating it', {\n isVerbose: true,\n });\n const template = await getContentDeclarationFileTemplate(\n dictionaryIdentifierKey,\n format,\n { locale, autoFilled }\n );\n\n await writeFile(filePath, template, 'utf-8');\n }\n\n let sourceCode: string;\n try {\n sourceCode = await readFile(filePath, 'utf-8');\n } catch (error) {\n const err = error as Error;\n appLogger(`Failed to read file: ${filePath}`, {\n level: 'error',\n });\n throw new Error(`Failed to read file ${filePath}: ${err.message}`);\n }\n\n const ast = babelParser.parse(sourceCode, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx'],\n tokens: true,\n });\n\n let dictionaryObjectPath: NodePath<t.ObjectExpression> | null = null;\n let dictionaryIdentifier: string | null = null;\n\n // First look for direct objects with the right key, regardless of variable assignments\n traverse(ast, {\n ObjectExpression(path) {\n if (dictionaryObjectPath) return; // Already found\n\n // Check if this object has a key property with the right value\n const keyProp = path.node.properties.find((prop) => {\n if (!t.isObjectProperty(prop)) return false;\n if (!t.isIdentifier(prop.key) && !t.isStringLiteral(prop.key))\n return false;\n\n const keyName = t.isIdentifier(prop.key)\n ? prop.key.name\n : prop.key.value;\n\n if (keyName !== 'key' || !t.isStringLiteral(prop.value)) return false;\n\n // Unescape the value for comparison\n const propValue = prop.value.value;\n // Compare actual string content, not just raw representation\n return propValue === dictionaryIdentifierKey;\n });\n\n if (keyProp) {\n dictionaryObjectPath = path;\n path.stop();\n }\n },\n });\n\n // If not found directly, look for variable declarations and exports\n if (!dictionaryObjectPath) {\n appLogger(`Looking for variable declarations`, {\n isVerbose: true,\n });\n\n // Collect all variable declarations with objects\n const candidateVars: { id: string; path: NodePath<t.ObjectExpression> }[] =\n [];\n\n traverse(ast, {\n VariableDeclarator(path) {\n const { node } = path;\n if (!t.isIdentifier(node.id)) return;\n\n let objPath: NodePath<t.ObjectExpression> | null = null;\n\n // Direct object assignment\n if (node.init && t.isObjectExpression(node.init)) {\n objPath = path.get('init') as NodePath<t.ObjectExpression>;\n }\n // Object with TS type assertion (satisfies/as)\n else if (\n node.init &&\n (t.isTSAsExpression(node.init) || t.isTSTypeAssertion(node.init)) &&\n t.isObjectExpression(node.init.expression)\n ) {\n objPath = path.get('init.expression') as NodePath<t.ObjectExpression>;\n }\n\n if (objPath) {\n candidateVars.push({ id: node.id.name, path: objPath });\n }\n },\n });\n\n appLogger(`Found ${candidateVars.length} candidate variables`, {\n isVerbose: true,\n });\n\n // Check each candidate for the key property\n for (const { id, path } of candidateVars) {\n const keyProp = path.node.properties.find((prop) => {\n if (!t.isObjectProperty(prop)) return false;\n if (!t.isIdentifier(prop.key) && !t.isStringLiteral(prop.key))\n return false;\n\n const keyName = t.isIdentifier(prop.key)\n ? prop.key.name\n : prop.key.value;\n return (\n keyName === 'key' &&\n t.isStringLiteral(prop.value) &&\n prop.value.value === dictionaryIdentifierKey\n );\n });\n\n if (keyProp) {\n appLogger(`Found match in variable: ${id}`);\n dictionaryObjectPath = path;\n dictionaryIdentifier = id;\n break;\n }\n }\n\n // If still not found, dump all object expressions for debugging\n if (!dictionaryObjectPath) {\n appLogger('Could not find dictionary object. Dumping all objects:', {\n isVerbose: true,\n });\n traverse(ast, {\n ObjectExpression(path) {\n const props = path.node.properties\n .map((prop) => {\n if (!t.isObjectProperty(prop)) return 'non-object-property';\n if (!t.isIdentifier(prop.key) && !t.isStringLiteral(prop.key))\n return 'complex-key';\n\n const keyName = t.isIdentifier(prop.key)\n ? prop.key.name\n : prop.key.value;\n let valueDesc = 'unknown-value';\n\n if (t.isStringLiteral(prop.value)) {\n valueDesc = `\"${prop.value.value}\"`;\n }\n\n return `${keyName}: ${valueDesc}`;\n })\n .join(', ');\n\n appLogger(`Object: { ${props} }`);\n },\n });\n }\n }\n\n if (!dictionaryObjectPath) {\n throw new Error(\n `Could not find dictionary object with key '${dictionaryIdentifierKey}' in ${filePath}`\n );\n }\n\n // Find the 'content' property within the identified dictionary object\n const contentPropertyPath = (\n (dictionaryObjectPath as any).get('properties') as NodePath<\n t.ObjectProperty | t.SpreadElement | t.ObjectMethod\n >[]\n ).find((propPath) => {\n if (!propPath.isObjectProperty()) return false;\n const propNode = propPath.node;\n const keyName = t.isIdentifier(propNode.key)\n ? propNode.key.name\n : t.isStringLiteral(propNode.key)\n ? propNode.key.value\n : null;\n return keyName === 'content';\n });\n\n if (\n !contentPropertyPath ||\n !contentPropertyPath.isObjectProperty() ||\n !(contentPropertyPath.get('value') as NodePath).isObjectExpression()\n ) {\n throw new Error(\n `Could not find 'content' object property, or it's not an object, in dictionary in ${filePath}`\n );\n }\n\n const contentObjectPath = contentPropertyPath.get(\n 'value'\n ) as NodePath<t.ObjectExpression>;\n\n // Apply updates to each entry specified in the JSON\n for (const [entryKeyToUpdate, newEntryData] of Object.entries(\n updatesToApply\n )) {\n const targetPropertyPath = (\n contentObjectPath.get('properties') as NodePath<\n t.ObjectProperty | t.SpreadElement | t.ObjectMethod\n >[]\n ).find((propPath) => {\n if (!propPath.isObjectProperty()) return false;\n const propNode = propPath.node;\n const keyName = t.isIdentifier(propNode.key)\n ? propNode.key.name\n : t.isStringLiteral(propNode.key)\n ? propNode.key.value\n : null;\n return keyName === entryKeyToUpdate;\n });\n\n if (!targetPropertyPath || !targetPropertyPath.isObjectProperty()) {\n appLogger(\n `Key '${entryKeyToUpdate}' not found in content object of ${filePath}. Adding the missing key.`,\n {\n level: 'info',\n isVerbose: true,\n }\n );\n\n // Create a new property for the missing key\n let valueNode: t.Expression;\n\n if ((newEntryData as TypedNode)?.nodeType === NodeType.Translation) {\n // Create a new t() call with the translations\n const translationContent = newEntryData as TranslationContent;\n\n if (\n isPerLocaleDeclarationFile &&\n typeof locale === 'string' &&\n translationContent?.[NodeType.Translation]?.[locale]\n ) {\n // For per-locale files, use the string value directly\n valueNode = t.stringLiteral(\n String(translationContent[NodeType.Translation][locale])\n );\n } else {\n // Otherwise create a t() call with translations object\n const translationsObj = t.objectExpression(\n Object.entries(translationContent?.[NodeType.Translation]).map(\n ([langKey, langValue]) => {\n const keyNode = t.isValidIdentifier(langKey)\n ? t.identifier(langKey)\n : t.stringLiteral(langKey);\n return t.objectProperty(\n keyNode,\n t.stringLiteral(String(langValue))\n );\n }\n )\n );\n valueNode = t.callExpression(t.identifier('t'), [translationsObj]);\n }\n } else if (typeof newEntryData === 'string') {\n // Create a string literal for string values\n valueNode = t.stringLiteral(newEntryData);\n } else {\n // Fallback to empty string if we don't know how to handle this type\n appLogger(\n `Unsupported data type for new key '${entryKeyToUpdate}'. Using empty string.`,\n { level: 'warn', isVerbose: true }\n );\n valueNode = t.stringLiteral('');\n }\n\n // Add the new property to the content object\n const keyNode = t.isValidIdentifier(entryKeyToUpdate)\n ? t.identifier(entryKeyToUpdate)\n : t.stringLiteral(entryKeyToUpdate);\n const newProperty = t.objectProperty(keyNode, valueNode);\n contentObjectPath.node.properties.push(newProperty);\n\n continue;\n }\n\n const callExpressionPath = targetPropertyPath.get('value') as NodePath; // Path to the value, e.g., t(...)\n\n // Handle different types of values\n if (callExpressionPath.isCallExpression()) {\n const calleeNode = (callExpressionPath.node as t.CallExpression).callee;\n const calleeName = t.isIdentifier(calleeNode) ? calleeNode.name : null;\n\n // Handle 't' function calls\n if (\n (newEntryData as TypedNode)?.nodeType === 'translation' &&\n calleeName === 't'\n ) {\n const args = (callExpressionPath.node as t.CallExpression).arguments;\n if (args.length === 0 || !t.isObjectExpression(args[0])) {\n appLogger(\n `'t' call for '${entryKeyToUpdate}' in ${filePath} does not have an object literal as its first argument. Skipping.`,\n {\n level: 'warn',\n isVerbose: true,\n }\n );\n continue;\n }\n\n if (isPerLocaleDeclarationFile && typeof locale === 'string') {\n // For per-locale files, replace t() call with direct string\n const translations = (newEntryData as TranslationContent)?.[\n NodeType.Translation\n ];\n\n if (translations[locale]) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(translations[locale])));\n } else {\n appLogger(\n `Missing translation for locale '${locale}' in '${entryKeyToUpdate}'. Using first available translation.`,\n { level: 'warn', isVerbose: true }\n );\n const firstValue = Object.values(translations)[0];\n if (firstValue) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(firstValue)));\n }\n }\n continue;\n }\n\n const translationsObjectAstNode = args[0] as t.ObjectExpression;\n const processedLangKeysInJsonUpdate = new Set<string>();\n\n // Update existing language properties in the AST node\n translationsObjectAstNode.properties.forEach((prop: any) => {\n if (t.isObjectProperty(prop)) {\n const langKeyNode = prop.key;\n const astLangKeyName = t.isIdentifier(langKeyNode)\n ? langKeyNode.name\n : t.isStringLiteral(langKeyNode)\n ? langKeyNode.value\n : null;\n\n if (\n astLangKeyName &&\n (newEntryData as TranslationContent)?.[\n NodeType.Translation\n ].hasOwnProperty(astLangKeyName)\n ) {\n prop.value = t.stringLiteral(\n String(\n (newEntryData as TranslationContent)?.[\n NodeType.Translation\n ]?.[astLangKeyName]\n )\n );\n processedLangKeysInJsonUpdate.add(astLangKeyName);\n }\n }\n });\n\n // Add new language properties from the JSON update that were not originally in the AST node\n for (const [jsonLangKey, jsonLangValue] of Object.entries(\n (newEntryData as TranslationContent)?.[NodeType.Translation]\n )) {\n if (!processedLangKeysInJsonUpdate.has(jsonLangKey)) {\n const newKeyNode = t.isValidIdentifier(jsonLangKey)\n ? t.identifier(jsonLangKey)\n : t.stringLiteral(jsonLangKey);\n translationsObjectAstNode.properties.push(\n t.objectProperty(\n newKeyNode,\n t.stringLiteral(String(jsonLangValue))\n )\n );\n }\n }\n }\n // Handle other function calls in the future\n else {\n appLogger(\n `Unhandled callee '${calleeName || 'unknown'}' for key '${entryKeyToUpdate}' in ${filePath}.`,\n { level: 'warn', isVerbose: true }\n );\n }\n }\n // Handle direct string literals\n else if (callExpressionPath.isStringLiteral()) {\n // For string literals, directly replace with the new value\n if (typeof newEntryData === 'string') {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(newEntryData));\n } else if ((newEntryData as any)?.[NodeType.Translation]) {\n // Handle translation content (use first available translation)\n const translations = (newEntryData as TranslationContent)[\n NodeType.Translation\n ];\n const firstValue = Object.values(translations)[0];\n if (firstValue) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(firstValue)));\n }\n } else {\n appLogger(\n `Unhandled data structure for string replacement at '${entryKeyToUpdate}' in ${filePath}.`,\n { level: 'warn', isVerbose: true }\n );\n }\n }\n // Handle other value types (objects, arrays, etc.)\n else {\n const valueType = callExpressionPath.node.type;\n appLogger(\n `Updating value of type ${valueType} for '${entryKeyToUpdate}' in ${filePath}`,\n { level: 'info', isVerbose: true }\n );\n\n // For simple values like strings, use direct replacement\n if (typeof newEntryData === 'string') {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(newEntryData));\n }\n // For translation content, use a smart approach\n else if ((newEntryData as any)?.[NodeType.Translation]) {\n // Extract just the value relevant to this file's locale\n const translations = (newEntryData as TranslationContent)[\n NodeType.Translation\n ];\n\n // Try to determine locale from file path (assuming a pattern like .fr.content.ts)\n const localeMatch = filePath.match(/\\.([a-z]{2})\\.content\\.(ts|js)$/i);\n const locale = localeMatch\n ? localeMatch[1]\n : Object.keys(translations)[0];\n\n if (translations[locale]) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(translations[locale])));\n } else {\n // Fallback to first translation\n const firstValue = Object.values(translations)[0];\n if (firstValue) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(firstValue)));\n }\n }\n } else {\n appLogger(\n `Cannot update value of type ${valueType} for '${entryKeyToUpdate}' in ${filePath}. Unsupported data structure.`,\n { level: 'warn', isVerbose: true }\n );\n }\n }\n }\n\n // Generate JavaScript/TypeScript code from the modified AST\n const generatedCode = generator(ast, {\n retainLines: true,\n comments: true,\n jsescOption: {\n minimal: true, // This ensures Unicode characters are not escaped\n },\n }).code;\n\n let finalCode = generatedCode;\n\n finalCode = await formatCode(filePath, finalCode);\n\n // Write the modified code back to the file\n try {\n await writeFile(filePath, finalCode, 'utf-8');\n logger(`Successfully updated ${filePath}`, {\n level: 'info',\n isVerbose: true,\n });\n } catch (error) {\n const err = error as Error;\n logger(`Failed to write updated file: ${filePath}`, {\n level: 'error',\n });\n throw new Error(`Failed to write updated file ${filePath}: ${err.message}`);\n }\n};\n"],"mappings":"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","names":["keyNode","locale"]}
1
+ {"version":3,"sources":["../../../src/writeContentDeclaration/writeJSFile.ts"],"sourcesContent":["import generator from '@babel/generator';\nimport * as babelParser from '@babel/parser';\nimport traverse, { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { getAppLogger, logger } from '@intlayer/config';\nimport configuration from '@intlayer/config/built';\nimport {\n Dictionary,\n NodeType,\n TranslationContent,\n TypedNode,\n} from '@intlayer/core';\nimport { existsSync } from 'fs';\nimport { readFile, writeFile } from 'fs/promises';\nimport { extname } from 'path';\nimport { getContentDeclarationFileTemplate } from '../getContentDeclarationFileTemplate/getContentDeclarationFileTemplate';\nimport { formatCode } from './formatCode';\n\n/**\n * Updates a JavaScript/TypeScript file based on the provided JSON instructions.\n * It targets a specific dictionary object within the file (identified by its 'key' property)\n * and updates its 'content' entries. Currently, it focuses on modifying arguments\n * of 't' (translation) function calls.\n */\nexport const writeJSFile = async (\n filePath: string,\n dictionary: Dictionary\n): Promise<void> => {\n const appLogger = getAppLogger(configuration);\n\n const {\n key: dictionaryIdentifierKey,\n content: updatesToApply,\n locale,\n autoFilled,\n } = dictionary;\n const isPerLocaleDeclarationFile = typeof locale === 'string';\n\n // Check if the file exist\n if (!existsSync(filePath)) {\n const fileExtension = extname(filePath);\n\n let format = 'ts' as 'ts' | 'cjs' | 'esm';\n\n if (fileExtension === '.ts' || fileExtension === '.tsx') {\n format = 'ts';\n } else if (fileExtension === '.cjs' || fileExtension === '.cjsx') {\n format = 'cjs';\n } else {\n format = 'esm';\n }\n\n appLogger('File does not exist, creating it', {\n isVerbose: true,\n });\n const template = await getContentDeclarationFileTemplate(\n dictionaryIdentifierKey,\n format,\n { locale, autoFilled }\n );\n\n await writeFile(filePath, template, 'utf-8');\n }\n\n let sourceCode: string;\n try {\n sourceCode = await readFile(filePath, 'utf-8');\n } catch (error) {\n const err = error as Error;\n appLogger(`Failed to read file: ${filePath}`, {\n level: 'error',\n });\n throw new Error(`Failed to read file ${filePath}: ${err.message}`);\n }\n\n const ast = babelParser.parse(sourceCode, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx'],\n tokens: true,\n });\n\n let dictionaryObjectPath: NodePath<t.ObjectExpression> | null = null;\n let dictionaryIdentifier: string | null = null;\n\n // First look for direct objects with the right key, regardless of variable assignments\n traverse(ast, {\n ObjectExpression(path) {\n if (dictionaryObjectPath) return; // Already found\n\n // Check if this object has a key property with the right value\n const keyProp = path.node.properties.find((prop) => {\n if (!t.isObjectProperty(prop)) return false;\n if (!t.isIdentifier(prop.key) && !t.isStringLiteral(prop.key))\n return false;\n\n const keyName = t.isIdentifier(prop.key)\n ? prop.key.name\n : prop.key.value;\n\n if (keyName !== 'key' || !t.isStringLiteral(prop.value)) return false;\n\n // Unescape the value for comparison\n const propValue = prop.value.value;\n // Compare actual string content, not just raw representation\n return propValue === dictionaryIdentifierKey;\n });\n\n if (keyProp) {\n dictionaryObjectPath = path;\n path.stop();\n }\n },\n });\n\n // If not found directly, look for variable declarations and exports\n if (!dictionaryObjectPath) {\n appLogger(`Looking for variable declarations`, {\n isVerbose: true,\n });\n\n // Collect all variable declarations with objects\n const candidateVars: { id: string; path: NodePath<t.ObjectExpression> }[] =\n [];\n\n traverse(ast, {\n VariableDeclarator(path) {\n const { node } = path;\n if (!t.isIdentifier(node.id)) return;\n\n let objPath: NodePath<t.ObjectExpression> | null = null;\n\n // Direct object assignment\n if (node.init && t.isObjectExpression(node.init)) {\n objPath = path.get('init') as NodePath<t.ObjectExpression>;\n }\n // Object with TS type assertion (satisfies/as)\n else if (\n node.init &&\n (t.isTSAsExpression(node.init) || t.isTSTypeAssertion(node.init)) &&\n t.isObjectExpression(node.init.expression)\n ) {\n objPath = path.get('init.expression') as NodePath<t.ObjectExpression>;\n }\n\n if (objPath) {\n candidateVars.push({ id: node.id.name, path: objPath });\n }\n },\n });\n\n appLogger(`Found ${candidateVars.length} candidate variables`, {\n isVerbose: true,\n });\n\n // Check each candidate for the key property\n for (const { id, path } of candidateVars) {\n const keyProp = path.node.properties.find((prop) => {\n if (!t.isObjectProperty(prop)) return false;\n if (!t.isIdentifier(prop.key) && !t.isStringLiteral(prop.key))\n return false;\n\n const keyName = t.isIdentifier(prop.key)\n ? prop.key.name\n : prop.key.value;\n return (\n keyName === 'key' &&\n t.isStringLiteral(prop.value) &&\n prop.value.value === dictionaryIdentifierKey\n );\n });\n\n if (keyProp) {\n appLogger(`Found match in variable: ${id}`);\n dictionaryObjectPath = path;\n dictionaryIdentifier = id;\n break;\n }\n }\n\n // If still not found, dump all object expressions for debugging\n if (!dictionaryObjectPath) {\n appLogger('Could not find dictionary object. Dumping all objects:', {\n isVerbose: true,\n });\n traverse(ast, {\n ObjectExpression(path) {\n const props = path.node.properties\n .map((prop) => {\n if (!t.isObjectProperty(prop)) return 'non-object-property';\n if (!t.isIdentifier(prop.key) && !t.isStringLiteral(prop.key))\n return 'complex-key';\n\n const keyName = t.isIdentifier(prop.key)\n ? prop.key.name\n : prop.key.value;\n let valueDesc = 'unknown-value';\n\n if (t.isStringLiteral(prop.value)) {\n valueDesc = `\"${prop.value.value}\"`;\n }\n\n return `${keyName}: ${valueDesc}`;\n })\n .join(', ');\n\n appLogger(`Object: { ${props} }`);\n },\n });\n }\n }\n\n if (!dictionaryObjectPath) {\n throw new Error(\n `Could not find dictionary object with key '${dictionaryIdentifierKey}' in ${filePath}`\n );\n }\n\n // Find the 'content' property within the identified dictionary object\n const contentPropertyPath = (\n (dictionaryObjectPath as any).get('properties') as NodePath<\n t.ObjectProperty | t.SpreadElement | t.ObjectMethod\n >[]\n ).find((propPath) => {\n if (!propPath.isObjectProperty()) return false;\n const propNode = propPath.node;\n const keyName = t.isIdentifier(propNode.key)\n ? propNode.key.name\n : t.isStringLiteral(propNode.key)\n ? propNode.key.value\n : null;\n return keyName === 'content';\n });\n\n if (\n !contentPropertyPath ||\n !contentPropertyPath.isObjectProperty() ||\n !(contentPropertyPath.get('value') as NodePath).isObjectExpression()\n ) {\n throw new Error(\n `Could not find 'content' object property, or it's not an object, in dictionary in ${filePath}`\n );\n }\n\n const contentObjectPath = contentPropertyPath.get(\n 'value'\n ) as NodePath<t.ObjectExpression>;\n\n // Apply updates to each entry specified in the JSON\n for (const [entryKeyToUpdate, newEntryData] of Object.entries(\n updatesToApply\n )) {\n const targetPropertyPath = (\n contentObjectPath.get('properties') as NodePath<\n t.ObjectProperty | t.SpreadElement | t.ObjectMethod\n >[]\n ).find((propPath) => {\n if (!propPath.isObjectProperty()) return false;\n const propNode = propPath.node;\n const keyName = t.isIdentifier(propNode.key)\n ? propNode.key.name\n : t.isStringLiteral(propNode.key)\n ? propNode.key.value\n : null;\n return keyName === entryKeyToUpdate;\n });\n\n if (!targetPropertyPath || !targetPropertyPath.isObjectProperty()) {\n appLogger(\n `Key '${entryKeyToUpdate}' not found in content object of ${filePath}. Adding the missing key.`,\n {\n level: 'info',\n isVerbose: true,\n }\n );\n\n // Create a new property for the missing key\n let valueNode: t.Expression;\n\n if ((newEntryData as TypedNode)?.nodeType === NodeType.Translation) {\n // Create a new t() call with the translations\n const translationContent = newEntryData as TranslationContent;\n\n if (\n isPerLocaleDeclarationFile &&\n typeof locale === 'string' &&\n translationContent?.[NodeType.Translation]?.[locale]\n ) {\n // For per-locale files, use the string value directly\n valueNode = t.stringLiteral(\n String(translationContent[NodeType.Translation][locale])\n );\n } else {\n // Otherwise create a t() call with translations object\n const translationsObj = t.objectExpression(\n Object.entries(translationContent?.[NodeType.Translation]).map(\n ([langKey, langValue]) => {\n const keyNode = t.isValidIdentifier(langKey)\n ? t.identifier(langKey)\n : t.stringLiteral(langKey);\n return t.objectProperty(\n keyNode,\n t.stringLiteral(String(langValue))\n );\n }\n )\n );\n valueNode = t.callExpression(t.identifier('t'), [translationsObj]);\n }\n } else if (typeof newEntryData === 'string') {\n // Create a string literal for string values\n valueNode = t.stringLiteral(newEntryData);\n } else {\n // Fallback to empty string if we don't know how to handle this type\n appLogger(\n `Unsupported data type for new key '${entryKeyToUpdate}'. Using empty string.`,\n { level: 'warn', isVerbose: true }\n );\n valueNode = t.stringLiteral('');\n }\n\n // Add the new property to the content object\n const keyNode = t.isValidIdentifier(entryKeyToUpdate)\n ? t.identifier(entryKeyToUpdate)\n : t.stringLiteral(entryKeyToUpdate);\n const newProperty = t.objectProperty(keyNode, valueNode);\n contentObjectPath.node.properties.push(newProperty);\n\n continue;\n }\n\n const callExpressionPath = targetPropertyPath.get('value') as NodePath; // Path to the value, e.g., t(...)\n\n // Handle different types of values\n if (callExpressionPath.isCallExpression()) {\n const calleeNode = (callExpressionPath.node as t.CallExpression).callee;\n const calleeName = t.isIdentifier(calleeNode) ? calleeNode.name : null;\n\n // Handle 't' function calls\n if (\n (newEntryData as TypedNode)?.nodeType === 'translation' &&\n calleeName === 't'\n ) {\n const args = (callExpressionPath.node as t.CallExpression).arguments;\n if (args.length === 0 || !t.isObjectExpression(args[0])) {\n appLogger(\n `'t' call for '${entryKeyToUpdate}' in ${filePath} does not have an object literal as its first argument. Skipping.`,\n {\n level: 'warn',\n isVerbose: true,\n }\n );\n continue;\n }\n\n if (isPerLocaleDeclarationFile && typeof locale === 'string') {\n // For per-locale files, replace t() call with direct string\n const translations = (newEntryData as TranslationContent)?.[\n NodeType.Translation\n ];\n\n if (translations[locale]) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(translations[locale])));\n } else {\n appLogger(\n `Missing translation for locale '${locale}' in '${entryKeyToUpdate}'. Using first available translation.`,\n { level: 'warn', isVerbose: true }\n );\n const firstValue = Object.values(translations)[0];\n if (firstValue) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(firstValue)));\n }\n }\n continue;\n }\n\n const translationsObjectAstNode = args[0] as t.ObjectExpression;\n const processedLangKeysInJsonUpdate = new Set<string>();\n\n // Update existing language properties in the AST node\n translationsObjectAstNode.properties.forEach((prop: any) => {\n if (t.isObjectProperty(prop)) {\n const langKeyNode = prop.key;\n const astLangKeyName = t.isIdentifier(langKeyNode)\n ? langKeyNode.name\n : t.isStringLiteral(langKeyNode)\n ? langKeyNode.value\n : null;\n\n if (\n astLangKeyName &&\n (newEntryData as TranslationContent)?.[\n NodeType.Translation\n ].hasOwnProperty(astLangKeyName)\n ) {\n prop.value = t.stringLiteral(\n String(\n (newEntryData as TranslationContent)?.[\n NodeType.Translation\n ]?.[astLangKeyName]\n )\n );\n processedLangKeysInJsonUpdate.add(astLangKeyName);\n }\n }\n });\n\n // Add new language properties from the JSON update that were not originally in the AST node\n for (const [jsonLangKey, jsonLangValue] of Object.entries(\n (newEntryData as TranslationContent)?.[NodeType.Translation]\n )) {\n if (!processedLangKeysInJsonUpdate.has(jsonLangKey)) {\n const newKeyNode = t.isValidIdentifier(jsonLangKey)\n ? t.identifier(jsonLangKey)\n : t.stringLiteral(jsonLangKey);\n translationsObjectAstNode.properties.push(\n t.objectProperty(\n newKeyNode,\n t.stringLiteral(String(jsonLangValue))\n )\n );\n }\n }\n }\n // Handle other function calls in the future\n else {\n appLogger(\n `Unhandled callee '${calleeName || 'unknown'}' for key '${entryKeyToUpdate}' in ${filePath}.`,\n { level: 'warn', isVerbose: true }\n );\n }\n }\n // Handle direct string literals\n else if (callExpressionPath.isStringLiteral()) {\n // For string literals, directly replace with the new value\n if (typeof newEntryData === 'string') {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(newEntryData));\n } else if ((newEntryData as any)?.[NodeType.Translation]) {\n // Handle translation content (use first available translation)\n const translations = (newEntryData as TranslationContent)[\n NodeType.Translation\n ];\n const firstValue = Object.values(translations)[0];\n if (firstValue) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(firstValue)));\n }\n } else {\n appLogger(\n `Unhandled data structure for string replacement at '${entryKeyToUpdate}' in ${filePath}.`,\n { level: 'warn', isVerbose: true }\n );\n }\n }\n // Handle other value types (objects, arrays, etc.)\n else {\n const valueType = callExpressionPath.node.type;\n appLogger(\n `Updating value of type ${valueType} for '${entryKeyToUpdate}' in ${filePath}`,\n { level: 'info', isVerbose: true }\n );\n\n // For simple values like strings, use direct replacement\n if (typeof newEntryData === 'string') {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(newEntryData));\n }\n // For translation content, use a smart approach\n else if ((newEntryData as any)?.[NodeType.Translation]) {\n // Extract just the value relevant to this file's locale\n const translations = (newEntryData as TranslationContent)[\n NodeType.Translation\n ];\n\n // Try to determine locale from file path (assuming a pattern like .fr.content.ts)\n const localeMatch = filePath.match(/\\.([a-z]{2})\\.content\\.(ts|js)$/i);\n const locale = localeMatch\n ? localeMatch[1]\n : Object.keys(translations)[0];\n\n if (translations[locale]) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(translations[locale])));\n } else {\n // Fallback to first translation\n const firstValue = Object.values(translations)[0];\n if (firstValue) {\n targetPropertyPath\n .get('value')\n .replaceWith(t.stringLiteral(String(firstValue)));\n }\n }\n } else {\n appLogger(\n `Cannot update value of type ${valueType} for '${entryKeyToUpdate}' in ${filePath}. Unsupported data structure.`,\n { level: 'warn', isVerbose: true }\n );\n }\n }\n }\n\n // Generate JavaScript/TypeScript code from the modified AST\n const generatedCode = generator(ast, {\n retainLines: true,\n comments: true,\n jsescOption: {\n minimal: true, // This ensures Unicode characters are not escaped\n },\n }).code;\n\n let finalCode = generatedCode;\n\n finalCode = await formatCode(filePath, finalCode);\n\n // Write the modified code back to the file\n try {\n await writeFile(filePath, finalCode, 'utf-8');\n logger(`Successfully updated ${filePath}`, {\n level: 'info',\n isVerbose: true,\n });\n } catch (error) {\n const err = error as Error;\n logger(`Failed to write updated file: ${filePath}`, {\n level: 'error',\n });\n throw new Error(`Failed to write updated file ${filePath}: ${err.message}`);\n }\n};\n"],"mappings":"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","names":["keyNode","locale"]}
@@ -1 +1 @@
1
- {"version":3,"file":"checkDictionaryChanges.d.ts","sourceRoot":"","sources":["../../src/checkDictionaryChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAWtD,eAAO,MAAM,sBAAsB,sCA0BlC,CAAC"}
1
+ {"version":3,"file":"checkDictionaryChanges.d.ts","sourceRoot":"","sources":["../../src/checkDictionaryChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAmBtD,eAAO,MAAM,sBAAsB,sCA8BlC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type IntlayerConfig } from '@intlayer/config';
1
+ import { GetConfigurationOptions, type IntlayerConfig } from '@intlayer/config';
2
2
  /** @ts-ignore remove error Module '"chokidar"' has no exported member 'ChokidarOptions' */
3
3
  import { type ChokidarOptions } from '../chokidar';
4
4
  export declare const handleAdditionalContentDeclarationFile: (filePath: string, configuration?: IntlayerConfig) => Promise<void>;
@@ -6,6 +6,7 @@ export declare const handleUnlikedContentDeclarationFile: (filePath: string, con
6
6
  export declare const handleContentDeclarationFileChange: (filePath: string, configuration?: IntlayerConfig) => Promise<void>;
7
7
  type WatchOptions = ChokidarOptions & {
8
8
  configuration?: IntlayerConfig;
9
+ configOptions?: GetConfigurationOptions;
9
10
  };
10
11
  export declare const watch: (options?: WatchOptions) => any;
11
12
  export declare const buildAndWatchIntlayer: (options?: WatchOptions) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/chokidar/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAC;AAE1B,2FAA2F;AAC3F,OAAO,EAAE,KAAK,eAAe,EAA0B,MAAM,UAAU,CAAC;AAcxE,eAAO,MAAM,sCAAsC,GACjD,UAAU,MAAM,EAChB,gBAAgB,cAAc,kBAiC/B,CAAC;AAEF,eAAO,MAAM,mCAAmC,GAC9C,UAAU,MAAM,EAChB,gBAAgB,cAAc,kBAgC/B,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAC7C,UAAU,MAAM,EAChB,gBAAgB,cAAc,kBAmC/B,CAAC;AAEF,KAAK,YAAY,GAAG,eAAe,GAAG;IACpC,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC,CAAC;AAGF,eAAO,MAAM,KAAK,GAAI,UAAU,YAAY,QAkD3C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,UAAU,YAAY,kBASjE,CAAC"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/chokidar/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAC;AAE1B,2FAA2F;AAC3F,OAAO,EAAE,KAAK,eAAe,EAA0B,MAAM,UAAU,CAAC;AAcxE,eAAO,MAAM,sCAAsC,GACjD,UAAU,MAAM,EAChB,gBAAgB,cAAc,kBA+B/B,CAAC;AAEF,eAAO,MAAM,mCAAmC,GAC9C,UAAU,MAAM,EAChB,gBAAgB,cAAc,kBA8B/B,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAC7C,UAAU,MAAM,EAChB,gBAAgB,cAAc,kBAiC/B,CAAC;AAEF,KAAK,YAAY,GAAG,eAAe,GAAG;IACpC,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,aAAa,CAAC,EAAE,uBAAuB,CAAC;CACzC,CAAC;AAGF,eAAO,MAAM,KAAK,GAAI,UAAU,YAAY,QA+C3C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,UAAU,YAAY,kBAUjE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetchDistantDictionaries.d.ts","sourceRoot":"","sources":["../../src/fetchDistantDictionaries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,KAAK,+BAA+B,GAAG;IACrC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,+BAA+B,KACvC,OAAO,CAAC,aAAa,EAAE,CA+FzB,CAAC"}
1
+ {"version":3,"file":"fetchDistantDictionaries.d.ts","sourceRoot":"","sources":["../../src/fetchDistantDictionaries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,KAAK,+BAA+B,GAAG;IACrC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,+BAA+B,KACvC,OAAO,CAAC,aAAa,EAAE,CAgGzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"listGitFiles.d.ts","sourceRoot":"","sources":["../../src/listGitFiles.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,WAAW,CAAC;AAe5E,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,0CAKhC,mBAAmB,sBAuDrB,CAAC"}
1
+ {"version":3,"file":"listGitFiles.d.ts","sourceRoot":"","sources":["../../src/listGitFiles.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,WAAW,CAAC;AAgB5E,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,0CAKhC,mBAAmB,sBAuDrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"loadDictionaries.d.ts","sourceRoot":"","sources":["../../../src/loadDictionaries/loadDictionaries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAOjD,eAAO,MAAM,gBAAgB,GAC3B,0BAA0B,MAAM,EAAE,GAAG,MAAM,EAC3C,yDAAkC,EAClC,+BAA+B,KAC9B,OAAO,CAAC,UAAU,EAAE,CAiEtB,CAAC"}
1
+ {"version":3,"file":"loadDictionaries.d.ts","sourceRoot":"","sources":["../../../src/loadDictionaries/loadDictionaries.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAOjD,eAAO,MAAM,gBAAgB,GAC3B,0BAA0B,MAAM,EAAE,GAAG,MAAM,EAC3C,yDAAkC,EAClC,+BAA+B,KAC9B,OAAO,CAAC,UAAU,EAAE,CAkEtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mergeDictionaries.d.ts","sourceRoot":"","sources":["../../src/mergeDictionaries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgCjD,eAAO,MAAM,iBAAiB,GAAI,cAAc,UAAU,EAAE,KAAG,UA0B9D,CAAC"}
1
+ {"version":3,"file":"mergeDictionaries.d.ts","sourceRoot":"","sources":["../../src/mergeDictionaries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAiCjD,eAAO,MAAM,iBAAiB,GAAI,cAAc,UAAU,EAAE,KAAG,UA0B9D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prepareIntlayer.d.ts","sourceRoot":"","sources":["../../src/prepareIntlayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAC;AAY1B,eAAO,MAAM,eAAe,GAC1B,gBAAe,cAAmC,EAClD,+BAA+B,kBAoChC,CAAC"}
1
+ {"version":3,"file":"prepareIntlayer.d.ts","sourceRoot":"","sources":["../../src/prepareIntlayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAC;AAY1B,eAAO,MAAM,eAAe,GAC1B,gBAAe,cAAmC,EAClD,+BAA+B,kBAsChC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * This function generates a list of dictionaries in the main directory
3
3
  */
4
- export declare const createDictionaryEntryPoint: (configuration?: import("@intlayer/config").IntlayerConfig) => void;
4
+ export declare const createDictionaryEntryPoint: (configuration?: import("@intlayer/config").IntlayerConfig, dictionariesKeys?: string[]) => void;
5
5
  //# sourceMappingURL=createDictionaryEntryPoint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createDictionaryEntryPoint.d.ts","sourceRoot":"","sources":["../../../../src/transpiler/dictionary_to_main/createDictionaryEntryPoint.ts"],"names":[],"mappings":"AAgDA;;GAEG;AACH,eAAO,MAAM,0BAA0B,GACrC,yDAAkC,SAgDnC,CAAC"}
1
+ {"version":3,"file":"createDictionaryEntryPoint.d.ts","sourceRoot":"","sources":["../../../../src/transpiler/dictionary_to_main/createDictionaryEntryPoint.ts"],"names":[],"mappings":"AAgDA;;GAEG;AACH,eAAO,MAAM,0BAA0B,GACrC,yDAAkC,EAClC,mBAAmB,MAAM,EAAE,SAsD5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"formatCode.d.ts","sourceRoot":"","sources":["../../../src/writeContentDeclaration/formatCode.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,EAAE,MAAM,MAAM,iBAyC9D,CAAC"}
1
+ {"version":3,"file":"formatCode.d.ts","sourceRoot":"","sources":["../../../src/writeContentDeclaration/formatCode.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,EAAE,MAAM,MAAM,iBA0C9D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"writeJSFile.d.ts","sourceRoot":"","sources":["../../../src/writeContentDeclaration/writeJSFile.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,UAAU,EAIX,MAAM,gBAAgB,CAAC;AAOxB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,UAAU,MAAM,EAChB,YAAY,UAAU,KACrB,OAAO,CAAC,IAAI,CA2fd,CAAC"}
1
+ {"version":3,"file":"writeJSFile.d.ts","sourceRoot":"","sources":["../../../src/writeContentDeclaration/writeJSFile.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,UAAU,EAIX,MAAM,gBAAgB,CAAC;AAOxB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,UAAU,MAAM,EAChB,YAAY,UAAU,KACrB,OAAO,CAAC,IAAI,CA6fd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/chokidar",
3
- "version": "5.5.0-canary.0",
3
+ "version": "5.5.1",
4
4
  "private": false,
5
5
  "description": "Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.",
6
6
  "keywords": [
@@ -68,12 +68,12 @@
68
68
  "fast-glob": "^3.3.3",
69
69
  "p-limit": "^3.1.0",
70
70
  "simple-git": "^3.27.0",
71
- "@intlayer/core": "5.5.0-canary.0",
72
- "@intlayer/dictionaries-entry": "5.5.0-canary.0",
73
- "@intlayer/config": "5.5.0-canary.0",
74
- "@intlayer/api": "5.5.0-canary.0",
75
- "intlayer": "5.5.0-canary.0",
76
- "@intlayer/unmerged-dictionaries-entry": "5.5.0-canary.0"
71
+ "@intlayer/core": "5.5.1",
72
+ "@intlayer/api": "5.5.1",
73
+ "@intlayer/unmerged-dictionaries-entry": "5.5.1",
74
+ "@intlayer/dictionaries-entry": "5.5.1",
75
+ "@intlayer/config": "5.5.1",
76
+ "intlayer": "5.5.1"
77
77
  },
78
78
  "devDependencies": {
79
79
  "@changesets/cli": "2.28.1",
@@ -90,19 +90,19 @@
90
90
  "tsc-alias": "^1.8.11",
91
91
  "tsup": "^8.4.0",
92
92
  "typescript": "^5.8.2",
93
+ "@utils/eslint-config": "1.0.4",
93
94
  "@utils/ts-config": "1.0.4",
94
95
  "@utils/ts-config-types": "1.0.4",
95
96
  "@utils/tsup-config": "1.0.4",
96
- "@intlayer/backend": "5.5.0-canary.0",
97
- "@utils/eslint-config": "1.0.4"
97
+ "@intlayer/backend": "5.5.1"
98
98
  },
99
99
  "peerDependencies": {
100
100
  "fast-glob": "^3.3.3",
101
101
  "react": ">=16.0.0",
102
- "@intlayer/api": "5.5.0-canary.0",
103
- "@intlayer/config": "5.5.0-canary.0",
104
- "intlayer": "5.5.0-canary.0",
105
- "@intlayer/core": "5.5.0-canary.0"
102
+ "@intlayer/core": "5.5.1",
103
+ "@intlayer/api": "5.5.1",
104
+ "@intlayer/config": "5.5.1",
105
+ "intlayer": "5.5.1"
106
106
  },
107
107
  "engines": {
108
108
  "node": ">=14.18"