@tanstack/router-plugin 1.124.2 → 1.125.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 (40) hide show
  1. package/dist/cjs/core/code-splitter/compilers.cjs +43 -21
  2. package/dist/cjs/core/code-splitter/compilers.cjs.map +1 -1
  3. package/dist/cjs/core/code-splitter/compilers.d.cts +3 -2
  4. package/dist/cjs/core/config.cjs +11 -1
  5. package/dist/cjs/core/config.cjs.map +1 -1
  6. package/dist/cjs/core/config.d.cts +45 -0
  7. package/dist/cjs/core/router-code-splitter-plugin.cjs +20 -4
  8. package/dist/cjs/core/router-code-splitter-plugin.cjs.map +1 -1
  9. package/dist/cjs/core/router-generator-plugin.cjs +6 -3
  10. package/dist/cjs/core/router-generator-plugin.cjs.map +1 -1
  11. package/dist/cjs/core/router-hmr-plugin.cjs +25 -2
  12. package/dist/cjs/core/router-hmr-plugin.cjs.map +1 -1
  13. package/dist/cjs/core/router-hmr-plugin.d.cts +1 -6
  14. package/dist/cjs/esbuild.d.cts +20 -0
  15. package/dist/cjs/rspack.d.cts +20 -0
  16. package/dist/cjs/vite.d.cts +25 -0
  17. package/dist/cjs/webpack.d.cts +20 -0
  18. package/dist/esm/core/code-splitter/compilers.d.ts +3 -2
  19. package/dist/esm/core/code-splitter/compilers.js +43 -21
  20. package/dist/esm/core/code-splitter/compilers.js.map +1 -1
  21. package/dist/esm/core/config.d.ts +45 -0
  22. package/dist/esm/core/config.js +11 -1
  23. package/dist/esm/core/config.js.map +1 -1
  24. package/dist/esm/core/router-code-splitter-plugin.js +20 -4
  25. package/dist/esm/core/router-code-splitter-plugin.js.map +1 -1
  26. package/dist/esm/core/router-generator-plugin.js +6 -3
  27. package/dist/esm/core/router-generator-plugin.js.map +1 -1
  28. package/dist/esm/core/router-hmr-plugin.d.ts +1 -6
  29. package/dist/esm/core/router-hmr-plugin.js +25 -2
  30. package/dist/esm/core/router-hmr-plugin.js.map +1 -1
  31. package/dist/esm/esbuild.d.ts +20 -0
  32. package/dist/esm/rspack.d.ts +20 -0
  33. package/dist/esm/vite.d.ts +25 -0
  34. package/dist/esm/webpack.d.ts +20 -0
  35. package/package.json +5 -5
  36. package/src/core/code-splitter/compilers.ts +52 -35
  37. package/src/core/config.ts +25 -0
  38. package/src/core/router-code-splitter-plugin.ts +20 -3
  39. package/src/core/router-generator-plugin.ts +6 -7
  40. package/src/core/router-hmr-plugin.ts +27 -3
@@ -1 +1 @@
1
- {"version":3,"file":"router-code-splitter-plugin.cjs","sources":["../../../src/core/router-code-splitter-plugin.ts"],"sourcesContent":["/**\n * It is important to familiarize yourself with how the code-splitting works in this plugin.\n * https://github.com/TanStack/router/pull/3355\n */\n\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\nimport { getConfig, splitGroupingsSchema } from './config'\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug } from './utils'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\nimport type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator'\nimport type { Config } from './config'\nimport type {\n UnpluginContextMeta,\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\ntype BannedBeforeExternalPlugin = {\n identifier: string\n pkg: string\n usage: string\n frameworks: Array<UnpluginContextMeta['framework']>\n}\n\nconst bannedBeforeExternalPlugins: Array<BannedBeforeExternalPlugin> = [\n {\n identifier: '@react-refresh',\n pkg: '@vitejs/plugin-react',\n usage: 'viteReact()',\n frameworks: ['vite'],\n },\n]\n\nclass FoundPluginInBeforeCode extends Error {\n constructor(\n externalPlugin: BannedBeforeExternalPlugin,\n pluginFramework: string,\n ) {\n super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin/${pluginFramework}'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again: \ne.g.\nplugins: [\n tanstackRouter(), // Place this before ${externalPlugin.usage}\n ${externalPlugin.usage},\n]\n`)\n }\n}\n\nconst PLUGIN_NAME = 'unplugin:router-code-splitter'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, { framework }) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n const getGlobalCodeSplitGroupings = () => {\n return (\n userConfig.codeSplittingOptions?.defaultBehavior ||\n defaultCodeSplitGroupings\n )\n }\n const getShouldSplitFn = () => {\n return userConfig.codeSplittingOptions?.splitBehavior\n }\n\n const handleCompilingReferenceFile = (\n code: string,\n id: string,\n generatorNodeInfo: GetRoutesByFileMapResultValue,\n ): UnpluginTransformResult => {\n if (debug) console.info('Compiling Route: ', id)\n\n const fromCode = detectCodeSplitGroupingsFromRoute({\n code,\n })\n\n if (fromCode.groupings) {\n const res = splitGroupingsSchema.safeParse(fromCode.groupings)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const userShouldSplitFn = getShouldSplitFn()\n\n const pluginSplitBehavior = userShouldSplitFn?.({\n routeId: generatorNodeInfo.routePath,\n }) as CodeSplitGroupings | undefined\n\n if (pluginSplitBehavior) {\n const res = splitGroupingsSchema.safeParse(pluginSplitBehavior)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings returned when using \\`splitBehavior\\` for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const splitGroupings: CodeSplitGroupings =\n fromCode.groupings || pluginSplitBehavior || getGlobalCodeSplitGroupings()\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n runtimeEnv: isProduction ? 'prod' : 'dev',\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n })\n\n if (debug) {\n logDiff(code, compiledReferenceRoute.code)\n console.log('Output:\\n', compiledReferenceRoute.code + '\\n\\n')\n }\n\n return compiledReferenceRoute\n }\n\n const handleCompilingVirtualFile = (\n code: string,\n id: string,\n ): UnpluginTransformResult => {\n if (debug) console.info('Splitting Route: ', id)\n\n const [_, ...pathnameParts] = id.split('?')\n\n const searchParams = new URLSearchParams(pathnameParts.join('?'))\n const splitValue = searchParams.get(tsrSplit)\n\n if (!splitValue) {\n throw new Error(\n `The split value for the virtual route \"${id}\" was not found.`,\n )\n }\n\n const rawGrouping = decodeIdentifier(splitValue)\n const grouping = [...new Set(rawGrouping)].filter((p) =>\n splitRouteIdentNodes.includes(p as any),\n ) as Array<SplitRouteIdentNodes>\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n })\n\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n\n return result\n }\n\n return [\n {\n name: 'tanstack-router:code-splitter:compile-reference-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: {\n exclude: tsrSplit,\n // this is necessary for webpack / rspack to avoid matching .html files\n include: /\\.(m|c)?(j|t)sx?$/,\n },\n code: 'createFileRoute(',\n },\n handler(code, id) {\n const generatorFileInfo = globalThis.TSR_ROUTES_BY_ID_MAP?.get(id)\n if (generatorFileInfo && code.includes('createFileRoute(')) {\n for (const externalPlugin of bannedBeforeExternalPlugins) {\n if (!externalPlugin.frameworks.includes(framework)) {\n continue\n }\n\n if (code.includes(externalPlugin.identifier)) {\n throw new FoundPluginInBeforeCode(externalPlugin, framework)\n }\n }\n\n return handleCompilingReferenceFile(code, id, generatorFileInfo)\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n },\n },\n\n rspack() {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n\n webpack(compiler) {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n\n if (compiler.options.mode === 'production') {\n compiler.hooks.done.tap(PLUGIN_NAME, () => {\n console.info('✅ ' + PLUGIN_NAME + ': code-splitting done!')\n setTimeout(() => {\n process.exit(0)\n })\n })\n }\n },\n },\n {\n name: 'tanstack-router:code-splitter:compile-virtual-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: /tsr-split/,\n },\n handler(code, id) {\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n return handleCompilingVirtualFile(code, id)\n },\n },\n },\n ]\n}\n"],"names":["defaultCodeSplitGroupings","debug","detectCodeSplitGroupingsFromRoute","splitGroupingsSchema","compileCodeSplitReferenceRoute","logDiff","tsrSplit","decodeIdentifier","splitRouteIdentNodes","compileCodeSplitVirtualRoute","config","getConfig","pathToFileURL","fileURLToPath"],"mappings":"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"}
1
+ {"version":3,"file":"router-code-splitter-plugin.cjs","sources":["../../../src/core/router-code-splitter-plugin.ts"],"sourcesContent":["/**\n * It is important to familiarize yourself with how the code-splitting works in this plugin.\n * https://github.com/TanStack/router/pull/3355\n */\n\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\nimport { getConfig, splitGroupingsSchema } from './config'\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug } from './utils'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\nimport type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator'\nimport type { Config } from './config'\nimport type {\n UnpluginContextMeta,\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\ntype BannedBeforeExternalPlugin = {\n identifier: string\n pkg: string\n usage: string\n frameworks: Array<UnpluginContextMeta['framework']>\n}\n\nconst bannedBeforeExternalPlugins: Array<BannedBeforeExternalPlugin> = [\n {\n identifier: '@react-refresh',\n pkg: '@vitejs/plugin-react',\n usage: 'viteReact()',\n frameworks: ['vite'],\n },\n]\n\nclass FoundPluginInBeforeCode extends Error {\n constructor(\n externalPlugin: BannedBeforeExternalPlugin,\n pluginFramework: string,\n ) {\n super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin/${pluginFramework}'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again: \ne.g.\nplugins: [\n tanstackRouter(), // Place this before ${externalPlugin.usage}\n ${externalPlugin.usage},\n]\n`)\n }\n}\n\nconst PLUGIN_NAME = 'unplugin:router-code-splitter'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, { framework }) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n const getGlobalCodeSplitGroupings = () => {\n return (\n userConfig.codeSplittingOptions?.defaultBehavior ||\n defaultCodeSplitGroupings\n )\n }\n const getShouldSplitFn = () => {\n return userConfig.codeSplittingOptions?.splitBehavior\n }\n\n const handleCompilingReferenceFile = (\n code: string,\n id: string,\n generatorNodeInfo: GetRoutesByFileMapResultValue,\n ): UnpluginTransformResult => {\n if (debug) console.info('Compiling Route: ', id)\n\n const fromCode = detectCodeSplitGroupingsFromRoute({\n code,\n })\n\n if (fromCode.groupings) {\n const res = splitGroupingsSchema.safeParse(fromCode.groupings)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const userShouldSplitFn = getShouldSplitFn()\n\n const pluginSplitBehavior = userShouldSplitFn?.({\n routeId: generatorNodeInfo.routePath,\n }) as CodeSplitGroupings | undefined\n\n if (pluginSplitBehavior) {\n const res = splitGroupingsSchema.safeParse(pluginSplitBehavior)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings returned when using \\`splitBehavior\\` for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const splitGroupings: CodeSplitGroupings =\n fromCode.groupings || pluginSplitBehavior || getGlobalCodeSplitGroupings()\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n deleteNodes: new Set(userConfig.codeSplittingOptions?.deleteNodes),\n addHmr: options.codeSplittingOptions?.addHmr && !isProduction,\n })\n\n if (debug) {\n logDiff(code, compiledReferenceRoute.code)\n console.log('Output:\\n', compiledReferenceRoute.code + '\\n\\n')\n }\n\n return compiledReferenceRoute\n }\n\n const handleCompilingVirtualFile = (\n code: string,\n id: string,\n ): UnpluginTransformResult => {\n if (debug) console.info('Splitting Route: ', id)\n\n const [_, ...pathnameParts] = id.split('?')\n\n const searchParams = new URLSearchParams(pathnameParts.join('?'))\n const splitValue = searchParams.get(tsrSplit)\n\n if (!splitValue) {\n throw new Error(\n `The split value for the virtual route \"${id}\" was not found.`,\n )\n }\n\n const rawGrouping = decodeIdentifier(splitValue)\n const grouping = [...new Set(rawGrouping)].filter((p) =>\n splitRouteIdentNodes.includes(p as any),\n ) as Array<SplitRouteIdentNodes>\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n })\n\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n\n return result\n }\n\n const includedCode = [\n 'createFileRoute(',\n 'createRootRoute(',\n 'createRootRouteWithContext(',\n ]\n return [\n {\n name: 'tanstack-router:code-splitter:compile-reference-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: {\n exclude: tsrSplit,\n // this is necessary for webpack / rspack to avoid matching .html files\n include: /\\.(m|c)?(j|t)sx?$/,\n },\n code: {\n include: includedCode,\n },\n },\n handler(code, id) {\n const generatorFileInfo = globalThis.TSR_ROUTES_BY_ID_MAP?.get(id)\n if (\n generatorFileInfo &&\n includedCode.some((included) => code.includes(included))\n ) {\n for (const externalPlugin of bannedBeforeExternalPlugins) {\n if (!externalPlugin.frameworks.includes(framework)) {\n continue\n }\n\n if (code.includes(externalPlugin.identifier)) {\n throw new FoundPluginInBeforeCode(externalPlugin, framework)\n }\n }\n\n return handleCompilingReferenceFile(code, id, generatorFileInfo)\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n },\n applyToEnvironment(environment) {\n if (userConfig.plugin?.vite?.environmentName) {\n return userConfig.plugin.vite.environmentName === environment.name\n }\n return true\n },\n },\n\n rspack() {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n\n webpack(compiler) {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n\n if (compiler.options.mode === 'production') {\n compiler.hooks.done.tap(PLUGIN_NAME, () => {\n console.info('✅ ' + PLUGIN_NAME + ': code-splitting done!')\n setTimeout(() => {\n process.exit(0)\n })\n })\n }\n },\n },\n {\n name: 'tanstack-router:code-splitter:compile-virtual-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: /tsr-split/,\n },\n handler(code, id) {\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n return handleCompilingVirtualFile(code, id)\n },\n },\n },\n ]\n}\n"],"names":["defaultCodeSplitGroupings","debug","detectCodeSplitGroupingsFromRoute","splitGroupingsSchema","compileCodeSplitReferenceRoute","logDiff","tsrSplit","decodeIdentifier","splitRouteIdentNodes","compileCodeSplitVirtualRoute","config","getConfig","pathToFileURL","fileURLToPath"],"mappings":"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"}
@@ -77,11 +77,14 @@ const unpluginRouterGeneratorFactory = (options = {}) => {
77
77
  configResolved() {
78
78
  initConfigAndGenerator();
79
79
  },
80
- async buildStart() {
80
+ applyToEnvironment(environment) {
81
81
  var _a, _b;
82
- if (((_b = (_a = this.environment) == null ? void 0 : _a.config) == null ? void 0 : _b.consumer) === "server") {
83
- return;
82
+ if ((_b = (_a = userConfig.plugin) == null ? void 0 : _a.vite) == null ? void 0 : _b.environmentName) {
83
+ return userConfig.plugin.vite.environmentName === environment.name;
84
84
  }
85
+ return true;
86
+ },
87
+ async buildStart() {
85
88
  await generate();
86
89
  },
87
90
  sharedDuringBuild: true
@@ -1 +1 @@
1
- {"version":3,"file":"router-generator-plugin.cjs","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'\n\nimport type { GeneratorEvent } from '@tanstack/router-generator'\nimport type { FSWatcher } from 'chokidar'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\n\nconst PLUGIN_NAME = 'unplugin:router-generator'\n\nexport const unpluginRouterGeneratorFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n const ROOT: string = process.cwd()\n let userConfig = options as 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 = () => {\n userConfig = getConfig(options, ROOT)\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 globalThis.TSR_ROUTES_BY_ID_MAP = 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 async buildStart() {\n await generate()\n },\n vite: {\n configResolved() {\n initConfigAndGenerator()\n },\n async buildStart() {\n // to support vite 5, we need to optionally chain the access to the environment\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.environment?.config?.consumer === 'server') {\n // When building in environment mode, we only need to generate routes\n // for the client environment\n return\n }\n await generate()\n },\n sharedDuringBuild: true,\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 }\n}\n"],"names":["isAbsolute","join","getConfig","Generator","normalize","resolveConfigPath"],"mappings":"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"}
1
+ {"version":3,"file":"router-generator-plugin.cjs","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'\n\nimport type { GeneratorEvent } from '@tanstack/router-generator'\nimport type { FSWatcher } from 'chokidar'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\n\nconst PLUGIN_NAME = 'unplugin:router-generator'\n\nexport const unpluginRouterGeneratorFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n const ROOT: string = process.cwd()\n let userConfig = options as 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 = () => {\n userConfig = getConfig(options, ROOT)\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 globalThis.TSR_ROUTES_BY_ID_MAP = 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 async buildStart() {\n await generate()\n },\n vite: {\n configResolved() {\n initConfigAndGenerator()\n },\n applyToEnvironment(environment) {\n if (userConfig.plugin?.vite?.environmentName) {\n return userConfig.plugin.vite.environmentName === environment.name\n }\n return true\n },\n async buildStart() {\n await generate()\n },\n sharedDuringBuild: true,\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 }\n}\n"],"names":["isAbsolute","join","getConfig","Generator","normalize","resolveConfigPath"],"mappings":"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"}
@@ -3,7 +3,15 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const routerUtils = require("@tanstack/router-utils");
4
4
  const routeHmrStatement = require("./route-hmr-statement.cjs");
5
5
  const utils = require("./utils.cjs");
6
- const unpluginRouterHmrFactory = () => {
6
+ const config = require("./config.cjs");
7
+ const includeCode = [
8
+ "createFileRoute(",
9
+ "createRootRoute(",
10
+ "createRootRouteWithContext("
11
+ ];
12
+ const unpluginRouterHmrFactory = (options = {}) => {
13
+ let ROOT = process.cwd();
14
+ let userConfig = options;
7
15
  return {
8
16
  name: "tanstack-router:hmr",
9
17
  enforce: "pre",
@@ -11,7 +19,9 @@ const unpluginRouterHmrFactory = () => {
11
19
  filter: {
12
20
  // this is necessary for webpack / rspack to avoid matching .html files
13
21
  id: /\.(m|c)?(j|t)sx?$/,
14
- code: "createFileRoute("
22
+ code: {
23
+ include: includeCode
24
+ }
15
25
  },
16
26
  handler(code, id) {
17
27
  var _a;
@@ -32,6 +42,19 @@ const unpluginRouterHmrFactory = () => {
32
42
  }
33
43
  return result;
34
44
  }
45
+ },
46
+ vite: {
47
+ configResolved(config$1) {
48
+ ROOT = config$1.root;
49
+ userConfig = config.getConfig(options, ROOT);
50
+ },
51
+ applyToEnvironment(environment) {
52
+ var _a, _b;
53
+ if ((_b = (_a = userConfig.plugin) == null ? void 0 : _a.vite) == null ? void 0 : _b.environmentName) {
54
+ return userConfig.plugin.vite.environmentName === environment.name;
55
+ }
56
+ return true;
57
+ }
35
58
  }
36
59
  };
37
60
  };
@@ -1 +1 @@
1
- {"version":3,"file":"router-hmr-plugin.cjs","sources":["../../../src/core/router-hmr-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport { routeHmrStatement } from './route-hmr-statement'\nimport { debug } from './utils'\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\n/**\n * This plugin adds HMR support for file routes.\n * It is only added to the composed plugin in dev when autoCodeSplitting is disabled, since the code splitting plugin\n * handles HMR for code-split routes itself.\n */\nexport const unpluginRouterHmrFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = () => {\n return {\n name: 'tanstack-router:hmr',\n enforce: 'pre',\n transform: {\n filter: {\n // this is necessary for webpack / rspack to avoid matching .html files\n id: /\\.(m|c)?(j|t)sx?$/,\n code: 'createFileRoute(',\n },\n handler(code, id) {\n if (!globalThis.TSR_ROUTES_BY_ID_MAP?.has(id)) {\n return null\n }\n\n if (debug) console.info('Adding HMR handling to route ', id)\n\n const ast = parseAst({ code })\n ast.program.body.push(routeHmrStatement)\n const result = generateFromAst(ast, {\n sourceMaps: true,\n filename: id,\n sourceFileName: id,\n })\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n return result\n },\n },\n }\n}\n"],"names":["debug","parseAst","routeHmrStatement","generateFromAst","logDiff"],"mappings":";;;;;AAWO,MAAM,2BAET,MAAM;AACD,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,MACT,QAAQ;AAAA;AAAA,QAEN,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,MAAM,IAAI;;AAChB,YAAI,GAAC,gBAAW,yBAAX,mBAAiC,IAAI,MAAK;AACtC,iBAAA;AAAA,QAAA;AAGT,YAAIA,MAAO,MAAA,SAAQ,KAAK,iCAAiC,EAAE;AAE3D,cAAM,MAAMC,YAAAA,SAAS,EAAE,MAAM;AACzB,YAAA,QAAQ,KAAK,KAAKC,kBAAAA,iBAAiB;AACjC,cAAA,SAASC,4BAAgB,KAAK;AAAA,UAClC,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,gBAAgB;AAAA,QAAA,CACjB;AACD,YAAIH,aAAO;AACDI,8BAAA,MAAM,OAAO,IAAI;AACzB,kBAAQ,IAAI,aAAa,OAAO,OAAO,MAAM;AAAA,QAAA;AAExC,eAAA;AAAA,MAAA;AAAA,IACT;AAAA,EAEJ;AACF;;"}
1
+ {"version":3,"file":"router-hmr-plugin.cjs","sources":["../../../src/core/router-hmr-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport { routeHmrStatement } from './route-hmr-statement'\nimport { debug } from './utils'\nimport { getConfig } from './config'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\n\n/**\n * This plugin adds HMR support for file routes.\n * It is only added to the composed plugin in dev when autoCodeSplitting is disabled, since the code splitting plugin\n * handles HMR for code-split routes itself.\n */\n\nconst includeCode = [\n 'createFileRoute(',\n 'createRootRoute(',\n 'createRootRouteWithContext(',\n]\nexport const unpluginRouterHmrFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n return {\n name: 'tanstack-router:hmr',\n enforce: 'pre',\n transform: {\n filter: {\n // this is necessary for webpack / rspack to avoid matching .html files\n id: /\\.(m|c)?(j|t)sx?$/,\n code: {\n include: includeCode,\n },\n },\n handler(code, id) {\n if (!globalThis.TSR_ROUTES_BY_ID_MAP?.has(id)) {\n return null\n }\n\n if (debug) console.info('Adding HMR handling to route ', id)\n\n const ast = parseAst({ code })\n ast.program.body.push(routeHmrStatement)\n const result = generateFromAst(ast, {\n sourceMaps: true,\n filename: id,\n sourceFileName: id,\n })\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n return result\n },\n },\n vite: {\n configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n },\n applyToEnvironment(environment) {\n if (userConfig.plugin?.vite?.environmentName) {\n return userConfig.plugin.vite.environmentName === environment.name\n }\n return true\n },\n },\n }\n}\n"],"names":["debug","parseAst","routeHmrStatement","generateFromAst","logDiff","config","getConfig"],"mappings":";;;;;;AAaA,MAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AACF;AACO,MAAM,2BAET,CAAC,UAAU,OAAO;AAChB,MAAA,OAAe,QAAQ,IAAI;AAC/B,MAAI,aAAa;AAEV,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,MACT,QAAQ;AAAA;AAAA,QAEN,IAAI;AAAA,QACJ,MAAM;AAAA,UACJ,SAAS;AAAA,QAAA;AAAA,MAEb;AAAA,MACA,QAAQ,MAAM,IAAI;;AAChB,YAAI,GAAC,gBAAW,yBAAX,mBAAiC,IAAI,MAAK;AACtC,iBAAA;AAAA,QAAA;AAGT,YAAIA,MAAO,MAAA,SAAQ,KAAK,iCAAiC,EAAE;AAE3D,cAAM,MAAMC,YAAAA,SAAS,EAAE,MAAM;AACzB,YAAA,QAAQ,KAAK,KAAKC,kBAAAA,iBAAiB;AACjC,cAAA,SAASC,4BAAgB,KAAK;AAAA,UAClC,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,gBAAgB;AAAA,QAAA,CACjB;AACD,YAAIH,aAAO;AACDI,8BAAA,MAAM,OAAO,IAAI;AACzB,kBAAQ,IAAI,aAAa,OAAO,OAAO,MAAM;AAAA,QAAA;AAExC,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IACA,MAAM;AAAA,MACJ,eAAeC,UAAQ;AACrB,eAAOA,SAAO;AACD,qBAAAC,OAAAA,UAAU,SAAS,IAAI;AAAA,MACtC;AAAA,MACA,mBAAmB,aAAa;;AAC1B,aAAA,sBAAW,WAAX,mBAAmB,SAAnB,mBAAyB,iBAAiB;AAC5C,iBAAO,WAAW,OAAO,KAAK,oBAAoB,YAAY;AAAA,QAAA;AAEzD,eAAA;AAAA,MAAA;AAAA,IACT;AAAA,EAEJ;AACF;;"}
@@ -1,8 +1,3 @@
1
- import { Config } from './config.cjs';
2
1
  import { UnpluginFactory } from 'unplugin';
3
- /**
4
- * This plugin adds HMR support for file routes.
5
- * It is only added to the composed plugin in dev when autoCodeSplitting is disabled, since the code splitting plugin
6
- * handles HMR for code-split routes itself.
7
- */
2
+ import { Config } from './config.cjs';
8
3
  export declare const unpluginRouterHmrFactory: UnpluginFactory<Partial<Config> | undefined>;
@@ -26,6 +26,11 @@ declare const TanStackRouterGeneratorEsbuild: (options?: Partial<{
26
26
  tmpDir: string;
27
27
  enableRouteGeneration?: boolean | undefined;
28
28
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
29
+ plugin?: {
30
+ vite?: {
31
+ environmentName?: string | undefined;
32
+ } | undefined;
33
+ } | undefined;
29
34
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
30
35
  routeFilePrefix?: string | undefined;
31
36
  routeFileIgnorePattern?: string | undefined;
@@ -68,6 +73,11 @@ declare const TanStackRouterCodeSplitterEsbuild: (options?: Partial<{
68
73
  tmpDir: string;
69
74
  enableRouteGeneration?: boolean | undefined;
70
75
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
76
+ plugin?: {
77
+ vite?: {
78
+ environmentName?: string | undefined;
79
+ } | undefined;
80
+ } | undefined;
71
81
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
72
82
  routeFilePrefix?: string | undefined;
73
83
  routeFileIgnorePattern?: string | undefined;
@@ -110,6 +120,11 @@ declare const TanStackRouterEsbuild: (options?: Partial<{
110
120
  tmpDir: string;
111
121
  enableRouteGeneration?: boolean | undefined;
112
122
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
123
+ plugin?: {
124
+ vite?: {
125
+ environmentName?: string | undefined;
126
+ } | undefined;
127
+ } | undefined;
113
128
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
114
129
  routeFilePrefix?: string | undefined;
115
130
  routeFileIgnorePattern?: string | undefined;
@@ -143,6 +158,11 @@ declare const tanstackRouter: (options?: Partial<{
143
158
  tmpDir: string;
144
159
  enableRouteGeneration?: boolean | undefined;
145
160
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
161
+ plugin?: {
162
+ vite?: {
163
+ environmentName?: string | undefined;
164
+ } | undefined;
165
+ } | undefined;
146
166
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
147
167
  routeFilePrefix?: string | undefined;
148
168
  routeFileIgnorePattern?: string | undefined;
@@ -30,6 +30,11 @@ declare const TanStackRouterGeneratorRspack: (options?: Partial<{
30
30
  tmpDir: string;
31
31
  enableRouteGeneration?: boolean | undefined;
32
32
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
33
+ plugin?: {
34
+ vite?: {
35
+ environmentName?: string | undefined;
36
+ } | undefined;
37
+ } | undefined;
33
38
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
34
39
  routeFilePrefix?: string | undefined;
35
40
  routeFileIgnorePattern?: string | undefined;
@@ -76,6 +81,11 @@ declare const TanStackRouterCodeSplitterRspack: (options?: Partial<{
76
81
  tmpDir: string;
77
82
  enableRouteGeneration?: boolean | undefined;
78
83
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
84
+ plugin?: {
85
+ vite?: {
86
+ environmentName?: string | undefined;
87
+ } | undefined;
88
+ } | undefined;
79
89
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
80
90
  routeFilePrefix?: string | undefined;
81
91
  routeFileIgnorePattern?: string | undefined;
@@ -122,6 +132,11 @@ declare const TanStackRouterRspack: (options?: Partial<{
122
132
  tmpDir: string;
123
133
  enableRouteGeneration?: boolean | undefined;
124
134
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
135
+ plugin?: {
136
+ vite?: {
137
+ environmentName?: string | undefined;
138
+ } | undefined;
139
+ } | undefined;
125
140
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
126
141
  routeFilePrefix?: string | undefined;
127
142
  routeFileIgnorePattern?: string | undefined;
@@ -155,6 +170,11 @@ declare const tanstackRouter: (options?: Partial<{
155
170
  tmpDir: string;
156
171
  enableRouteGeneration?: boolean | undefined;
157
172
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
173
+ plugin?: {
174
+ vite?: {
175
+ environmentName?: string | undefined;
176
+ } | undefined;
177
+ } | undefined;
158
178
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
159
179
  routeFilePrefix?: string | undefined;
160
180
  routeFileIgnorePattern?: string | undefined;
@@ -17,6 +17,11 @@ declare const tanstackRouterAutoImport: (options?: Partial<{
17
17
  tmpDir: string;
18
18
  enableRouteGeneration?: boolean | undefined;
19
19
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
20
+ plugin?: {
21
+ vite?: {
22
+ environmentName?: string | undefined;
23
+ } | undefined;
24
+ } | undefined;
20
25
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
21
26
  routeFilePrefix?: string | undefined;
22
27
  routeFileIgnorePattern?: string | undefined;
@@ -59,6 +64,11 @@ declare const tanstackRouterGenerator: (options?: Partial<{
59
64
  tmpDir: string;
60
65
  enableRouteGeneration?: boolean | undefined;
61
66
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
67
+ plugin?: {
68
+ vite?: {
69
+ environmentName?: string | undefined;
70
+ } | undefined;
71
+ } | undefined;
62
72
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
63
73
  routeFilePrefix?: string | undefined;
64
74
  routeFileIgnorePattern?: string | undefined;
@@ -101,6 +111,11 @@ declare const tanStackRouterCodeSplitter: (options?: Partial<{
101
111
  tmpDir: string;
102
112
  enableRouteGeneration?: boolean | undefined;
103
113
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
114
+ plugin?: {
115
+ vite?: {
116
+ environmentName?: string | undefined;
117
+ } | undefined;
118
+ } | undefined;
104
119
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
105
120
  routeFilePrefix?: string | undefined;
106
121
  routeFileIgnorePattern?: string | undefined;
@@ -143,6 +158,11 @@ declare const tanstackRouter: (options?: Partial<{
143
158
  tmpDir: string;
144
159
  enableRouteGeneration?: boolean | undefined;
145
160
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
161
+ plugin?: {
162
+ vite?: {
163
+ environmentName?: string | undefined;
164
+ } | undefined;
165
+ } | undefined;
146
166
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
147
167
  routeFilePrefix?: string | undefined;
148
168
  routeFileIgnorePattern?: string | undefined;
@@ -179,6 +199,11 @@ declare const TanStackRouterVite: (options?: Partial<{
179
199
  tmpDir: string;
180
200
  enableRouteGeneration?: boolean | undefined;
181
201
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
202
+ plugin?: {
203
+ vite?: {
204
+ environmentName?: string | undefined;
205
+ } | undefined;
206
+ } | undefined;
182
207
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
183
208
  routeFilePrefix?: string | undefined;
184
209
  routeFileIgnorePattern?: string | undefined;
@@ -26,6 +26,11 @@ declare const TanStackRouterGeneratorWebpack: (options?: Partial<{
26
26
  tmpDir: string;
27
27
  enableRouteGeneration?: boolean | undefined;
28
28
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
29
+ plugin?: {
30
+ vite?: {
31
+ environmentName?: string | undefined;
32
+ } | undefined;
33
+ } | undefined;
29
34
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
30
35
  routeFilePrefix?: string | undefined;
31
36
  routeFileIgnorePattern?: string | undefined;
@@ -68,6 +73,11 @@ declare const TanStackRouterCodeSplitterWebpack: (options?: Partial<{
68
73
  tmpDir: string;
69
74
  enableRouteGeneration?: boolean | undefined;
70
75
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
76
+ plugin?: {
77
+ vite?: {
78
+ environmentName?: string | undefined;
79
+ } | undefined;
80
+ } | undefined;
71
81
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
72
82
  routeFilePrefix?: string | undefined;
73
83
  routeFileIgnorePattern?: string | undefined;
@@ -110,6 +120,11 @@ declare const TanStackRouterWebpack: (options?: Partial<{
110
120
  tmpDir: string;
111
121
  enableRouteGeneration?: boolean | undefined;
112
122
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
123
+ plugin?: {
124
+ vite?: {
125
+ environmentName?: string | undefined;
126
+ } | undefined;
127
+ } | undefined;
113
128
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
114
129
  routeFilePrefix?: string | undefined;
115
130
  routeFileIgnorePattern?: string | undefined;
@@ -143,6 +158,11 @@ declare const tanstackRouter: (options?: Partial<{
143
158
  tmpDir: string;
144
159
  enableRouteGeneration?: boolean | undefined;
145
160
  codeSplittingOptions?: import('./core/config.cjs').CodeSplittingOptions | undefined;
161
+ plugin?: {
162
+ vite?: {
163
+ environmentName?: string | undefined;
164
+ } | undefined;
165
+ } | undefined;
146
166
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
147
167
  routeFilePrefix?: string | undefined;
148
168
  routeFileIgnorePattern?: string | undefined;
@@ -1,12 +1,13 @@
1
1
  import { GeneratorResult, ParseAstOptions } from '@tanstack/router-utils';
2
2
  import { CodeSplitGroupings, SplitRouteIdentNodes } from '../constants.js';
3
- import { Config } from '../config.js';
3
+ import { Config, DeletableNodes } from '../config.js';
4
4
  export declare function compileCodeSplitReferenceRoute(opts: ParseAstOptions & {
5
- runtimeEnv: 'dev' | 'prod';
6
5
  codeSplitGroupings: CodeSplitGroupings;
6
+ deleteNodes?: Set<DeletableNodes>;
7
7
  targetFramework: Config['target'];
8
8
  filename: string;
9
9
  id: string;
10
+ addHmr?: boolean;
10
11
  }): GeneratorResult;
11
12
  export declare function compileCodeSplitVirtualRoute(opts: ParseAstOptions & {
12
13
  splitTargets: Array<SplitRouteIdentNodes>;
@@ -85,6 +85,15 @@ function removeSplitSearchParamFromFilename(filename) {
85
85
  const [bareFilename] = filename.split("?");
86
86
  return bareFilename;
87
87
  }
88
+ const splittableCreateRouteFns = ["createFileRoute"];
89
+ const unsplittableCreateRouteFns = [
90
+ "createRootRoute",
91
+ "createRootRouteWithContext"
92
+ ];
93
+ const allCreateRouteFns = [
94
+ ...splittableCreateRouteFns,
95
+ ...unsplittableCreateRouteFns
96
+ ];
88
97
  function compileCodeSplitReferenceRoute(opts) {
89
98
  const ast = parseAst(opts);
90
99
  const refIdents = findReferencedIdentifiers(ast);
@@ -97,6 +106,7 @@ function compileCodeSplitReferenceRoute(opts) {
97
106
  const PACKAGE = frameworkOptions.package;
98
107
  const LAZY_ROUTE_COMPONENT_IDENT = frameworkOptions.idents.lazyRouteComponent;
99
108
  const LAZY_FN_IDENT = frameworkOptions.idents.lazyFn;
109
+ let createRouteFn;
100
110
  babel.traverse(ast, {
101
111
  Program: {
102
112
  enter(programPath) {
@@ -106,20 +116,41 @@ function compileCodeSplitReferenceRoute(opts) {
106
116
  if (!t.isIdentifier(path.node.callee)) {
107
117
  return;
108
118
  }
109
- if (!(path.node.callee.name === "createRoute" || path.node.callee.name === "createFileRoute")) {
119
+ if (!allCreateRouteFns.includes(path.node.callee.name)) {
110
120
  return;
111
121
  }
122
+ createRouteFn = path.node.callee.name;
112
123
  function babelHandleReference(routeOptions) {
113
124
  const hasImportedOrDefinedIdentifier = (name) => {
114
125
  return programPath.scope.hasBinding(name);
115
126
  };
116
127
  if (t.isObjectExpression(routeOptions)) {
128
+ if (opts.deleteNodes && opts.deleteNodes.size > 0) {
129
+ routeOptions.properties = routeOptions.properties.filter(
130
+ (prop) => {
131
+ var _a;
132
+ if (t.isObjectProperty(prop)) {
133
+ if (t.isIdentifier(prop.key)) {
134
+ if ((_a = opts.deleteNodes) == null ? void 0 : _a.has(prop.key.name)) {
135
+ return false;
136
+ }
137
+ }
138
+ }
139
+ return true;
140
+ }
141
+ );
142
+ }
143
+ if (!splittableCreateRouteFns.includes(createRouteFn)) {
144
+ if (opts.addHmr) {
145
+ programPath.pushContainer("body", routeHmrStatement);
146
+ }
147
+ return programPath.stop();
148
+ }
117
149
  routeOptions.properties.forEach((prop) => {
118
150
  if (t.isObjectProperty(prop)) {
119
151
  if (t.isIdentifier(prop.key)) {
120
- const codeSplitGroupingByKey = findIndexForSplitNode(
121
- prop.key.name
122
- );
152
+ const key = prop.key.name;
153
+ const codeSplitGroupingByKey = findIndexForSplitNode(key);
123
154
  if (codeSplitGroupingByKey === -1) {
124
155
  return;
125
156
  }
@@ -128,7 +159,6 @@ function compileCodeSplitReferenceRoute(opts) {
128
159
  opts.codeSplitGroupings[codeSplitGroupingByKey]
129
160
  )
130
161
  ];
131
- const key = prop.key.name;
132
162
  const isNodeConfigAvailable = SPLIT_NODES_CONFIG.has(
133
163
  key
134
164
  );
@@ -178,16 +208,10 @@ function compileCodeSplitReferenceRoute(opts) {
178
208
  )()
179
209
  ]);
180
210
  }
181
- if (key === "component") {
182
- prop.value = template.expression(
183
- `${LAZY_ROUTE_COMPONENT_IDENT}(${splitNodeMeta.localImporterIdent}, '${splitNodeMeta.exporterIdent}', () => Route.ssr)`
184
- )();
185
- } else {
186
- prop.value = template.expression(
187
- `${LAZY_ROUTE_COMPONENT_IDENT}(${splitNodeMeta.localImporterIdent}, '${splitNodeMeta.exporterIdent}')`
188
- )();
189
- }
190
- if (opts.runtimeEnv !== "prod") {
211
+ prop.value = template.expression(
212
+ `${LAZY_ROUTE_COMPONENT_IDENT}(${splitNodeMeta.localImporterIdent}, '${splitNodeMeta.exporterIdent}')`
213
+ )();
214
+ if (opts.addHmr) {
191
215
  programPath.pushContainer("body", routeHmrStatement);
192
216
  }
193
217
  }
@@ -293,7 +317,7 @@ function compileCodeSplitVirtualRoute(opts) {
293
317
  if (!t.isIdentifier(path.node.callee)) {
294
318
  return;
295
319
  }
296
- if (!(path.node.callee.name === "createRoute" || path.node.callee.name === "createFileRoute")) {
320
+ if (!splittableCreateRouteFns.includes(path.node.callee.name)) {
297
321
  return;
298
322
  }
299
323
  function babelHandleVirtual(options) {
@@ -618,11 +642,9 @@ function resolveIdentifier(path, node) {
618
642
  return node;
619
643
  }
620
644
  function removeIdentifierLiteral(path, node) {
621
- if (t.isIdentifier(node)) {
622
- const binding = path.scope.getBinding(node.name);
623
- if (binding) {
624
- binding.path.remove();
625
- }
645
+ const binding = path.scope.getBinding(node.name);
646
+ if (binding) {
647
+ binding.path.remove();
626
648
  }
627
649
  }
628
650
  function hasExport(ast, node) {