{"version":3,"file":"router-generator-plugin.cjs","names":[],"sources":["../../../src/core/router-generator-plugin.ts"],"sourcesContent":["import { isAbsolute, join, normalize } from 'node:path'\nimport { Generator, resolveConfigPath } from '@tanstack/router-generator'\nimport { getConfig } from './config'\nimport { createRouterPluginContext } from './router-plugin-context'\n\nimport type { GeneratorEvent } from '@tanstack/router-generator'\nimport type { FSWatcher } from 'chokidar'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\nimport type { RouterPluginContext } from './router-plugin-context'\n\nconst PLUGIN_NAME = 'unplugin:router-generator'\n\nexport function createRouterGeneratorPlugin(\n  options: Partial<Config | (() => Config)> | undefined = {},\n  routerPluginContext: RouterPluginContext,\n): ReturnType<UnpluginFactory<Partial<Config | (() => Config)> | undefined>> {\n  let ROOT: string = process.cwd()\n  let userConfig: Config\n  let generator: Generator\n\n  const routeGenerationDisabled = () =>\n    userConfig.enableRouteGeneration === false\n  const getRoutesDirectoryPath = () => {\n    return isAbsolute(userConfig.routesDirectory)\n      ? userConfig.routesDirectory\n      : join(ROOT, userConfig.routesDirectory)\n  }\n\n  const initConfigAndGenerator = (opts?: { root?: string }) => {\n    if (opts?.root) {\n      ROOT = opts.root\n    }\n    if (typeof options === 'function') {\n      userConfig = options()\n    } else {\n      userConfig = getConfig(options, ROOT)\n    }\n    generator = new Generator({\n      config: userConfig,\n      root: ROOT,\n    })\n  }\n\n  const generate = async (opts?: {\n    file: string\n    event: 'create' | 'update' | 'delete'\n  }) => {\n    if (routeGenerationDisabled()) {\n      return\n    }\n    let generatorEvent: GeneratorEvent | undefined = undefined\n    if (opts) {\n      const filePath = normalize(opts.file)\n      if (filePath === resolveConfigPath({ configDirectory: ROOT })) {\n        initConfigAndGenerator()\n        return\n      }\n      generatorEvent = { path: filePath, type: opts.event }\n    }\n\n    try {\n      await generator.run(generatorEvent)\n      routerPluginContext.routesByFile = generator.getRoutesByFileMap()\n    } catch (e) {\n      console.error(e)\n    }\n  }\n\n  return {\n    name: 'tanstack:router-generator',\n    enforce: 'pre',\n    async watchChange(id, { event }) {\n      await generate({\n        file: id,\n        event,\n      })\n    },\n    vite: {\n      async configResolved(config) {\n        initConfigAndGenerator({ root: config.root })\n        await generate()\n      },\n    },\n    rspack(compiler) {\n      initConfigAndGenerator()\n\n      let handle: FSWatcher | null = null\n\n      compiler.hooks.beforeRun.tapPromise(PLUGIN_NAME, () => generate())\n\n      compiler.hooks.watchRun.tapPromise(PLUGIN_NAME, async () => {\n        if (handle) {\n          return\n        }\n\n        // rspack watcher doesn't register newly created files\n        const routesDirectoryPath = getRoutesDirectoryPath()\n        const chokidar = await import('chokidar')\n        handle = chokidar\n          .watch(routesDirectoryPath, { ignoreInitial: true })\n          .on('add', (file) => generate({ file, event: 'create' }))\n\n        await generate()\n      })\n\n      compiler.hooks.watchClose.tap(PLUGIN_NAME, async () => {\n        if (handle) {\n          await handle.close()\n        }\n      })\n    },\n    webpack(compiler) {\n      initConfigAndGenerator()\n\n      let handle: FSWatcher | null = null\n\n      compiler.hooks.beforeRun.tapPromise(PLUGIN_NAME, () => generate())\n\n      compiler.hooks.watchRun.tapPromise(PLUGIN_NAME, async () => {\n        if (handle) {\n          return\n        }\n\n        // webpack watcher doesn't register newly created files\n        const routesDirectoryPath = getRoutesDirectoryPath()\n        const chokidar = await import('chokidar')\n        handle = chokidar\n          .watch(routesDirectoryPath, { ignoreInitial: true })\n          .on('add', (file) => generate({ file, event: 'create' }))\n\n        await generate()\n      })\n\n      compiler.hooks.watchClose.tap(PLUGIN_NAME, async () => {\n        if (handle) {\n          await handle.close()\n        }\n      })\n\n      compiler.hooks.done.tap(PLUGIN_NAME, () => {\n        console.info('✅ ' + PLUGIN_NAME + ': route-tree generation done')\n      })\n    },\n    esbuild: {\n      config() {\n        initConfigAndGenerator()\n      },\n    },\n  }\n}\n\nexport const unpluginRouterGeneratorFactory: UnpluginFactory<\n  Partial<Config | (() => Config)> | undefined\n> = (options = {}) => {\n  return createRouterGeneratorPlugin(options, createRouterPluginContext())\n}\n"],"mappings":";;;;;AAWA,IAAM,cAAc;AAEpB,SAAgB,4BACd,UAAwD,CAAC,GACzD,qBAC2E;CAC3E,IAAI,OAAe,QAAQ,IAAI;CAC/B,IAAI;CACJ,IAAI;CAEJ,MAAM,gCACJ,WAAW,0BAA0B;CACvC,MAAM,+BAA+B;EACnC,QAAA,GAAA,UAAA,YAAkB,WAAW,eAAe,IACxC,WAAW,mBAAA,GAAA,UAAA,MACN,MAAM,WAAW,eAAe;CAC3C;CAEA,MAAM,0BAA0B,SAA6B;EAC3D,IAAI,MAAM,MACR,OAAO,KAAK;EAEd,IAAI,OAAO,YAAY,YACrB,aAAa,QAAQ;OAErB,aAAa,eAAA,UAAU,SAAS,IAAI;EAEtC,YAAY,IAAI,2BAAA,UAAU;GACxB,QAAQ;GACR,MAAM;EACR,CAAC;CACH;CAEA,MAAM,WAAW,OAAO,SAGlB;EACJ,IAAI,wBAAwB,GAC1B;EAEF,IAAI,iBAA6C,KAAA;EACjD,IAAI,MAAM;GACR,MAAM,YAAA,GAAA,UAAA,WAAqB,KAAK,IAAI;GACpC,IAAI,cAAA,GAAA,2BAAA,mBAA+B,EAAE,iBAAiB,KAAK,CAAC,GAAG;IAC7D,uBAAuB;IACvB;GACF;GACA,iBAAiB;IAAE,MAAM;IAAU,MAAM,KAAK;GAAM;EACtD;EAEA,IAAI;GACF,MAAM,UAAU,IAAI,cAAc;GAClC,oBAAoB,eAAe,UAAU,mBAAmB;EAClE,SAAS,GAAG;GACV,QAAQ,MAAM,CAAC;EACjB;CACF;CAEA,OAAO;EACL,MAAM;EACN,SAAS;EACT,MAAM,YAAY,IAAI,EAAE,SAAS;GAC/B,MAAM,SAAS;IACb,MAAM;IACN;GACF,CAAC;EACH;EACA,MAAM,EACJ,MAAM,eAAe,QAAQ;GAC3B,uBAAuB,EAAE,MAAM,OAAO,KAAK,CAAC;GAC5C,MAAM,SAAS;EACjB,EACF;EACA,OAAO,UAAU;GACf,uBAAuB;GAEvB,IAAI,SAA2B;GAE/B,SAAS,MAAM,UAAU,WAAW,mBAAmB,SAAS,CAAC;GAEjE,SAAS,MAAM,SAAS,WAAW,aAAa,YAAY;IAC1D,IAAI,QACF;IAIF,MAAM,sBAAsB,uBAAuB;IAEnD,UAAS,MADc,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,KAAK,CAAC,EAClD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;IAAS,CAAC,CAAC;IAE1D,MAAM,SAAS;GACjB,CAAC;GAED,SAAS,MAAM,WAAW,IAAI,aAAa,YAAY;IACrD,IAAI,QACF,MAAM,OAAO,MAAM;GAEvB,CAAC;EACH;EACA,QAAQ,UAAU;GAChB,uBAAuB;GAEvB,IAAI,SAA2B;GAE/B,SAAS,MAAM,UAAU,WAAW,mBAAmB,SAAS,CAAC;GAEjE,SAAS,MAAM,SAAS,WAAW,aAAa,YAAY;IAC1D,IAAI,QACF;IAIF,MAAM,sBAAsB,uBAAuB;IAEnD,UAAS,MADc,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,KAAK,CAAC,EAClD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;IAAS,CAAC,CAAC;IAE1D,MAAM,SAAS;GACjB,CAAC;GAED,SAAS,MAAM,WAAW,IAAI,aAAa,YAAY;IACrD,IAAI,QACF,MAAM,OAAO,MAAM;GAEvB,CAAC;GAED,SAAS,MAAM,KAAK,IAAI,mBAAmB;IACzC,QAAQ,KAAK,yDAAmD;GAClE,CAAC;EACH;EACA,SAAS,EACP,SAAS;GACP,uBAAuB;EACzB,EACF;CACF;AACF;AAEA,IAAa,kCAER,UAAU,CAAC,MAAM;CACpB,OAAO,4BAA4B,SAAS,8BAAA,0BAA0B,CAAC;AACzE"}