{"version":3,"file":"router-generator-plugin.cjs","sources":["../../../src/core/router-generator-plugin.ts"],"sourcesContent":["import { isAbsolute, join, normalize, resolve } from 'node:path'\nimport { generator, resolveConfigPath } from '@tanstack/router-generator'\n\nimport { getConfig } from './config'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\n\nlet lock = false\nconst checkLock = () => lock\nconst setLock = (bool: boolean) => {\n  lock = bool\n}\n\nconst PLUGIN_NAME = 'unplugin:router-generator'\n\nexport const unpluginRouterGeneratorFactory: UnpluginFactory<\n  Partial<Config> | undefined\n> = (options = {}) => {\n  let ROOT: string = process.cwd()\n  let userConfig = options as Config\n\n  const getRoutesDirectoryPath = () => {\n    return isAbsolute(userConfig.routesDirectory)\n      ? userConfig.routesDirectory\n      : join(ROOT, userConfig.routesDirectory)\n  }\n\n  const generate = async () => {\n    if (checkLock()) {\n      return\n    }\n\n    setLock(true)\n\n    try {\n      await generator(userConfig, process.cwd())\n    } catch (err) {\n      console.error(err)\n      console.info()\n    } finally {\n      setLock(false)\n    }\n  }\n\n  const handleFile = async (\n    file: string,\n    event: 'create' | 'update' | 'delete',\n  ) => {\n    const filePath = normalize(file)\n\n    if (filePath === resolveConfigPath({ configDirectory: ROOT })) {\n      userConfig = getConfig(options, ROOT)\n      return\n    }\n\n    if (\n      event === 'update' &&\n      filePath === resolve(userConfig.generatedRouteTree)\n    ) {\n      // skip generating routes if the generated route tree is updated\n      return\n    }\n\n    const routesDirectoryPath = getRoutesDirectoryPath()\n    if (filePath.startsWith(routesDirectoryPath)) {\n      await generate()\n    }\n  }\n\n  const run: (cb: () => Promise<void> | void) => Promise<void> = async (cb) => {\n    if (userConfig.enableRouteGeneration ?? true) {\n      await cb()\n    }\n  }\n\n  return {\n    name: 'router-generator-plugin',\n    async watchChange(id, { event }) {\n      await run(async () => {\n        await handleFile(id, event)\n      })\n    },\n    vite: {\n      async configResolved(config) {\n        ROOT = config.root\n        userConfig = getConfig(options, ROOT)\n\n        await run(generate)\n      },\n    },\n    async rspack(compiler) {\n      userConfig = getConfig(options, ROOT)\n\n      if (compiler.options.mode === 'production') {\n        compiler.hooks.beforeRun.tapPromise(PLUGIN_NAME, async () => {\n          await run(generate)\n        })\n      } else {\n        // rspack watcher doesn't register newly created files\n        const routesDirectoryPath = getRoutesDirectoryPath()\n        const chokidar = await import('chokidar')\n        chokidar\n          .watch(routesDirectoryPath, { ignoreInitial: true })\n          .on('add', async () => {\n            await run(generate)\n          })\n\n        let generated = false\n        compiler.hooks.watchRun.tapPromise(PLUGIN_NAME, async () => {\n          if (!generated) {\n            generated = true\n            return run(generate)\n          }\n        })\n      }\n    },\n    async webpack(compiler) {\n      userConfig = getConfig(options, ROOT)\n\n      if (compiler.options.mode === 'production') {\n        compiler.hooks.beforeRun.tapPromise(PLUGIN_NAME, async () => {\n          await run(generate)\n        })\n      } else {\n        // webpack watcher doesn't register newly created files\n        const routesDirectoryPath = getRoutesDirectoryPath()\n        const chokidar = await import('chokidar')\n        chokidar\n          .watch(routesDirectoryPath, { ignoreInitial: true })\n          .on('add', async () => {\n            await run(generate)\n          })\n\n        let generated = false\n        compiler.hooks.watchRun.tapPromise(PLUGIN_NAME, async () => {\n          if (!generated) {\n            generated = true\n            return run(generate)\n          }\n        })\n      }\n\n      if (compiler.options.mode === 'production') {\n        compiler.hooks.done.tap(PLUGIN_NAME, (stats) => {\n          console.info('✅ ' + PLUGIN_NAME + ': route-tree generation done')\n          setTimeout(() => {\n            process.exit(0)\n          })\n        })\n      }\n    },\n  }\n}\n"],"names":["isAbsolute","join","generator","normalize","resolveConfigPath","getConfig","resolve","config"],"mappings":"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"}