@tanstack/router-plugin 1.120.3 → 1.120.4-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/core/code-splitter/compilers.cjs +39 -21
- package/dist/cjs/core/code-splitter/compilers.cjs.map +1 -1
- package/dist/cjs/core/code-splitter/compilers.d.cts +3 -0
- package/dist/cjs/core/code-splitter/framework-options.cjs +4 -8
- package/dist/cjs/core/code-splitter/framework-options.cjs.map +1 -1
- package/dist/cjs/core/code-splitter/framework-options.d.cts +0 -2
- package/dist/cjs/core/config.d.cts +31 -40
- package/dist/cjs/core/route-autoimport-plugin.cjs +98 -0
- package/dist/cjs/core/route-autoimport-plugin.cjs.map +1 -0
- package/dist/cjs/core/route-autoimport-plugin.d.cts +6 -0
- package/dist/cjs/core/route-hmr-statement.cjs +33 -0
- package/dist/cjs/core/route-hmr-statement.cjs.map +1 -0
- package/dist/cjs/core/route-hmr-statement.d.cts +1 -0
- package/dist/cjs/core/router-code-splitter-plugin.cjs +11 -20
- package/dist/cjs/core/router-code-splitter-plugin.cjs.map +1 -1
- package/dist/cjs/core/router-composed-plugin.cjs +19 -5
- package/dist/cjs/core/router-composed-plugin.cjs.map +1 -1
- package/dist/cjs/core/router-generator-plugin.cjs +8 -2
- package/dist/cjs/core/router-generator-plugin.cjs.map +1 -1
- package/dist/cjs/core/router-hmr-plugin.cjs +51 -0
- package/dist/cjs/core/router-hmr-plugin.cjs.map +1 -0
- package/dist/cjs/core/router-hmr-plugin.d.cts +8 -0
- package/dist/cjs/core/utils.cjs +12 -0
- package/dist/cjs/core/utils.cjs.map +1 -0
- package/dist/cjs/core/utils.d.cts +2 -0
- package/dist/cjs/esbuild.d.cts +21 -27
- package/dist/cjs/rspack.d.cts +21 -27
- package/dist/cjs/vite.cjs +2 -0
- package/dist/cjs/vite.cjs.map +1 -1
- package/dist/cjs/vite.d.cts +52 -26
- package/dist/cjs/webpack.d.cts +21 -27
- package/dist/esm/core/code-splitter/compilers.d.ts +3 -0
- package/dist/esm/core/code-splitter/compilers.js +39 -21
- package/dist/esm/core/code-splitter/compilers.js.map +1 -1
- package/dist/esm/core/code-splitter/framework-options.d.ts +0 -2
- package/dist/esm/core/code-splitter/framework-options.js +4 -8
- package/dist/esm/core/code-splitter/framework-options.js.map +1 -1
- package/dist/esm/core/config.d.ts +31 -40
- package/dist/esm/core/route-autoimport-plugin.d.ts +6 -0
- package/dist/esm/core/route-autoimport-plugin.js +81 -0
- package/dist/esm/core/route-autoimport-plugin.js.map +1 -0
- package/dist/esm/core/route-hmr-statement.d.ts +1 -0
- package/dist/esm/core/route-hmr-statement.js +16 -0
- package/dist/esm/core/route-hmr-statement.js.map +1 -0
- package/dist/esm/core/router-code-splitter-plugin.js +5 -14
- package/dist/esm/core/router-code-splitter-plugin.js.map +1 -1
- package/dist/esm/core/router-composed-plugin.js +19 -5
- package/dist/esm/core/router-composed-plugin.js.map +1 -1
- package/dist/esm/core/router-generator-plugin.js +8 -2
- package/dist/esm/core/router-generator-plugin.js.map +1 -1
- package/dist/esm/core/router-hmr-plugin.d.ts +8 -0
- package/dist/esm/core/router-hmr-plugin.js +51 -0
- package/dist/esm/core/router-hmr-plugin.js.map +1 -0
- package/dist/esm/core/utils.d.ts +2 -0
- package/dist/esm/core/utils.js +12 -0
- package/dist/esm/core/utils.js.map +1 -0
- package/dist/esm/esbuild.d.ts +21 -27
- package/dist/esm/rspack.d.ts +21 -27
- package/dist/esm/vite.d.ts +52 -26
- package/dist/esm/vite.js +3 -1
- package/dist/esm/vite.js.map +1 -1
- package/dist/esm/webpack.d.ts +21 -27
- package/package.json +6 -6
- package/src/core/code-splitter/compilers.ts +54 -27
- package/src/core/code-splitter/framework-options.ts +0 -6
- package/src/core/route-autoimport-plugin.ts +102 -0
- package/src/core/route-hmr-statement.ts +13 -0
- package/src/core/router-code-splitter-plugin.ts +3 -23
- package/src/core/router-composed-plugin.ts +20 -10
- package/src/core/router-generator-plugin.ts +12 -1
- package/src/core/router-hmr-plugin.ts +65 -0
- package/src/core/utils.ts +18 -0
- package/src/vite.ts +3 -0
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
import { isAbsolute, join, normalize } from "node:path";
|
|
2
1
|
import { pathToFileURL, fileURLToPath } from "node:url";
|
|
3
2
|
import { logDiff } from "@tanstack/router-utils";
|
|
4
3
|
import { getConfig, splitGroupingsSchema } from "./config.js";
|
|
5
4
|
import { compileCodeSplitVirtualRoute, detectCodeSplitGroupingsFromRoute, compileCodeSplitReferenceRoute } from "./code-splitter/compilers.js";
|
|
6
5
|
import { tsrSplit, splitRouteIdentNodes, defaultCodeSplitGroupings } from "./constants.js";
|
|
7
6
|
import { decodeIdentifier } from "./code-splitter/path-ids.js";
|
|
8
|
-
|
|
7
|
+
import { fileIsInRoutesDirectory, debug } from "./utils.js";
|
|
9
8
|
function capitalizeFirst(str) {
|
|
10
9
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
11
10
|
}
|
|
12
|
-
function fileIsInRoutesDirectory(filePath, routesDirectory) {
|
|
13
|
-
const routesDirectoryPath = isAbsolute(routesDirectory) ? routesDirectory : join(process.cwd(), routesDirectory);
|
|
14
|
-
const path = normalize(filePath);
|
|
15
|
-
return path.startsWith(routesDirectoryPath);
|
|
16
|
-
}
|
|
17
11
|
const bannedBeforeExternalPlugins = [
|
|
18
12
|
{
|
|
19
13
|
identifier: "@react-refresh",
|
|
@@ -49,9 +43,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
|
|
|
49
43
|
const handleCompilingReferenceFile = (code, id) => {
|
|
50
44
|
if (debug) console.info("Compiling Route: ", id);
|
|
51
45
|
const fromCode = detectCodeSplitGroupingsFromRoute({
|
|
52
|
-
code
|
|
53
|
-
root: ROOT,
|
|
54
|
-
filename: id
|
|
46
|
+
code
|
|
55
47
|
});
|
|
56
48
|
if (fromCode.groupings) {
|
|
57
49
|
const res = splitGroupingsSchema.safeParse(fromCode.groupings);
|
|
@@ -80,11 +72,11 @@ ${message}`
|
|
|
80
72
|
const splitGroupings = fromCode.groupings || pluginSplitBehavior || getGlobalCodeSplitGroupings();
|
|
81
73
|
const compiledReferenceRoute = compileCodeSplitReferenceRoute({
|
|
82
74
|
code,
|
|
83
|
-
root: ROOT,
|
|
84
|
-
filename: id,
|
|
85
75
|
runtimeEnv: isProduction ? "prod" : "dev",
|
|
86
76
|
codeSplitGroupings: splitGroupings,
|
|
87
|
-
targetFramework: userConfig.target
|
|
77
|
+
targetFramework: userConfig.target,
|
|
78
|
+
filename: id,
|
|
79
|
+
id
|
|
88
80
|
});
|
|
89
81
|
if (debug) {
|
|
90
82
|
logDiff(code, compiledReferenceRoute.code);
|
|
@@ -108,7 +100,6 @@ ${message}`
|
|
|
108
100
|
);
|
|
109
101
|
const result = compileCodeSplitVirtualRoute({
|
|
110
102
|
code,
|
|
111
|
-
root: ROOT,
|
|
112
103
|
filename: id,
|
|
113
104
|
splitTargets: grouping
|
|
114
105
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-code-splitter-plugin.js","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 { isAbsolute, join, normalize } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\nimport { getConfig, splitGroupingsSchema } from './config'\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\n\nimport type { Config } from './config'\nimport type {\n UnpluginContextMeta,\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\nconst debug =\n process.env.TSR_VITE_DEBUG &&\n ['true', 'router-plugin'].includes(process.env.TSR_VITE_DEBUG)\n\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nfunction fileIsInRoutesDirectory(\n filePath: string,\n routesDirectory: string,\n): boolean {\n const routesDirectoryPath = isAbsolute(routesDirectory)\n ? routesDirectory\n : join(process.cwd(), routesDirectory)\n\n const path = normalize(filePath)\n\n return path.startsWith(routesDirectoryPath)\n}\n\ntype BannedBeforeExternalPlugin = {\n identifier: string\n pkg: string\n usage: string\n frameworks: Array<UnpluginContextMeta['framework']>\n}\n\nconst bannedBeforeExternalPlugins: Array<BannedBeforeExternalPlugin> = [\n {\n identifier: '@react-refresh',\n pkg: '@vitejs/plugin-react',\n usage: 'viteReact()',\n frameworks: ['vite'],\n },\n]\n\nclass FoundPluginInBeforeCode extends Error {\n constructor(externalPlugin: BannedBeforeExternalPlugin, framework: string) {\n super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again: \ne.g.\nplugins: [\n TanStackRouter${capitalizeFirst(framework)}(), // Place this before ${externalPlugin.usage}\n ${externalPlugin.usage},\n]\n`)\n }\n}\n\nconst PLUGIN_NAME = 'unplugin:router-code-splitter'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, { framework }) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n const getGlobalCodeSplitGroupings = () => {\n return (\n userConfig.codeSplittingOptions?.defaultBehavior ||\n defaultCodeSplitGroupings\n )\n }\n const getShouldSplitFn = () => {\n return userConfig.codeSplittingOptions?.splitBehavior\n }\n\n const handleCompilingReferenceFile = (\n code: string,\n id: string,\n ): UnpluginTransformResult => {\n if (debug) console.info('Compiling Route: ', id)\n\n const fromCode = detectCodeSplitGroupingsFromRoute({\n code,\n root: ROOT,\n filename: id,\n })\n\n if (fromCode.groupings) {\n const res = splitGroupingsSchema.safeParse(fromCode.groupings)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const userShouldSplitFn = getShouldSplitFn()\n\n const pluginSplitBehavior = userShouldSplitFn?.({\n routeId: fromCode.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 const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n root: ROOT,\n filename: id,\n runtimeEnv: isProduction ? 'prod' : 'dev',\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n })\n\n if (debug) {\n logDiff(code, compiledReferenceRoute.code)\n console.log('Output:\\n', compiledReferenceRoute.code + '\\n\\n')\n }\n\n return compiledReferenceRoute\n }\n\n const handleCompilingVirtualFile = (\n code: string,\n id: string,\n ): UnpluginTransformResult => {\n if (debug) console.info('Splitting Route: ', id)\n\n const [_, ...pathnameParts] = id.split('?')\n\n const searchParams = new URLSearchParams(pathnameParts.join('?'))\n const splitValue = searchParams.get(tsrSplit)\n\n if (!splitValue) {\n throw new Error(\n `The split value for the virtual route \"${id}\" was not found.`,\n )\n }\n\n const rawGrouping = decodeIdentifier(splitValue)\n const grouping = [...new Set(rawGrouping)].filter((p) =>\n splitRouteIdentNodes.includes(p as any),\n ) as Array<SplitRouteIdentNodes>\n\n const result = compileCodeSplitVirtualRoute({\n code,\n root: ROOT,\n filename: id,\n splitTargets: grouping,\n })\n\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n\n return result\n }\n\n return {\n name: 'router-code-splitter-plugin',\n enforce: 'pre',\n\n transform(code, id) {\n if (!userConfig.autoCodeSplitting) {\n return null\n }\n\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n\n if (id.includes(tsrSplit)) {\n return handleCompilingVirtualFile(code, id)\n } else if (\n fileIsInRoutesDirectory(id, userConfig.routesDirectory) &&\n (code.includes('createRoute(') || code.includes('createFileRoute('))\n ) {\n for (const externalPlugin of bannedBeforeExternalPlugins) {\n if (!externalPlugin.frameworks.includes(framework)) {\n continue\n }\n\n if (code.includes(externalPlugin.identifier)) {\n throw new FoundPluginInBeforeCode(externalPlugin, framework)\n }\n }\n\n return handleCompilingReferenceFile(code, id)\n }\n\n return null\n },\n\n transformInclude(id) {\n if (!userConfig.autoCodeSplitting) {\n return undefined\n }\n\n if (\n fileIsInRoutesDirectory(id, userConfig.routesDirectory) ||\n id.includes(tsrSplit)\n ) {\n return true\n }\n return false\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n\n userConfig = getConfig(options, ROOT)\n },\n },\n\n rspack(_compiler) {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n\n webpack(compiler) {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n\n if (\n userConfig.autoCodeSplitting &&\n compiler.options.mode === 'production'\n ) {\n compiler.hooks.done.tap(PLUGIN_NAME, () => {\n console.info('✅ ' + PLUGIN_NAME + ': code-splitting done!')\n setTimeout(() => {\n process.exit(0)\n })\n })\n }\n },\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router-code-splitter-plugin.js","sources":["../../../src/core/router-code-splitter-plugin.ts"],"sourcesContent":["/**\n * It is important to familiarize yourself with how the code-splitting works in this plugin.\n * https://github.com/TanStack/router/pull/3355\n */\n\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\nimport { getConfig, splitGroupingsSchema } from './config'\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug, fileIsInRoutesDirectory } from './utils'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\n\nimport type { Config } from './config'\nimport type {\n UnpluginContextMeta,\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\ntype BannedBeforeExternalPlugin = {\n identifier: string\n pkg: string\n usage: string\n frameworks: Array<UnpluginContextMeta['framework']>\n}\n\nconst bannedBeforeExternalPlugins: Array<BannedBeforeExternalPlugin> = [\n {\n identifier: '@react-refresh',\n pkg: '@vitejs/plugin-react',\n usage: 'viteReact()',\n frameworks: ['vite'],\n },\n]\n\nclass FoundPluginInBeforeCode extends Error {\n constructor(externalPlugin: BannedBeforeExternalPlugin, framework: string) {\n super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again: \ne.g.\nplugins: [\n TanStackRouter${capitalizeFirst(framework)}(), // Place this before ${externalPlugin.usage}\n ${externalPlugin.usage},\n]\n`)\n }\n}\n\nconst PLUGIN_NAME = 'unplugin:router-code-splitter'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, { framework }) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n const getGlobalCodeSplitGroupings = () => {\n return (\n userConfig.codeSplittingOptions?.defaultBehavior ||\n defaultCodeSplitGroupings\n )\n }\n const getShouldSplitFn = () => {\n return userConfig.codeSplittingOptions?.splitBehavior\n }\n\n const handleCompilingReferenceFile = (\n code: string,\n id: string,\n ): UnpluginTransformResult => {\n if (debug) console.info('Compiling Route: ', id)\n\n const fromCode = detectCodeSplitGroupingsFromRoute({\n code,\n })\n\n if (fromCode.groupings) {\n const res = splitGroupingsSchema.safeParse(fromCode.groupings)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const userShouldSplitFn = getShouldSplitFn()\n\n const pluginSplitBehavior = userShouldSplitFn?.({\n routeId: fromCode.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 const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n runtimeEnv: isProduction ? 'prod' : 'dev',\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n })\n\n if (debug) {\n logDiff(code, compiledReferenceRoute.code)\n console.log('Output:\\n', compiledReferenceRoute.code + '\\n\\n')\n }\n\n return compiledReferenceRoute\n }\n\n const handleCompilingVirtualFile = (\n code: string,\n id: string,\n ): UnpluginTransformResult => {\n if (debug) console.info('Splitting Route: ', id)\n\n const [_, ...pathnameParts] = id.split('?')\n\n const searchParams = new URLSearchParams(pathnameParts.join('?'))\n const splitValue = searchParams.get(tsrSplit)\n\n if (!splitValue) {\n throw new Error(\n `The split value for the virtual route \"${id}\" was not found.`,\n )\n }\n\n const rawGrouping = decodeIdentifier(splitValue)\n const grouping = [...new Set(rawGrouping)].filter((p) =>\n splitRouteIdentNodes.includes(p as any),\n ) as Array<SplitRouteIdentNodes>\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n })\n\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n\n return result\n }\n\n return {\n name: 'router-code-splitter-plugin',\n enforce: 'pre',\n\n transform(code, id) {\n if (!userConfig.autoCodeSplitting) {\n return null\n }\n\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n\n if (id.includes(tsrSplit)) {\n return handleCompilingVirtualFile(code, id)\n } else if (\n fileIsInRoutesDirectory(id, userConfig.routesDirectory) &&\n (code.includes('createRoute(') || code.includes('createFileRoute('))\n ) {\n for (const externalPlugin of bannedBeforeExternalPlugins) {\n if (!externalPlugin.frameworks.includes(framework)) {\n continue\n }\n\n if (code.includes(externalPlugin.identifier)) {\n throw new FoundPluginInBeforeCode(externalPlugin, framework)\n }\n }\n\n return handleCompilingReferenceFile(code, id)\n }\n\n return null\n },\n\n transformInclude(id) {\n if (!userConfig.autoCodeSplitting) {\n return undefined\n }\n\n if (\n fileIsInRoutesDirectory(id, userConfig.routesDirectory) ||\n id.includes(tsrSplit)\n ) {\n return true\n }\n return false\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n\n userConfig = getConfig(options, ROOT)\n },\n },\n\n rspack(_compiler) {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n\n webpack(compiler) {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n\n if (\n userConfig.autoCodeSplitting &&\n compiler.options.mode === 'production'\n ) {\n compiler.hooks.done.tap(PLUGIN_NAME, () => {\n console.info('✅ ' + PLUGIN_NAME + ': code-splitting done!')\n setTimeout(() => {\n process.exit(0)\n })\n })\n }\n },\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import { unpluginRouterGeneratorFactory } from "./router-generator-plugin.js";
|
|
2
2
|
import { unpluginRouterCodeSplitterFactory } from "./router-code-splitter-plugin.js";
|
|
3
|
+
import { unpluginRouterHmrFactory } from "./router-hmr-plugin.js";
|
|
4
|
+
import { unpluginRouteAutoimportFactory } from "./route-autoimport-plugin.js";
|
|
3
5
|
const unpluginRouterComposedFactory = (options = {}, meta) => {
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const getPlugin = (pluginFactory) => {
|
|
7
|
+
const plugin = pluginFactory(options, meta);
|
|
8
|
+
if (!Array.isArray(plugin)) {
|
|
9
|
+
return [plugin];
|
|
10
|
+
}
|
|
11
|
+
return plugin;
|
|
12
|
+
};
|
|
13
|
+
const routerGenerator = getPlugin(unpluginRouterGeneratorFactory);
|
|
14
|
+
const routerCodeSplitter = getPlugin(unpluginRouterCodeSplitterFactory);
|
|
15
|
+
const routeAutoImport = getPlugin(unpluginRouteAutoimportFactory);
|
|
16
|
+
const result = [...routerGenerator, ...routerCodeSplitter, ...routeAutoImport];
|
|
17
|
+
const isProduction = process.env.NODE_ENV === "production";
|
|
18
|
+
if (!isProduction && !options.autoCodeSplitting) {
|
|
19
|
+
const routerHmr = getPlugin(unpluginRouterHmrFactory);
|
|
20
|
+
result.push(...routerHmr);
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
9
23
|
};
|
|
10
24
|
export {
|
|
11
25
|
unpluginRouterComposedFactory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-composed-plugin.js","sources":["../../../src/core/router-composed-plugin.ts"],"sourcesContent":["import { unpluginRouterGeneratorFactory } from './router-generator-plugin'\nimport { unpluginRouterCodeSplitterFactory } from './router-code-splitter-plugin'\
|
|
1
|
+
{"version":3,"file":"router-composed-plugin.js","sources":["../../../src/core/router-composed-plugin.ts"],"sourcesContent":["import { unpluginRouterGeneratorFactory } from './router-generator-plugin'\nimport { unpluginRouterCodeSplitterFactory } from './router-code-splitter-plugin'\nimport { unpluginRouterHmrFactory } from './router-hmr-plugin'\nimport { unpluginRouteAutoimportFactory } from './route-autoimport-plugin'\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\nexport const unpluginRouterComposedFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, meta) => {\n const getPlugin = (pluginFactory: UnpluginFactory<Partial<Config>>) => {\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 const routeAutoImport = getPlugin(unpluginRouteAutoimportFactory)\n\n const result = [...routerGenerator, ...routerCodeSplitter, ...routeAutoImport]\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n if (!isProduction && !options.autoCodeSplitting) {\n const routerHmr = getPlugin(unpluginRouterHmrFactory)\n result.push(...routerHmr)\n }\n return result\n}\n"],"names":[],"mappings":";;;;AAOO,MAAM,gCAET,CAAC,UAAU,IAAI,SAAS;AACpB,QAAA,YAAY,CAAC,kBAAoD;AAC/D,UAAA,SAAS,cAAc,SAAS,IAAI;AAC1C,QAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,aAAO,CAAC,MAAM;AAAA,IAAA;AAET,WAAA;AAAA,EACT;AAEM,QAAA,kBAAkB,UAAU,8BAA8B;AAC1D,QAAA,qBAAqB,UAAU,iCAAiC;AAChE,QAAA,kBAAkB,UAAU,8BAA8B;AAEhE,QAAM,SAAS,CAAC,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,eAAe;AAEvE,QAAA,eAAe,QAAQ,IAAI,aAAa;AAE9C,MAAI,CAAC,gBAAgB,CAAC,QAAQ,mBAAmB;AACzC,UAAA,YAAY,UAAU,wBAAwB;AAC7C,WAAA,KAAK,GAAG,SAAS;AAAA,EAAA;AAEnB,SAAA;AACT;"}
|
|
@@ -54,11 +54,17 @@ const unpluginRouterGeneratorFactory = (options = {}) => {
|
|
|
54
54
|
});
|
|
55
55
|
},
|
|
56
56
|
vite: {
|
|
57
|
-
|
|
57
|
+
configResolved(config) {
|
|
58
58
|
ROOT = config.root;
|
|
59
59
|
userConfig = getConfig(options, ROOT);
|
|
60
|
+
},
|
|
61
|
+
async buildStart() {
|
|
62
|
+
if (this.environment.name === "server") {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
60
65
|
await run(generate);
|
|
61
|
-
}
|
|
66
|
+
},
|
|
67
|
+
sharedDuringBuild: true
|
|
62
68
|
},
|
|
63
69
|
rspack(compiler) {
|
|
64
70
|
userConfig = getConfig(options, ROOT);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-generator-plugin.js","sources":["../../../src/core/router-generator-plugin.ts"],"sourcesContent":["import { isAbsolute, join, normalize, resolve } from 'node:path'\nimport { generator, resolveConfigPath } from '@tanstack/router-generator'\n\nimport { getConfig } from './config'\nimport type { FSWatcher } from 'chokidar'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\n\nlet lock = false\nconst checkLock = () => lock\nconst setLock = (bool: boolean) => {\n lock = bool\n}\n\nconst PLUGIN_NAME = 'unplugin:router-generator'\n\nexport const unpluginRouterGeneratorFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const getRoutesDirectoryPath = () => {\n return isAbsolute(userConfig.routesDirectory)\n ? userConfig.routesDirectory\n : join(ROOT, userConfig.routesDirectory)\n }\n\n const generate = async () => {\n if (checkLock()) {\n return\n }\n\n setLock(true)\n\n try {\n await generator(userConfig, process.cwd())\n } catch (err) {\n console.error(err)\n console.info()\n } finally {\n setLock(false)\n }\n }\n\n const handleFile = async (\n file: string,\n event: 'create' | 'update' | 'delete',\n ) => {\n const filePath = normalize(file)\n\n if (filePath === resolveConfigPath({ configDirectory: ROOT })) {\n userConfig = getConfig(options, ROOT)\n return\n }\n\n if (\n event === 'update' &&\n filePath === resolve(userConfig.generatedRouteTree)\n ) {\n // skip generating routes if the generated route tree is updated\n return\n }\n\n const routesDirectoryPath = getRoutesDirectoryPath()\n if (filePath.startsWith(routesDirectoryPath)) {\n await generate()\n }\n }\n\n const run: (cb: () => Promise<void> | void) => Promise<void> = async (cb) => {\n if (userConfig.enableRouteGeneration ?? true) {\n await cb()\n }\n }\n\n return {\n name: 'router-generator-plugin',\n async watchChange(id, { event }) {\n await run(async () => {\n await handleFile(id, event)\n })\n },\n vite: {\n
|
|
1
|
+
{"version":3,"file":"router-generator-plugin.js","sources":["../../../src/core/router-generator-plugin.ts"],"sourcesContent":["import { isAbsolute, join, normalize, resolve } from 'node:path'\nimport { generator, resolveConfigPath } from '@tanstack/router-generator'\n\nimport { getConfig } from './config'\nimport type { FSWatcher } from 'chokidar'\nimport type { UnpluginFactory } from 'unplugin'\nimport type { Config } from './config'\n\nlet lock = false\nconst checkLock = () => lock\nconst setLock = (bool: boolean) => {\n lock = bool\n}\n\nconst PLUGIN_NAME = 'unplugin:router-generator'\n\nexport const unpluginRouterGeneratorFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const getRoutesDirectoryPath = () => {\n return isAbsolute(userConfig.routesDirectory)\n ? userConfig.routesDirectory\n : join(ROOT, userConfig.routesDirectory)\n }\n\n const generate = async () => {\n if (checkLock()) {\n return\n }\n\n setLock(true)\n\n try {\n await generator(userConfig, process.cwd())\n } catch (err) {\n console.error(err)\n console.info()\n } finally {\n setLock(false)\n }\n }\n\n const handleFile = async (\n file: string,\n event: 'create' | 'update' | 'delete',\n ) => {\n const filePath = normalize(file)\n\n if (filePath === resolveConfigPath({ configDirectory: ROOT })) {\n userConfig = getConfig(options, ROOT)\n return\n }\n\n if (\n event === 'update' &&\n filePath === resolve(userConfig.generatedRouteTree)\n ) {\n // skip generating routes if the generated route tree is updated\n return\n }\n\n const routesDirectoryPath = getRoutesDirectoryPath()\n if (filePath.startsWith(routesDirectoryPath)) {\n await generate()\n }\n }\n\n const run: (cb: () => Promise<void> | void) => Promise<void> = async (cb) => {\n if (userConfig.enableRouteGeneration ?? true) {\n await cb()\n }\n }\n\n return {\n name: 'router-generator-plugin',\n async watchChange(id, { event }) {\n await run(async () => {\n await handleFile(id, event)\n })\n },\n vite: {\n configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n\n // if (config.command === 'serve') {\n // await run(generate)\n // }\n },\n async buildStart() {\n if (this.environment.name === 'server') {\n // When building in environment mode, we only need to generate routes\n // for the client environment\n return\n }\n await run(generate)\n },\n sharedDuringBuild: true,\n },\n rspack(compiler) {\n userConfig = getConfig(options, ROOT)\n\n let handle: FSWatcher | null = null\n\n compiler.hooks.beforeRun.tapPromise(PLUGIN_NAME, async () => {\n await run(generate)\n })\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', async () => {\n await run(generate)\n })\n\n await run(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 userConfig = getConfig(options, ROOT)\n\n let handle: FSWatcher | null = null\n\n compiler.hooks.beforeRun.tapPromise(PLUGIN_NAME, async () => {\n await run(generate)\n })\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', async () => {\n await run(generate)\n })\n\n await run(generate)\n })\n\n compiler.hooks.watchClose.tap(PLUGIN_NAME, async () => {\n if (handle) {\n await handle.close()\n }\n })\n\n compiler.hooks.done.tap(PLUGIN_NAME, () => {\n console.info('✅ ' + PLUGIN_NAME + ': route-tree generation done')\n })\n },\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Config } from './config.js';
|
|
2
|
+
import { UnpluginFactory } from 'unplugin';
|
|
3
|
+
/**
|
|
4
|
+
* This plugin adds HMR support for file routes.
|
|
5
|
+
* It is only added to the composed plugin in dev when autoCodeSplitting is disabled, since the code splitting plugin
|
|
6
|
+
* handles HMR for code-split routes itself.
|
|
7
|
+
*/
|
|
8
|
+
export declare const unpluginRouterHmrFactory: UnpluginFactory<Partial<Config> | undefined>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { parseAst, generateFromAst, logDiff } from "@tanstack/router-utils";
|
|
2
|
+
import { getConfig } from "./config.js";
|
|
3
|
+
import { routeHmrStatement } from "./route-hmr-statement.js";
|
|
4
|
+
import { fileIsInRoutesDirectory, debug } from "./utils.js";
|
|
5
|
+
const unpluginRouterHmrFactory = (options = {}) => {
|
|
6
|
+
let ROOT = process.cwd();
|
|
7
|
+
let userConfig = options;
|
|
8
|
+
return {
|
|
9
|
+
name: "router-hmr-plugin",
|
|
10
|
+
enforce: "pre",
|
|
11
|
+
transform(code, id) {
|
|
12
|
+
if (!code.includes("export const Route = createFileRoute(")) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
if (debug) console.info("Adding HMR handling to route ", id);
|
|
16
|
+
const ast = parseAst({ code });
|
|
17
|
+
ast.program.body.push(routeHmrStatement);
|
|
18
|
+
const result = generateFromAst(ast, {
|
|
19
|
+
sourceMaps: true,
|
|
20
|
+
filename: id,
|
|
21
|
+
sourceFileName: id
|
|
22
|
+
});
|
|
23
|
+
if (debug) {
|
|
24
|
+
logDiff(code, result.code);
|
|
25
|
+
console.log("Output:\n", result.code + "\n\n");
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
},
|
|
29
|
+
transformInclude(id) {
|
|
30
|
+
return fileIsInRoutesDirectory(id, userConfig.routesDirectory);
|
|
31
|
+
},
|
|
32
|
+
vite: {
|
|
33
|
+
configResolved(config) {
|
|
34
|
+
ROOT = config.root;
|
|
35
|
+
userConfig = getConfig(options, ROOT);
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
rspack() {
|
|
39
|
+
ROOT = process.cwd();
|
|
40
|
+
userConfig = getConfig(options, ROOT);
|
|
41
|
+
},
|
|
42
|
+
webpack() {
|
|
43
|
+
ROOT = process.cwd();
|
|
44
|
+
userConfig = getConfig(options, ROOT);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
export {
|
|
49
|
+
unpluginRouterHmrFactory
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=router-hmr-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-hmr-plugin.js","sources":["../../../src/core/router-hmr-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport { getConfig } from './config'\nimport { routeHmrStatement } from './route-hmr-statement'\nimport { debug, fileIsInRoutesDirectory } from './utils'\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\n/**\n * This plugin adds HMR support for file routes.\n * It is only added to the composed plugin in dev when autoCodeSplitting is disabled, since the code splitting plugin\n * handles HMR for code-split routes itself.\n */\nexport const unpluginRouterHmrFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n return {\n name: 'router-hmr-plugin',\n enforce: 'pre',\n\n transform(code, id) {\n if (!code.includes('export const Route = createFileRoute(')) {\n return null\n }\n\n if (debug) console.info('Adding HMR handling to route ', id)\n\n const ast = parseAst({ code })\n ast.program.body.push(routeHmrStatement)\n const result = generateFromAst(ast, {\n sourceMaps: true,\n filename: id,\n sourceFileName: id,\n })\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n return result\n },\n\n transformInclude(id) {\n return fileIsInRoutesDirectory(id, userConfig.routesDirectory)\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n },\n },\n\n rspack() {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n\n webpack() {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n }\n}\n"],"names":[],"mappings":";;;;AAYO,MAAM,2BAET,CAAC,UAAU,OAAO;AAChB,MAAA,OAAe,QAAQ,IAAI;AAC/B,MAAI,aAAa;AAEV,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IAET,UAAU,MAAM,IAAI;AAClB,UAAI,CAAC,KAAK,SAAS,uCAAuC,GAAG;AACpD,eAAA;AAAA,MAAA;AAGT,UAAI,MAAO,SAAQ,KAAK,iCAAiC,EAAE;AAE3D,YAAM,MAAM,SAAS,EAAE,MAAM;AACzB,UAAA,QAAQ,KAAK,KAAK,iBAAiB;AACjC,YAAA,SAAS,gBAAgB,KAAK;AAAA,QAClC,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,gBAAgB;AAAA,MAAA,CACjB;AACD,UAAI,OAAO;AACD,gBAAA,MAAM,OAAO,IAAI;AACzB,gBAAQ,IAAI,aAAa,OAAO,OAAO,MAAM;AAAA,MAAA;AAExC,aAAA;AAAA,IACT;AAAA,IAEA,iBAAiB,IAAI;AACZ,aAAA,wBAAwB,IAAI,WAAW,eAAe;AAAA,IAC/D;AAAA,IAEA,MAAM;AAAA,MACJ,eAAe,QAAQ;AACrB,eAAO,OAAO;AACD,qBAAA,UAAU,SAAS,IAAI;AAAA,MAAA;AAAA,IAExC;AAAA,IAEA,SAAS;AACP,aAAO,QAAQ,IAAI;AACN,mBAAA,UAAU,SAAS,IAAI;AAAA,IACtC;AAAA,IAEA,UAAU;AACR,aAAO,QAAQ,IAAI;AACN,mBAAA,UAAU,SAAS,IAAI;AAAA,IAAA;AAAA,EAExC;AACF;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { isAbsolute, join, normalize } from "node:path";
|
|
2
|
+
const debug = process.env.TSR_VITE_DEBUG && ["true", "router-plugin"].includes(process.env.TSR_VITE_DEBUG);
|
|
3
|
+
function fileIsInRoutesDirectory(filePath, routesDirectory) {
|
|
4
|
+
const routesDirectoryPath = isAbsolute(routesDirectory) ? routesDirectory : join(process.cwd(), routesDirectory);
|
|
5
|
+
const path = normalize(filePath);
|
|
6
|
+
return path.startsWith(routesDirectoryPath);
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
debug,
|
|
10
|
+
fileIsInRoutesDirectory
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/core/utils.ts"],"sourcesContent":["import { isAbsolute, join, normalize } from 'node:path'\n\nexport const debug =\n process.env.TSR_VITE_DEBUG &&\n ['true', 'router-plugin'].includes(process.env.TSR_VITE_DEBUG)\n\nexport function fileIsInRoutesDirectory(\n filePath: string,\n routesDirectory: string,\n): boolean {\n const routesDirectoryPath = isAbsolute(routesDirectory)\n ? routesDirectory\n : join(process.cwd(), routesDirectory)\n\n const path = normalize(filePath)\n\n return path.startsWith(routesDirectoryPath)\n}\n"],"names":[],"mappings":";AAEa,MAAA,QACX,QAAQ,IAAI,kBACZ,CAAC,QAAQ,eAAe,EAAE,SAAS,QAAQ,IAAI,cAAc;AAE/C,SAAA,wBACd,UACA,iBACS;AACH,QAAA,sBAAsB,WAAW,eAAe,IAClD,kBACA,KAAK,QAAQ,IAAI,GAAG,eAAe;AAEjC,QAAA,OAAO,UAAU,QAAQ;AAExB,SAAA,KAAK,WAAW,mBAAmB;AAC5C;"}
|
package/dist/esm/esbuild.d.ts
CHANGED
|
@@ -12,31 +12,29 @@ declare const TanStackRouterGeneratorEsbuild: (options?: Partial<{
|
|
|
12
12
|
target: "react" | "solid";
|
|
13
13
|
routeFileIgnorePrefix: string;
|
|
14
14
|
routesDirectory: string;
|
|
15
|
-
generatedRouteTree: string;
|
|
16
15
|
quoteStyle: "single" | "double";
|
|
17
16
|
semicolons: boolean;
|
|
17
|
+
disableLogging: boolean;
|
|
18
|
+
routeTreeFileHeader: string[];
|
|
19
|
+
indexToken: string;
|
|
20
|
+
routeToken: string;
|
|
21
|
+
generatedRouteTree: string;
|
|
18
22
|
disableTypes: boolean;
|
|
19
23
|
addExtensions: boolean;
|
|
20
|
-
disableLogging: boolean;
|
|
21
24
|
disableManifestGeneration: boolean;
|
|
22
25
|
enableRouteTreeFormatting: boolean;
|
|
23
|
-
apiBase: string;
|
|
24
|
-
routeTreeFileHeader: string[];
|
|
25
26
|
routeTreeFileFooter: string[];
|
|
26
|
-
indexToken: string;
|
|
27
|
-
routeToken: string;
|
|
28
27
|
enableRouteGeneration?: boolean | undefined;
|
|
29
28
|
codeSplittingOptions?: import('./core/config.js').CodeSplittingOptions | undefined;
|
|
30
29
|
virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
|
|
31
30
|
routeFilePrefix?: string | undefined;
|
|
32
31
|
routeFileIgnorePattern?: string | undefined;
|
|
33
|
-
__enableAPIRoutesGeneration?: boolean | undefined;
|
|
34
|
-
autoCodeSplitting?: boolean | undefined;
|
|
35
32
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
33
|
+
verboseFileRoutes?: boolean | undefined;
|
|
34
|
+
autoCodeSplitting?: boolean | undefined;
|
|
36
35
|
customScaffolding?: {
|
|
37
36
|
routeTemplate?: string | undefined;
|
|
38
37
|
lazyRouteTemplate?: string | undefined;
|
|
39
|
-
apiTemplate?: string | undefined;
|
|
40
38
|
} | undefined;
|
|
41
39
|
experimental?: {
|
|
42
40
|
enableCodeSplitting?: boolean | undefined;
|
|
@@ -55,31 +53,29 @@ declare const TanStackRouterCodeSplitterEsbuild: (options?: Partial<{
|
|
|
55
53
|
target: "react" | "solid";
|
|
56
54
|
routeFileIgnorePrefix: string;
|
|
57
55
|
routesDirectory: string;
|
|
58
|
-
generatedRouteTree: string;
|
|
59
56
|
quoteStyle: "single" | "double";
|
|
60
57
|
semicolons: boolean;
|
|
58
|
+
disableLogging: boolean;
|
|
59
|
+
routeTreeFileHeader: string[];
|
|
60
|
+
indexToken: string;
|
|
61
|
+
routeToken: string;
|
|
62
|
+
generatedRouteTree: string;
|
|
61
63
|
disableTypes: boolean;
|
|
62
64
|
addExtensions: boolean;
|
|
63
|
-
disableLogging: boolean;
|
|
64
65
|
disableManifestGeneration: boolean;
|
|
65
66
|
enableRouteTreeFormatting: boolean;
|
|
66
|
-
apiBase: string;
|
|
67
|
-
routeTreeFileHeader: string[];
|
|
68
67
|
routeTreeFileFooter: string[];
|
|
69
|
-
indexToken: string;
|
|
70
|
-
routeToken: string;
|
|
71
68
|
enableRouteGeneration?: boolean | undefined;
|
|
72
69
|
codeSplittingOptions?: import('./core/config.js').CodeSplittingOptions | undefined;
|
|
73
70
|
virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
|
|
74
71
|
routeFilePrefix?: string | undefined;
|
|
75
72
|
routeFileIgnorePattern?: string | undefined;
|
|
76
|
-
__enableAPIRoutesGeneration?: boolean | undefined;
|
|
77
|
-
autoCodeSplitting?: boolean | undefined;
|
|
78
73
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
74
|
+
verboseFileRoutes?: boolean | undefined;
|
|
75
|
+
autoCodeSplitting?: boolean | undefined;
|
|
79
76
|
customScaffolding?: {
|
|
80
77
|
routeTemplate?: string | undefined;
|
|
81
78
|
lazyRouteTemplate?: string | undefined;
|
|
82
|
-
apiTemplate?: string | undefined;
|
|
83
79
|
} | undefined;
|
|
84
80
|
experimental?: {
|
|
85
81
|
enableCodeSplitting?: boolean | undefined;
|
|
@@ -98,31 +94,29 @@ declare const TanStackRouterEsbuild: (options?: Partial<{
|
|
|
98
94
|
target: "react" | "solid";
|
|
99
95
|
routeFileIgnorePrefix: string;
|
|
100
96
|
routesDirectory: string;
|
|
101
|
-
generatedRouteTree: string;
|
|
102
97
|
quoteStyle: "single" | "double";
|
|
103
98
|
semicolons: boolean;
|
|
99
|
+
disableLogging: boolean;
|
|
100
|
+
routeTreeFileHeader: string[];
|
|
101
|
+
indexToken: string;
|
|
102
|
+
routeToken: string;
|
|
103
|
+
generatedRouteTree: string;
|
|
104
104
|
disableTypes: boolean;
|
|
105
105
|
addExtensions: boolean;
|
|
106
|
-
disableLogging: boolean;
|
|
107
106
|
disableManifestGeneration: boolean;
|
|
108
107
|
enableRouteTreeFormatting: boolean;
|
|
109
|
-
apiBase: string;
|
|
110
|
-
routeTreeFileHeader: string[];
|
|
111
108
|
routeTreeFileFooter: string[];
|
|
112
|
-
indexToken: string;
|
|
113
|
-
routeToken: string;
|
|
114
109
|
enableRouteGeneration?: boolean | undefined;
|
|
115
110
|
codeSplittingOptions?: import('./core/config.js').CodeSplittingOptions | undefined;
|
|
116
111
|
virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
|
|
117
112
|
routeFilePrefix?: string | undefined;
|
|
118
113
|
routeFileIgnorePattern?: string | undefined;
|
|
119
|
-
__enableAPIRoutesGeneration?: boolean | undefined;
|
|
120
|
-
autoCodeSplitting?: boolean | undefined;
|
|
121
114
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
115
|
+
verboseFileRoutes?: boolean | undefined;
|
|
116
|
+
autoCodeSplitting?: boolean | undefined;
|
|
122
117
|
customScaffolding?: {
|
|
123
118
|
routeTemplate?: string | undefined;
|
|
124
119
|
lazyRouteTemplate?: string | undefined;
|
|
125
|
-
apiTemplate?: string | undefined;
|
|
126
120
|
} | undefined;
|
|
127
121
|
experimental?: {
|
|
128
122
|
enableCodeSplitting?: boolean | undefined;
|
package/dist/esm/rspack.d.ts
CHANGED
|
@@ -16,31 +16,29 @@ declare const TanStackRouterGeneratorRspack: (options?: Partial<{
|
|
|
16
16
|
target: "react" | "solid";
|
|
17
17
|
routeFileIgnorePrefix: string;
|
|
18
18
|
routesDirectory: string;
|
|
19
|
-
generatedRouteTree: string;
|
|
20
19
|
quoteStyle: "single" | "double";
|
|
21
20
|
semicolons: boolean;
|
|
21
|
+
disableLogging: boolean;
|
|
22
|
+
routeTreeFileHeader: string[];
|
|
23
|
+
indexToken: string;
|
|
24
|
+
routeToken: string;
|
|
25
|
+
generatedRouteTree: string;
|
|
22
26
|
disableTypes: boolean;
|
|
23
27
|
addExtensions: boolean;
|
|
24
|
-
disableLogging: boolean;
|
|
25
28
|
disableManifestGeneration: boolean;
|
|
26
29
|
enableRouteTreeFormatting: boolean;
|
|
27
|
-
apiBase: string;
|
|
28
|
-
routeTreeFileHeader: string[];
|
|
29
30
|
routeTreeFileFooter: string[];
|
|
30
|
-
indexToken: string;
|
|
31
|
-
routeToken: string;
|
|
32
31
|
enableRouteGeneration?: boolean | undefined;
|
|
33
32
|
codeSplittingOptions?: import('./core/config.js').CodeSplittingOptions | undefined;
|
|
34
33
|
virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
|
|
35
34
|
routeFilePrefix?: string | undefined;
|
|
36
35
|
routeFileIgnorePattern?: string | undefined;
|
|
37
|
-
__enableAPIRoutesGeneration?: boolean | undefined;
|
|
38
|
-
autoCodeSplitting?: boolean | undefined;
|
|
39
36
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
37
|
+
verboseFileRoutes?: boolean | undefined;
|
|
38
|
+
autoCodeSplitting?: boolean | undefined;
|
|
40
39
|
customScaffolding?: {
|
|
41
40
|
routeTemplate?: string | undefined;
|
|
42
41
|
lazyRouteTemplate?: string | undefined;
|
|
43
|
-
apiTemplate?: string | undefined;
|
|
44
42
|
} | undefined;
|
|
45
43
|
experimental?: {
|
|
46
44
|
enableCodeSplitting?: boolean | undefined;
|
|
@@ -63,31 +61,29 @@ declare const TanStackRouterCodeSplitterRspack: (options?: Partial<{
|
|
|
63
61
|
target: "react" | "solid";
|
|
64
62
|
routeFileIgnorePrefix: string;
|
|
65
63
|
routesDirectory: string;
|
|
66
|
-
generatedRouteTree: string;
|
|
67
64
|
quoteStyle: "single" | "double";
|
|
68
65
|
semicolons: boolean;
|
|
66
|
+
disableLogging: boolean;
|
|
67
|
+
routeTreeFileHeader: string[];
|
|
68
|
+
indexToken: string;
|
|
69
|
+
routeToken: string;
|
|
70
|
+
generatedRouteTree: string;
|
|
69
71
|
disableTypes: boolean;
|
|
70
72
|
addExtensions: boolean;
|
|
71
|
-
disableLogging: boolean;
|
|
72
73
|
disableManifestGeneration: boolean;
|
|
73
74
|
enableRouteTreeFormatting: boolean;
|
|
74
|
-
apiBase: string;
|
|
75
|
-
routeTreeFileHeader: string[];
|
|
76
75
|
routeTreeFileFooter: string[];
|
|
77
|
-
indexToken: string;
|
|
78
|
-
routeToken: string;
|
|
79
76
|
enableRouteGeneration?: boolean | undefined;
|
|
80
77
|
codeSplittingOptions?: import('./core/config.js').CodeSplittingOptions | undefined;
|
|
81
78
|
virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
|
|
82
79
|
routeFilePrefix?: string | undefined;
|
|
83
80
|
routeFileIgnorePattern?: string | undefined;
|
|
84
|
-
__enableAPIRoutesGeneration?: boolean | undefined;
|
|
85
|
-
autoCodeSplitting?: boolean | undefined;
|
|
86
81
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
82
|
+
verboseFileRoutes?: boolean | undefined;
|
|
83
|
+
autoCodeSplitting?: boolean | undefined;
|
|
87
84
|
customScaffolding?: {
|
|
88
85
|
routeTemplate?: string | undefined;
|
|
89
86
|
lazyRouteTemplate?: string | undefined;
|
|
90
|
-
apiTemplate?: string | undefined;
|
|
91
87
|
} | undefined;
|
|
92
88
|
experimental?: {
|
|
93
89
|
enableCodeSplitting?: boolean | undefined;
|
|
@@ -110,31 +106,29 @@ declare const TanStackRouterRspack: (options?: Partial<{
|
|
|
110
106
|
target: "react" | "solid";
|
|
111
107
|
routeFileIgnorePrefix: string;
|
|
112
108
|
routesDirectory: string;
|
|
113
|
-
generatedRouteTree: string;
|
|
114
109
|
quoteStyle: "single" | "double";
|
|
115
110
|
semicolons: boolean;
|
|
111
|
+
disableLogging: boolean;
|
|
112
|
+
routeTreeFileHeader: string[];
|
|
113
|
+
indexToken: string;
|
|
114
|
+
routeToken: string;
|
|
115
|
+
generatedRouteTree: string;
|
|
116
116
|
disableTypes: boolean;
|
|
117
117
|
addExtensions: boolean;
|
|
118
|
-
disableLogging: boolean;
|
|
119
118
|
disableManifestGeneration: boolean;
|
|
120
119
|
enableRouteTreeFormatting: boolean;
|
|
121
|
-
apiBase: string;
|
|
122
|
-
routeTreeFileHeader: string[];
|
|
123
120
|
routeTreeFileFooter: string[];
|
|
124
|
-
indexToken: string;
|
|
125
|
-
routeToken: string;
|
|
126
121
|
enableRouteGeneration?: boolean | undefined;
|
|
127
122
|
codeSplittingOptions?: import('./core/config.js').CodeSplittingOptions | undefined;
|
|
128
123
|
virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
|
|
129
124
|
routeFilePrefix?: string | undefined;
|
|
130
125
|
routeFileIgnorePattern?: string | undefined;
|
|
131
|
-
__enableAPIRoutesGeneration?: boolean | undefined;
|
|
132
|
-
autoCodeSplitting?: boolean | undefined;
|
|
133
126
|
pathParamsAllowedCharacters?: (";" | ":" | "@" | "&" | "=" | "+" | "$" | ",")[] | undefined;
|
|
127
|
+
verboseFileRoutes?: boolean | undefined;
|
|
128
|
+
autoCodeSplitting?: boolean | undefined;
|
|
134
129
|
customScaffolding?: {
|
|
135
130
|
routeTemplate?: string | undefined;
|
|
136
131
|
lazyRouteTemplate?: string | undefined;
|
|
137
|
-
apiTemplate?: string | undefined;
|
|
138
132
|
} | undefined;
|
|
139
133
|
experimental?: {
|
|
140
134
|
enableCodeSplitting?: boolean | undefined;
|