@tanstack/router-plugin
Advanced tools
| Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); | ||
| const require_router_plugin_context = require("./core/router-plugin-context.cjs"); | ||
| exports.createRouterPluginContext = require_router_plugin_context.createRouterPluginContext; |
| export { createRouterPluginContext } from './core/router-plugin-context.cjs'; | ||
| export type { RouterPluginContext } from './core/router-plugin-context.cjs'; |
| //#region src/core/router-plugin-context.ts | ||
| function createRouterPluginContext() { | ||
| return { routesByFile: /* @__PURE__ */ new Map() }; | ||
| } | ||
| //#endregion | ||
| exports.createRouterPluginContext = createRouterPluginContext; | ||
| //# sourceMappingURL=router-plugin-context.cjs.map |
| {"version":3,"file":"router-plugin-context.cjs","names":[],"sources":["../../../src/core/router-plugin-context.ts"],"sourcesContent":["import type { GetRoutesByFileMapResult } from '@tanstack/router-generator'\n\nexport type RouterPluginContext = {\n routesByFile: GetRoutesByFileMapResult\n}\n\nexport function createRouterPluginContext(): RouterPluginContext {\n return {\n routesByFile: new Map(),\n }\n}\n"],"mappings":";AAMA,SAAgB,4BAAiD;AAC/D,QAAO,EACL,8BAAc,IAAI,KAAK,EACxB"} |
| import { GetRoutesByFileMapResult } from '@tanstack/router-generator'; | ||
| export type RouterPluginContext = { | ||
| routesByFile: GetRoutesByFileMapResult; | ||
| }; | ||
| export declare function createRouterPluginContext(): RouterPluginContext; |
| export { createRouterPluginContext } from './core/router-plugin-context.js'; | ||
| export type { RouterPluginContext } from './core/router-plugin-context.js'; |
| import { createRouterPluginContext } from "./core/router-plugin-context.js"; | ||
| export { createRouterPluginContext }; |
| import { GetRoutesByFileMapResult } from '@tanstack/router-generator'; | ||
| export type RouterPluginContext = { | ||
| routesByFile: GetRoutesByFileMapResult; | ||
| }; | ||
| export declare function createRouterPluginContext(): RouterPluginContext; |
| //#region src/core/router-plugin-context.ts | ||
| function createRouterPluginContext() { | ||
| return { routesByFile: /* @__PURE__ */ new Map() }; | ||
| } | ||
| //#endregion | ||
| export { createRouterPluginContext }; | ||
| //# sourceMappingURL=router-plugin-context.js.map |
| {"version":3,"file":"router-plugin-context.js","names":[],"sources":["../../../src/core/router-plugin-context.ts"],"sourcesContent":["import type { GetRoutesByFileMapResult } from '@tanstack/router-generator'\n\nexport type RouterPluginContext = {\n routesByFile: GetRoutesByFileMapResult\n}\n\nexport function createRouterPluginContext(): RouterPluginContext {\n return {\n routesByFile: new Map(),\n }\n}\n"],"mappings":";AAMA,SAAgB,4BAAiD;AAC/D,QAAO,EACL,8BAAc,IAAI,KAAK,EACxB"} |
| export { createRouterPluginContext } from './core/router-plugin-context' | ||
| export type { RouterPluginContext } from './core/router-plugin-context' |
| import type { GetRoutesByFileMapResult } from '@tanstack/router-generator' | ||
| export type RouterPluginContext = { | ||
| routesByFile: GetRoutesByFileMapResult | ||
| } | ||
| export function createRouterPluginContext(): RouterPluginContext { | ||
| return { | ||
| routesByFile: new Map(), | ||
| } | ||
| } |
@@ -8,2 +8,3 @@ require("../_virtual/_rolldown/runtime.cjs"); | ||
| const require_framework_plugins = require("./code-splitter/plugins/framework-plugins.cjs"); | ||
| const require_router_plugin_context = require("./router-plugin-context.cjs"); | ||
| let node_url = require("node:url"); | ||
@@ -45,3 +46,3 @@ let _tanstack_router_utils = require("@tanstack/router-utils"); | ||
| }; | ||
| var unpluginRouterCodeSplitterFactory = (options = {}, { framework: _framework }) => { | ||
| function createRouterCodeSplitterPlugin(options = {}, routerPluginContext) { | ||
| let ROOT = process.cwd(); | ||
@@ -154,3 +155,3 @@ let userConfig; | ||
| const normalizedId = require_utils.normalizePath(id); | ||
| const generatorFileInfo = globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId); | ||
| const generatorFileInfo = routerPluginContext.routesByFile.get(normalizedId); | ||
| if (generatorFileInfo && includedCode.some((included) => code.includes(included))) return handleCompilingReferenceFile(code, normalizedId, generatorFileInfo); | ||
@@ -235,6 +236,10 @@ return null; | ||
| ]; | ||
| } | ||
| var unpluginRouterCodeSplitterFactory = (options = {}) => { | ||
| return createRouterCodeSplitterPlugin(options, require_router_plugin_context.createRouterPluginContext()); | ||
| }; | ||
| //#endregion | ||
| exports.createRouterCodeSplitterPlugin = createRouterCodeSplitterPlugin; | ||
| exports.unpluginRouterCodeSplitterFactory = unpluginRouterCodeSplitterFactory; | ||
| //# sourceMappingURL=router-code-splitter-plugin.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"router-code-splitter-plugin.cjs","names":[],"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 compileCodeSplitSharedRoute,\n compileCodeSplitVirtualRoute,\n computeSharedBindings,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport { getReferenceRouteCompilerPlugins } from './code-splitter/plugins/framework-plugins'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrShared,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug, normalizePath } from './utils'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\nimport type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator'\nimport type { Config } from './config'\nimport type {\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\nconst CODE_SPLITTER_PLUGIN_NAME =\n 'tanstack-router:code-splitter:compile-reference-file'\n\ntype TransformationPluginInfo = {\n pluginNames: Array<string>\n pkg: string\n usage: string\n}\n\n/**\n * JSX transformation plugins grouped by framework.\n * These plugins must come AFTER the TanStack Router plugin in the Vite config.\n */\nconst TRANSFORMATION_PLUGINS_BY_FRAMEWORK: Record<\n string,\n Array<TransformationPluginInfo>\n> = {\n react: [\n {\n // Babel-based React plugin\n pluginNames: ['vite:react-babel', 'vite:react-refresh'],\n pkg: '@vitejs/plugin-react',\n usage: 'react()',\n },\n {\n // SWC-based React plugin\n pluginNames: ['vite:react-swc', 'vite:react-swc:resolve-runtime'],\n pkg: '@vitejs/plugin-react-swc',\n usage: 'reactSwc()',\n },\n {\n // OXC-based React plugin (deprecated but should still be handled)\n pluginNames: ['vite:react-oxc:config', 'vite:react-oxc:refresh-runtime'],\n pkg: '@vitejs/plugin-react-oxc',\n usage: 'reactOxc()',\n },\n ],\n solid: [\n {\n pluginNames: ['solid'],\n pkg: 'vite-plugin-solid',\n usage: 'solid()',\n },\n ],\n}\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}, { framework: _framework }) => {\n let ROOT: string = process.cwd()\n let userConfig: Config\n\n function initUserConfig() {\n if (typeof options === 'function') {\n userConfig = options()\n } else {\n userConfig = getConfig(options, ROOT)\n }\n }\n const isProduction = process.env.NODE_ENV === 'production'\n // Map from normalized route file path → set of shared binding names.\n // Populated by the reference compiler, consumed by virtual and shared compilers.\n const sharedBindingsMap = new Map<string, Set<string>>()\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 !== undefined) {\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.routeId,\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 // Compute shared bindings before compiling the reference route\n const sharedBindings = computeSharedBindings({\n code,\n codeSplitGroupings: splitGroupings,\n })\n if (sharedBindings.size > 0) {\n sharedBindingsMap.set(id, sharedBindings)\n } else {\n sharedBindingsMap.delete(id)\n }\n\n const addHmr =\n (userConfig.codeSplittingOptions?.addHmr ?? true) && !isProduction\n const hmrStyle = userConfig.plugin?.hmr?.style ?? 'vite'\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n deleteNodes: userConfig.codeSplittingOptions?.deleteNodes\n ? new Set(userConfig.codeSplittingOptions.deleteNodes)\n : undefined,\n addHmr,\n hmrStyle,\n hmrRouteId: generatorNodeInfo.routeId,\n sharedBindings: sharedBindings.size > 0 ? sharedBindings : undefined,\n compilerPlugins: getReferenceRouteCompilerPlugins({\n targetFramework: userConfig.target,\n addHmr,\n hmrStyle,\n }),\n })\n\n if (compiledReferenceRoute === null) {\n if (debug) {\n console.info(\n `No changes made to route \"${id}\", skipping code-splitting.`,\n )\n }\n return null\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 baseId = id.split('?')[0]!\n const resolvedSharedBindings = sharedBindingsMap.get(baseId)\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n sharedBindings: resolvedSharedBindings,\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, tsrShared],\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 normalizedId = normalizePath(id)\n const generatorFileInfo =\n globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId)\n if (\n generatorFileInfo &&\n includedCode.some((included) => code.includes(included))\n ) {\n return handleCompilingReferenceFile(\n code,\n normalizedId,\n generatorFileInfo,\n )\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n initUserConfig()\n\n // Validate plugin order - router must come before JSX transformation plugins\n const routerPluginIndex = config.plugins.findIndex(\n (p) => p.name === CODE_SPLITTER_PLUGIN_NAME,\n )\n\n if (routerPluginIndex === -1) return\n\n const frameworkPlugins =\n TRANSFORMATION_PLUGINS_BY_FRAMEWORK[userConfig.target]\n if (!frameworkPlugins) return\n\n for (const transformPlugin of frameworkPlugins) {\n const transformPluginIndex = config.plugins.findIndex((p) =>\n transformPlugin.pluginNames.includes(p.name),\n )\n\n if (\n transformPluginIndex !== -1 &&\n transformPluginIndex < routerPluginIndex\n ) {\n throw new Error(\n `Plugin order error: '${transformPlugin.pkg}' is placed before '@tanstack/router-plugin'.\\n\\n` +\n `The TanStack Router plugin must come BEFORE JSX transformation plugins.\\n\\n` +\n `Please update your Vite config:\\n\\n` +\n ` plugins: [\\n` +\n ` tanstackRouter(),\\n` +\n ` ${transformPlugin.usage},\\n` +\n ` ]\\n`,\n )\n }\n }\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 initUserConfig()\n },\n\n webpack() {\n ROOT = process.cwd()\n initUserConfig()\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 const normalizedId = normalizePath(fileURLToPath(url))\n return handleCompilingVirtualFile(code, normalizedId)\n },\n },\n\n vite: {\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 name: 'tanstack-router:code-splitter:compile-shared-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: /tsr-shared/,\n },\n handler(code, id) {\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n const normalizedId = normalizePath(fileURLToPath(url))\n const [baseId] = normalizedId.split('?')\n\n if (!baseId) return null\n\n const sharedBindings = sharedBindingsMap.get(baseId)\n if (!sharedBindings || sharedBindings.size === 0) return null\n\n if (debug) console.info('Compiling Shared Module: ', id)\n\n const result = compileCodeSplitSharedRoute({\n code,\n sharedBindings,\n filename: normalizedId,\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\n vite: {\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}\n"],"mappings":"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"} | ||
| {"version":3,"file":"router-code-splitter-plugin.cjs","names":[],"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 compileCodeSplitSharedRoute,\n compileCodeSplitVirtualRoute,\n computeSharedBindings,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport { getReferenceRouteCompilerPlugins } from './code-splitter/plugins/framework-plugins'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrShared,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug, normalizePath } from './utils'\nimport { createRouterPluginContext } from './router-plugin-context'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\nimport type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator'\nimport type { Config } from './config'\nimport type { RouterPluginContext } from './router-plugin-context'\nimport type {\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\nconst CODE_SPLITTER_PLUGIN_NAME =\n 'tanstack-router:code-splitter:compile-reference-file'\n\ntype TransformationPluginInfo = {\n pluginNames: Array<string>\n pkg: string\n usage: string\n}\n\n/**\n * JSX transformation plugins grouped by framework.\n * These plugins must come AFTER the TanStack Router plugin in the Vite config.\n */\nconst TRANSFORMATION_PLUGINS_BY_FRAMEWORK: Record<\n string,\n Array<TransformationPluginInfo>\n> = {\n react: [\n {\n // Babel-based React plugin\n pluginNames: ['vite:react-babel', 'vite:react-refresh'],\n pkg: '@vitejs/plugin-react',\n usage: 'react()',\n },\n {\n // SWC-based React plugin\n pluginNames: ['vite:react-swc', 'vite:react-swc:resolve-runtime'],\n pkg: '@vitejs/plugin-react-swc',\n usage: 'reactSwc()',\n },\n {\n // OXC-based React plugin (deprecated but should still be handled)\n pluginNames: ['vite:react-oxc:config', 'vite:react-oxc:refresh-runtime'],\n pkg: '@vitejs/plugin-react-oxc',\n usage: 'reactOxc()',\n },\n ],\n solid: [\n {\n pluginNames: ['solid'],\n pkg: 'vite-plugin-solid',\n usage: 'solid()',\n },\n ],\n}\n\nexport function createRouterCodeSplitterPlugin(\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\n function initUserConfig() {\n if (typeof options === 'function') {\n userConfig = options()\n } else {\n userConfig = getConfig(options, ROOT)\n }\n }\n const isProduction = process.env.NODE_ENV === 'production'\n // Map from normalized route file path → set of shared binding names.\n // Populated by the reference compiler, consumed by virtual and shared compilers.\n const sharedBindingsMap = new Map<string, Set<string>>()\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 !== undefined) {\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.routeId,\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 // Compute shared bindings before compiling the reference route\n const sharedBindings = computeSharedBindings({\n code,\n codeSplitGroupings: splitGroupings,\n })\n if (sharedBindings.size > 0) {\n sharedBindingsMap.set(id, sharedBindings)\n } else {\n sharedBindingsMap.delete(id)\n }\n\n const addHmr =\n (userConfig.codeSplittingOptions?.addHmr ?? true) && !isProduction\n const hmrStyle = userConfig.plugin?.hmr?.style ?? 'vite'\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n deleteNodes: userConfig.codeSplittingOptions?.deleteNodes\n ? new Set(userConfig.codeSplittingOptions.deleteNodes)\n : undefined,\n addHmr,\n hmrStyle,\n hmrRouteId: generatorNodeInfo.routeId,\n sharedBindings: sharedBindings.size > 0 ? sharedBindings : undefined,\n compilerPlugins: getReferenceRouteCompilerPlugins({\n targetFramework: userConfig.target,\n addHmr,\n hmrStyle,\n }),\n })\n\n if (compiledReferenceRoute === null) {\n if (debug) {\n console.info(\n `No changes made to route \"${id}\", skipping code-splitting.`,\n )\n }\n return null\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 baseId = id.split('?')[0]!\n const resolvedSharedBindings = sharedBindingsMap.get(baseId)\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n sharedBindings: resolvedSharedBindings,\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, tsrShared],\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 normalizedId = normalizePath(id)\n const generatorFileInfo =\n routerPluginContext.routesByFile.get(normalizedId)\n if (\n generatorFileInfo &&\n includedCode.some((included) => code.includes(included))\n ) {\n return handleCompilingReferenceFile(\n code,\n normalizedId,\n generatorFileInfo,\n )\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n initUserConfig()\n\n // Validate plugin order - router must come before JSX transformation plugins\n const routerPluginIndex = config.plugins.findIndex(\n (p) => p.name === CODE_SPLITTER_PLUGIN_NAME,\n )\n\n if (routerPluginIndex === -1) return\n\n const frameworkPlugins =\n TRANSFORMATION_PLUGINS_BY_FRAMEWORK[userConfig.target]\n if (!frameworkPlugins) return\n\n for (const transformPlugin of frameworkPlugins) {\n const transformPluginIndex = config.plugins.findIndex((p) =>\n transformPlugin.pluginNames.includes(p.name),\n )\n\n if (\n transformPluginIndex !== -1 &&\n transformPluginIndex < routerPluginIndex\n ) {\n throw new Error(\n `Plugin order error: '${transformPlugin.pkg}' is placed before '@tanstack/router-plugin'.\\n\\n` +\n `The TanStack Router plugin must come BEFORE JSX transformation plugins.\\n\\n` +\n `Please update your Vite config:\\n\\n` +\n ` plugins: [\\n` +\n ` tanstackRouter(),\\n` +\n ` ${transformPlugin.usage},\\n` +\n ` ]\\n`,\n )\n }\n }\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 initUserConfig()\n },\n\n webpack() {\n ROOT = process.cwd()\n initUserConfig()\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 const normalizedId = normalizePath(fileURLToPath(url))\n return handleCompilingVirtualFile(code, normalizedId)\n },\n },\n\n vite: {\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 name: 'tanstack-router:code-splitter:compile-shared-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: /tsr-shared/,\n },\n handler(code, id) {\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n const normalizedId = normalizePath(fileURLToPath(url))\n const [baseId] = normalizedId.split('?')\n\n if (!baseId) return null\n\n const sharedBindings = sharedBindingsMap.get(baseId)\n if (!sharedBindings || sharedBindings.size === 0) return null\n\n if (debug) console.info('Compiling Shared Module: ', id)\n\n const result = compileCodeSplitSharedRoute({\n code,\n sharedBindings,\n filename: normalizedId,\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\n vite: {\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}\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}) => {\n return createRouterCodeSplitterPlugin(options, createRouterPluginContext())\n}\n"],"mappings":"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"} |
| import { Config } from './config.cjs'; | ||
| import { RouterPluginContext } from './router-plugin-context.cjs'; | ||
| import { UnpluginFactory } from 'unplugin'; | ||
| export declare function createRouterCodeSplitterPlugin(options: Partial<Config | (() => Config)> | undefined, routerPluginContext: RouterPluginContext): ReturnType<UnpluginFactory<Partial<Config | (() => Config)> | undefined>>; | ||
| export declare const unpluginRouterCodeSplitterFactory: UnpluginFactory<Partial<Config | (() => Config)> | undefined>; |
| require("../_virtual/_rolldown/runtime.cjs"); | ||
| const require_router_plugin_context = require("./router-plugin-context.cjs"); | ||
| const require_router_code_splitter_plugin = require("./router-code-splitter-plugin.cjs"); | ||
@@ -17,12 +18,12 @@ const require_router_generator_plugin = require("./router-generator-plugin.cjs"); | ||
| } | ||
| var unpluginRouterComposedFactory = (options = {}, meta) => { | ||
| var unpluginRouterComposedFactory = (options = {}, _meta) => { | ||
| const ROOT = process.cwd(); | ||
| const userConfig = (0, _tanstack_router_generator.getConfig)(typeof options === "function" ? options() : options, ROOT); | ||
| const getPlugin = (pluginFactory) => { | ||
| const plugin = pluginFactory(options, meta); | ||
| const routerPluginContext = require_router_plugin_context.createRouterPluginContext(); | ||
| const getPlugin = (plugin) => { | ||
| if (!Array.isArray(plugin)) return [plugin]; | ||
| return plugin; | ||
| }; | ||
| const routerGenerator = getPlugin(require_router_generator_plugin.unpluginRouterGeneratorFactory); | ||
| const routerCodeSplitter = getPlugin(require_router_code_splitter_plugin.unpluginRouterCodeSplitterFactory); | ||
| const routerGenerator = getPlugin(require_router_generator_plugin.createRouterGeneratorPlugin(options, routerPluginContext)); | ||
| const routerCodeSplitter = getPlugin(require_router_code_splitter_plugin.createRouterCodeSplitterPlugin(options, routerPluginContext)); | ||
| const result = [{ | ||
@@ -48,3 +49,3 @@ name: "tanstack:router-inline-css-defaults", | ||
| if (!(process.env.NODE_ENV === "production") && !userConfig.autoCodeSplitting) { | ||
| const routerHmr = getPlugin(require_router_hmr_plugin.unpluginRouterHmrFactory); | ||
| const routerHmr = getPlugin(require_router_hmr_plugin.createRouterHmrPlugin(options, routerPluginContext)); | ||
| result.push(...routerHmr); | ||
@@ -51,0 +52,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"router-composed-plugin.cjs","names":[],"sources":["../../../src/core/router-composed-plugin.ts"],"sourcesContent":["import { getConfig } from '@tanstack/router-generator'\nimport { unpluginRouterGeneratorFactory } from './router-generator-plugin'\nimport { unpluginRouterCodeSplitterFactory } from './router-code-splitter-plugin'\nimport { unpluginRouterHmrFactory } from './router-hmr-plugin'\nimport type { Config } from './config'\nimport type {\n RspackCompiler,\n UnpluginFactory,\n UnpluginOptions,\n WebpackCompiler,\n} from 'unplugin'\n\nconst INLINE_CSS_DEFAULT_DEFINES = {\n 'process.env.TSS_INLINE_CSS_ENABLED': JSON.stringify('false'),\n 'import.meta.env.TSS_INLINE_CSS_ENABLED': JSON.stringify('false'),\n}\n\ntype EsbuildOptionsWithDefine = Parameters<\n NonNullable<NonNullable<UnpluginOptions['esbuild']>['config']>\n>[0]\n\nfunction applyWebpackInlineCssDefaultDefinePlugin(compiler: WebpackCompiler) {\n new compiler.webpack.DefinePlugin(INLINE_CSS_DEFAULT_DEFINES).apply(compiler)\n}\n\nfunction applyRspackInlineCssDefaultDefinePlugin(compiler: RspackCompiler) {\n new compiler.webpack.DefinePlugin(INLINE_CSS_DEFAULT_DEFINES).apply(compiler)\n}\n\nexport const unpluginRouterComposedFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}, meta) => {\n const ROOT: string = process.cwd()\n const userConfig = getConfig(\n (typeof options === 'function' ? options() : options) as Partial<Config>,\n ROOT,\n )\n\n const getPlugin = (\n pluginFactory: UnpluginFactory<Partial<Config | (() => Config)>>,\n ) => {\n const plugin = pluginFactory(options, meta)\n if (!Array.isArray(plugin)) {\n return [plugin]\n }\n return plugin\n }\n\n const routerGenerator = getPlugin(unpluginRouterGeneratorFactory)\n const routerCodeSplitter = getPlugin(unpluginRouterCodeSplitterFactory)\n\n const result = [\n {\n name: 'tanstack:router-inline-css-defaults',\n vite: {\n config() {\n return {\n define: {\n ...INLINE_CSS_DEFAULT_DEFINES,\n },\n }\n },\n },\n webpack(compiler: WebpackCompiler) {\n applyWebpackInlineCssDefaultDefinePlugin(compiler)\n },\n rspack(compiler: RspackCompiler) {\n applyRspackInlineCssDefaultDefinePlugin(compiler)\n },\n esbuild: {\n config(options: EsbuildOptionsWithDefine) {\n options.define = {\n ...INLINE_CSS_DEFAULT_DEFINES,\n ...options.define,\n }\n },\n },\n },\n ...routerGenerator,\n ]\n if (userConfig.autoCodeSplitting) {\n result.push(...routerCodeSplitter)\n }\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n if (!isProduction && !userConfig.autoCodeSplitting) {\n const routerHmr = getPlugin(unpluginRouterHmrFactory)\n result.push(...routerHmr)\n }\n return result\n}\n"],"mappings":";;;;;;AAYA,IAAM,6BAA6B;CACjC,sCAAsC,KAAK,UAAU,QAAQ;CAC7D,0CAA0C,KAAK,UAAU,QAAQ;CAClE;AAMD,SAAS,yCAAyC,UAA2B;AAC3E,KAAI,SAAS,QAAQ,aAAa,2BAA2B,CAAC,MAAM,SAAS;;AAG/E,SAAS,wCAAwC,UAA0B;AACzE,KAAI,SAAS,QAAQ,aAAa,2BAA2B,CAAC,MAAM,SAAS;;AAG/E,IAAa,iCAER,UAAU,EAAE,EAAE,SAAS;CAC1B,MAAM,OAAe,QAAQ,KAAK;CAClC,MAAM,cAAA,GAAA,2BAAA,WACH,OAAO,YAAY,aAAa,SAAS,GAAG,SAC7C,KACD;CAED,MAAM,aACJ,kBACG;EACH,MAAM,SAAS,cAAc,SAAS,KAAK;AAC3C,MAAI,CAAC,MAAM,QAAQ,OAAO,CACxB,QAAO,CAAC,OAAO;AAEjB,SAAO;;CAGT,MAAM,kBAAkB,UAAU,gCAAA,+BAA+B;CACjE,MAAM,qBAAqB,UAAU,oCAAA,kCAAkC;CAEvE,MAAM,SAAS,CACb;EACE,MAAM;EACN,MAAM,EACJ,SAAS;AACP,UAAO,EACL,QAAQ,EACN,GAAG,4BACJ,EACF;KAEJ;EACD,QAAQ,UAA2B;AACjC,4CAAyC,SAAS;;EAEpD,OAAO,UAA0B;AAC/B,2CAAwC,SAAS;;EAEnD,SAAS,EACP,OAAO,SAAmC;AACxC,WAAQ,SAAS;IACf,GAAG;IACH,GAAG,QAAQ;IACZ;KAEJ;EACF,EACD,GAAG,gBACJ;AACD,KAAI,WAAW,kBACb,QAAO,KAAK,GAAG,mBAAmB;AAKpC,KAAI,EAAA,QAAA,IAAA,aAF0C,iBAEzB,CAAC,WAAW,mBAAmB;EAClD,MAAM,YAAY,UAAU,0BAAA,yBAAyB;AACrD,SAAO,KAAK,GAAG,UAAU;;AAE3B,QAAO"} | ||
| {"version":3,"file":"router-composed-plugin.cjs","names":[],"sources":["../../../src/core/router-composed-plugin.ts"],"sourcesContent":["import { getConfig } from '@tanstack/router-generator'\nimport { createRouterGeneratorPlugin } from './router-generator-plugin'\nimport { createRouterCodeSplitterPlugin } from './router-code-splitter-plugin'\nimport { createRouterHmrPlugin } from './router-hmr-plugin'\nimport { createRouterPluginContext } from './router-plugin-context'\nimport type { Config } from './config'\nimport type {\n RspackCompiler,\n UnpluginFactory,\n UnpluginOptions,\n WebpackCompiler,\n} from 'unplugin'\n\nconst INLINE_CSS_DEFAULT_DEFINES = {\n 'process.env.TSS_INLINE_CSS_ENABLED': JSON.stringify('false'),\n 'import.meta.env.TSS_INLINE_CSS_ENABLED': JSON.stringify('false'),\n}\n\ntype EsbuildOptionsWithDefine = Parameters<\n NonNullable<NonNullable<UnpluginOptions['esbuild']>['config']>\n>[0]\n\nfunction applyWebpackInlineCssDefaultDefinePlugin(compiler: WebpackCompiler) {\n new compiler.webpack.DefinePlugin(INLINE_CSS_DEFAULT_DEFINES).apply(compiler)\n}\n\nfunction applyRspackInlineCssDefaultDefinePlugin(compiler: RspackCompiler) {\n new compiler.webpack.DefinePlugin(INLINE_CSS_DEFAULT_DEFINES).apply(compiler)\n}\n\nexport const unpluginRouterComposedFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}, _meta) => {\n const ROOT: string = process.cwd()\n const userConfig = getConfig(\n (typeof options === 'function' ? options() : options) as Partial<Config>,\n ROOT,\n )\n const routerPluginContext = createRouterPluginContext()\n\n const getPlugin = (plugin: ReturnType<UnpluginFactory<any>>) => {\n if (!Array.isArray(plugin)) {\n return [plugin]\n }\n return plugin\n }\n\n const routerGenerator = getPlugin(\n createRouterGeneratorPlugin(options, routerPluginContext),\n )\n const routerCodeSplitter = getPlugin(\n createRouterCodeSplitterPlugin(options, routerPluginContext),\n )\n\n const result = [\n {\n name: 'tanstack:router-inline-css-defaults',\n vite: {\n config() {\n return {\n define: {\n ...INLINE_CSS_DEFAULT_DEFINES,\n },\n }\n },\n },\n webpack(compiler: WebpackCompiler) {\n applyWebpackInlineCssDefaultDefinePlugin(compiler)\n },\n rspack(compiler: RspackCompiler) {\n applyRspackInlineCssDefaultDefinePlugin(compiler)\n },\n esbuild: {\n config(options: EsbuildOptionsWithDefine) {\n options.define = {\n ...INLINE_CSS_DEFAULT_DEFINES,\n ...options.define,\n }\n },\n },\n },\n ...routerGenerator,\n ]\n if (userConfig.autoCodeSplitting) {\n result.push(...routerCodeSplitter)\n }\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n if (!isProduction && !userConfig.autoCodeSplitting) {\n const routerHmr = getPlugin(\n createRouterHmrPlugin(options, routerPluginContext),\n )\n result.push(...routerHmr)\n }\n return result\n}\n"],"mappings":";;;;;;;AAaA,IAAM,6BAA6B;CACjC,sCAAsC,KAAK,UAAU,QAAQ;CAC7D,0CAA0C,KAAK,UAAU,QAAQ;CAClE;AAMD,SAAS,yCAAyC,UAA2B;AAC3E,KAAI,SAAS,QAAQ,aAAa,2BAA2B,CAAC,MAAM,SAAS;;AAG/E,SAAS,wCAAwC,UAA0B;AACzE,KAAI,SAAS,QAAQ,aAAa,2BAA2B,CAAC,MAAM,SAAS;;AAG/E,IAAa,iCAER,UAAU,EAAE,EAAE,UAAU;CAC3B,MAAM,OAAe,QAAQ,KAAK;CAClC,MAAM,cAAA,GAAA,2BAAA,WACH,OAAO,YAAY,aAAa,SAAS,GAAG,SAC7C,KACD;CACD,MAAM,sBAAsB,8BAAA,2BAA2B;CAEvD,MAAM,aAAa,WAA6C;AAC9D,MAAI,CAAC,MAAM,QAAQ,OAAO,CACxB,QAAO,CAAC,OAAO;AAEjB,SAAO;;CAGT,MAAM,kBAAkB,UACtB,gCAAA,4BAA4B,SAAS,oBAAoB,CAC1D;CACD,MAAM,qBAAqB,UACzB,oCAAA,+BAA+B,SAAS,oBAAoB,CAC7D;CAED,MAAM,SAAS,CACb;EACE,MAAM;EACN,MAAM,EACJ,SAAS;AACP,UAAO,EACL,QAAQ,EACN,GAAG,4BACJ,EACF;KAEJ;EACD,QAAQ,UAA2B;AACjC,4CAAyC,SAAS;;EAEpD,OAAO,UAA0B;AAC/B,2CAAwC,SAAS;;EAEnD,SAAS,EACP,OAAO,SAAmC;AACxC,WAAQ,SAAS;IACf,GAAG;IACH,GAAG,QAAQ;IACZ;KAEJ;EACF,EACD,GAAG,gBACJ;AACD,KAAI,WAAW,kBACb,QAAO,KAAK,GAAG,mBAAmB;AAKpC,KAAI,EAAA,QAAA,IAAA,aAF0C,iBAEzB,CAAC,WAAW,mBAAmB;EAClD,MAAM,YAAY,UAChB,0BAAA,sBAAsB,SAAS,oBAAoB,CACpD;AACD,SAAO,KAAK,GAAG,UAAU;;AAE3B,QAAO"} |
| require("../_virtual/_rolldown/runtime.cjs"); | ||
| const require_config = require("./config.cjs"); | ||
| const require_router_plugin_context = require("./router-plugin-context.cjs"); | ||
| let _tanstack_router_generator = require("@tanstack/router-generator"); | ||
@@ -7,3 +8,3 @@ let node_path = require("node:path"); | ||
| var PLUGIN_NAME = "unplugin:router-generator"; | ||
| var unpluginRouterGeneratorFactory = (options = {}) => { | ||
| function createRouterGeneratorPlugin(options = {}, routerPluginContext) { | ||
| let ROOT = process.cwd(); | ||
@@ -41,3 +42,3 @@ let userConfig; | ||
| await generator.run(generatorEvent); | ||
| globalThis.TSR_ROUTES_BY_ID_MAP = generator.getRoutesByFileMap(); | ||
| routerPluginContext.routesByFile = generator.getRoutesByFileMap(); | ||
| } catch (e) { | ||
@@ -101,6 +102,10 @@ console.error(e); | ||
| }; | ||
| } | ||
| var unpluginRouterGeneratorFactory = (options = {}) => { | ||
| return createRouterGeneratorPlugin(options, require_router_plugin_context.createRouterPluginContext()); | ||
| }; | ||
| //#endregion | ||
| exports.createRouterGeneratorPlugin = createRouterGeneratorPlugin; | ||
| exports.unpluginRouterGeneratorFactory = unpluginRouterGeneratorFactory; | ||
| //# sourceMappingURL=router-generator-plugin.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"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'\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 | (() => Config)> | undefined\n> = (options = {}) => {\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 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 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"],"mappings":";;;;;AASA,IAAM,cAAc;AAEpB,IAAa,kCAER,UAAU,EAAE,KAAK;CACpB,IAAI,OAAe,QAAQ,KAAK;CAChC,IAAI;CACJ,IAAI;CAEJ,MAAM,gCACJ,WAAW,0BAA0B;CACvC,MAAM,+BAA+B;AACnC,UAAA,GAAA,UAAA,YAAkB,WAAW,gBAAgB,GACzC,WAAW,mBAAA,GAAA,UAAA,MACN,MAAM,WAAW,gBAAgB;;CAG5C,MAAM,0BAA0B,SAA6B;AAC3D,MAAI,MAAM,KACR,QAAO,KAAK;AAEd,MAAI,OAAO,YAAY,WACrB,cAAa,SAAS;MAEtB,cAAa,eAAA,UAAU,SAAS,KAAK;AAEvC,cAAY,IAAI,2BAAA,UAAU;GACxB,QAAQ;GACR,MAAM;GACP,CAAC;;CAGJ,MAAM,WAAW,OAAO,SAGlB;AACJ,MAAI,yBAAyB,CAC3B;EAEF,IAAI,iBAA6C,KAAA;AACjD,MAAI,MAAM;GACR,MAAM,YAAA,GAAA,UAAA,WAAqB,KAAK,KAAK;AACrC,OAAI,cAAA,GAAA,2BAAA,mBAA+B,EAAE,iBAAiB,MAAM,CAAC,EAAE;AAC7D,4BAAwB;AACxB;;AAEF,oBAAiB;IAAE,MAAM;IAAU,MAAM,KAAK;IAAO;;AAGvD,MAAI;AACF,SAAM,UAAU,IAAI,eAAe;AACnC,cAAW,uBAAuB,UAAU,oBAAoB;WACzD,GAAG;AACV,WAAQ,MAAM,EAAE;;;AAIpB,QAAO;EACL,MAAM;EACN,SAAS;EACT,MAAM,YAAY,IAAI,EAAE,SAAS;AAC/B,SAAM,SAAS;IACb,MAAM;IACN;IACD,CAAC;;EAEJ,MAAM,EACJ,MAAM,eAAe,QAAQ;AAC3B,0BAAuB,EAAE,MAAM,OAAO,MAAM,CAAC;AAC7C,SAAM,UAAU;KAEnB;EACD,OAAO,UAAU;AACf,2BAAwB;GAExB,IAAI,SAA2B;AAE/B,YAAS,MAAM,UAAU,WAAW,mBAAmB,UAAU,CAAC;AAElE,YAAS,MAAM,SAAS,WAAW,aAAa,YAAY;AAC1D,QAAI,OACF;IAIF,MAAM,sBAAsB,wBAAwB;AAEpD,cADiB,MAAM,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,MAAM,CAAC,CACnD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;KAAU,CAAC,CAAC;AAE3D,UAAM,UAAU;KAChB;AAEF,YAAS,MAAM,WAAW,IAAI,aAAa,YAAY;AACrD,QAAI,OACF,OAAM,OAAO,OAAO;KAEtB;;EAEJ,QAAQ,UAAU;AAChB,2BAAwB;GAExB,IAAI,SAA2B;AAE/B,YAAS,MAAM,UAAU,WAAW,mBAAmB,UAAU,CAAC;AAElE,YAAS,MAAM,SAAS,WAAW,aAAa,YAAY;AAC1D,QAAI,OACF;IAIF,MAAM,sBAAsB,wBAAwB;AAEpD,cADiB,MAAM,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,MAAM,CAAC,CACnD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;KAAU,CAAC,CAAC;AAE3D,UAAM,UAAU;KAChB;AAEF,YAAS,MAAM,WAAW,IAAI,aAAa,YAAY;AACrD,QAAI,OACF,OAAM,OAAO,OAAO;KAEtB;AAEF,YAAS,MAAM,KAAK,IAAI,mBAAmB;AACzC,YAAQ,KAAK,OAAO,cAAc,+BAA+B;KACjE;;EAEJ,SAAS,EACP,SAAS;AACP,2BAAwB;KAE3B;EACF"} | ||
| {"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,EAAE,EAC1D,qBAC2E;CAC3E,IAAI,OAAe,QAAQ,KAAK;CAChC,IAAI;CACJ,IAAI;CAEJ,MAAM,gCACJ,WAAW,0BAA0B;CACvC,MAAM,+BAA+B;AACnC,UAAA,GAAA,UAAA,YAAkB,WAAW,gBAAgB,GACzC,WAAW,mBAAA,GAAA,UAAA,MACN,MAAM,WAAW,gBAAgB;;CAG5C,MAAM,0BAA0B,SAA6B;AAC3D,MAAI,MAAM,KACR,QAAO,KAAK;AAEd,MAAI,OAAO,YAAY,WACrB,cAAa,SAAS;MAEtB,cAAa,eAAA,UAAU,SAAS,KAAK;AAEvC,cAAY,IAAI,2BAAA,UAAU;GACxB,QAAQ;GACR,MAAM;GACP,CAAC;;CAGJ,MAAM,WAAW,OAAO,SAGlB;AACJ,MAAI,yBAAyB,CAC3B;EAEF,IAAI,iBAA6C,KAAA;AACjD,MAAI,MAAM;GACR,MAAM,YAAA,GAAA,UAAA,WAAqB,KAAK,KAAK;AACrC,OAAI,cAAA,GAAA,2BAAA,mBAA+B,EAAE,iBAAiB,MAAM,CAAC,EAAE;AAC7D,4BAAwB;AACxB;;AAEF,oBAAiB;IAAE,MAAM;IAAU,MAAM,KAAK;IAAO;;AAGvD,MAAI;AACF,SAAM,UAAU,IAAI,eAAe;AACnC,uBAAoB,eAAe,UAAU,oBAAoB;WAC1D,GAAG;AACV,WAAQ,MAAM,EAAE;;;AAIpB,QAAO;EACL,MAAM;EACN,SAAS;EACT,MAAM,YAAY,IAAI,EAAE,SAAS;AAC/B,SAAM,SAAS;IACb,MAAM;IACN;IACD,CAAC;;EAEJ,MAAM,EACJ,MAAM,eAAe,QAAQ;AAC3B,0BAAuB,EAAE,MAAM,OAAO,MAAM,CAAC;AAC7C,SAAM,UAAU;KAEnB;EACD,OAAO,UAAU;AACf,2BAAwB;GAExB,IAAI,SAA2B;AAE/B,YAAS,MAAM,UAAU,WAAW,mBAAmB,UAAU,CAAC;AAElE,YAAS,MAAM,SAAS,WAAW,aAAa,YAAY;AAC1D,QAAI,OACF;IAIF,MAAM,sBAAsB,wBAAwB;AAEpD,cADiB,MAAM,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,MAAM,CAAC,CACnD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;KAAU,CAAC,CAAC;AAE3D,UAAM,UAAU;KAChB;AAEF,YAAS,MAAM,WAAW,IAAI,aAAa,YAAY;AACrD,QAAI,OACF,OAAM,OAAO,OAAO;KAEtB;;EAEJ,QAAQ,UAAU;AAChB,2BAAwB;GAExB,IAAI,SAA2B;AAE/B,YAAS,MAAM,UAAU,WAAW,mBAAmB,UAAU,CAAC;AAElE,YAAS,MAAM,SAAS,WAAW,aAAa,YAAY;AAC1D,QAAI,OACF;IAIF,MAAM,sBAAsB,wBAAwB;AAEpD,cADiB,MAAM,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,MAAM,CAAC,CACnD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;KAAU,CAAC,CAAC;AAE3D,UAAM,UAAU;KAChB;AAEF,YAAS,MAAM,WAAW,IAAI,aAAa,YAAY;AACrD,QAAI,OACF,OAAM,OAAO,OAAO;KAEtB;AAEF,YAAS,MAAM,KAAK,IAAI,mBAAmB;AACzC,YAAQ,KAAK,OAAO,cAAc,+BAA+B;KACjE;;EAEJ,SAAS,EACP,SAAS;AACP,2BAAwB;KAE3B;EACF;;AAGH,IAAa,kCAER,UAAU,EAAE,KAAK;AACpB,QAAO,4BAA4B,SAAS,8BAAA,2BAA2B,CAAC"} |
| import { UnpluginFactory } from 'unplugin'; | ||
| import { Config } from './config.cjs'; | ||
| import { RouterPluginContext } from './router-plugin-context.cjs'; | ||
| export declare function createRouterGeneratorPlugin(options: Partial<Config | (() => Config)> | undefined, routerPluginContext: RouterPluginContext): ReturnType<UnpluginFactory<Partial<Config | (() => Config)> | undefined>>; | ||
| export declare const unpluginRouterGeneratorFactory: UnpluginFactory<Partial<Config | (() => Config)> | undefined>; |
@@ -19,5 +19,8 @@ require("../_virtual/_rolldown/runtime.cjs"); | ||
| ]; | ||
| var unpluginRouterHmrFactory = (options = {}) => { | ||
| function createRouterHmrPlugin(options = {}, routerPluginContext) { | ||
| let ROOT = process.cwd(); | ||
| let userConfig = options; | ||
| const resolveUserConfig = () => { | ||
| return require_config.getConfig(typeof options === "function" ? options() : options, ROOT); | ||
| }; | ||
| let userConfig = resolveUserConfig(); | ||
| return { | ||
@@ -33,3 +36,3 @@ name: "tanstack-router:hmr", | ||
| const normalizedId = require_utils.normalizePath(id); | ||
| const routeEntry = globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId); | ||
| const routeEntry = routerPluginContext.routesByFile.get(normalizedId); | ||
| if (!routeEntry) return null; | ||
@@ -84,3 +87,3 @@ if (require_utils.debug) console.info("Adding HMR handling to route ", normalizedId); | ||
| ROOT = config.root; | ||
| userConfig = require_config.getConfig(options, ROOT); | ||
| userConfig = resolveUserConfig(); | ||
| }, | ||
@@ -93,6 +96,6 @@ applyToEnvironment(environment) { | ||
| }; | ||
| }; | ||
| } | ||
| //#endregion | ||
| exports.unpluginRouterHmrFactory = unpluginRouterHmrFactory; | ||
| exports.createRouterHmrPlugin = createRouterHmrPlugin; | ||
| //# sourceMappingURL=router-hmr-plugin.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"router-hmr-plugin.cjs","names":[],"sources":["../../../src/core/router-hmr-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport { compileCodeSplitReferenceRoute } from './code-splitter/compilers'\nimport { getReferenceRouteCompilerPlugins } from './code-splitter/plugins/framework-plugins'\nimport { createRouteHmrStatement } from './hmr'\nimport { debug, normalizePath } 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 const normalizedId = normalizePath(id)\n const routeEntry = globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId)\n if (!routeEntry) {\n return null\n }\n\n if (debug) console.info('Adding HMR handling to route ', normalizedId)\n\n const hmrStyle = userConfig.plugin?.hmr?.style ?? 'vite'\n\n if (userConfig.target === 'react') {\n const compilerPlugins = getReferenceRouteCompilerPlugins({\n targetFramework: 'react',\n addHmr: true,\n hmrStyle,\n })\n const compiled = compileCodeSplitReferenceRoute({\n code,\n filename: normalizedId,\n id: normalizedId,\n addHmr: true,\n hmrStyle,\n hmrRouteId: routeEntry.routeId,\n codeSplitGroupings: [],\n targetFramework: 'react',\n compilerPlugins,\n })\n\n if (compiled) {\n if (debug) {\n logDiff(code, compiled.code)\n console.log('Output:\\n', compiled.code + '\\n\\n')\n }\n\n return compiled\n }\n }\n\n const ast = parseAst({ code })\n ast.program.body.push(\n ...createRouteHmrStatement([], {\n hmrStyle,\n targetFramework: userConfig.target,\n routeId: routeEntry.routeId,\n }),\n )\n const result = generateFromAst(ast, {\n sourceMaps: true,\n filename: normalizedId,\n sourceFileName: normalizedId,\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"],"mappings":";;;;;;;;;;;;;AAeA,IAAM,cAAc;CAClB;CACA;CACA;CACD;AACD,IAAa,4BAER,UAAU,EAAE,KAAK;CACpB,IAAI,OAAe,QAAQ,KAAK;CAChC,IAAI,aAAa;AAEjB,QAAO;EACL,MAAM;EACN,SAAS;EACT,WAAW;GACT,QAAQ;IAEN,IAAI;IACJ,MAAM,EACJ,SAAS,aACV;IACF;GACD,QAAQ,MAAM,IAAI;IAChB,MAAM,eAAe,cAAA,cAAc,GAAG;IACtC,MAAM,aAAa,WAAW,sBAAsB,IAAI,aAAa;AACrE,QAAI,CAAC,WACH,QAAO;AAGT,QAAI,cAAA,MAAO,SAAQ,KAAK,iCAAiC,aAAa;IAEtE,MAAM,WAAW,WAAW,QAAQ,KAAK,SAAS;AAElD,QAAI,WAAW,WAAW,SAAS;KACjC,MAAM,kBAAkB,0BAAA,iCAAiC;MACvD,iBAAiB;MACjB,QAAQ;MACR;MACD,CAAC;KACF,MAAM,WAAW,kBAAA,+BAA+B;MAC9C;MACA,UAAU;MACV,IAAI;MACJ,QAAQ;MACR;MACA,YAAY,WAAW;MACvB,oBAAoB,EAAE;MACtB,iBAAiB;MACjB;MACD,CAAC;AAEF,SAAI,UAAU;AACZ,UAAI,cAAA,OAAO;AACT,QAAA,GAAA,uBAAA,SAAQ,MAAM,SAAS,KAAK;AAC5B,eAAQ,IAAI,aAAa,SAAS,OAAO,OAAO;;AAGlD,aAAO;;;IAIX,MAAM,OAAA,GAAA,uBAAA,UAAe,EAAE,MAAM,CAAC;AAC9B,QAAI,QAAQ,KAAK,KACf,GAAG,uBAAA,wBAAwB,EAAE,EAAE;KAC7B;KACA,iBAAiB,WAAW;KAC5B,SAAS,WAAW;KACrB,CAAC,CACH;IACD,MAAM,UAAA,GAAA,uBAAA,iBAAyB,KAAK;KAClC,YAAY;KACZ,UAAU;KACV,gBAAgB;KACjB,CAAC;AACF,QAAI,cAAA,OAAO;AACT,MAAA,GAAA,uBAAA,SAAQ,MAAM,OAAO,KAAK;AAC1B,aAAQ,IAAI,aAAa,OAAO,OAAO,OAAO;;AAEhD,WAAO;;GAEV;EACD,MAAM;GACJ,eAAe,QAAQ;AACrB,WAAO,OAAO;AACd,iBAAa,eAAA,UAAU,SAAS,KAAK;;GAEvC,mBAAmB,aAAa;AAC9B,QAAI,WAAW,QAAQ,MAAM,gBAC3B,QAAO,WAAW,OAAO,KAAK,oBAAoB,YAAY;AAEhE,WAAO;;GAEV;EACF"} | ||
| {"version":3,"file":"router-hmr-plugin.cjs","names":[],"sources":["../../../src/core/router-hmr-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport { compileCodeSplitReferenceRoute } from './code-splitter/compilers'\nimport { getReferenceRouteCompilerPlugins } from './code-splitter/plugins/framework-plugins'\nimport { createRouteHmrStatement } from './hmr'\nimport { debug, normalizePath } from './utils'\nimport { getConfig } from './config'\nimport { createRouterPluginContext } from './router-plugin-context'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\nimport type { RouterPluginContext } from './router-plugin-context'\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]\n\nexport function createRouterHmrPlugin(\n options: Partial<Config | (() => Config)> | undefined = {},\n routerPluginContext: RouterPluginContext,\n): ReturnType<UnpluginFactory<Partial<Config> | undefined>> {\n let ROOT: string = process.cwd()\n\n const resolveUserConfig = () => {\n return getConfig(typeof options === 'function' ? options() : options, ROOT)\n }\n\n let userConfig = resolveUserConfig()\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 const normalizedId = normalizePath(id)\n const routeEntry = routerPluginContext.routesByFile.get(normalizedId)\n if (!routeEntry) {\n return null\n }\n\n if (debug) console.info('Adding HMR handling to route ', normalizedId)\n\n const hmrStyle = userConfig.plugin?.hmr?.style ?? 'vite'\n\n if (userConfig.target === 'react') {\n const compilerPlugins = getReferenceRouteCompilerPlugins({\n targetFramework: 'react',\n addHmr: true,\n hmrStyle,\n })\n const compiled = compileCodeSplitReferenceRoute({\n code,\n filename: normalizedId,\n id: normalizedId,\n addHmr: true,\n hmrStyle,\n hmrRouteId: routeEntry.routeId,\n codeSplitGroupings: [],\n targetFramework: 'react',\n compilerPlugins,\n })\n\n if (compiled) {\n if (debug) {\n logDiff(code, compiled.code)\n console.log('Output:\\n', compiled.code + '\\n\\n')\n }\n\n return compiled\n }\n }\n\n const ast = parseAst({ code })\n ast.program.body.push(\n ...createRouteHmrStatement([], {\n hmrStyle,\n targetFramework: userConfig.target,\n routeId: routeEntry.routeId,\n }),\n )\n const result = generateFromAst(ast, {\n sourceMaps: true,\n filename: normalizedId,\n sourceFileName: normalizedId,\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 = resolveUserConfig()\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\nexport const unpluginRouterHmrFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n return createRouterHmrPlugin(options, createRouterPluginContext())\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,IAAM,cAAc;CAClB;CACA;CACA;CACD;AAED,SAAgB,sBACd,UAAwD,EAAE,EAC1D,qBAC0D;CAC1D,IAAI,OAAe,QAAQ,KAAK;CAEhC,MAAM,0BAA0B;AAC9B,SAAO,eAAA,UAAU,OAAO,YAAY,aAAa,SAAS,GAAG,SAAS,KAAK;;CAG7E,IAAI,aAAa,mBAAmB;AAEpC,QAAO;EACL,MAAM;EACN,SAAS;EACT,WAAW;GACT,QAAQ;IAEN,IAAI;IACJ,MAAM,EACJ,SAAS,aACV;IACF;GACD,QAAQ,MAAM,IAAI;IAChB,MAAM,eAAe,cAAA,cAAc,GAAG;IACtC,MAAM,aAAa,oBAAoB,aAAa,IAAI,aAAa;AACrE,QAAI,CAAC,WACH,QAAO;AAGT,QAAI,cAAA,MAAO,SAAQ,KAAK,iCAAiC,aAAa;IAEtE,MAAM,WAAW,WAAW,QAAQ,KAAK,SAAS;AAElD,QAAI,WAAW,WAAW,SAAS;KACjC,MAAM,kBAAkB,0BAAA,iCAAiC;MACvD,iBAAiB;MACjB,QAAQ;MACR;MACD,CAAC;KACF,MAAM,WAAW,kBAAA,+BAA+B;MAC9C;MACA,UAAU;MACV,IAAI;MACJ,QAAQ;MACR;MACA,YAAY,WAAW;MACvB,oBAAoB,EAAE;MACtB,iBAAiB;MACjB;MACD,CAAC;AAEF,SAAI,UAAU;AACZ,UAAI,cAAA,OAAO;AACT,QAAA,GAAA,uBAAA,SAAQ,MAAM,SAAS,KAAK;AAC5B,eAAQ,IAAI,aAAa,SAAS,OAAO,OAAO;;AAGlD,aAAO;;;IAIX,MAAM,OAAA,GAAA,uBAAA,UAAe,EAAE,MAAM,CAAC;AAC9B,QAAI,QAAQ,KAAK,KACf,GAAG,uBAAA,wBAAwB,EAAE,EAAE;KAC7B;KACA,iBAAiB,WAAW;KAC5B,SAAS,WAAW;KACrB,CAAC,CACH;IACD,MAAM,UAAA,GAAA,uBAAA,iBAAyB,KAAK;KAClC,YAAY;KACZ,UAAU;KACV,gBAAgB;KACjB,CAAC;AACF,QAAI,cAAA,OAAO;AACT,MAAA,GAAA,uBAAA,SAAQ,MAAM,OAAO,KAAK;AAC1B,aAAQ,IAAI,aAAa,OAAO,OAAO,OAAO;;AAEhD,WAAO;;GAEV;EACD,MAAM;GACJ,eAAe,QAAQ;AACrB,WAAO,OAAO;AACd,iBAAa,mBAAmB;;GAElC,mBAAmB,aAAa;AAC9B,QAAI,WAAW,QAAQ,MAAM,gBAC3B,QAAO,WAAW,OAAO,KAAK,oBAAoB,YAAY;AAEhE,WAAO;;GAEV;EACF"} |
| import { UnpluginFactory } from 'unplugin'; | ||
| import { Config } from './config.cjs'; | ||
| import { RouterPluginContext } from './router-plugin-context.cjs'; | ||
| export declare function createRouterHmrPlugin(options: Partial<Config | (() => Config)> | undefined, routerPluginContext: RouterPluginContext): ReturnType<UnpluginFactory<Partial<Config> | undefined>>; | ||
| export declare const unpluginRouterHmrFactory: UnpluginFactory<Partial<Config> | undefined>; |
+10
-2
@@ -7,2 +7,3 @@ Object.defineProperties(exports, { | ||
| const require_config = require("./core/config.cjs"); | ||
| const require_router_plugin_context = require("./core/router-plugin-context.cjs"); | ||
| const require_router_code_splitter_plugin = require("./core/router-code-splitter-plugin.cjs"); | ||
@@ -13,2 +14,3 @@ const require_router_generator_plugin = require("./core/router-generator-plugin.cjs"); | ||
| //#region src/esbuild.ts | ||
| var defaultRouterPluginContext = require_router_plugin_context.createRouterPluginContext(); | ||
| /** | ||
@@ -23,3 +25,6 @@ * @example | ||
| */ | ||
| var TanStackRouterGeneratorEsbuild = (0, unplugin.createEsbuildPlugin)(require_router_generator_plugin.unpluginRouterGeneratorFactory); | ||
| var TanStackRouterGeneratorEsbuild = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return (0, unplugin.createEsbuildPlugin)((pluginOptions) => require_router_generator_plugin.createRouterGeneratorPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -34,3 +39,6 @@ * @example | ||
| */ | ||
| var TanStackRouterCodeSplitterEsbuild = (0, unplugin.createEsbuildPlugin)(require_router_code_splitter_plugin.unpluginRouterCodeSplitterFactory); | ||
| var TanStackRouterCodeSplitterEsbuild = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return (0, unplugin.createEsbuildPlugin)((pluginOptions) => require_router_code_splitter_plugin.createRouterCodeSplitterPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -37,0 +45,0 @@ * @example |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"esbuild.cjs","names":[],"sources":["../../src/esbuild.ts"],"sourcesContent":["import { createEsbuildPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\n\nimport type { CodeSplittingOptions, Config } from './core/config'\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterGeneratorEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterGeneratorEsbuild = createEsbuildPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterCodeSplitterEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterEsbuild = createEsbuildPlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [tanstackRouter()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterEsbuild = createEsbuildPlugin(unpluginRouterComposedFactory)\nconst tanstackRouter = TanStackRouterEsbuild\nexport default TanStackRouterEsbuild\n\nexport {\n configSchema,\n TanStackRouterGeneratorEsbuild,\n TanStackRouterCodeSplitterEsbuild,\n TanStackRouterEsbuild,\n tanstackRouter,\n}\n\nexport type { Config, CodeSplittingOptions }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAkBA,IAAM,kCAAA,GAAA,SAAA,qBACJ,gCAAA,+BACD;;;;;;;;;;AAWD,IAAM,qCAAA,GAAA,SAAA,qBACJ,oCAAA,kCACD;;;;;;;;;;AAWD,IAAM,yBAAA,GAAA,SAAA,qBAA4C,+BAAA,8BAA8B;AAChF,IAAM,iBAAiB"} | ||
| {"version":3,"file":"esbuild.cjs","names":[],"sources":["../../src/esbuild.ts"],"sourcesContent":["import { createEsbuildPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin'\nimport { createRouterGeneratorPlugin } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport { createRouterPluginContext } from './core/router-plugin-context'\n\nimport type { CodeSplittingOptions, Config } from './core/config'\nimport type { RouterPluginContext } from './core/router-plugin-context'\n\ntype RouterPluginOptions = Partial<Config | (() => Config)> | undefined\n\nconst defaultRouterPluginContext = createRouterPluginContext()\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterGeneratorEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterGeneratorEsbuild = (\n options?: RouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createEsbuildPlugin((pluginOptions: RouterPluginOptions) =>\n createRouterGeneratorPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterCodeSplitterEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterEsbuild = (\n options?: RouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createEsbuildPlugin((pluginOptions: RouterPluginOptions) =>\n createRouterCodeSplitterPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [tanstackRouter()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterEsbuild = createEsbuildPlugin(unpluginRouterComposedFactory)\nconst tanstackRouter = TanStackRouterEsbuild\nexport default TanStackRouterEsbuild\n\nexport {\n configSchema,\n TanStackRouterGeneratorEsbuild,\n TanStackRouterCodeSplitterEsbuild,\n TanStackRouterEsbuild,\n tanstackRouter,\n}\n\nexport type { Config, CodeSplittingOptions, RouterPluginContext }\n"],"mappings":";;;;;;;;;;;;AAaA,IAAM,6BAA6B,8BAAA,2BAA2B;;;;;;;;;;AAW9D,IAAM,kCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,SAAA,GAAA,SAAA,sBAA4B,kBAC1B,gCAAA,4BAA4B,eAAe,cAAc,CAC1D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,qCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,SAAA,GAAA,SAAA,sBAA4B,kBAC1B,oCAAA,+BAA+B,eAAe,cAAc,CAC7D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,yBAAA,GAAA,SAAA,qBAA4C,+BAAA,8BAA8B;AAChF,IAAM,iBAAiB"} |
| import { configSchema, CodeSplittingOptions, Config } from './core/config.cjs'; | ||
| import { RouterPluginContext } from './core/router-plugin-context.cjs'; | ||
| type RouterPluginOptions = Partial<Config | (() => Config)> | undefined; | ||
| /** | ||
@@ -11,49 +13,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterGeneratorEsbuild: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('unplugin').EsbuildPlugin; | ||
| declare const TanStackRouterGeneratorEsbuild: (options?: RouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('unplugin').EsbuildPlugin; | ||
| /** | ||
@@ -68,49 +24,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterCodeSplitterEsbuild: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('unplugin').EsbuildPlugin; | ||
| declare const TanStackRouterCodeSplitterEsbuild: (options?: RouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('unplugin').EsbuildPlugin; | ||
| /** | ||
@@ -221,2 +131,2 @@ * @example | ||
| export { configSchema, TanStackRouterGeneratorEsbuild, TanStackRouterCodeSplitterEsbuild, TanStackRouterEsbuild, tanstackRouter, }; | ||
| export type { Config, CodeSplittingOptions }; | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext }; |
| Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); | ||
| const require_config = require("./core/config.cjs"); | ||
| const require_constants = require("./core/constants.cjs"); | ||
| const require_router_plugin_context = require("./core/router-plugin-context.cjs"); | ||
| const require_router_code_splitter_plugin = require("./core/router-code-splitter-plugin.cjs"); | ||
| const require_router_generator_plugin = require("./core/router-generator-plugin.cjs"); | ||
| exports.configSchema = require_config.configSchema; | ||
| exports.createRouterPluginContext = require_router_plugin_context.createRouterPluginContext; | ||
| exports.defaultCodeSplitGroupings = require_constants.defaultCodeSplitGroupings; | ||
@@ -8,0 +10,0 @@ exports.getConfig = require_config.getConfig; |
| export { configSchema, getConfig } from './core/config.cjs'; | ||
| export { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin.cjs'; | ||
| export { unpluginRouterGeneratorFactory } from './core/router-generator-plugin.cjs'; | ||
| export { createRouterPluginContext } from './core/router-plugin-context.cjs'; | ||
| export type { Config, ConfigInput, ConfigOutput, CodeSplittingOptions, DeletableNodes, HmrOptions, } from './core/config.cjs'; | ||
| export type { RouterPluginContext } from './core/router-plugin-context.cjs'; | ||
| export { tsrSplit, splitRouteIdentNodes, defaultCodeSplitGroupings, } from './core/constants.cjs'; |
+10
-2
@@ -7,2 +7,3 @@ Object.defineProperties(exports, { | ||
| const require_config = require("./core/config.cjs"); | ||
| const require_router_plugin_context = require("./core/router-plugin-context.cjs"); | ||
| const require_router_code_splitter_plugin = require("./core/router-code-splitter-plugin.cjs"); | ||
@@ -13,2 +14,3 @@ const require_router_generator_plugin = require("./core/router-generator-plugin.cjs"); | ||
| //#region src/rspack.ts | ||
| var defaultRouterPluginContext = require_router_plugin_context.createRouterPluginContext(); | ||
| /** | ||
@@ -47,3 +49,6 @@ * Rspack uses webpack-compatible `module.hot` / `import.meta.webpackHot` HMR. | ||
| */ | ||
| var TanStackRouterGeneratorRspack = /* @__PURE__ */ (0, unplugin.createRspackPlugin)(require_router_generator_plugin.unpluginRouterGeneratorFactory); | ||
| var TanStackRouterGeneratorRspack = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return (0, unplugin.createRspackPlugin)((pluginOptions) => require_router_generator_plugin.createRouterGeneratorPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -62,3 +67,6 @@ * @example | ||
| */ | ||
| var TanStackRouterCodeSplitterRspack = /* @__PURE__ */ (0, unplugin.createRspackPlugin)((options, meta) => require_router_code_splitter_plugin.unpluginRouterCodeSplitterFactory(withWebpackHmrStyle(options), meta)); | ||
| var TanStackRouterCodeSplitterRspack = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return (0, unplugin.createRspackPlugin)((pluginOptions) => require_router_code_splitter_plugin.createRouterCodeSplitterPlugin(withWebpackHmrStyle(pluginOptions), pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -65,0 +73,0 @@ * @example |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"rspack.cjs","names":[],"sources":["../../src/rspack.ts"],"sourcesContent":["import { createRspackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport type { CodeSplittingOptions, Config } from './core/config'\n\ntype RspackRouterPluginOptions = Partial<Config> | (() => Partial<Config>)\n\n/**\n * Rspack uses webpack-compatible `module.hot` / `import.meta.webpackHot` HMR.\n * Force `plugin.hmr.style = 'webpack'` so the router HMR adapter emits\n * `module.hot`-style accept/dispose code instead of Vite's callback-receive\n * variant, regardless of what the user passes (or doesn't pass).\n */\nfunction withWebpackHmrStyle(\n options: RspackRouterPluginOptions | undefined,\n): RspackRouterPluginOptions {\n const mergeHmrStyle = (\n config: Partial<Config> | undefined,\n ): Partial<Config> => ({\n ...config,\n plugin: {\n ...config?.plugin,\n hmr: {\n ...config?.plugin?.hmr,\n style: 'webpack',\n },\n },\n })\n\n if (typeof options === 'function') {\n return () => mergeHmrStyle(options())\n }\n\n return mergeHmrStyle(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterGeneratorRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterGeneratorRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterCodeSplitterRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterCodeSplitterRspack = /* #__PURE__ */ createRspackPlugin(\n (options, meta) =>\n unpluginRouterCodeSplitterFactory(\n withWebpackHmrStyle(\n options as RspackRouterPluginOptions | undefined,\n ) as Partial<Config | (() => Config)>,\n meta,\n ),\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [tanstackRouter()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterRspack = /* #__PURE__ */ createRspackPlugin(\n (options, meta) =>\n unpluginRouterComposedFactory(\n withWebpackHmrStyle(\n options as RspackRouterPluginOptions | undefined,\n ) as Partial<Config | (() => Config)>,\n meta,\n ),\n)\nconst tanstackRouter = TanStackRouterRspack\nexport default TanStackRouterRspack\nexport {\n configSchema,\n TanStackRouterRspack,\n TanStackRouterGeneratorRspack,\n TanStackRouterCodeSplitterRspack,\n tanstackRouter,\n}\nexport type { Config, CodeSplittingOptions }\n"],"mappings":";;;;;;;;;;;;;;;;;AAgBA,SAAS,oBACP,SAC2B;CAC3B,MAAM,iBACJ,YACqB;EACrB,GAAG;EACH,QAAQ;GACN,GAAG,QAAQ;GACX,KAAK;IACH,GAAG,QAAQ,QAAQ;IACnB,OAAO;IACR;GACF;EACF;AAED,KAAI,OAAO,YAAY,WACrB,cAAa,cAAc,SAAS,CAAC;AAGvC,QAAO,cAAc,QAAQ;;;;;;;;;;;;;;;AAgB/B,IAAM,gCAAgD,iBAAA,GAAA,SAAA,oBACpD,gCAAA,+BACD;;;;;;;;;;;;;;AAeD,IAAM,mCAAmD,iBAAA,GAAA,SAAA,qBACtD,SAAS,SACR,oCAAA,kCACE,oBACE,QACD,EACD,KACD,CACJ;;;;;;;;;;;;;;AAeD,IAAM,uBAAuC,iBAAA,GAAA,SAAA,qBAC1C,SAAS,SACR,+BAAA,8BACE,oBACE,QACD,EACD,KACD,CACJ;AACD,IAAM,iBAAiB"} | ||
| {"version":3,"file":"rspack.cjs","names":[],"sources":["../../src/rspack.ts"],"sourcesContent":["import { createRspackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin'\nimport { createRouterGeneratorPlugin } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport { createRouterPluginContext } from './core/router-plugin-context'\nimport type { CodeSplittingOptions, Config } from './core/config'\nimport type { RouterPluginContext } from './core/router-plugin-context'\n\ntype RspackRouterPluginOptions = Partial<Config> | (() => Partial<Config>)\n\nconst defaultRouterPluginContext = createRouterPluginContext()\n\n/**\n * Rspack uses webpack-compatible `module.hot` / `import.meta.webpackHot` HMR.\n * Force `plugin.hmr.style = 'webpack'` so the router HMR adapter emits\n * `module.hot`-style accept/dispose code instead of Vite's callback-receive\n * variant, regardless of what the user passes (or doesn't pass).\n */\nfunction withWebpackHmrStyle(\n options: RspackRouterPluginOptions | undefined,\n): RspackRouterPluginOptions {\n const mergeHmrStyle = (\n config: Partial<Config> | undefined,\n ): Partial<Config> => ({\n ...config,\n plugin: {\n ...config?.plugin,\n hmr: {\n ...config?.plugin?.hmr,\n style: 'webpack',\n },\n },\n })\n\n if (typeof options === 'function') {\n return () => mergeHmrStyle(options())\n }\n\n return mergeHmrStyle(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterGeneratorRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterGeneratorRspack = (\n options?: RspackRouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createRspackPlugin((pluginOptions) =>\n createRouterGeneratorPlugin(\n pluginOptions as Partial<Config | (() => Config)> | undefined,\n pluginContext,\n ),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterCodeSplitterRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterCodeSplitterRspack = (\n options?: RspackRouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createRspackPlugin((pluginOptions) =>\n createRouterCodeSplitterPlugin(\n withWebpackHmrStyle(\n pluginOptions as RspackRouterPluginOptions | undefined,\n ) as Partial<Config | (() => Config)>,\n pluginContext,\n ),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [tanstackRouter()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterRspack = /* #__PURE__ */ createRspackPlugin(\n (options, meta) =>\n unpluginRouterComposedFactory(\n withWebpackHmrStyle(\n options as RspackRouterPluginOptions | undefined,\n ) as Partial<Config | (() => Config)>,\n meta,\n ),\n)\nconst tanstackRouter = TanStackRouterRspack\nexport default TanStackRouterRspack\nexport {\n configSchema,\n TanStackRouterRspack,\n TanStackRouterGeneratorRspack,\n TanStackRouterCodeSplitterRspack,\n tanstackRouter,\n}\nexport type { Config, CodeSplittingOptions, RouterPluginContext }\n"],"mappings":";;;;;;;;;;;;AAYA,IAAM,6BAA6B,8BAAA,2BAA2B;;;;;;;AAQ9D,SAAS,oBACP,SAC2B;CAC3B,MAAM,iBACJ,YACqB;EACrB,GAAG;EACH,QAAQ;GACN,GAAG,QAAQ;GACX,KAAK;IACH,GAAG,QAAQ,QAAQ;IACnB,OAAO;IACR;GACF;EACF;AAED,KAAI,OAAO,YAAY,WACrB,cAAa,cAAc,SAAS,CAAC;AAGvC,QAAO,cAAc,QAAQ;;;;;;;;;;;;;;;AAgB/B,IAAM,iCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,SAAA,GAAA,SAAA,qBAA2B,kBACzB,gCAAA,4BACE,eACA,cACD,CACF,CAAC,QAAQ;;;;;;;;;;;;;;;AAgBZ,IAAM,oCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,SAAA,GAAA,SAAA,qBAA2B,kBACzB,oCAAA,+BACE,oBACE,cACD,EACD,cACD,CACF,CAAC,QAAQ;;;;;;;;;;;;;;;AAgBZ,IAAM,uBAAuC,iBAAA,GAAA,SAAA,qBAC1C,SAAS,SACR,+BAAA,8BACE,oBACE,QACD,EACD,KACD,CACJ;AACD,IAAM,iBAAiB"} |
| import { configSchema, CodeSplittingOptions, Config } from './core/config.cjs'; | ||
| import { RouterPluginContext } from './core/router-plugin-context.cjs'; | ||
| type RspackRouterPluginOptions = Partial<Config> | (() => Partial<Config>); | ||
| /** | ||
@@ -15,49 +17,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterGeneratorRspack: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('unplugin').RspackPluginInstance; | ||
| declare const TanStackRouterGeneratorRspack: (options?: RspackRouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('unplugin').RspackPluginInstance; | ||
| /** | ||
@@ -76,3 +32,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterCodeSplitterRspack: (options?: unknown) => import('unplugin').RspackPluginInstance; | ||
| declare const TanStackRouterCodeSplitterRspack: (options?: RspackRouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('unplugin').RspackPluginInstance; | ||
| /** | ||
@@ -95,2 +51,2 @@ * @example | ||
| export { configSchema, TanStackRouterRspack, TanStackRouterGeneratorRspack, TanStackRouterCodeSplitterRspack, tanstackRouter, }; | ||
| export type { Config, CodeSplittingOptions }; | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext }; |
+11
-2
@@ -7,2 +7,3 @@ Object.defineProperties(exports, { | ||
| const require_config = require("./core/config.cjs"); | ||
| const require_router_plugin_context = require("./core/router-plugin-context.cjs"); | ||
| const require_router_code_splitter_plugin = require("./core/router-code-splitter-plugin.cjs"); | ||
@@ -13,2 +14,3 @@ const require_router_generator_plugin = require("./core/router-generator-plugin.cjs"); | ||
| //#region src/vite.ts | ||
| var defaultRouterPluginContext = require_router_plugin_context.createRouterPluginContext(); | ||
| /** | ||
@@ -23,3 +25,6 @@ * @example | ||
| */ | ||
| var tanstackRouterGenerator = (0, unplugin.createVitePlugin)(require_router_generator_plugin.unpluginRouterGeneratorFactory); | ||
| var tanstackRouterGenerator = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return (0, unplugin.createVitePlugin)((pluginOptions) => require_router_generator_plugin.createRouterGeneratorPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -34,3 +39,6 @@ * @example | ||
| */ | ||
| var tanStackRouterCodeSplitter = (0, unplugin.createVitePlugin)(require_router_code_splitter_plugin.unpluginRouterCodeSplitterFactory); | ||
| var tanStackRouterCodeSplitter = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return (0, unplugin.createVitePlugin)((pluginOptions) => require_router_code_splitter_plugin.createRouterCodeSplitterPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -55,2 +63,3 @@ * @example | ||
| exports.tanstackRouter = tanstackRouter; | ||
| exports.getConfig = require_config.getConfig; | ||
| exports.tanStackRouterCodeSplitter = tanStackRouterCodeSplitter; | ||
@@ -57,0 +66,0 @@ exports.tanstackRouterGenerator = tanstackRouterGenerator; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"vite.cjs","names":[],"sources":["../../src/vite.ts"],"sourcesContent":["import { createVitePlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport type { CodeSplittingOptions, Config, getConfig } from './core/config'\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanstackRouterGenerator()],\n * // ...\n * })\n * ```\n */\nconst tanstackRouterGenerator = createVitePlugin(unpluginRouterGeneratorFactory)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanStackRouterCodeSplitter()],\n * // ...\n * })\n * ```\n */\nconst tanStackRouterCodeSplitter = createVitePlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanstackRouter()],\n * // ...\n * })\n * ```\n */\nconst tanstackRouter = createVitePlugin(unpluginRouterComposedFactory)\n\n/**\n * @deprecated Use `tanstackRouter` instead.\n */\nconst TanStackRouterVite = tanstackRouter\n\nexport default tanstackRouter\nexport {\n configSchema,\n getConfig,\n tanStackRouterCodeSplitter,\n tanstackRouterGenerator,\n TanStackRouterVite,\n tanstackRouter,\n}\n\nexport type { Config, CodeSplittingOptions }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAiBA,IAAM,2BAAA,GAAA,SAAA,kBAA2C,gCAAA,+BAA+B;;;;;;;;;;AAWhF,IAAM,8BAAA,GAAA,SAAA,kBACJ,oCAAA,kCACD;;;;;;;;;;AAWD,IAAM,kBAAA,GAAA,SAAA,kBAAkC,+BAAA,8BAA8B;;;;AAKtE,IAAM,qBAAqB"} | ||
| {"version":3,"file":"vite.cjs","names":[],"sources":["../../src/vite.ts"],"sourcesContent":["import { createVitePlugin } from 'unplugin'\n\nimport { configSchema, getConfig } from './core/config'\nimport { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin'\nimport { createRouterGeneratorPlugin } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport { createRouterPluginContext } from './core/router-plugin-context'\nimport type { CodeSplittingOptions, Config } from './core/config'\nimport type { RouterPluginContext } from './core/router-plugin-context'\n\ntype RouterPluginOptions = Partial<Config | (() => Config)> | undefined\n\nconst defaultRouterPluginContext = createRouterPluginContext()\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanstackRouterGenerator()],\n * // ...\n * })\n * ```\n */\nconst tanstackRouterGenerator = (\n options?: RouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createVitePlugin((pluginOptions: RouterPluginOptions) =>\n createRouterGeneratorPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanStackRouterCodeSplitter()],\n * // ...\n * })\n * ```\n */\nconst tanStackRouterCodeSplitter = (\n options?: RouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createVitePlugin((pluginOptions: RouterPluginOptions) =>\n createRouterCodeSplitterPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanstackRouter()],\n * // ...\n * })\n * ```\n */\nconst tanstackRouter = createVitePlugin(unpluginRouterComposedFactory)\n\n/**\n * @deprecated Use `tanstackRouter` instead.\n */\nconst TanStackRouterVite = tanstackRouter\n\nexport default tanstackRouter\nexport {\n configSchema,\n getConfig,\n tanStackRouterCodeSplitter,\n tanstackRouterGenerator,\n TanStackRouterVite,\n tanstackRouter,\n}\n\nexport type { Config, CodeSplittingOptions, RouterPluginContext }\n"],"mappings":";;;;;;;;;;;;AAYA,IAAM,6BAA6B,8BAAA,2BAA2B;;;;;;;;;;AAW9D,IAAM,2BACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,SAAA,GAAA,SAAA,mBAAyB,kBACvB,gCAAA,4BAA4B,eAAe,cAAc,CAC1D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,8BACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,SAAA,GAAA,SAAA,mBAAyB,kBACvB,oCAAA,+BAA+B,eAAe,cAAc,CAC7D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,kBAAA,GAAA,SAAA,kBAAkC,+BAAA,8BAA8B;;;;AAKtE,IAAM,qBAAqB"} |
+6
-96
@@ -1,2 +0,4 @@ | ||
| import { configSchema, CodeSplittingOptions, Config, getConfig } from './core/config.cjs'; | ||
| import { configSchema, getConfig, CodeSplittingOptions, Config } from './core/config.cjs'; | ||
| import { RouterPluginContext } from './core/router-plugin-context.cjs'; | ||
| type RouterPluginOptions = Partial<Config | (() => Config)> | undefined; | ||
| /** | ||
@@ -11,49 +13,3 @@ * @example | ||
| */ | ||
| declare const tanstackRouterGenerator: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('vite').Plugin<any> | import('vite').Plugin<any>[]; | ||
| declare const tanstackRouterGenerator: (options?: RouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('vite').Plugin<any> | import('vite').Plugin<any>[]; | ||
| /** | ||
@@ -68,49 +24,3 @@ * @example | ||
| */ | ||
| declare const tanStackRouterCodeSplitter: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('vite').Plugin<any> | import('vite').Plugin<any>[]; | ||
| declare const tanStackRouterCodeSplitter: (options?: RouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('vite').Plugin<any> | import('vite').Plugin<any>[]; | ||
| /** | ||
@@ -224,2 +134,2 @@ * @example | ||
| export { configSchema, getConfig, tanStackRouterCodeSplitter, tanstackRouterGenerator, TanStackRouterVite, tanstackRouter, }; | ||
| export type { Config, CodeSplittingOptions }; | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext }; |
+10
-2
@@ -7,2 +7,3 @@ Object.defineProperties(exports, { | ||
| const require_config = require("./core/config.cjs"); | ||
| const require_router_plugin_context = require("./core/router-plugin-context.cjs"); | ||
| const require_router_code_splitter_plugin = require("./core/router-code-splitter-plugin.cjs"); | ||
@@ -13,2 +14,3 @@ const require_router_generator_plugin = require("./core/router-generator-plugin.cjs"); | ||
| //#region src/webpack.ts | ||
| var defaultRouterPluginContext = require_router_plugin_context.createRouterPluginContext(); | ||
| /** | ||
@@ -40,3 +42,6 @@ * Webpack uses `module.hot` / `import.meta.webpackHot` HMR. Force | ||
| */ | ||
| var TanStackRouterGeneratorWebpack = /* @__PURE__ */ (0, unplugin.createWebpackPlugin)(require_router_generator_plugin.unpluginRouterGeneratorFactory); | ||
| var TanStackRouterGeneratorWebpack = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return (0, unplugin.createWebpackPlugin)((pluginOptions) => require_router_generator_plugin.createRouterGeneratorPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -51,3 +56,6 @@ * @example | ||
| */ | ||
| var TanStackRouterCodeSplitterWebpack = /* @__PURE__ */ (0, unplugin.createWebpackPlugin)((options, meta) => require_router_code_splitter_plugin.unpluginRouterCodeSplitterFactory(withWebpackHmrStyle(options), meta)); | ||
| var TanStackRouterCodeSplitterWebpack = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return (0, unplugin.createWebpackPlugin)((pluginOptions) => require_router_code_splitter_plugin.createRouterCodeSplitterPlugin(withWebpackHmrStyle(pluginOptions), pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -54,0 +62,0 @@ * @example |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"webpack.cjs","names":[],"sources":["../../src/webpack.ts"],"sourcesContent":["import { createWebpackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport type { CodeSplittingOptions, Config } from './core/config'\n\n/**\n * Webpack uses `module.hot` / `import.meta.webpackHot` HMR. Force\n * `plugin.hmr.style = 'webpack'` so the router HMR adapter emits the correct\n * accept/dispose shape regardless of user config.\n */\nfunction withWebpackHmrStyle(\n options: Partial<Config> | undefined,\n): Partial<Config> {\n return {\n ...options,\n plugin: {\n ...options?.plugin,\n hmr: {\n ...options?.plugin?.hmr,\n style: 'webpack',\n },\n },\n }\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterGeneratorWebpack()],\n * }\n * ```\n */\nconst TanStackRouterGeneratorWebpack = /* #__PURE__ */ createWebpackPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterCodeSplitterWebpack()],\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterWebpack = /* #__PURE__ */ createWebpackPlugin(\n (options, meta) =>\n unpluginRouterCodeSplitterFactory(\n withWebpackHmrStyle(options as Partial<Config> | undefined),\n meta,\n ),\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [tanstackRouter()],\n * }\n * ```\n */\nconst TanStackRouterWebpack = /* #__PURE__ */ createWebpackPlugin(\n (options, meta) =>\n unpluginRouterComposedFactory(\n withWebpackHmrStyle(options as Partial<Config> | undefined),\n meta,\n ),\n)\n\nconst tanstackRouter = TanStackRouterWebpack\nexport default TanStackRouterWebpack\nexport {\n configSchema,\n TanStackRouterWebpack,\n TanStackRouterGeneratorWebpack,\n TanStackRouterCodeSplitterWebpack,\n tanstackRouter,\n}\nexport type { Config, CodeSplittingOptions }\n"],"mappings":";;;;;;;;;;;;;;;;AAaA,SAAS,oBACP,SACiB;AACjB,QAAO;EACL,GAAG;EACH,QAAQ;GACN,GAAG,SAAS;GACZ,KAAK;IACH,GAAG,SAAS,QAAQ;IACpB,OAAO;IACR;GACF;EACF;;;;;;;;;;;AAYH,IAAM,iCAAiD,iBAAA,GAAA,SAAA,qBACrD,gCAAA,+BACD;;;;;;;;;;AAWD,IAAM,oCAAoD,iBAAA,GAAA,SAAA,sBACvD,SAAS,SACR,oCAAA,kCACE,oBAAoB,QAAuC,EAC3D,KACD,CACJ;;;;;;;;;;AAWD,IAAM,wBAAwC,iBAAA,GAAA,SAAA,sBAC3C,SAAS,SACR,+BAAA,8BACE,oBAAoB,QAAuC,EAC3D,KACD,CACJ;AAED,IAAM,iBAAiB"} | ||
| {"version":3,"file":"webpack.cjs","names":[],"sources":["../../src/webpack.ts"],"sourcesContent":["import { createWebpackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin'\nimport { createRouterGeneratorPlugin } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport { createRouterPluginContext } from './core/router-plugin-context'\nimport type { CodeSplittingOptions, Config } from './core/config'\nimport type { RouterPluginContext } from './core/router-plugin-context'\n\nconst defaultRouterPluginContext = createRouterPluginContext()\n\n/**\n * Webpack uses `module.hot` / `import.meta.webpackHot` HMR. Force\n * `plugin.hmr.style = 'webpack'` so the router HMR adapter emits the correct\n * accept/dispose shape regardless of user config.\n */\nfunction withWebpackHmrStyle(\n options: Partial<Config> | undefined,\n): Partial<Config> {\n return {\n ...options,\n plugin: {\n ...options?.plugin,\n hmr: {\n ...options?.plugin?.hmr,\n style: 'webpack',\n },\n },\n }\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterGeneratorWebpack()],\n * }\n * ```\n */\nconst TanStackRouterGeneratorWebpack = (\n options?: Partial<Config>,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createWebpackPlugin((pluginOptions: Partial<Config> | undefined) =>\n createRouterGeneratorPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterCodeSplitterWebpack()],\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterWebpack = (\n options?: Partial<Config>,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createWebpackPlugin((pluginOptions: Partial<Config> | undefined) =>\n createRouterCodeSplitterPlugin(\n withWebpackHmrStyle(pluginOptions),\n pluginContext,\n ),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [tanstackRouter()],\n * }\n * ```\n */\nconst TanStackRouterWebpack = /* #__PURE__ */ createWebpackPlugin(\n (options, meta) =>\n unpluginRouterComposedFactory(\n withWebpackHmrStyle(options as Partial<Config> | undefined),\n meta,\n ),\n)\n\nconst tanstackRouter = TanStackRouterWebpack\nexport default TanStackRouterWebpack\nexport {\n configSchema,\n TanStackRouterWebpack,\n TanStackRouterGeneratorWebpack,\n TanStackRouterCodeSplitterWebpack,\n tanstackRouter,\n}\nexport type { Config, CodeSplittingOptions, RouterPluginContext }\n"],"mappings":";;;;;;;;;;;;AAUA,IAAM,6BAA6B,8BAAA,2BAA2B;;;;;;AAO9D,SAAS,oBACP,SACiB;AACjB,QAAO;EACL,GAAG;EACH,QAAQ;GACN,GAAG,SAAS;GACZ,KAAK;IACH,GAAG,SAAS,QAAQ;IACpB,OAAO;IACR;GACF;EACF;;;;;;;;;;;AAYH,IAAM,kCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,SAAA,GAAA,SAAA,sBAA4B,kBAC1B,gCAAA,4BAA4B,eAAe,cAAc,CAC1D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,qCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,SAAA,GAAA,SAAA,sBAA4B,kBAC1B,oCAAA,+BACE,oBAAoB,cAAc,EAClC,cACD,CACF,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,wBAAwC,iBAAA,GAAA,SAAA,sBAC3C,SAAS,SACR,+BAAA,8BACE,oBAAoB,QAAuC,EAC3D,KACD,CACJ;AAED,IAAM,iBAAiB"} |
| import { configSchema, CodeSplittingOptions, Config } from './core/config.cjs'; | ||
| import { RouterPluginContext } from './core/router-plugin-context.cjs'; | ||
| /** | ||
@@ -11,49 +12,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterGeneratorWebpack: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('unplugin').WebpackPluginInstance; | ||
| declare const TanStackRouterGeneratorWebpack: (options?: Partial<Config>, routerPluginContext?: RouterPluginContext) => import('unplugin').WebpackPluginInstance; | ||
| /** | ||
@@ -68,3 +23,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterCodeSplitterWebpack: (options?: unknown) => import('unplugin').WebpackPluginInstance; | ||
| declare const TanStackRouterCodeSplitterWebpack: (options?: Partial<Config>, routerPluginContext?: RouterPluginContext) => import('unplugin').WebpackPluginInstance; | ||
| /** | ||
@@ -83,2 +38,2 @@ * @example | ||
| export { configSchema, TanStackRouterWebpack, TanStackRouterGeneratorWebpack, TanStackRouterCodeSplitterWebpack, tanstackRouter, }; | ||
| export type { Config, CodeSplittingOptions }; | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext }; |
| import { Config } from './config.js'; | ||
| import { RouterPluginContext } from './router-plugin-context.js'; | ||
| import { UnpluginFactory } from 'unplugin'; | ||
| export declare function createRouterCodeSplitterPlugin(options: Partial<Config | (() => Config)> | undefined, routerPluginContext: RouterPluginContext): ReturnType<UnpluginFactory<Partial<Config | (() => Config)> | undefined>>; | ||
| export declare const unpluginRouterCodeSplitterFactory: UnpluginFactory<Partial<Config | (() => Config)> | undefined>; |
@@ -7,2 +7,3 @@ import { getConfig, splitGroupingsSchema } from "./config.js"; | ||
| import { getReferenceRouteCompilerPlugins } from "./code-splitter/plugins/framework-plugins.js"; | ||
| import { createRouterPluginContext } from "./router-plugin-context.js"; | ||
| import { fileURLToPath, pathToFileURL } from "node:url"; | ||
@@ -44,3 +45,3 @@ import { logDiff } from "@tanstack/router-utils"; | ||
| }; | ||
| var unpluginRouterCodeSplitterFactory = (options = {}, { framework: _framework }) => { | ||
| function createRouterCodeSplitterPlugin(options = {}, routerPluginContext) { | ||
| let ROOT = process.cwd(); | ||
@@ -153,3 +154,3 @@ let userConfig; | ||
| const normalizedId = normalizePath(id); | ||
| const generatorFileInfo = globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId); | ||
| const generatorFileInfo = routerPluginContext.routesByFile.get(normalizedId); | ||
| if (generatorFileInfo && includedCode.some((included) => code.includes(included))) return handleCompilingReferenceFile(code, normalizedId, generatorFileInfo); | ||
@@ -234,6 +235,9 @@ return null; | ||
| ]; | ||
| } | ||
| var unpluginRouterCodeSplitterFactory = (options = {}) => { | ||
| return createRouterCodeSplitterPlugin(options, createRouterPluginContext()); | ||
| }; | ||
| //#endregion | ||
| export { unpluginRouterCodeSplitterFactory }; | ||
| export { createRouterCodeSplitterPlugin, unpluginRouterCodeSplitterFactory }; | ||
| //# sourceMappingURL=router-code-splitter-plugin.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"router-code-splitter-plugin.js","names":[],"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 compileCodeSplitSharedRoute,\n compileCodeSplitVirtualRoute,\n computeSharedBindings,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport { getReferenceRouteCompilerPlugins } from './code-splitter/plugins/framework-plugins'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrShared,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug, normalizePath } from './utils'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\nimport type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator'\nimport type { Config } from './config'\nimport type {\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\nconst CODE_SPLITTER_PLUGIN_NAME =\n 'tanstack-router:code-splitter:compile-reference-file'\n\ntype TransformationPluginInfo = {\n pluginNames: Array<string>\n pkg: string\n usage: string\n}\n\n/**\n * JSX transformation plugins grouped by framework.\n * These plugins must come AFTER the TanStack Router plugin in the Vite config.\n */\nconst TRANSFORMATION_PLUGINS_BY_FRAMEWORK: Record<\n string,\n Array<TransformationPluginInfo>\n> = {\n react: [\n {\n // Babel-based React plugin\n pluginNames: ['vite:react-babel', 'vite:react-refresh'],\n pkg: '@vitejs/plugin-react',\n usage: 'react()',\n },\n {\n // SWC-based React plugin\n pluginNames: ['vite:react-swc', 'vite:react-swc:resolve-runtime'],\n pkg: '@vitejs/plugin-react-swc',\n usage: 'reactSwc()',\n },\n {\n // OXC-based React plugin (deprecated but should still be handled)\n pluginNames: ['vite:react-oxc:config', 'vite:react-oxc:refresh-runtime'],\n pkg: '@vitejs/plugin-react-oxc',\n usage: 'reactOxc()',\n },\n ],\n solid: [\n {\n pluginNames: ['solid'],\n pkg: 'vite-plugin-solid',\n usage: 'solid()',\n },\n ],\n}\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}, { framework: _framework }) => {\n let ROOT: string = process.cwd()\n let userConfig: Config\n\n function initUserConfig() {\n if (typeof options === 'function') {\n userConfig = options()\n } else {\n userConfig = getConfig(options, ROOT)\n }\n }\n const isProduction = process.env.NODE_ENV === 'production'\n // Map from normalized route file path → set of shared binding names.\n // Populated by the reference compiler, consumed by virtual and shared compilers.\n const sharedBindingsMap = new Map<string, Set<string>>()\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 !== undefined) {\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.routeId,\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 // Compute shared bindings before compiling the reference route\n const sharedBindings = computeSharedBindings({\n code,\n codeSplitGroupings: splitGroupings,\n })\n if (sharedBindings.size > 0) {\n sharedBindingsMap.set(id, sharedBindings)\n } else {\n sharedBindingsMap.delete(id)\n }\n\n const addHmr =\n (userConfig.codeSplittingOptions?.addHmr ?? true) && !isProduction\n const hmrStyle = userConfig.plugin?.hmr?.style ?? 'vite'\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n deleteNodes: userConfig.codeSplittingOptions?.deleteNodes\n ? new Set(userConfig.codeSplittingOptions.deleteNodes)\n : undefined,\n addHmr,\n hmrStyle,\n hmrRouteId: generatorNodeInfo.routeId,\n sharedBindings: sharedBindings.size > 0 ? sharedBindings : undefined,\n compilerPlugins: getReferenceRouteCompilerPlugins({\n targetFramework: userConfig.target,\n addHmr,\n hmrStyle,\n }),\n })\n\n if (compiledReferenceRoute === null) {\n if (debug) {\n console.info(\n `No changes made to route \"${id}\", skipping code-splitting.`,\n )\n }\n return null\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 baseId = id.split('?')[0]!\n const resolvedSharedBindings = sharedBindingsMap.get(baseId)\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n sharedBindings: resolvedSharedBindings,\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, tsrShared],\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 normalizedId = normalizePath(id)\n const generatorFileInfo =\n globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId)\n if (\n generatorFileInfo &&\n includedCode.some((included) => code.includes(included))\n ) {\n return handleCompilingReferenceFile(\n code,\n normalizedId,\n generatorFileInfo,\n )\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n initUserConfig()\n\n // Validate plugin order - router must come before JSX transformation plugins\n const routerPluginIndex = config.plugins.findIndex(\n (p) => p.name === CODE_SPLITTER_PLUGIN_NAME,\n )\n\n if (routerPluginIndex === -1) return\n\n const frameworkPlugins =\n TRANSFORMATION_PLUGINS_BY_FRAMEWORK[userConfig.target]\n if (!frameworkPlugins) return\n\n for (const transformPlugin of frameworkPlugins) {\n const transformPluginIndex = config.plugins.findIndex((p) =>\n transformPlugin.pluginNames.includes(p.name),\n )\n\n if (\n transformPluginIndex !== -1 &&\n transformPluginIndex < routerPluginIndex\n ) {\n throw new Error(\n `Plugin order error: '${transformPlugin.pkg}' is placed before '@tanstack/router-plugin'.\\n\\n` +\n `The TanStack Router plugin must come BEFORE JSX transformation plugins.\\n\\n` +\n `Please update your Vite config:\\n\\n` +\n ` plugins: [\\n` +\n ` tanstackRouter(),\\n` +\n ` ${transformPlugin.usage},\\n` +\n ` ]\\n`,\n )\n }\n }\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 initUserConfig()\n },\n\n webpack() {\n ROOT = process.cwd()\n initUserConfig()\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 const normalizedId = normalizePath(fileURLToPath(url))\n return handleCompilingVirtualFile(code, normalizedId)\n },\n },\n\n vite: {\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 name: 'tanstack-router:code-splitter:compile-shared-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: /tsr-shared/,\n },\n handler(code, id) {\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n const normalizedId = normalizePath(fileURLToPath(url))\n const [baseId] = normalizedId.split('?')\n\n if (!baseId) return null\n\n const sharedBindings = sharedBindingsMap.get(baseId)\n if (!sharedBindings || sharedBindings.size === 0) return null\n\n if (debug) console.info('Compiling Shared Module: ', id)\n\n const result = compileCodeSplitSharedRoute({\n code,\n sharedBindings,\n filename: normalizedId,\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\n vite: {\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}\n"],"mappings":";;;;;;;;;;;;;AAgCA,IAAM,4BACJ;;;;;AAYF,IAAM,sCAGF;CACF,OAAO;EACL;GAEE,aAAa,CAAC,oBAAoB,qBAAqB;GACvD,KAAK;GACL,OAAO;GACR;EACD;GAEE,aAAa,CAAC,kBAAkB,iCAAiC;GACjE,KAAK;GACL,OAAO;GACR;EACD;GAEE,aAAa,CAAC,yBAAyB,iCAAiC;GACxE,KAAK;GACL,OAAO;GACR;EACF;CACD,OAAO,CACL;EACE,aAAa,CAAC,QAAQ;EACtB,KAAK;EACL,OAAO;EACR,CACF;CACF;AAED,IAAa,qCAER,UAAU,EAAE,EAAE,EAAE,WAAW,iBAAiB;CAC/C,IAAI,OAAe,QAAQ,KAAK;CAChC,IAAI;CAEJ,SAAS,iBAAiB;AACxB,MAAI,OAAO,YAAY,WACrB,cAAa,SAAS;MAEtB,cAAa,UAAU,SAAS,KAAK;;CAGzC,MAAM,eAAA,QAAA,IAAA,aAAwC;CAG9C,MAAM,oCAAoB,IAAI,KAA0B;CAExD,MAAM,oCAAoC;AACxC,SACE,WAAW,sBAAsB,mBACjC;;CAGJ,MAAM,yBAAyB;AAC7B,SAAO,WAAW,sBAAsB;;CAG1C,MAAM,gCACJ,MACA,IACA,sBAC4B;AAC5B,MAAI,MAAO,SAAQ,KAAK,qBAAqB,GAAG;EAEhD,MAAM,WAAW,kCAAkC,EACjD,MACD,CAAC;AAEF,MAAI,SAAS,cAAc,KAAA,GAAW;GACpC,MAAM,MAAM,qBAAqB,UAAU,SAAS,UAAU;AAC9D,OAAI,CAAC,IAAI,SAAS;IAChB,MAAM,UAAU,IAAI,MAAM,OAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,KAAK,KAAK;AACjE,UAAM,IAAI,MACR,gCAAgC,GAAG,kBAAkB,UACtD;;;EAML,MAAM,sBAFoB,kBAAkB,GAEI,EAC9C,SAAS,kBAAkB,SAC5B,CAAC;AAEF,MAAI,qBAAqB;GACvB,MAAM,MAAM,qBAAqB,UAAU,oBAAoB;AAC/D,OAAI,CAAC,IAAI,SAAS;IAChB,MAAM,UAAU,IAAI,MAAM,OAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,KAAK,KAAK;AACjE,UAAM,IAAI,MACR,sEAAsE,GAAG,kBAAkB,UAC5F;;;EAIL,MAAM,iBACJ,SAAS,aAAa,uBAAuB,6BAA6B;EAG5E,MAAM,iBAAiB,sBAAsB;GAC3C;GACA,oBAAoB;GACrB,CAAC;AACF,MAAI,eAAe,OAAO,EACxB,mBAAkB,IAAI,IAAI,eAAe;MAEzC,mBAAkB,OAAO,GAAG;EAG9B,MAAM,UACH,WAAW,sBAAsB,UAAU,SAAS,CAAC;EACxD,MAAM,WAAW,WAAW,QAAQ,KAAK,SAAS;EAElD,MAAM,yBAAyB,+BAA+B;GAC5D;GACA,oBAAoB;GACpB,iBAAiB,WAAW;GAC5B,UAAU;GACV;GACA,aAAa,WAAW,sBAAsB,cAC1C,IAAI,IAAI,WAAW,qBAAqB,YAAY,GACpD,KAAA;GACJ;GACA;GACA,YAAY,kBAAkB;GAC9B,gBAAgB,eAAe,OAAO,IAAI,iBAAiB,KAAA;GAC3D,iBAAiB,iCAAiC;IAChD,iBAAiB,WAAW;IAC5B;IACA;IACD,CAAC;GACH,CAAC;AAEF,MAAI,2BAA2B,MAAM;AACnC,OAAI,MACF,SAAQ,KACN,6BAA6B,GAAG,6BACjC;AAEH,UAAO;;AAET,MAAI,OAAO;AACT,WAAQ,MAAM,uBAAuB,KAAK;AAC1C,WAAQ,IAAI,aAAa,uBAAuB,OAAO,OAAO;;AAGhE,SAAO;;CAGT,MAAM,8BACJ,MACA,OAC4B;AAC5B,MAAI,MAAO,SAAQ,KAAK,qBAAqB,GAAG;EAEhD,MAAM,CAAC,GAAG,GAAG,iBAAiB,GAAG,MAAM,IAAI;EAG3C,MAAM,aADe,IAAI,gBAAgB,cAAc,KAAK,IAAI,CAAC,CACjC,IAAI,SAAS;AAE7C,MAAI,CAAC,WACH,OAAM,IAAI,MACR,0CAA0C,GAAG,kBAC9C;EAGH,MAAM,cAAc,iBAAiB,WAAW;EAChD,MAAM,WAAW,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC,CAAC,QAAQ,MACjD,qBAAqB,SAAS,EAAS,CACxC;EAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC;EAG7B,MAAM,SAAS,6BAA6B;GAC1C;GACA,UAAU;GACV,cAAc;GACd,gBAN6B,kBAAkB,IAAI,OAAO;GAO3D,CAAC;AAEF,MAAI,OAAO;AACT,WAAQ,MAAM,OAAO,KAAK;AAC1B,WAAQ,IAAI,aAAa,OAAO,OAAO,OAAO;;AAGhD,SAAO;;CAGT,MAAM,eAAe;EACnB;EACA;EACA;EACD;AACD,QAAO;EACL;GACE,MAAM;GACN,SAAS;GAET,WAAW;IACT,QAAQ;KACN,IAAI;MACF,SAAS,CAAC,UAAU,UAAU;MAE9B,SAAS;MACV;KACD,MAAM,EACJ,SAAS,cACV;KACF;IACD,QAAQ,MAAM,IAAI;KAChB,MAAM,eAAe,cAAc,GAAG;KACtC,MAAM,oBACJ,WAAW,sBAAsB,IAAI,aAAa;AACpD,SACE,qBACA,aAAa,MAAM,aAAa,KAAK,SAAS,SAAS,CAAC,CAExD,QAAO,6BACL,MACA,cACA,kBACD;AAGH,YAAO;;IAEV;GAED,MAAM;IACJ,eAAe,QAAQ;AACrB,YAAO,OAAO;AACd,qBAAgB;KAGhB,MAAM,oBAAoB,OAAO,QAAQ,WACtC,MAAM,EAAE,SAAS,0BACnB;AAED,SAAI,sBAAsB,GAAI;KAE9B,MAAM,mBACJ,oCAAoC,WAAW;AACjD,SAAI,CAAC,iBAAkB;AAEvB,UAAK,MAAM,mBAAmB,kBAAkB;MAC9C,MAAM,uBAAuB,OAAO,QAAQ,WAAW,MACrD,gBAAgB,YAAY,SAAS,EAAE,KAAK,CAC7C;AAED,UACE,yBAAyB,MACzB,uBAAuB,kBAEvB,OAAM,IAAI,MACR,wBAAwB,gBAAgB,IAAI,0MAKnC,gBAAgB,MAAM,UAEhC;;;IAIP,mBAAmB,aAAa;AAC9B,SAAI,WAAW,QAAQ,MAAM,gBAC3B,QAAO,WAAW,OAAO,KAAK,oBAAoB,YAAY;AAEhE,YAAO;;IAEV;GAED,SAAS;AACP,WAAO,QAAQ,KAAK;AACpB,oBAAgB;;GAGlB,UAAU;AACR,WAAO,QAAQ,KAAK;AACpB,oBAAgB;;GAEnB;EACD;GACE,MAAM;GACN,SAAS;GAET,WAAW;IACT,QAAQ,EACN,IAAI,aACL;IACD,QAAQ,MAAM,IAAI;KAChB,MAAM,MAAM,cAAc,GAAG;AAC7B,SAAI,aAAa,OAAO,IAAI;AAE5B,YAAO,2BAA2B,MADb,cAAc,cAAc,IAAI,CAAC,CACD;;IAExD;GAED,MAAM,EACJ,mBAAmB,aAAa;AAC9B,QAAI,WAAW,QAAQ,MAAM,gBAC3B,QAAO,WAAW,OAAO,KAAK,oBAAoB,YAAY;AAEhE,WAAO;MAEV;GACF;EACD;GACE,MAAM;GACN,SAAS;GAET,WAAW;IACT,QAAQ,EACN,IAAI,cACL;IACD,QAAQ,MAAM,IAAI;KAChB,MAAM,MAAM,cAAc,GAAG;AAC7B,SAAI,aAAa,OAAO,IAAI;KAC5B,MAAM,eAAe,cAAc,cAAc,IAAI,CAAC;KACtD,MAAM,CAAC,UAAU,aAAa,MAAM,IAAI;AAExC,SAAI,CAAC,OAAQ,QAAO;KAEpB,MAAM,iBAAiB,kBAAkB,IAAI,OAAO;AACpD,SAAI,CAAC,kBAAkB,eAAe,SAAS,EAAG,QAAO;AAEzD,SAAI,MAAO,SAAQ,KAAK,6BAA6B,GAAG;KAExD,MAAM,SAAS,4BAA4B;MACzC;MACA;MACA,UAAU;MACX,CAAC;AAEF,SAAI,OAAO;AACT,cAAQ,MAAM,OAAO,KAAK;AAC1B,cAAQ,IAAI,aAAa,OAAO,OAAO,OAAO;;AAGhD,YAAO;;IAEV;GAED,MAAM,EACJ,mBAAmB,aAAa;AAC9B,QAAI,WAAW,QAAQ,MAAM,gBAC3B,QAAO,WAAW,OAAO,KAAK,oBAAoB,YAAY;AAEhE,WAAO;MAEV;GACF;EACF"} | ||
| {"version":3,"file":"router-code-splitter-plugin.js","names":[],"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 compileCodeSplitSharedRoute,\n compileCodeSplitVirtualRoute,\n computeSharedBindings,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport { getReferenceRouteCompilerPlugins } from './code-splitter/plugins/framework-plugins'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrShared,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug, normalizePath } from './utils'\nimport { createRouterPluginContext } from './router-plugin-context'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\nimport type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator'\nimport type { Config } from './config'\nimport type { RouterPluginContext } from './router-plugin-context'\nimport type {\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\nconst CODE_SPLITTER_PLUGIN_NAME =\n 'tanstack-router:code-splitter:compile-reference-file'\n\ntype TransformationPluginInfo = {\n pluginNames: Array<string>\n pkg: string\n usage: string\n}\n\n/**\n * JSX transformation plugins grouped by framework.\n * These plugins must come AFTER the TanStack Router plugin in the Vite config.\n */\nconst TRANSFORMATION_PLUGINS_BY_FRAMEWORK: Record<\n string,\n Array<TransformationPluginInfo>\n> = {\n react: [\n {\n // Babel-based React plugin\n pluginNames: ['vite:react-babel', 'vite:react-refresh'],\n pkg: '@vitejs/plugin-react',\n usage: 'react()',\n },\n {\n // SWC-based React plugin\n pluginNames: ['vite:react-swc', 'vite:react-swc:resolve-runtime'],\n pkg: '@vitejs/plugin-react-swc',\n usage: 'reactSwc()',\n },\n {\n // OXC-based React plugin (deprecated but should still be handled)\n pluginNames: ['vite:react-oxc:config', 'vite:react-oxc:refresh-runtime'],\n pkg: '@vitejs/plugin-react-oxc',\n usage: 'reactOxc()',\n },\n ],\n solid: [\n {\n pluginNames: ['solid'],\n pkg: 'vite-plugin-solid',\n usage: 'solid()',\n },\n ],\n}\n\nexport function createRouterCodeSplitterPlugin(\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\n function initUserConfig() {\n if (typeof options === 'function') {\n userConfig = options()\n } else {\n userConfig = getConfig(options, ROOT)\n }\n }\n const isProduction = process.env.NODE_ENV === 'production'\n // Map from normalized route file path → set of shared binding names.\n // Populated by the reference compiler, consumed by virtual and shared compilers.\n const sharedBindingsMap = new Map<string, Set<string>>()\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 !== undefined) {\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.routeId,\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 // Compute shared bindings before compiling the reference route\n const sharedBindings = computeSharedBindings({\n code,\n codeSplitGroupings: splitGroupings,\n })\n if (sharedBindings.size > 0) {\n sharedBindingsMap.set(id, sharedBindings)\n } else {\n sharedBindingsMap.delete(id)\n }\n\n const addHmr =\n (userConfig.codeSplittingOptions?.addHmr ?? true) && !isProduction\n const hmrStyle = userConfig.plugin?.hmr?.style ?? 'vite'\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n deleteNodes: userConfig.codeSplittingOptions?.deleteNodes\n ? new Set(userConfig.codeSplittingOptions.deleteNodes)\n : undefined,\n addHmr,\n hmrStyle,\n hmrRouteId: generatorNodeInfo.routeId,\n sharedBindings: sharedBindings.size > 0 ? sharedBindings : undefined,\n compilerPlugins: getReferenceRouteCompilerPlugins({\n targetFramework: userConfig.target,\n addHmr,\n hmrStyle,\n }),\n })\n\n if (compiledReferenceRoute === null) {\n if (debug) {\n console.info(\n `No changes made to route \"${id}\", skipping code-splitting.`,\n )\n }\n return null\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 baseId = id.split('?')[0]!\n const resolvedSharedBindings = sharedBindingsMap.get(baseId)\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n sharedBindings: resolvedSharedBindings,\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, tsrShared],\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 normalizedId = normalizePath(id)\n const generatorFileInfo =\n routerPluginContext.routesByFile.get(normalizedId)\n if (\n generatorFileInfo &&\n includedCode.some((included) => code.includes(included))\n ) {\n return handleCompilingReferenceFile(\n code,\n normalizedId,\n generatorFileInfo,\n )\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n initUserConfig()\n\n // Validate plugin order - router must come before JSX transformation plugins\n const routerPluginIndex = config.plugins.findIndex(\n (p) => p.name === CODE_SPLITTER_PLUGIN_NAME,\n )\n\n if (routerPluginIndex === -1) return\n\n const frameworkPlugins =\n TRANSFORMATION_PLUGINS_BY_FRAMEWORK[userConfig.target]\n if (!frameworkPlugins) return\n\n for (const transformPlugin of frameworkPlugins) {\n const transformPluginIndex = config.plugins.findIndex((p) =>\n transformPlugin.pluginNames.includes(p.name),\n )\n\n if (\n transformPluginIndex !== -1 &&\n transformPluginIndex < routerPluginIndex\n ) {\n throw new Error(\n `Plugin order error: '${transformPlugin.pkg}' is placed before '@tanstack/router-plugin'.\\n\\n` +\n `The TanStack Router plugin must come BEFORE JSX transformation plugins.\\n\\n` +\n `Please update your Vite config:\\n\\n` +\n ` plugins: [\\n` +\n ` tanstackRouter(),\\n` +\n ` ${transformPlugin.usage},\\n` +\n ` ]\\n`,\n )\n }\n }\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 initUserConfig()\n },\n\n webpack() {\n ROOT = process.cwd()\n initUserConfig()\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 const normalizedId = normalizePath(fileURLToPath(url))\n return handleCompilingVirtualFile(code, normalizedId)\n },\n },\n\n vite: {\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 name: 'tanstack-router:code-splitter:compile-shared-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: /tsr-shared/,\n },\n handler(code, id) {\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n const normalizedId = normalizePath(fileURLToPath(url))\n const [baseId] = normalizedId.split('?')\n\n if (!baseId) return null\n\n const sharedBindings = sharedBindingsMap.get(baseId)\n if (!sharedBindings || sharedBindings.size === 0) return null\n\n if (debug) console.info('Compiling Shared Module: ', id)\n\n const result = compileCodeSplitSharedRoute({\n code,\n sharedBindings,\n filename: normalizedId,\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\n vite: {\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}\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}) => {\n return createRouterCodeSplitterPlugin(options, createRouterPluginContext())\n}\n"],"mappings":"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"} |
@@ -1,4 +0,5 @@ | ||
| import { unpluginRouterCodeSplitterFactory } from "./router-code-splitter-plugin.js"; | ||
| import { unpluginRouterGeneratorFactory } from "./router-generator-plugin.js"; | ||
| import { unpluginRouterHmrFactory } from "./router-hmr-plugin.js"; | ||
| import { createRouterPluginContext } from "./router-plugin-context.js"; | ||
| import { createRouterCodeSplitterPlugin } from "./router-code-splitter-plugin.js"; | ||
| import { createRouterGeneratorPlugin } from "./router-generator-plugin.js"; | ||
| import { createRouterHmrPlugin } from "./router-hmr-plugin.js"; | ||
| import { getConfig } from "@tanstack/router-generator"; | ||
@@ -16,12 +17,12 @@ //#region src/core/router-composed-plugin.ts | ||
| } | ||
| var unpluginRouterComposedFactory = (options = {}, meta) => { | ||
| var unpluginRouterComposedFactory = (options = {}, _meta) => { | ||
| const ROOT = process.cwd(); | ||
| const userConfig = getConfig(typeof options === "function" ? options() : options, ROOT); | ||
| const getPlugin = (pluginFactory) => { | ||
| const plugin = pluginFactory(options, meta); | ||
| const routerPluginContext = createRouterPluginContext(); | ||
| const getPlugin = (plugin) => { | ||
| if (!Array.isArray(plugin)) return [plugin]; | ||
| return plugin; | ||
| }; | ||
| const routerGenerator = getPlugin(unpluginRouterGeneratorFactory); | ||
| const routerCodeSplitter = getPlugin(unpluginRouterCodeSplitterFactory); | ||
| const routerGenerator = getPlugin(createRouterGeneratorPlugin(options, routerPluginContext)); | ||
| const routerCodeSplitter = getPlugin(createRouterCodeSplitterPlugin(options, routerPluginContext)); | ||
| const result = [{ | ||
@@ -47,3 +48,3 @@ name: "tanstack:router-inline-css-defaults", | ||
| if (!(process.env.NODE_ENV === "production") && !userConfig.autoCodeSplitting) { | ||
| const routerHmr = getPlugin(unpluginRouterHmrFactory); | ||
| const routerHmr = getPlugin(createRouterHmrPlugin(options, routerPluginContext)); | ||
| result.push(...routerHmr); | ||
@@ -50,0 +51,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"router-composed-plugin.js","names":[],"sources":["../../../src/core/router-composed-plugin.ts"],"sourcesContent":["import { getConfig } from '@tanstack/router-generator'\nimport { unpluginRouterGeneratorFactory } from './router-generator-plugin'\nimport { unpluginRouterCodeSplitterFactory } from './router-code-splitter-plugin'\nimport { unpluginRouterHmrFactory } from './router-hmr-plugin'\nimport type { Config } from './config'\nimport type {\n RspackCompiler,\n UnpluginFactory,\n UnpluginOptions,\n WebpackCompiler,\n} from 'unplugin'\n\nconst INLINE_CSS_DEFAULT_DEFINES = {\n 'process.env.TSS_INLINE_CSS_ENABLED': JSON.stringify('false'),\n 'import.meta.env.TSS_INLINE_CSS_ENABLED': JSON.stringify('false'),\n}\n\ntype EsbuildOptionsWithDefine = Parameters<\n NonNullable<NonNullable<UnpluginOptions['esbuild']>['config']>\n>[0]\n\nfunction applyWebpackInlineCssDefaultDefinePlugin(compiler: WebpackCompiler) {\n new compiler.webpack.DefinePlugin(INLINE_CSS_DEFAULT_DEFINES).apply(compiler)\n}\n\nfunction applyRspackInlineCssDefaultDefinePlugin(compiler: RspackCompiler) {\n new compiler.webpack.DefinePlugin(INLINE_CSS_DEFAULT_DEFINES).apply(compiler)\n}\n\nexport const unpluginRouterComposedFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}, meta) => {\n const ROOT: string = process.cwd()\n const userConfig = getConfig(\n (typeof options === 'function' ? options() : options) as Partial<Config>,\n ROOT,\n )\n\n const getPlugin = (\n pluginFactory: UnpluginFactory<Partial<Config | (() => Config)>>,\n ) => {\n const plugin = pluginFactory(options, meta)\n if (!Array.isArray(plugin)) {\n return [plugin]\n }\n return plugin\n }\n\n const routerGenerator = getPlugin(unpluginRouterGeneratorFactory)\n const routerCodeSplitter = getPlugin(unpluginRouterCodeSplitterFactory)\n\n const result = [\n {\n name: 'tanstack:router-inline-css-defaults',\n vite: {\n config() {\n return {\n define: {\n ...INLINE_CSS_DEFAULT_DEFINES,\n },\n }\n },\n },\n webpack(compiler: WebpackCompiler) {\n applyWebpackInlineCssDefaultDefinePlugin(compiler)\n },\n rspack(compiler: RspackCompiler) {\n applyRspackInlineCssDefaultDefinePlugin(compiler)\n },\n esbuild: {\n config(options: EsbuildOptionsWithDefine) {\n options.define = {\n ...INLINE_CSS_DEFAULT_DEFINES,\n ...options.define,\n }\n },\n },\n },\n ...routerGenerator,\n ]\n if (userConfig.autoCodeSplitting) {\n result.push(...routerCodeSplitter)\n }\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n if (!isProduction && !userConfig.autoCodeSplitting) {\n const routerHmr = getPlugin(unpluginRouterHmrFactory)\n result.push(...routerHmr)\n }\n return result\n}\n"],"mappings":";;;;;AAYA,IAAM,6BAA6B;CACjC,sCAAsC,KAAK,UAAU,QAAQ;CAC7D,0CAA0C,KAAK,UAAU,QAAQ;CAClE;AAMD,SAAS,yCAAyC,UAA2B;AAC3E,KAAI,SAAS,QAAQ,aAAa,2BAA2B,CAAC,MAAM,SAAS;;AAG/E,SAAS,wCAAwC,UAA0B;AACzE,KAAI,SAAS,QAAQ,aAAa,2BAA2B,CAAC,MAAM,SAAS;;AAG/E,IAAa,iCAER,UAAU,EAAE,EAAE,SAAS;CAC1B,MAAM,OAAe,QAAQ,KAAK;CAClC,MAAM,aAAa,UAChB,OAAO,YAAY,aAAa,SAAS,GAAG,SAC7C,KACD;CAED,MAAM,aACJ,kBACG;EACH,MAAM,SAAS,cAAc,SAAS,KAAK;AAC3C,MAAI,CAAC,MAAM,QAAQ,OAAO,CACxB,QAAO,CAAC,OAAO;AAEjB,SAAO;;CAGT,MAAM,kBAAkB,UAAU,+BAA+B;CACjE,MAAM,qBAAqB,UAAU,kCAAkC;CAEvE,MAAM,SAAS,CACb;EACE,MAAM;EACN,MAAM,EACJ,SAAS;AACP,UAAO,EACL,QAAQ,EACN,GAAG,4BACJ,EACF;KAEJ;EACD,QAAQ,UAA2B;AACjC,4CAAyC,SAAS;;EAEpD,OAAO,UAA0B;AAC/B,2CAAwC,SAAS;;EAEnD,SAAS,EACP,OAAO,SAAmC;AACxC,WAAQ,SAAS;IACf,GAAG;IACH,GAAG,QAAQ;IACZ;KAEJ;EACF,EACD,GAAG,gBACJ;AACD,KAAI,WAAW,kBACb,QAAO,KAAK,GAAG,mBAAmB;AAKpC,KAAI,EAAA,QAAA,IAAA,aAF0C,iBAEzB,CAAC,WAAW,mBAAmB;EAClD,MAAM,YAAY,UAAU,yBAAyB;AACrD,SAAO,KAAK,GAAG,UAAU;;AAE3B,QAAO"} | ||
| {"version":3,"file":"router-composed-plugin.js","names":[],"sources":["../../../src/core/router-composed-plugin.ts"],"sourcesContent":["import { getConfig } from '@tanstack/router-generator'\nimport { createRouterGeneratorPlugin } from './router-generator-plugin'\nimport { createRouterCodeSplitterPlugin } from './router-code-splitter-plugin'\nimport { createRouterHmrPlugin } from './router-hmr-plugin'\nimport { createRouterPluginContext } from './router-plugin-context'\nimport type { Config } from './config'\nimport type {\n RspackCompiler,\n UnpluginFactory,\n UnpluginOptions,\n WebpackCompiler,\n} from 'unplugin'\n\nconst INLINE_CSS_DEFAULT_DEFINES = {\n 'process.env.TSS_INLINE_CSS_ENABLED': JSON.stringify('false'),\n 'import.meta.env.TSS_INLINE_CSS_ENABLED': JSON.stringify('false'),\n}\n\ntype EsbuildOptionsWithDefine = Parameters<\n NonNullable<NonNullable<UnpluginOptions['esbuild']>['config']>\n>[0]\n\nfunction applyWebpackInlineCssDefaultDefinePlugin(compiler: WebpackCompiler) {\n new compiler.webpack.DefinePlugin(INLINE_CSS_DEFAULT_DEFINES).apply(compiler)\n}\n\nfunction applyRspackInlineCssDefaultDefinePlugin(compiler: RspackCompiler) {\n new compiler.webpack.DefinePlugin(INLINE_CSS_DEFAULT_DEFINES).apply(compiler)\n}\n\nexport const unpluginRouterComposedFactory: UnpluginFactory<\n Partial<Config | (() => Config)> | undefined\n> = (options = {}, _meta) => {\n const ROOT: string = process.cwd()\n const userConfig = getConfig(\n (typeof options === 'function' ? options() : options) as Partial<Config>,\n ROOT,\n )\n const routerPluginContext = createRouterPluginContext()\n\n const getPlugin = (plugin: ReturnType<UnpluginFactory<any>>) => {\n if (!Array.isArray(plugin)) {\n return [plugin]\n }\n return plugin\n }\n\n const routerGenerator = getPlugin(\n createRouterGeneratorPlugin(options, routerPluginContext),\n )\n const routerCodeSplitter = getPlugin(\n createRouterCodeSplitterPlugin(options, routerPluginContext),\n )\n\n const result = [\n {\n name: 'tanstack:router-inline-css-defaults',\n vite: {\n config() {\n return {\n define: {\n ...INLINE_CSS_DEFAULT_DEFINES,\n },\n }\n },\n },\n webpack(compiler: WebpackCompiler) {\n applyWebpackInlineCssDefaultDefinePlugin(compiler)\n },\n rspack(compiler: RspackCompiler) {\n applyRspackInlineCssDefaultDefinePlugin(compiler)\n },\n esbuild: {\n config(options: EsbuildOptionsWithDefine) {\n options.define = {\n ...INLINE_CSS_DEFAULT_DEFINES,\n ...options.define,\n }\n },\n },\n },\n ...routerGenerator,\n ]\n if (userConfig.autoCodeSplitting) {\n result.push(...routerCodeSplitter)\n }\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n if (!isProduction && !userConfig.autoCodeSplitting) {\n const routerHmr = getPlugin(\n createRouterHmrPlugin(options, routerPluginContext),\n )\n result.push(...routerHmr)\n }\n return result\n}\n"],"mappings":";;;;;;AAaA,IAAM,6BAA6B;CACjC,sCAAsC,KAAK,UAAU,QAAQ;CAC7D,0CAA0C,KAAK,UAAU,QAAQ;CAClE;AAMD,SAAS,yCAAyC,UAA2B;AAC3E,KAAI,SAAS,QAAQ,aAAa,2BAA2B,CAAC,MAAM,SAAS;;AAG/E,SAAS,wCAAwC,UAA0B;AACzE,KAAI,SAAS,QAAQ,aAAa,2BAA2B,CAAC,MAAM,SAAS;;AAG/E,IAAa,iCAER,UAAU,EAAE,EAAE,UAAU;CAC3B,MAAM,OAAe,QAAQ,KAAK;CAClC,MAAM,aAAa,UAChB,OAAO,YAAY,aAAa,SAAS,GAAG,SAC7C,KACD;CACD,MAAM,sBAAsB,2BAA2B;CAEvD,MAAM,aAAa,WAA6C;AAC9D,MAAI,CAAC,MAAM,QAAQ,OAAO,CACxB,QAAO,CAAC,OAAO;AAEjB,SAAO;;CAGT,MAAM,kBAAkB,UACtB,4BAA4B,SAAS,oBAAoB,CAC1D;CACD,MAAM,qBAAqB,UACzB,+BAA+B,SAAS,oBAAoB,CAC7D;CAED,MAAM,SAAS,CACb;EACE,MAAM;EACN,MAAM,EACJ,SAAS;AACP,UAAO,EACL,QAAQ,EACN,GAAG,4BACJ,EACF;KAEJ;EACD,QAAQ,UAA2B;AACjC,4CAAyC,SAAS;;EAEpD,OAAO,UAA0B;AAC/B,2CAAwC,SAAS;;EAEnD,SAAS,EACP,OAAO,SAAmC;AACxC,WAAQ,SAAS;IACf,GAAG;IACH,GAAG,QAAQ;IACZ;KAEJ;EACF,EACD,GAAG,gBACJ;AACD,KAAI,WAAW,kBACb,QAAO,KAAK,GAAG,mBAAmB;AAKpC,KAAI,EAAA,QAAA,IAAA,aAF0C,iBAEzB,CAAC,WAAW,mBAAmB;EAClD,MAAM,YAAY,UAChB,sBAAsB,SAAS,oBAAoB,CACpD;AACD,SAAO,KAAK,GAAG,UAAU;;AAE3B,QAAO"} |
| import { UnpluginFactory } from 'unplugin'; | ||
| import { Config } from './config.js'; | ||
| import { RouterPluginContext } from './router-plugin-context.js'; | ||
| export declare function createRouterGeneratorPlugin(options: Partial<Config | (() => Config)> | undefined, routerPluginContext: RouterPluginContext): ReturnType<UnpluginFactory<Partial<Config | (() => Config)> | undefined>>; | ||
| export declare const unpluginRouterGeneratorFactory: UnpluginFactory<Partial<Config | (() => Config)> | undefined>; |
| import { getConfig as getConfig$1 } from "./config.js"; | ||
| import { createRouterPluginContext } from "./router-plugin-context.js"; | ||
| import { Generator, resolveConfigPath } from "@tanstack/router-generator"; | ||
@@ -6,3 +7,3 @@ import { isAbsolute, join, normalize } from "node:path"; | ||
| var PLUGIN_NAME = "unplugin:router-generator"; | ||
| var unpluginRouterGeneratorFactory = (options = {}) => { | ||
| function createRouterGeneratorPlugin(options = {}, routerPluginContext) { | ||
| let ROOT = process.cwd(); | ||
@@ -40,3 +41,3 @@ let userConfig; | ||
| await generator.run(generatorEvent); | ||
| globalThis.TSR_ROUTES_BY_ID_MAP = generator.getRoutesByFileMap(); | ||
| routerPluginContext.routesByFile = generator.getRoutesByFileMap(); | ||
| } catch (e) { | ||
@@ -100,6 +101,9 @@ console.error(e); | ||
| }; | ||
| } | ||
| var unpluginRouterGeneratorFactory = (options = {}) => { | ||
| return createRouterGeneratorPlugin(options, createRouterPluginContext()); | ||
| }; | ||
| //#endregion | ||
| export { unpluginRouterGeneratorFactory }; | ||
| export { createRouterGeneratorPlugin, unpluginRouterGeneratorFactory }; | ||
| //# sourceMappingURL=router-generator-plugin.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"router-generator-plugin.js","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'\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 | (() => Config)> | undefined\n> = (options = {}) => {\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 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 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"],"mappings":";;;;AASA,IAAM,cAAc;AAEpB,IAAa,kCAER,UAAU,EAAE,KAAK;CACpB,IAAI,OAAe,QAAQ,KAAK;CAChC,IAAI;CACJ,IAAI;CAEJ,MAAM,gCACJ,WAAW,0BAA0B;CACvC,MAAM,+BAA+B;AACnC,SAAO,WAAW,WAAW,gBAAgB,GACzC,WAAW,kBACX,KAAK,MAAM,WAAW,gBAAgB;;CAG5C,MAAM,0BAA0B,SAA6B;AAC3D,MAAI,MAAM,KACR,QAAO,KAAK;AAEd,MAAI,OAAO,YAAY,WACrB,cAAa,SAAS;MAEtB,cAAa,YAAU,SAAS,KAAK;AAEvC,cAAY,IAAI,UAAU;GACxB,QAAQ;GACR,MAAM;GACP,CAAC;;CAGJ,MAAM,WAAW,OAAO,SAGlB;AACJ,MAAI,yBAAyB,CAC3B;EAEF,IAAI,iBAA6C,KAAA;AACjD,MAAI,MAAM;GACR,MAAM,WAAW,UAAU,KAAK,KAAK;AACrC,OAAI,aAAa,kBAAkB,EAAE,iBAAiB,MAAM,CAAC,EAAE;AAC7D,4BAAwB;AACxB;;AAEF,oBAAiB;IAAE,MAAM;IAAU,MAAM,KAAK;IAAO;;AAGvD,MAAI;AACF,SAAM,UAAU,IAAI,eAAe;AACnC,cAAW,uBAAuB,UAAU,oBAAoB;WACzD,GAAG;AACV,WAAQ,MAAM,EAAE;;;AAIpB,QAAO;EACL,MAAM;EACN,SAAS;EACT,MAAM,YAAY,IAAI,EAAE,SAAS;AAC/B,SAAM,SAAS;IACb,MAAM;IACN;IACD,CAAC;;EAEJ,MAAM,EACJ,MAAM,eAAe,QAAQ;AAC3B,0BAAuB,EAAE,MAAM,OAAO,MAAM,CAAC;AAC7C,SAAM,UAAU;KAEnB;EACD,OAAO,UAAU;AACf,2BAAwB;GAExB,IAAI,SAA2B;AAE/B,YAAS,MAAM,UAAU,WAAW,mBAAmB,UAAU,CAAC;AAElE,YAAS,MAAM,SAAS,WAAW,aAAa,YAAY;AAC1D,QAAI,OACF;IAIF,MAAM,sBAAsB,wBAAwB;AAEpD,cADiB,MAAM,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,MAAM,CAAC,CACnD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;KAAU,CAAC,CAAC;AAE3D,UAAM,UAAU;KAChB;AAEF,YAAS,MAAM,WAAW,IAAI,aAAa,YAAY;AACrD,QAAI,OACF,OAAM,OAAO,OAAO;KAEtB;;EAEJ,QAAQ,UAAU;AAChB,2BAAwB;GAExB,IAAI,SAA2B;AAE/B,YAAS,MAAM,UAAU,WAAW,mBAAmB,UAAU,CAAC;AAElE,YAAS,MAAM,SAAS,WAAW,aAAa,YAAY;AAC1D,QAAI,OACF;IAIF,MAAM,sBAAsB,wBAAwB;AAEpD,cADiB,MAAM,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,MAAM,CAAC,CACnD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;KAAU,CAAC,CAAC;AAE3D,UAAM,UAAU;KAChB;AAEF,YAAS,MAAM,WAAW,IAAI,aAAa,YAAY;AACrD,QAAI,OACF,OAAM,OAAO,OAAO;KAEtB;AAEF,YAAS,MAAM,KAAK,IAAI,mBAAmB;AACzC,YAAQ,KAAK,OAAO,cAAc,+BAA+B;KACjE;;EAEJ,SAAS,EACP,SAAS;AACP,2BAAwB;KAE3B;EACF"} | ||
| {"version":3,"file":"router-generator-plugin.js","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,EAAE,EAC1D,qBAC2E;CAC3E,IAAI,OAAe,QAAQ,KAAK;CAChC,IAAI;CACJ,IAAI;CAEJ,MAAM,gCACJ,WAAW,0BAA0B;CACvC,MAAM,+BAA+B;AACnC,SAAO,WAAW,WAAW,gBAAgB,GACzC,WAAW,kBACX,KAAK,MAAM,WAAW,gBAAgB;;CAG5C,MAAM,0BAA0B,SAA6B;AAC3D,MAAI,MAAM,KACR,QAAO,KAAK;AAEd,MAAI,OAAO,YAAY,WACrB,cAAa,SAAS;MAEtB,cAAa,YAAU,SAAS,KAAK;AAEvC,cAAY,IAAI,UAAU;GACxB,QAAQ;GACR,MAAM;GACP,CAAC;;CAGJ,MAAM,WAAW,OAAO,SAGlB;AACJ,MAAI,yBAAyB,CAC3B;EAEF,IAAI,iBAA6C,KAAA;AACjD,MAAI,MAAM;GACR,MAAM,WAAW,UAAU,KAAK,KAAK;AACrC,OAAI,aAAa,kBAAkB,EAAE,iBAAiB,MAAM,CAAC,EAAE;AAC7D,4BAAwB;AACxB;;AAEF,oBAAiB;IAAE,MAAM;IAAU,MAAM,KAAK;IAAO;;AAGvD,MAAI;AACF,SAAM,UAAU,IAAI,eAAe;AACnC,uBAAoB,eAAe,UAAU,oBAAoB;WAC1D,GAAG;AACV,WAAQ,MAAM,EAAE;;;AAIpB,QAAO;EACL,MAAM;EACN,SAAS;EACT,MAAM,YAAY,IAAI,EAAE,SAAS;AAC/B,SAAM,SAAS;IACb,MAAM;IACN;IACD,CAAC;;EAEJ,MAAM,EACJ,MAAM,eAAe,QAAQ;AAC3B,0BAAuB,EAAE,MAAM,OAAO,MAAM,CAAC;AAC7C,SAAM,UAAU;KAEnB;EACD,OAAO,UAAU;AACf,2BAAwB;GAExB,IAAI,SAA2B;AAE/B,YAAS,MAAM,UAAU,WAAW,mBAAmB,UAAU,CAAC;AAElE,YAAS,MAAM,SAAS,WAAW,aAAa,YAAY;AAC1D,QAAI,OACF;IAIF,MAAM,sBAAsB,wBAAwB;AAEpD,cADiB,MAAM,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,MAAM,CAAC,CACnD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;KAAU,CAAC,CAAC;AAE3D,UAAM,UAAU;KAChB;AAEF,YAAS,MAAM,WAAW,IAAI,aAAa,YAAY;AACrD,QAAI,OACF,OAAM,OAAO,OAAO;KAEtB;;EAEJ,QAAQ,UAAU;AAChB,2BAAwB;GAExB,IAAI,SAA2B;AAE/B,YAAS,MAAM,UAAU,WAAW,mBAAmB,UAAU,CAAC;AAElE,YAAS,MAAM,SAAS,WAAW,aAAa,YAAY;AAC1D,QAAI,OACF;IAIF,MAAM,sBAAsB,wBAAwB;AAEpD,cADiB,MAAM,OAAO,aAE3B,MAAM,qBAAqB,EAAE,eAAe,MAAM,CAAC,CACnD,GAAG,QAAQ,SAAS,SAAS;KAAE;KAAM,OAAO;KAAU,CAAC,CAAC;AAE3D,UAAM,UAAU;KAChB;AAEF,YAAS,MAAM,WAAW,IAAI,aAAa,YAAY;AACrD,QAAI,OACF,OAAM,OAAO,OAAO;KAEtB;AAEF,YAAS,MAAM,KAAK,IAAI,mBAAmB;AACzC,YAAQ,KAAK,OAAO,cAAc,+BAA+B;KACjE;;EAEJ,SAAS,EACP,SAAS;AACP,2BAAwB;KAE3B;EACF;;AAGH,IAAa,kCAER,UAAU,EAAE,KAAK;AACpB,QAAO,4BAA4B,SAAS,2BAA2B,CAAC"} |
| import { UnpluginFactory } from 'unplugin'; | ||
| import { Config } from './config.js'; | ||
| import { RouterPluginContext } from './router-plugin-context.js'; | ||
| export declare function createRouterHmrPlugin(options: Partial<Config | (() => Config)> | undefined, routerPluginContext: RouterPluginContext): ReturnType<UnpluginFactory<Partial<Config> | undefined>>; | ||
| export declare const unpluginRouterHmrFactory: UnpluginFactory<Partial<Config> | undefined>; |
@@ -18,5 +18,8 @@ import { getConfig } from "./config.js"; | ||
| ]; | ||
| var unpluginRouterHmrFactory = (options = {}) => { | ||
| function createRouterHmrPlugin(options = {}, routerPluginContext) { | ||
| let ROOT = process.cwd(); | ||
| let userConfig = options; | ||
| const resolveUserConfig = () => { | ||
| return getConfig(typeof options === "function" ? options() : options, ROOT); | ||
| }; | ||
| let userConfig = resolveUserConfig(); | ||
| return { | ||
@@ -32,3 +35,3 @@ name: "tanstack-router:hmr", | ||
| const normalizedId = normalizePath(id); | ||
| const routeEntry = globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId); | ||
| const routeEntry = routerPluginContext.routesByFile.get(normalizedId); | ||
| if (!routeEntry) return null; | ||
@@ -83,3 +86,3 @@ if (debug) console.info("Adding HMR handling to route ", normalizedId); | ||
| ROOT = config.root; | ||
| userConfig = getConfig(options, ROOT); | ||
| userConfig = resolveUserConfig(); | ||
| }, | ||
@@ -92,6 +95,6 @@ applyToEnvironment(environment) { | ||
| }; | ||
| }; | ||
| } | ||
| //#endregion | ||
| export { unpluginRouterHmrFactory }; | ||
| export { createRouterHmrPlugin }; | ||
| //# sourceMappingURL=router-hmr-plugin.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"router-hmr-plugin.js","names":[],"sources":["../../../src/core/router-hmr-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport { compileCodeSplitReferenceRoute } from './code-splitter/compilers'\nimport { getReferenceRouteCompilerPlugins } from './code-splitter/plugins/framework-plugins'\nimport { createRouteHmrStatement } from './hmr'\nimport { debug, normalizePath } 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 const normalizedId = normalizePath(id)\n const routeEntry = globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId)\n if (!routeEntry) {\n return null\n }\n\n if (debug) console.info('Adding HMR handling to route ', normalizedId)\n\n const hmrStyle = userConfig.plugin?.hmr?.style ?? 'vite'\n\n if (userConfig.target === 'react') {\n const compilerPlugins = getReferenceRouteCompilerPlugins({\n targetFramework: 'react',\n addHmr: true,\n hmrStyle,\n })\n const compiled = compileCodeSplitReferenceRoute({\n code,\n filename: normalizedId,\n id: normalizedId,\n addHmr: true,\n hmrStyle,\n hmrRouteId: routeEntry.routeId,\n codeSplitGroupings: [],\n targetFramework: 'react',\n compilerPlugins,\n })\n\n if (compiled) {\n if (debug) {\n logDiff(code, compiled.code)\n console.log('Output:\\n', compiled.code + '\\n\\n')\n }\n\n return compiled\n }\n }\n\n const ast = parseAst({ code })\n ast.program.body.push(\n ...createRouteHmrStatement([], {\n hmrStyle,\n targetFramework: userConfig.target,\n routeId: routeEntry.routeId,\n }),\n )\n const result = generateFromAst(ast, {\n sourceMaps: true,\n filename: normalizedId,\n sourceFileName: normalizedId,\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"],"mappings":";;;;;;;;;;;;AAeA,IAAM,cAAc;CAClB;CACA;CACA;CACD;AACD,IAAa,4BAER,UAAU,EAAE,KAAK;CACpB,IAAI,OAAe,QAAQ,KAAK;CAChC,IAAI,aAAa;AAEjB,QAAO;EACL,MAAM;EACN,SAAS;EACT,WAAW;GACT,QAAQ;IAEN,IAAI;IACJ,MAAM,EACJ,SAAS,aACV;IACF;GACD,QAAQ,MAAM,IAAI;IAChB,MAAM,eAAe,cAAc,GAAG;IACtC,MAAM,aAAa,WAAW,sBAAsB,IAAI,aAAa;AACrE,QAAI,CAAC,WACH,QAAO;AAGT,QAAI,MAAO,SAAQ,KAAK,iCAAiC,aAAa;IAEtE,MAAM,WAAW,WAAW,QAAQ,KAAK,SAAS;AAElD,QAAI,WAAW,WAAW,SAAS;KACjC,MAAM,kBAAkB,iCAAiC;MACvD,iBAAiB;MACjB,QAAQ;MACR;MACD,CAAC;KACF,MAAM,WAAW,+BAA+B;MAC9C;MACA,UAAU;MACV,IAAI;MACJ,QAAQ;MACR;MACA,YAAY,WAAW;MACvB,oBAAoB,EAAE;MACtB,iBAAiB;MACjB;MACD,CAAC;AAEF,SAAI,UAAU;AACZ,UAAI,OAAO;AACT,eAAQ,MAAM,SAAS,KAAK;AAC5B,eAAQ,IAAI,aAAa,SAAS,OAAO,OAAO;;AAGlD,aAAO;;;IAIX,MAAM,MAAM,SAAS,EAAE,MAAM,CAAC;AAC9B,QAAI,QAAQ,KAAK,KACf,GAAG,wBAAwB,EAAE,EAAE;KAC7B;KACA,iBAAiB,WAAW;KAC5B,SAAS,WAAW;KACrB,CAAC,CACH;IACD,MAAM,SAAS,gBAAgB,KAAK;KAClC,YAAY;KACZ,UAAU;KACV,gBAAgB;KACjB,CAAC;AACF,QAAI,OAAO;AACT,aAAQ,MAAM,OAAO,KAAK;AAC1B,aAAQ,IAAI,aAAa,OAAO,OAAO,OAAO;;AAEhD,WAAO;;GAEV;EACD,MAAM;GACJ,eAAe,QAAQ;AACrB,WAAO,OAAO;AACd,iBAAa,UAAU,SAAS,KAAK;;GAEvC,mBAAmB,aAAa;AAC9B,QAAI,WAAW,QAAQ,MAAM,gBAC3B,QAAO,WAAW,OAAO,KAAK,oBAAoB,YAAY;AAEhE,WAAO;;GAEV;EACF"} | ||
| {"version":3,"file":"router-hmr-plugin.js","names":[],"sources":["../../../src/core/router-hmr-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport { compileCodeSplitReferenceRoute } from './code-splitter/compilers'\nimport { getReferenceRouteCompilerPlugins } from './code-splitter/plugins/framework-plugins'\nimport { createRouteHmrStatement } from './hmr'\nimport { debug, normalizePath } from './utils'\nimport { getConfig } from './config'\nimport { createRouterPluginContext } from './router-plugin-context'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\nimport type { RouterPluginContext } from './router-plugin-context'\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]\n\nexport function createRouterHmrPlugin(\n options: Partial<Config | (() => Config)> | undefined = {},\n routerPluginContext: RouterPluginContext,\n): ReturnType<UnpluginFactory<Partial<Config> | undefined>> {\n let ROOT: string = process.cwd()\n\n const resolveUserConfig = () => {\n return getConfig(typeof options === 'function' ? options() : options, ROOT)\n }\n\n let userConfig = resolveUserConfig()\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 const normalizedId = normalizePath(id)\n const routeEntry = routerPluginContext.routesByFile.get(normalizedId)\n if (!routeEntry) {\n return null\n }\n\n if (debug) console.info('Adding HMR handling to route ', normalizedId)\n\n const hmrStyle = userConfig.plugin?.hmr?.style ?? 'vite'\n\n if (userConfig.target === 'react') {\n const compilerPlugins = getReferenceRouteCompilerPlugins({\n targetFramework: 'react',\n addHmr: true,\n hmrStyle,\n })\n const compiled = compileCodeSplitReferenceRoute({\n code,\n filename: normalizedId,\n id: normalizedId,\n addHmr: true,\n hmrStyle,\n hmrRouteId: routeEntry.routeId,\n codeSplitGroupings: [],\n targetFramework: 'react',\n compilerPlugins,\n })\n\n if (compiled) {\n if (debug) {\n logDiff(code, compiled.code)\n console.log('Output:\\n', compiled.code + '\\n\\n')\n }\n\n return compiled\n }\n }\n\n const ast = parseAst({ code })\n ast.program.body.push(\n ...createRouteHmrStatement([], {\n hmrStyle,\n targetFramework: userConfig.target,\n routeId: routeEntry.routeId,\n }),\n )\n const result = generateFromAst(ast, {\n sourceMaps: true,\n filename: normalizedId,\n sourceFileName: normalizedId,\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 = resolveUserConfig()\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\nexport const unpluginRouterHmrFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n return createRouterHmrPlugin(options, createRouterPluginContext())\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,IAAM,cAAc;CAClB;CACA;CACA;CACD;AAED,SAAgB,sBACd,UAAwD,EAAE,EAC1D,qBAC0D;CAC1D,IAAI,OAAe,QAAQ,KAAK;CAEhC,MAAM,0BAA0B;AAC9B,SAAO,UAAU,OAAO,YAAY,aAAa,SAAS,GAAG,SAAS,KAAK;;CAG7E,IAAI,aAAa,mBAAmB;AAEpC,QAAO;EACL,MAAM;EACN,SAAS;EACT,WAAW;GACT,QAAQ;IAEN,IAAI;IACJ,MAAM,EACJ,SAAS,aACV;IACF;GACD,QAAQ,MAAM,IAAI;IAChB,MAAM,eAAe,cAAc,GAAG;IACtC,MAAM,aAAa,oBAAoB,aAAa,IAAI,aAAa;AACrE,QAAI,CAAC,WACH,QAAO;AAGT,QAAI,MAAO,SAAQ,KAAK,iCAAiC,aAAa;IAEtE,MAAM,WAAW,WAAW,QAAQ,KAAK,SAAS;AAElD,QAAI,WAAW,WAAW,SAAS;KACjC,MAAM,kBAAkB,iCAAiC;MACvD,iBAAiB;MACjB,QAAQ;MACR;MACD,CAAC;KACF,MAAM,WAAW,+BAA+B;MAC9C;MACA,UAAU;MACV,IAAI;MACJ,QAAQ;MACR;MACA,YAAY,WAAW;MACvB,oBAAoB,EAAE;MACtB,iBAAiB;MACjB;MACD,CAAC;AAEF,SAAI,UAAU;AACZ,UAAI,OAAO;AACT,eAAQ,MAAM,SAAS,KAAK;AAC5B,eAAQ,IAAI,aAAa,SAAS,OAAO,OAAO;;AAGlD,aAAO;;;IAIX,MAAM,MAAM,SAAS,EAAE,MAAM,CAAC;AAC9B,QAAI,QAAQ,KAAK,KACf,GAAG,wBAAwB,EAAE,EAAE;KAC7B;KACA,iBAAiB,WAAW;KAC5B,SAAS,WAAW;KACrB,CAAC,CACH;IACD,MAAM,SAAS,gBAAgB,KAAK;KAClC,YAAY;KACZ,UAAU;KACV,gBAAgB;KACjB,CAAC;AACF,QAAI,OAAO;AACT,aAAQ,MAAM,OAAO,KAAK;AAC1B,aAAQ,IAAI,aAAa,OAAO,OAAO,OAAO;;AAEhD,WAAO;;GAEV;EACD,MAAM;GACJ,eAAe,QAAQ;AACrB,WAAO,OAAO;AACd,iBAAa,mBAAmB;;GAElC,mBAAmB,aAAa;AAC9B,QAAI,WAAW,QAAQ,MAAM,gBAC3B,QAAO,WAAW,OAAO,KAAK,oBAAoB,YAAY;AAEhE,WAAO;;GAEV;EACF"} |
| import { configSchema, CodeSplittingOptions, Config } from './core/config.js'; | ||
| import { RouterPluginContext } from './core/router-plugin-context.js'; | ||
| type RouterPluginOptions = Partial<Config | (() => Config)> | undefined; | ||
| /** | ||
@@ -11,49 +13,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterGeneratorEsbuild: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('unplugin').EsbuildPlugin; | ||
| declare const TanStackRouterGeneratorEsbuild: (options?: RouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('unplugin').EsbuildPlugin; | ||
| /** | ||
@@ -68,49 +24,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterCodeSplitterEsbuild: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('unplugin').EsbuildPlugin; | ||
| declare const TanStackRouterCodeSplitterEsbuild: (options?: RouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('unplugin').EsbuildPlugin; | ||
| /** | ||
@@ -221,2 +131,2 @@ * @example | ||
| export { configSchema, TanStackRouterGeneratorEsbuild, TanStackRouterCodeSplitterEsbuild, TanStackRouterEsbuild, tanstackRouter, }; | ||
| export type { Config, CodeSplittingOptions }; | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext }; |
+12
-4
| import { configSchema } from "./core/config.js"; | ||
| import { unpluginRouterCodeSplitterFactory } from "./core/router-code-splitter-plugin.js"; | ||
| import { unpluginRouterGeneratorFactory } from "./core/router-generator-plugin.js"; | ||
| import { createRouterPluginContext } from "./core/router-plugin-context.js"; | ||
| import { createRouterCodeSplitterPlugin } from "./core/router-code-splitter-plugin.js"; | ||
| import { createRouterGeneratorPlugin } from "./core/router-generator-plugin.js"; | ||
| import { unpluginRouterComposedFactory } from "./core/router-composed-plugin.js"; | ||
| import { createEsbuildPlugin } from "unplugin"; | ||
| //#region src/esbuild.ts | ||
| var defaultRouterPluginContext = createRouterPluginContext(); | ||
| /** | ||
@@ -16,3 +18,6 @@ * @example | ||
| */ | ||
| var TanStackRouterGeneratorEsbuild = createEsbuildPlugin(unpluginRouterGeneratorFactory); | ||
| var TanStackRouterGeneratorEsbuild = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return createEsbuildPlugin((pluginOptions) => createRouterGeneratorPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -27,3 +32,6 @@ * @example | ||
| */ | ||
| var TanStackRouterCodeSplitterEsbuild = createEsbuildPlugin(unpluginRouterCodeSplitterFactory); | ||
| var TanStackRouterCodeSplitterEsbuild = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return createEsbuildPlugin((pluginOptions) => createRouterCodeSplitterPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -30,0 +38,0 @@ * @example |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"esbuild.js","names":[],"sources":["../../src/esbuild.ts"],"sourcesContent":["import { createEsbuildPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\n\nimport type { CodeSplittingOptions, Config } from './core/config'\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterGeneratorEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterGeneratorEsbuild = createEsbuildPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterCodeSplitterEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterEsbuild = createEsbuildPlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [tanstackRouter()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterEsbuild = createEsbuildPlugin(unpluginRouterComposedFactory)\nconst tanstackRouter = TanStackRouterEsbuild\nexport default TanStackRouterEsbuild\n\nexport {\n configSchema,\n TanStackRouterGeneratorEsbuild,\n TanStackRouterCodeSplitterEsbuild,\n TanStackRouterEsbuild,\n tanstackRouter,\n}\n\nexport type { Config, CodeSplittingOptions }\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,IAAM,iCAAiC,oBACrC,+BACD;;;;;;;;;;AAWD,IAAM,oCAAoC,oBACxC,kCACD;;;;;;;;;;AAWD,IAAM,wBAAwB,oBAAoB,8BAA8B;AAChF,IAAM,iBAAiB"} | ||
| {"version":3,"file":"esbuild.js","names":[],"sources":["../../src/esbuild.ts"],"sourcesContent":["import { createEsbuildPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin'\nimport { createRouterGeneratorPlugin } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport { createRouterPluginContext } from './core/router-plugin-context'\n\nimport type { CodeSplittingOptions, Config } from './core/config'\nimport type { RouterPluginContext } from './core/router-plugin-context'\n\ntype RouterPluginOptions = Partial<Config | (() => Config)> | undefined\n\nconst defaultRouterPluginContext = createRouterPluginContext()\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterGeneratorEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterGeneratorEsbuild = (\n options?: RouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createEsbuildPlugin((pluginOptions: RouterPluginOptions) =>\n createRouterGeneratorPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [TanStackRouterCodeSplitterEsbuild()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterEsbuild = (\n options?: RouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createEsbuildPlugin((pluginOptions: RouterPluginOptions) =>\n createRouterCodeSplitterPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * plugins: [tanstackRouter()],\n * // ...\n * }\n * ```\n */\nconst TanStackRouterEsbuild = createEsbuildPlugin(unpluginRouterComposedFactory)\nconst tanstackRouter = TanStackRouterEsbuild\nexport default TanStackRouterEsbuild\n\nexport {\n configSchema,\n TanStackRouterGeneratorEsbuild,\n TanStackRouterCodeSplitterEsbuild,\n TanStackRouterEsbuild,\n tanstackRouter,\n}\n\nexport type { Config, CodeSplittingOptions, RouterPluginContext }\n"],"mappings":";;;;;;;AAaA,IAAM,6BAA6B,2BAA2B;;;;;;;;;;AAW9D,IAAM,kCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,QAAO,qBAAqB,kBAC1B,4BAA4B,eAAe,cAAc,CAC1D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,qCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,QAAO,qBAAqB,kBAC1B,+BAA+B,eAAe,cAAc,CAC7D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,wBAAwB,oBAAoB,8BAA8B;AAChF,IAAM,iBAAiB"} |
| export { configSchema, getConfig } from './core/config.js'; | ||
| export { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin.js'; | ||
| export { unpluginRouterGeneratorFactory } from './core/router-generator-plugin.js'; | ||
| export { createRouterPluginContext } from './core/router-plugin-context.js'; | ||
| export type { Config, ConfigInput, ConfigOutput, CodeSplittingOptions, DeletableNodes, HmrOptions, } from './core/config.js'; | ||
| export type { RouterPluginContext } from './core/router-plugin-context.js'; | ||
| export { tsrSplit, splitRouteIdentNodes, defaultCodeSplitGroupings, } from './core/constants.js'; |
| import { configSchema, getConfig } from "./core/config.js"; | ||
| import { defaultCodeSplitGroupings, splitRouteIdentNodes, tsrSplit } from "./core/constants.js"; | ||
| import { createRouterPluginContext } from "./core/router-plugin-context.js"; | ||
| import { unpluginRouterCodeSplitterFactory } from "./core/router-code-splitter-plugin.js"; | ||
| import { unpluginRouterGeneratorFactory } from "./core/router-generator-plugin.js"; | ||
| export { configSchema, defaultCodeSplitGroupings, getConfig, splitRouteIdentNodes, tsrSplit, unpluginRouterCodeSplitterFactory, unpluginRouterGeneratorFactory }; | ||
| export { configSchema, createRouterPluginContext, defaultCodeSplitGroupings, getConfig, splitRouteIdentNodes, tsrSplit, unpluginRouterCodeSplitterFactory, unpluginRouterGeneratorFactory }; |
+5
-49
| import { configSchema, CodeSplittingOptions, Config } from './core/config.js'; | ||
| import { RouterPluginContext } from './core/router-plugin-context.js'; | ||
| type RspackRouterPluginOptions = Partial<Config> | (() => Partial<Config>); | ||
| /** | ||
@@ -15,49 +17,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterGeneratorRspack: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('unplugin').RspackPluginInstance; | ||
| declare const TanStackRouterGeneratorRspack: (options?: RspackRouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('unplugin').RspackPluginInstance; | ||
| /** | ||
@@ -76,3 +32,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterCodeSplitterRspack: (options?: unknown) => import('unplugin').RspackPluginInstance; | ||
| declare const TanStackRouterCodeSplitterRspack: (options?: RspackRouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('unplugin').RspackPluginInstance; | ||
| /** | ||
@@ -95,2 +51,2 @@ * @example | ||
| export { configSchema, TanStackRouterRspack, TanStackRouterGeneratorRspack, TanStackRouterCodeSplitterRspack, tanstackRouter, }; | ||
| export type { Config, CodeSplittingOptions }; | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext }; |
+12
-4
| import { configSchema } from "./core/config.js"; | ||
| import { unpluginRouterCodeSplitterFactory } from "./core/router-code-splitter-plugin.js"; | ||
| import { unpluginRouterGeneratorFactory } from "./core/router-generator-plugin.js"; | ||
| import { createRouterPluginContext } from "./core/router-plugin-context.js"; | ||
| import { createRouterCodeSplitterPlugin } from "./core/router-code-splitter-plugin.js"; | ||
| import { createRouterGeneratorPlugin } from "./core/router-generator-plugin.js"; | ||
| import { unpluginRouterComposedFactory } from "./core/router-composed-plugin.js"; | ||
| import { createRspackPlugin } from "unplugin"; | ||
| //#region src/rspack.ts | ||
| var defaultRouterPluginContext = createRouterPluginContext(); | ||
| /** | ||
@@ -40,3 +42,6 @@ * Rspack uses webpack-compatible `module.hot` / `import.meta.webpackHot` HMR. | ||
| */ | ||
| var TanStackRouterGeneratorRspack = /* @__PURE__ */ createRspackPlugin(unpluginRouterGeneratorFactory); | ||
| var TanStackRouterGeneratorRspack = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return createRspackPlugin((pluginOptions) => createRouterGeneratorPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -55,3 +60,6 @@ * @example | ||
| */ | ||
| var TanStackRouterCodeSplitterRspack = /* @__PURE__ */ createRspackPlugin((options, meta) => unpluginRouterCodeSplitterFactory(withWebpackHmrStyle(options), meta)); | ||
| var TanStackRouterCodeSplitterRspack = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return createRspackPlugin((pluginOptions) => createRouterCodeSplitterPlugin(withWebpackHmrStyle(pluginOptions), pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -58,0 +66,0 @@ * @example |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"rspack.js","names":[],"sources":["../../src/rspack.ts"],"sourcesContent":["import { createRspackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport type { CodeSplittingOptions, Config } from './core/config'\n\ntype RspackRouterPluginOptions = Partial<Config> | (() => Partial<Config>)\n\n/**\n * Rspack uses webpack-compatible `module.hot` / `import.meta.webpackHot` HMR.\n * Force `plugin.hmr.style = 'webpack'` so the router HMR adapter emits\n * `module.hot`-style accept/dispose code instead of Vite's callback-receive\n * variant, regardless of what the user passes (or doesn't pass).\n */\nfunction withWebpackHmrStyle(\n options: RspackRouterPluginOptions | undefined,\n): RspackRouterPluginOptions {\n const mergeHmrStyle = (\n config: Partial<Config> | undefined,\n ): Partial<Config> => ({\n ...config,\n plugin: {\n ...config?.plugin,\n hmr: {\n ...config?.plugin?.hmr,\n style: 'webpack',\n },\n },\n })\n\n if (typeof options === 'function') {\n return () => mergeHmrStyle(options())\n }\n\n return mergeHmrStyle(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterGeneratorRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterGeneratorRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterCodeSplitterRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterCodeSplitterRspack = /* #__PURE__ */ createRspackPlugin(\n (options, meta) =>\n unpluginRouterCodeSplitterFactory(\n withWebpackHmrStyle(\n options as RspackRouterPluginOptions | undefined,\n ) as Partial<Config | (() => Config)>,\n meta,\n ),\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [tanstackRouter()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterRspack = /* #__PURE__ */ createRspackPlugin(\n (options, meta) =>\n unpluginRouterComposedFactory(\n withWebpackHmrStyle(\n options as RspackRouterPluginOptions | undefined,\n ) as Partial<Config | (() => Config)>,\n meta,\n ),\n)\nconst tanstackRouter = TanStackRouterRspack\nexport default TanStackRouterRspack\nexport {\n configSchema,\n TanStackRouterRspack,\n TanStackRouterGeneratorRspack,\n TanStackRouterCodeSplitterRspack,\n tanstackRouter,\n}\nexport type { Config, CodeSplittingOptions }\n"],"mappings":";;;;;;;;;;;;AAgBA,SAAS,oBACP,SAC2B;CAC3B,MAAM,iBACJ,YACqB;EACrB,GAAG;EACH,QAAQ;GACN,GAAG,QAAQ;GACX,KAAK;IACH,GAAG,QAAQ,QAAQ;IACnB,OAAO;IACR;GACF;EACF;AAED,KAAI,OAAO,YAAY,WACrB,cAAa,cAAc,SAAS,CAAC;AAGvC,QAAO,cAAc,QAAQ;;;;;;;;;;;;;;;AAgB/B,IAAM,gCAAgD,mCACpD,+BACD;;;;;;;;;;;;;;AAeD,IAAM,mCAAmD,oCACtD,SAAS,SACR,kCACE,oBACE,QACD,EACD,KACD,CACJ;;;;;;;;;;;;;;AAeD,IAAM,uBAAuC,oCAC1C,SAAS,SACR,8BACE,oBACE,QACD,EACD,KACD,CACJ;AACD,IAAM,iBAAiB"} | ||
| {"version":3,"file":"rspack.js","names":[],"sources":["../../src/rspack.ts"],"sourcesContent":["import { createRspackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin'\nimport { createRouterGeneratorPlugin } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport { createRouterPluginContext } from './core/router-plugin-context'\nimport type { CodeSplittingOptions, Config } from './core/config'\nimport type { RouterPluginContext } from './core/router-plugin-context'\n\ntype RspackRouterPluginOptions = Partial<Config> | (() => Partial<Config>)\n\nconst defaultRouterPluginContext = createRouterPluginContext()\n\n/**\n * Rspack uses webpack-compatible `module.hot` / `import.meta.webpackHot` HMR.\n * Force `plugin.hmr.style = 'webpack'` so the router HMR adapter emits\n * `module.hot`-style accept/dispose code instead of Vite's callback-receive\n * variant, regardless of what the user passes (or doesn't pass).\n */\nfunction withWebpackHmrStyle(\n options: RspackRouterPluginOptions | undefined,\n): RspackRouterPluginOptions {\n const mergeHmrStyle = (\n config: Partial<Config> | undefined,\n ): Partial<Config> => ({\n ...config,\n plugin: {\n ...config?.plugin,\n hmr: {\n ...config?.plugin?.hmr,\n style: 'webpack',\n },\n },\n })\n\n if (typeof options === 'function') {\n return () => mergeHmrStyle(options())\n }\n\n return mergeHmrStyle(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterGeneratorRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterGeneratorRspack = (\n options?: RspackRouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createRspackPlugin((pluginOptions) =>\n createRouterGeneratorPlugin(\n pluginOptions as Partial<Config | (() => Config)> | undefined,\n pluginContext,\n ),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterCodeSplitterRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterCodeSplitterRspack = (\n options?: RspackRouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createRspackPlugin((pluginOptions) =>\n createRouterCodeSplitterPlugin(\n withWebpackHmrStyle(\n pluginOptions as RspackRouterPluginOptions | undefined,\n ) as Partial<Config | (() => Config)>,\n pluginContext,\n ),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [tanstackRouter()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterRspack = /* #__PURE__ */ createRspackPlugin(\n (options, meta) =>\n unpluginRouterComposedFactory(\n withWebpackHmrStyle(\n options as RspackRouterPluginOptions | undefined,\n ) as Partial<Config | (() => Config)>,\n meta,\n ),\n)\nconst tanstackRouter = TanStackRouterRspack\nexport default TanStackRouterRspack\nexport {\n configSchema,\n TanStackRouterRspack,\n TanStackRouterGeneratorRspack,\n TanStackRouterCodeSplitterRspack,\n tanstackRouter,\n}\nexport type { Config, CodeSplittingOptions, RouterPluginContext }\n"],"mappings":";;;;;;;AAYA,IAAM,6BAA6B,2BAA2B;;;;;;;AAQ9D,SAAS,oBACP,SAC2B;CAC3B,MAAM,iBACJ,YACqB;EACrB,GAAG;EACH,QAAQ;GACN,GAAG,QAAQ;GACX,KAAK;IACH,GAAG,QAAQ,QAAQ;IACnB,OAAO;IACR;GACF;EACF;AAED,KAAI,OAAO,YAAY,WACrB,cAAa,cAAc,SAAS,CAAC;AAGvC,QAAO,cAAc,QAAQ;;;;;;;;;;;;;;;AAgB/B,IAAM,iCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,QAAO,oBAAoB,kBACzB,4BACE,eACA,cACD,CACF,CAAC,QAAQ;;;;;;;;;;;;;;;AAgBZ,IAAM,oCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,QAAO,oBAAoB,kBACzB,+BACE,oBACE,cACD,EACD,cACD,CACF,CAAC,QAAQ;;;;;;;;;;;;;;;AAgBZ,IAAM,uBAAuC,oCAC1C,SAAS,SACR,8BACE,oBACE,QACD,EACD,KACD,CACJ;AACD,IAAM,iBAAiB"} |
+6
-96
@@ -1,2 +0,4 @@ | ||
| import { configSchema, CodeSplittingOptions, Config, getConfig } from './core/config.js'; | ||
| import { configSchema, getConfig, CodeSplittingOptions, Config } from './core/config.js'; | ||
| import { RouterPluginContext } from './core/router-plugin-context.js'; | ||
| type RouterPluginOptions = Partial<Config | (() => Config)> | undefined; | ||
| /** | ||
@@ -11,49 +13,3 @@ * @example | ||
| */ | ||
| declare const tanstackRouterGenerator: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('vite').Plugin<any> | import('vite').Plugin<any>[]; | ||
| declare const tanstackRouterGenerator: (options?: RouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('vite').Plugin<any> | import('vite').Plugin<any>[]; | ||
| /** | ||
@@ -68,49 +24,3 @@ * @example | ||
| */ | ||
| declare const tanStackRouterCodeSplitter: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('vite').Plugin<any> | import('vite').Plugin<any>[]; | ||
| declare const tanStackRouterCodeSplitter: (options?: RouterPluginOptions, routerPluginContext?: RouterPluginContext) => import('vite').Plugin<any> | import('vite').Plugin<any>[]; | ||
| /** | ||
@@ -224,2 +134,2 @@ * @example | ||
| export { configSchema, getConfig, tanStackRouterCodeSplitter, tanstackRouterGenerator, TanStackRouterVite, tanstackRouter, }; | ||
| export type { Config, CodeSplittingOptions }; | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext }; |
+14
-6
@@ -1,7 +0,9 @@ | ||
| import { configSchema } from "./core/config.js"; | ||
| import { unpluginRouterCodeSplitterFactory } from "./core/router-code-splitter-plugin.js"; | ||
| import { unpluginRouterGeneratorFactory } from "./core/router-generator-plugin.js"; | ||
| import { configSchema, getConfig } from "./core/config.js"; | ||
| import { createRouterPluginContext } from "./core/router-plugin-context.js"; | ||
| import { createRouterCodeSplitterPlugin } from "./core/router-code-splitter-plugin.js"; | ||
| import { createRouterGeneratorPlugin } from "./core/router-generator-plugin.js"; | ||
| import { unpluginRouterComposedFactory } from "./core/router-composed-plugin.js"; | ||
| import { createVitePlugin } from "unplugin"; | ||
| //#region src/vite.ts | ||
| var defaultRouterPluginContext = createRouterPluginContext(); | ||
| /** | ||
@@ -16,3 +18,6 @@ * @example | ||
| */ | ||
| var tanstackRouterGenerator = createVitePlugin(unpluginRouterGeneratorFactory); | ||
| var tanstackRouterGenerator = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return createVitePlugin((pluginOptions) => createRouterGeneratorPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -27,3 +32,6 @@ * @example | ||
| */ | ||
| var tanStackRouterCodeSplitter = createVitePlugin(unpluginRouterCodeSplitterFactory); | ||
| var tanStackRouterCodeSplitter = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return createVitePlugin((pluginOptions) => createRouterCodeSplitterPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -44,4 +52,4 @@ * @example | ||
| //#endregion | ||
| export { TanStackRouterVite, configSchema, tanstackRouter as default, tanstackRouter, tanStackRouterCodeSplitter, tanstackRouterGenerator }; | ||
| export { TanStackRouterVite, configSchema, tanstackRouter as default, tanstackRouter, getConfig, tanStackRouterCodeSplitter, tanstackRouterGenerator }; | ||
| //# sourceMappingURL=vite.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"vite.js","names":[],"sources":["../../src/vite.ts"],"sourcesContent":["import { createVitePlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport type { CodeSplittingOptions, Config, getConfig } from './core/config'\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanstackRouterGenerator()],\n * // ...\n * })\n * ```\n */\nconst tanstackRouterGenerator = createVitePlugin(unpluginRouterGeneratorFactory)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanStackRouterCodeSplitter()],\n * // ...\n * })\n * ```\n */\nconst tanStackRouterCodeSplitter = createVitePlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanstackRouter()],\n * // ...\n * })\n * ```\n */\nconst tanstackRouter = createVitePlugin(unpluginRouterComposedFactory)\n\n/**\n * @deprecated Use `tanstackRouter` instead.\n */\nconst TanStackRouterVite = tanstackRouter\n\nexport default tanstackRouter\nexport {\n configSchema,\n getConfig,\n tanStackRouterCodeSplitter,\n tanstackRouterGenerator,\n TanStackRouterVite,\n tanstackRouter,\n}\n\nexport type { Config, CodeSplittingOptions }\n"],"mappings":";;;;;;;;;;;;;;;AAiBA,IAAM,0BAA0B,iBAAiB,+BAA+B;;;;;;;;;;AAWhF,IAAM,6BAA6B,iBACjC,kCACD;;;;;;;;;;AAWD,IAAM,iBAAiB,iBAAiB,8BAA8B;;;;AAKtE,IAAM,qBAAqB"} | ||
| {"version":3,"file":"vite.js","names":[],"sources":["../../src/vite.ts"],"sourcesContent":["import { createVitePlugin } from 'unplugin'\n\nimport { configSchema, getConfig } from './core/config'\nimport { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin'\nimport { createRouterGeneratorPlugin } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport { createRouterPluginContext } from './core/router-plugin-context'\nimport type { CodeSplittingOptions, Config } from './core/config'\nimport type { RouterPluginContext } from './core/router-plugin-context'\n\ntype RouterPluginOptions = Partial<Config | (() => Config)> | undefined\n\nconst defaultRouterPluginContext = createRouterPluginContext()\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanstackRouterGenerator()],\n * // ...\n * })\n * ```\n */\nconst tanstackRouterGenerator = (\n options?: RouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createVitePlugin((pluginOptions: RouterPluginOptions) =>\n createRouterGeneratorPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanStackRouterCodeSplitter()],\n * // ...\n * })\n * ```\n */\nconst tanStackRouterCodeSplitter = (\n options?: RouterPluginOptions,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createVitePlugin((pluginOptions: RouterPluginOptions) =>\n createRouterCodeSplitterPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [tanstackRouter()],\n * // ...\n * })\n * ```\n */\nconst tanstackRouter = createVitePlugin(unpluginRouterComposedFactory)\n\n/**\n * @deprecated Use `tanstackRouter` instead.\n */\nconst TanStackRouterVite = tanstackRouter\n\nexport default tanstackRouter\nexport {\n configSchema,\n getConfig,\n tanStackRouterCodeSplitter,\n tanstackRouterGenerator,\n TanStackRouterVite,\n tanstackRouter,\n}\n\nexport type { Config, CodeSplittingOptions, RouterPluginContext }\n"],"mappings":";;;;;;;AAYA,IAAM,6BAA6B,2BAA2B;;;;;;;;;;AAW9D,IAAM,2BACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,QAAO,kBAAkB,kBACvB,4BAA4B,eAAe,cAAc,CAC1D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,8BACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,QAAO,kBAAkB,kBACvB,+BAA+B,eAAe,cAAc,CAC7D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,iBAAiB,iBAAiB,8BAA8B;;;;AAKtE,IAAM,qBAAqB"} |
| import { configSchema, CodeSplittingOptions, Config } from './core/config.js'; | ||
| import { RouterPluginContext } from './core/router-plugin-context.js'; | ||
| /** | ||
@@ -11,49 +12,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterGeneratorWebpack: (options?: Partial<{ | ||
| target: "react" | "solid" | "vue"; | ||
| routeFileIgnorePrefix: string; | ||
| routesDirectory: string; | ||
| quoteStyle: "single" | "double"; | ||
| semicolons: boolean; | ||
| disableLogging: boolean; | ||
| routeTreeFileHeader: string[]; | ||
| indexToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| routeToken: string | RegExp | { | ||
| regex: string; | ||
| flags?: string | undefined; | ||
| }; | ||
| generatedRouteTree: string; | ||
| disableTypes: boolean; | ||
| addExtensions: string | boolean; | ||
| enableRouteTreeFormatting: boolean; | ||
| tmpDir: string; | ||
| importRoutesUsingAbsolutePaths: boolean; | ||
| enableRouteGeneration?: boolean | undefined; | ||
| codeSplittingOptions?: CodeSplittingOptions | undefined; | ||
| plugin?: { | ||
| vite?: { | ||
| environmentName?: string | undefined; | ||
| } | undefined; | ||
| hmr?: { | ||
| style?: "vite" | "webpack" | undefined; | ||
| } | undefined; | ||
| } | undefined; | ||
| virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined; | ||
| routeFilePrefix?: string | undefined; | ||
| routeFileIgnorePattern?: string | undefined; | ||
| pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined; | ||
| routeTreeFileFooter?: string[] | ((...args: unknown[]) => string[]) | undefined; | ||
| autoCodeSplitting?: boolean | undefined; | ||
| customScaffolding?: { | ||
| routeTemplate?: string | undefined; | ||
| lazyRouteTemplate?: string | undefined; | ||
| } | undefined; | ||
| experimental?: { | ||
| enableCodeSplitting?: boolean | undefined; | ||
| } | undefined; | ||
| plugins?: import('@tanstack/router-generator').GeneratorPlugin[] | undefined; | ||
| } | (() => Config)> | undefined) => import('unplugin').WebpackPluginInstance; | ||
| declare const TanStackRouterGeneratorWebpack: (options?: Partial<Config>, routerPluginContext?: RouterPluginContext) => import('unplugin').WebpackPluginInstance; | ||
| /** | ||
@@ -68,3 +23,3 @@ * @example | ||
| */ | ||
| declare const TanStackRouterCodeSplitterWebpack: (options?: unknown) => import('unplugin').WebpackPluginInstance; | ||
| declare const TanStackRouterCodeSplitterWebpack: (options?: Partial<Config>, routerPluginContext?: RouterPluginContext) => import('unplugin').WebpackPluginInstance; | ||
| /** | ||
@@ -83,2 +38,2 @@ * @example | ||
| export { configSchema, TanStackRouterWebpack, TanStackRouterGeneratorWebpack, TanStackRouterCodeSplitterWebpack, tanstackRouter, }; | ||
| export type { Config, CodeSplittingOptions }; | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext }; |
+12
-4
| import { configSchema } from "./core/config.js"; | ||
| import { unpluginRouterCodeSplitterFactory } from "./core/router-code-splitter-plugin.js"; | ||
| import { unpluginRouterGeneratorFactory } from "./core/router-generator-plugin.js"; | ||
| import { createRouterPluginContext } from "./core/router-plugin-context.js"; | ||
| import { createRouterCodeSplitterPlugin } from "./core/router-code-splitter-plugin.js"; | ||
| import { createRouterGeneratorPlugin } from "./core/router-generator-plugin.js"; | ||
| import { unpluginRouterComposedFactory } from "./core/router-composed-plugin.js"; | ||
| import { createWebpackPlugin } from "unplugin"; | ||
| //#region src/webpack.ts | ||
| var defaultRouterPluginContext = createRouterPluginContext(); | ||
| /** | ||
@@ -33,3 +35,6 @@ * Webpack uses `module.hot` / `import.meta.webpackHot` HMR. Force | ||
| */ | ||
| var TanStackRouterGeneratorWebpack = /* @__PURE__ */ createWebpackPlugin(unpluginRouterGeneratorFactory); | ||
| var TanStackRouterGeneratorWebpack = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return createWebpackPlugin((pluginOptions) => createRouterGeneratorPlugin(pluginOptions, pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -44,3 +49,6 @@ * @example | ||
| */ | ||
| var TanStackRouterCodeSplitterWebpack = /* @__PURE__ */ createWebpackPlugin((options, meta) => unpluginRouterCodeSplitterFactory(withWebpackHmrStyle(options), meta)); | ||
| var TanStackRouterCodeSplitterWebpack = (options, routerPluginContext) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext; | ||
| return createWebpackPlugin((pluginOptions) => createRouterCodeSplitterPlugin(withWebpackHmrStyle(pluginOptions), pluginContext))(options); | ||
| }; | ||
| /** | ||
@@ -47,0 +55,0 @@ * @example |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"webpack.js","names":[],"sources":["../../src/webpack.ts"],"sourcesContent":["import { createWebpackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'\nimport { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport type { CodeSplittingOptions, Config } from './core/config'\n\n/**\n * Webpack uses `module.hot` / `import.meta.webpackHot` HMR. Force\n * `plugin.hmr.style = 'webpack'` so the router HMR adapter emits the correct\n * accept/dispose shape regardless of user config.\n */\nfunction withWebpackHmrStyle(\n options: Partial<Config> | undefined,\n): Partial<Config> {\n return {\n ...options,\n plugin: {\n ...options?.plugin,\n hmr: {\n ...options?.plugin?.hmr,\n style: 'webpack',\n },\n },\n }\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterGeneratorWebpack()],\n * }\n * ```\n */\nconst TanStackRouterGeneratorWebpack = /* #__PURE__ */ createWebpackPlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterCodeSplitterWebpack()],\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterWebpack = /* #__PURE__ */ createWebpackPlugin(\n (options, meta) =>\n unpluginRouterCodeSplitterFactory(\n withWebpackHmrStyle(options as Partial<Config> | undefined),\n meta,\n ),\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [tanstackRouter()],\n * }\n * ```\n */\nconst TanStackRouterWebpack = /* #__PURE__ */ createWebpackPlugin(\n (options, meta) =>\n unpluginRouterComposedFactory(\n withWebpackHmrStyle(options as Partial<Config> | undefined),\n meta,\n ),\n)\n\nconst tanstackRouter = TanStackRouterWebpack\nexport default TanStackRouterWebpack\nexport {\n configSchema,\n TanStackRouterWebpack,\n TanStackRouterGeneratorWebpack,\n TanStackRouterCodeSplitterWebpack,\n tanstackRouter,\n}\nexport type { Config, CodeSplittingOptions }\n"],"mappings":";;;;;;;;;;;AAaA,SAAS,oBACP,SACiB;AACjB,QAAO;EACL,GAAG;EACH,QAAQ;GACN,GAAG,SAAS;GACZ,KAAK;IACH,GAAG,SAAS,QAAQ;IACpB,OAAO;IACR;GACF;EACF;;;;;;;;;;;AAYH,IAAM,iCAAiD,oCACrD,+BACD;;;;;;;;;;AAWD,IAAM,oCAAoD,qCACvD,SAAS,SACR,kCACE,oBAAoB,QAAuC,EAC3D,KACD,CACJ;;;;;;;;;;AAWD,IAAM,wBAAwC,qCAC3C,SAAS,SACR,8BACE,oBAAoB,QAAuC,EAC3D,KACD,CACJ;AAED,IAAM,iBAAiB"} | ||
| {"version":3,"file":"webpack.js","names":[],"sources":["../../src/webpack.ts"],"sourcesContent":["import { createWebpackPlugin } from 'unplugin'\n\nimport { configSchema } from './core/config'\nimport { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin'\nimport { createRouterGeneratorPlugin } from './core/router-generator-plugin'\nimport { unpluginRouterComposedFactory } from './core/router-composed-plugin'\nimport { createRouterPluginContext } from './core/router-plugin-context'\nimport type { CodeSplittingOptions, Config } from './core/config'\nimport type { RouterPluginContext } from './core/router-plugin-context'\n\nconst defaultRouterPluginContext = createRouterPluginContext()\n\n/**\n * Webpack uses `module.hot` / `import.meta.webpackHot` HMR. Force\n * `plugin.hmr.style = 'webpack'` so the router HMR adapter emits the correct\n * accept/dispose shape regardless of user config.\n */\nfunction withWebpackHmrStyle(\n options: Partial<Config> | undefined,\n): Partial<Config> {\n return {\n ...options,\n plugin: {\n ...options?.plugin,\n hmr: {\n ...options?.plugin?.hmr,\n style: 'webpack',\n },\n },\n }\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterGeneratorWebpack()],\n * }\n * ```\n */\nconst TanStackRouterGeneratorWebpack = (\n options?: Partial<Config>,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createWebpackPlugin((pluginOptions: Partial<Config> | undefined) =>\n createRouterGeneratorPlugin(pluginOptions, pluginContext),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterCodeSplitterWebpack()],\n * }\n * ```\n */\nconst TanStackRouterCodeSplitterWebpack = (\n options?: Partial<Config>,\n routerPluginContext?: RouterPluginContext,\n) => {\n const pluginContext = routerPluginContext ?? defaultRouterPluginContext\n return createWebpackPlugin((pluginOptions: Partial<Config> | undefined) =>\n createRouterCodeSplitterPlugin(\n withWebpackHmrStyle(pluginOptions),\n pluginContext,\n ),\n )(options)\n}\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [tanstackRouter()],\n * }\n * ```\n */\nconst TanStackRouterWebpack = /* #__PURE__ */ createWebpackPlugin(\n (options, meta) =>\n unpluginRouterComposedFactory(\n withWebpackHmrStyle(options as Partial<Config> | undefined),\n meta,\n ),\n)\n\nconst tanstackRouter = TanStackRouterWebpack\nexport default TanStackRouterWebpack\nexport {\n configSchema,\n TanStackRouterWebpack,\n TanStackRouterGeneratorWebpack,\n TanStackRouterCodeSplitterWebpack,\n tanstackRouter,\n}\nexport type { Config, CodeSplittingOptions, RouterPluginContext }\n"],"mappings":";;;;;;;AAUA,IAAM,6BAA6B,2BAA2B;;;;;;AAO9D,SAAS,oBACP,SACiB;AACjB,QAAO;EACL,GAAG;EACH,QAAQ;GACN,GAAG,SAAS;GACZ,KAAK;IACH,GAAG,SAAS,QAAQ;IACpB,OAAO;IACR;GACF;EACF;;;;;;;;;;;AAYH,IAAM,kCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,QAAO,qBAAqB,kBAC1B,4BAA4B,eAAe,cAAc,CAC1D,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,qCACJ,SACA,wBACG;CACH,MAAM,gBAAgB,uBAAuB;AAC7C,QAAO,qBAAqB,kBAC1B,+BACE,oBAAoB,cAAc,EAClC,cACD,CACF,CAAC,QAAQ;;;;;;;;;;;AAYZ,IAAM,wBAAwC,qCAC3C,SAAS,SACR,8BACE,oBAAoB,QAAuC,EAC3D,KACD,CACJ;AAED,IAAM,iBAAiB"} |
+11
-1
| { | ||
| "name": "@tanstack/router-plugin", | ||
| "version": "1.167.31", | ||
| "version": "1.167.32", | ||
| "description": "Modern and scalable routing for React applications", | ||
@@ -49,2 +49,12 @@ "author": "Tanner Linsley", | ||
| }, | ||
| "./context": { | ||
| "import": { | ||
| "types": "./dist/esm/context.d.ts", | ||
| "default": "./dist/esm/context.js" | ||
| }, | ||
| "require": { | ||
| "types": "./dist/cjs/context.d.cts", | ||
| "default": "./dist/cjs/context.cjs" | ||
| } | ||
| }, | ||
| "./rspack": { | ||
@@ -51,0 +61,0 @@ "import": { |
@@ -25,5 +25,7 @@ /** | ||
| import { debug, normalizePath } from './utils' | ||
| import { createRouterPluginContext } from './router-plugin-context' | ||
| import type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants' | ||
| import type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator' | ||
| import type { Config } from './config' | ||
| import type { RouterPluginContext } from './router-plugin-context' | ||
| import type { | ||
@@ -80,5 +82,6 @@ UnpluginFactory, | ||
| export const unpluginRouterCodeSplitterFactory: UnpluginFactory< | ||
| Partial<Config | (() => Config)> | undefined | ||
| > = (options = {}, { framework: _framework }) => { | ||
| export function createRouterCodeSplitterPlugin( | ||
| options: Partial<Config | (() => Config)> | undefined = {}, | ||
| routerPluginContext: RouterPluginContext, | ||
| ): ReturnType<UnpluginFactory<Partial<Config | (() => Config)> | undefined>> { | ||
| let ROOT: string = process.cwd() | ||
@@ -264,3 +267,3 @@ let userConfig: Config | ||
| const generatorFileInfo = | ||
| globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId) | ||
| routerPluginContext.routesByFile.get(normalizedId) | ||
| if ( | ||
@@ -408,1 +411,7 @@ generatorFileInfo && | ||
| } | ||
| export const unpluginRouterCodeSplitterFactory: UnpluginFactory< | ||
| Partial<Config | (() => Config)> | undefined | ||
| > = (options = {}) => { | ||
| return createRouterCodeSplitterPlugin(options, createRouterPluginContext()) | ||
| } |
| import { getConfig } from '@tanstack/router-generator' | ||
| import { unpluginRouterGeneratorFactory } from './router-generator-plugin' | ||
| import { unpluginRouterCodeSplitterFactory } from './router-code-splitter-plugin' | ||
| import { unpluginRouterHmrFactory } from './router-hmr-plugin' | ||
| import { createRouterGeneratorPlugin } from './router-generator-plugin' | ||
| import { createRouterCodeSplitterPlugin } from './router-code-splitter-plugin' | ||
| import { createRouterHmrPlugin } from './router-hmr-plugin' | ||
| import { createRouterPluginContext } from './router-plugin-context' | ||
| import type { Config } from './config' | ||
@@ -32,3 +33,3 @@ import type { | ||
| Partial<Config | (() => Config)> | undefined | ||
| > = (options = {}, meta) => { | ||
| > = (options = {}, _meta) => { | ||
| const ROOT: string = process.cwd() | ||
@@ -39,7 +40,5 @@ const userConfig = getConfig( | ||
| ) | ||
| const routerPluginContext = createRouterPluginContext() | ||
| const getPlugin = ( | ||
| pluginFactory: UnpluginFactory<Partial<Config | (() => Config)>>, | ||
| ) => { | ||
| const plugin = pluginFactory(options, meta) | ||
| const getPlugin = (plugin: ReturnType<UnpluginFactory<any>>) => { | ||
| if (!Array.isArray(plugin)) { | ||
@@ -51,4 +50,8 @@ return [plugin] | ||
| const routerGenerator = getPlugin(unpluginRouterGeneratorFactory) | ||
| const routerCodeSplitter = getPlugin(unpluginRouterCodeSplitterFactory) | ||
| const routerGenerator = getPlugin( | ||
| createRouterGeneratorPlugin(options, routerPluginContext), | ||
| ) | ||
| const routerCodeSplitter = getPlugin( | ||
| createRouterCodeSplitterPlugin(options, routerPluginContext), | ||
| ) | ||
@@ -91,3 +94,5 @@ const result = [ | ||
| if (!isProduction && !userConfig.autoCodeSplitting) { | ||
| const routerHmr = getPlugin(unpluginRouterHmrFactory) | ||
| const routerHmr = getPlugin( | ||
| createRouterHmrPlugin(options, routerPluginContext), | ||
| ) | ||
| result.push(...routerHmr) | ||
@@ -94,0 +99,0 @@ } |
| import { isAbsolute, join, normalize } from 'node:path' | ||
| import { Generator, resolveConfigPath } from '@tanstack/router-generator' | ||
| import { getConfig } from './config' | ||
| import { createRouterPluginContext } from './router-plugin-context' | ||
@@ -9,8 +10,10 @@ import type { GeneratorEvent } from '@tanstack/router-generator' | ||
| import type { Config } from './config' | ||
| import type { RouterPluginContext } from './router-plugin-context' | ||
| const PLUGIN_NAME = 'unplugin:router-generator' | ||
| export const unpluginRouterGeneratorFactory: UnpluginFactory< | ||
| Partial<Config | (() => Config)> | undefined | ||
| > = (options = {}) => { | ||
| export function createRouterGeneratorPlugin( | ||
| options: Partial<Config | (() => Config)> | undefined = {}, | ||
| routerPluginContext: RouterPluginContext, | ||
| ): ReturnType<UnpluginFactory<Partial<Config | (() => Config)> | undefined>> { | ||
| let ROOT: string = process.cwd() | ||
@@ -62,3 +65,3 @@ let userConfig: Config | ||
| await generator.run(generatorEvent) | ||
| globalThis.TSR_ROUTES_BY_ID_MAP = generator.getRoutesByFileMap() | ||
| routerPluginContext.routesByFile = generator.getRoutesByFileMap() | ||
| } catch (e) { | ||
@@ -151,1 +154,7 @@ console.error(e) | ||
| } | ||
| export const unpluginRouterGeneratorFactory: UnpluginFactory< | ||
| Partial<Config | (() => Config)> | undefined | ||
| > = (options = {}) => { | ||
| return createRouterGeneratorPlugin(options, createRouterPluginContext()) | ||
| } |
@@ -7,4 +7,6 @@ import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils' | ||
| import { getConfig } from './config' | ||
| import { createRouterPluginContext } from './router-plugin-context' | ||
| import type { UnpluginFactory } from 'unplugin' | ||
| import type { Config } from './config' | ||
| import type { RouterPluginContext } from './router-plugin-context' | ||
@@ -22,8 +24,15 @@ /** | ||
| ] | ||
| export const unpluginRouterHmrFactory: UnpluginFactory< | ||
| Partial<Config> | undefined | ||
| > = (options = {}) => { | ||
| export function createRouterHmrPlugin( | ||
| options: Partial<Config | (() => Config)> | undefined = {}, | ||
| routerPluginContext: RouterPluginContext, | ||
| ): ReturnType<UnpluginFactory<Partial<Config> | undefined>> { | ||
| let ROOT: string = process.cwd() | ||
| let userConfig = options as Config | ||
| const resolveUserConfig = () => { | ||
| return getConfig(typeof options === 'function' ? options() : options, ROOT) | ||
| } | ||
| let userConfig = resolveUserConfig() | ||
| return { | ||
@@ -42,3 +51,3 @@ name: 'tanstack-router:hmr', | ||
| const normalizedId = normalizePath(id) | ||
| const routeEntry = globalThis.TSR_ROUTES_BY_ID_MAP?.get(normalizedId) | ||
| const routeEntry = routerPluginContext.routesByFile.get(normalizedId) | ||
| if (!routeEntry) { | ||
@@ -103,3 +112,3 @@ return null | ||
| ROOT = config.root | ||
| userConfig = getConfig(options, ROOT) | ||
| userConfig = resolveUserConfig() | ||
| }, | ||
@@ -115,1 +124,7 @@ applyToEnvironment(environment) { | ||
| } | ||
| export const unpluginRouterHmrFactory: UnpluginFactory< | ||
| Partial<Config> | undefined | ||
| > = (options = {}) => { | ||
| return createRouterHmrPlugin(options, createRouterPluginContext()) | ||
| } |
+27
-9
| import { createEsbuildPlugin } from 'unplugin' | ||
| import { configSchema } from './core/config' | ||
| import { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin' | ||
| import { unpluginRouterGeneratorFactory } from './core/router-generator-plugin' | ||
| import { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin' | ||
| import { createRouterGeneratorPlugin } from './core/router-generator-plugin' | ||
| import { unpluginRouterComposedFactory } from './core/router-composed-plugin' | ||
| import { createRouterPluginContext } from './core/router-plugin-context' | ||
| import type { CodeSplittingOptions, Config } from './core/config' | ||
| import type { RouterPluginContext } from './core/router-plugin-context' | ||
| type RouterPluginOptions = Partial<Config | (() => Config)> | undefined | ||
| const defaultRouterPluginContext = createRouterPluginContext() | ||
| /** | ||
@@ -19,5 +25,11 @@ * @example | ||
| */ | ||
| const TanStackRouterGeneratorEsbuild = createEsbuildPlugin( | ||
| unpluginRouterGeneratorFactory, | ||
| ) | ||
| const TanStackRouterGeneratorEsbuild = ( | ||
| options?: RouterPluginOptions, | ||
| routerPluginContext?: RouterPluginContext, | ||
| ) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext | ||
| return createEsbuildPlugin((pluginOptions: RouterPluginOptions) => | ||
| createRouterGeneratorPlugin(pluginOptions, pluginContext), | ||
| )(options) | ||
| } | ||
@@ -33,5 +45,11 @@ /** | ||
| */ | ||
| const TanStackRouterCodeSplitterEsbuild = createEsbuildPlugin( | ||
| unpluginRouterCodeSplitterFactory, | ||
| ) | ||
| const TanStackRouterCodeSplitterEsbuild = ( | ||
| options?: RouterPluginOptions, | ||
| routerPluginContext?: RouterPluginContext, | ||
| ) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext | ||
| return createEsbuildPlugin((pluginOptions: RouterPluginOptions) => | ||
| createRouterCodeSplitterPlugin(pluginOptions, pluginContext), | ||
| )(options) | ||
| } | ||
@@ -59,2 +77,2 @@ /** | ||
| export type { Config, CodeSplittingOptions } | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext } |
+2
-0
| export { configSchema, getConfig } from './core/config' | ||
| export { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin' | ||
| export { unpluginRouterGeneratorFactory } from './core/router-generator-plugin' | ||
| export { createRouterPluginContext } from './core/router-plugin-context' | ||
| export type { | ||
@@ -12,2 +13,3 @@ Config, | ||
| } from './core/config' | ||
| export type { RouterPluginContext } from './core/router-plugin-context' | ||
| export { | ||
@@ -14,0 +16,0 @@ tsrSplit, |
+30
-12
| import { createRspackPlugin } from 'unplugin' | ||
| import { configSchema } from './core/config' | ||
| import { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin' | ||
| import { unpluginRouterGeneratorFactory } from './core/router-generator-plugin' | ||
| import { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin' | ||
| import { createRouterGeneratorPlugin } from './core/router-generator-plugin' | ||
| import { unpluginRouterComposedFactory } from './core/router-composed-plugin' | ||
| import { createRouterPluginContext } from './core/router-plugin-context' | ||
| import type { CodeSplittingOptions, Config } from './core/config' | ||
| import type { RouterPluginContext } from './core/router-plugin-context' | ||
| type RspackRouterPluginOptions = Partial<Config> | (() => Partial<Config>) | ||
| const defaultRouterPluginContext = createRouterPluginContext() | ||
| /** | ||
@@ -53,5 +57,14 @@ * Rspack uses webpack-compatible `module.hot` / `import.meta.webpackHot` HMR. | ||
| */ | ||
| const TanStackRouterGeneratorRspack = /* #__PURE__ */ createRspackPlugin( | ||
| unpluginRouterGeneratorFactory, | ||
| ) | ||
| const TanStackRouterGeneratorRspack = ( | ||
| options?: RspackRouterPluginOptions, | ||
| routerPluginContext?: RouterPluginContext, | ||
| ) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext | ||
| return createRspackPlugin((pluginOptions) => | ||
| createRouterGeneratorPlugin( | ||
| pluginOptions as Partial<Config | (() => Config)> | undefined, | ||
| pluginContext, | ||
| ), | ||
| )(options) | ||
| } | ||
@@ -71,11 +84,16 @@ /** | ||
| */ | ||
| const TanStackRouterCodeSplitterRspack = /* #__PURE__ */ createRspackPlugin( | ||
| (options, meta) => | ||
| unpluginRouterCodeSplitterFactory( | ||
| const TanStackRouterCodeSplitterRspack = ( | ||
| options?: RspackRouterPluginOptions, | ||
| routerPluginContext?: RouterPluginContext, | ||
| ) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext | ||
| return createRspackPlugin((pluginOptions) => | ||
| createRouterCodeSplitterPlugin( | ||
| withWebpackHmrStyle( | ||
| options as RspackRouterPluginOptions | undefined, | ||
| pluginOptions as RspackRouterPluginOptions | undefined, | ||
| ) as Partial<Config | (() => Config)>, | ||
| meta, | ||
| pluginContext, | ||
| ), | ||
| ) | ||
| )(options) | ||
| } | ||
@@ -113,2 +131,2 @@ /** | ||
| } | ||
| export type { Config, CodeSplittingOptions } | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext } |
+29
-9
| import { createVitePlugin } from 'unplugin' | ||
| import { configSchema } from './core/config' | ||
| import { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin' | ||
| import { unpluginRouterGeneratorFactory } from './core/router-generator-plugin' | ||
| import { configSchema, getConfig } from './core/config' | ||
| import { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin' | ||
| import { createRouterGeneratorPlugin } from './core/router-generator-plugin' | ||
| import { unpluginRouterComposedFactory } from './core/router-composed-plugin' | ||
| import type { CodeSplittingOptions, Config, getConfig } from './core/config' | ||
| import { createRouterPluginContext } from './core/router-plugin-context' | ||
| import type { CodeSplittingOptions, Config } from './core/config' | ||
| import type { RouterPluginContext } from './core/router-plugin-context' | ||
| type RouterPluginOptions = Partial<Config | (() => Config)> | undefined | ||
| const defaultRouterPluginContext = createRouterPluginContext() | ||
| /** | ||
@@ -18,3 +24,11 @@ * @example | ||
| */ | ||
| const tanstackRouterGenerator = createVitePlugin(unpluginRouterGeneratorFactory) | ||
| const tanstackRouterGenerator = ( | ||
| options?: RouterPluginOptions, | ||
| routerPluginContext?: RouterPluginContext, | ||
| ) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext | ||
| return createVitePlugin((pluginOptions: RouterPluginOptions) => | ||
| createRouterGeneratorPlugin(pluginOptions, pluginContext), | ||
| )(options) | ||
| } | ||
@@ -30,5 +44,11 @@ /** | ||
| */ | ||
| const tanStackRouterCodeSplitter = createVitePlugin( | ||
| unpluginRouterCodeSplitterFactory, | ||
| ) | ||
| const tanStackRouterCodeSplitter = ( | ||
| options?: RouterPluginOptions, | ||
| routerPluginContext?: RouterPluginContext, | ||
| ) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext | ||
| return createVitePlugin((pluginOptions: RouterPluginOptions) => | ||
| createRouterCodeSplitterPlugin(pluginOptions, pluginContext), | ||
| )(options) | ||
| } | ||
@@ -61,2 +81,2 @@ /** | ||
| export type { Config, CodeSplittingOptions } | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext } |
+27
-12
| import { createWebpackPlugin } from 'unplugin' | ||
| import { configSchema } from './core/config' | ||
| import { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin' | ||
| import { unpluginRouterGeneratorFactory } from './core/router-generator-plugin' | ||
| import { createRouterCodeSplitterPlugin } from './core/router-code-splitter-plugin' | ||
| import { createRouterGeneratorPlugin } from './core/router-generator-plugin' | ||
| import { unpluginRouterComposedFactory } from './core/router-composed-plugin' | ||
| import { createRouterPluginContext } from './core/router-plugin-context' | ||
| import type { CodeSplittingOptions, Config } from './core/config' | ||
| import type { RouterPluginContext } from './core/router-plugin-context' | ||
| const defaultRouterPluginContext = createRouterPluginContext() | ||
| /** | ||
@@ -38,5 +42,11 @@ * Webpack uses `module.hot` / `import.meta.webpackHot` HMR. Force | ||
| */ | ||
| const TanStackRouterGeneratorWebpack = /* #__PURE__ */ createWebpackPlugin( | ||
| unpluginRouterGeneratorFactory, | ||
| ) | ||
| const TanStackRouterGeneratorWebpack = ( | ||
| options?: Partial<Config>, | ||
| routerPluginContext?: RouterPluginContext, | ||
| ) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext | ||
| return createWebpackPlugin((pluginOptions: Partial<Config> | undefined) => | ||
| createRouterGeneratorPlugin(pluginOptions, pluginContext), | ||
| )(options) | ||
| } | ||
@@ -52,9 +62,14 @@ /** | ||
| */ | ||
| const TanStackRouterCodeSplitterWebpack = /* #__PURE__ */ createWebpackPlugin( | ||
| (options, meta) => | ||
| unpluginRouterCodeSplitterFactory( | ||
| withWebpackHmrStyle(options as Partial<Config> | undefined), | ||
| meta, | ||
| const TanStackRouterCodeSplitterWebpack = ( | ||
| options?: Partial<Config>, | ||
| routerPluginContext?: RouterPluginContext, | ||
| ) => { | ||
| const pluginContext = routerPluginContext ?? defaultRouterPluginContext | ||
| return createWebpackPlugin((pluginOptions: Partial<Config> | undefined) => | ||
| createRouterCodeSplitterPlugin( | ||
| withWebpackHmrStyle(pluginOptions), | ||
| pluginContext, | ||
| ), | ||
| ) | ||
| )(options) | ||
| } | ||
@@ -87,2 +102,2 @@ /** | ||
| } | ||
| export type { Config, CodeSplittingOptions } | ||
| export type { Config, CodeSplittingOptions, RouterPluginContext } |
| /* eslint-disable no-var */ | ||
| import type { GetRoutesByFileMapResult } from '@tanstack/router-generator' | ||
| declare global { | ||
| var TSR_ROUTES_BY_ID_MAP: GetRoutesByFileMapResult | undefined | ||
| } | ||
| export {} |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
797029
1.02%186
6.29%9287
-0.42%