{"version":3,"sources":["../../../src/chokidar/watcher.ts"],"sourcesContent":["import { basename, relative } from 'path';\nimport {\n  type IntlayerConfig,\n  appLogger,\n  getConfiguration,\n} from '@intlayer/config';\n/** @ts-ignore remove error Module '\"chokidar\"' has no exported member 'ChokidarOptions' */\nimport { type ChokidarOptions, watch as chokidarWatch } from 'chokidar';\nimport { getBuiltDictionariesPath } from '../getBuiltDictionariesPath';\nimport { loadLocalDictionaries } from '../loadDictionaries/loadLocalDictionaries';\nimport { buildDictionary } from '../transpiler/declaration_file_to_dictionary/index';\nimport { createDictionaryEntryPoint } from '../transpiler/dictionary_to_main/createDictionaryEntryPoint';\nimport {\n  createTypes,\n  createModuleAugmentation,\n} from '../transpiler/dictionary_to_type/index';\nimport { prepareIntlayer } from '../prepareIntlayer';\nimport { listDictionaries } from '../listDictionariesPath';\n\nconst recentlyAddedFiles = new Set<string>();\n\nexport const handleAdditionalContentDeclarationFile = async (\n  filePath: string,\n  configuration?: IntlayerConfig\n) => {\n  const { content } =\n    configuration ??\n    getConfiguration({\n      verbose: true,\n    });\n\n  // Process the file with the functionToRun\n  appLogger(\n    `Additional file detected: ${relative(content.baseDir, filePath)}`,\n    {\n      isVerbose: true,\n    }\n  );\n\n  const localeDictionaries = await loadLocalDictionaries(filePath);\n\n  const dictionariesPaths = await buildDictionary(localeDictionaries);\n\n  createTypes(dictionariesPaths);\n\n  createDictionaryEntryPoint();\n\n  appLogger('Dictionaries built', {\n    isVerbose: true,\n  });\n\n  createModuleAugmentation();\n\n  appLogger('Module augmentation built', {\n    isVerbose: true,\n  });\n};\n\nexport const handleUnlikedContentDeclarationFile = async (\n  filePath: string,\n  configuration?: IntlayerConfig\n) => {\n  const { content } =\n    configuration ??\n    getConfiguration({\n      verbose: true,\n    });\n\n  // Process the file with the functionToRun\n  appLogger(`Unlinked detected: ${relative(content.baseDir, filePath)}`, {\n    isVerbose: true,\n  });\n\n  const files: string[] = listDictionaries(configuration);\n\n  const localeDictionaries = await loadLocalDictionaries(files);\n\n  const dictionariesPaths = await buildDictionary(localeDictionaries);\n\n  createTypes(dictionariesPaths);\n\n  createDictionaryEntryPoint();\n\n  appLogger('Dictionaries rebuilt', {\n    isVerbose: true,\n  });\n\n  createModuleAugmentation();\n\n  appLogger('Module augmentation built', {\n    isVerbose: true,\n  });\n};\n\nexport const handleContentDeclarationFileChange = async (\n  filePath: string,\n  configuration?: IntlayerConfig\n) => {\n  const { content } =\n    configuration ??\n    getConfiguration({\n      verbose: true,\n    });\n\n  // Process the file with the functionToRun\n  appLogger(`Change detected: ${relative(content.baseDir, filePath)}`, {\n    isVerbose: true,\n  });\n\n  const localeDictionaries = await loadLocalDictionaries(filePath);\n\n  const updatedDictionariesPaths = await buildDictionary(localeDictionaries);\n  const allDictionariesPaths: string[] = getBuiltDictionariesPath();\n\n  createTypes(updatedDictionariesPaths);\n  appLogger('TypeScript types built', {\n    isVerbose: true,\n  });\n\n  if (\n    updatedDictionariesPaths.some(\n      (updatedDictionaryPath) =>\n        !allDictionariesPaths.includes(updatedDictionaryPath)\n    )\n  ) {\n    createDictionaryEntryPoint();\n\n    appLogger('Dictionary list built', {\n      isVerbose: true,\n    });\n  }\n};\n\ntype WatchOptions = ChokidarOptions & {\n  configuration?: IntlayerConfig;\n};\n\n// Initialize chokidar watcher (non-persistent)\nexport const watch = (options?: WatchOptions) => {\n  const configuration =\n    options?.configuration ??\n    getConfiguration({\n      verbose: true,\n    });\n\n  const { watch: isWatchMode, watchedFilesPatternWithPath } =\n    configuration.content;\n\n  /** @ts-ignore remove error Expected 0-1 arguments, but got 2. */\n  return chokidarWatch(watchedFilesPatternWithPath, {\n    persistent: isWatchMode, // Make the watcher persistent\n    ignoreInitial: true, // Process existing files\n    ...options,\n  })\n    .on('add', async (filePath) => {\n      const fileName = basename(filePath);\n      recentlyAddedFiles.add(fileName);\n\n      await handleAdditionalContentDeclarationFile(filePath, configuration);\n\n      setTimeout(() => recentlyAddedFiles.delete(fileName), 1000); // Allow time for unlink to trigger if it's a move\n    })\n    .on(\n      'change',\n      async (filePath) =>\n        await handleContentDeclarationFileChange(filePath, configuration)\n    )\n    .on('unlink', async (filePath) => {\n      setTimeout(async () => {\n        const fileName = basename(filePath);\n\n        if (recentlyAddedFiles.has(fileName)) {\n          // The file was moved, so ignore unlink\n          return;\n        }\n\n        await handleUnlikedContentDeclarationFile(filePath, configuration);\n      }, 300); // Allow time for unlink to trigger if it's a move\n    })\n    .on('error', async (error) => {\n      appLogger('Watcher error: ' + error, {\n        level: 'error',\n      });\n\n      appLogger('Restarting watcher');\n\n      await prepareIntlayer(configuration);\n    });\n};\n\nexport const buildAndWatchIntlayer = async (options?: WatchOptions) => {\n  const configuration = options?.configuration ?? getConfiguration();\n\n  await prepareIntlayer(configuration);\n\n  if (configuration.content.watch || options.persistent) {\n    // Start watching (assuming watch is also async)\n    watch({ ...options, configuration });\n  }\n};\n"],"mappings":"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","names":["chokidarWatch"]}