@tanstack/router-plugin 1.48.5 → 1.49.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/cjs/core/code-splitter/ast.cjs.map +1 -0
  2. package/dist/cjs/{compilers.cjs → core/code-splitter/compilers.cjs} +1 -1
  3. package/dist/cjs/core/code-splitter/compilers.cjs.map +1 -0
  4. package/dist/cjs/core/config.cjs.map +1 -0
  5. package/dist/cjs/{config.d.cts → core/config.d.cts} +4 -0
  6. package/dist/cjs/core/constants.cjs.map +1 -0
  7. package/dist/cjs/{code-splitter.cjs → core/router-code-splitter-plugin.cjs} +24 -14
  8. package/dist/cjs/core/router-code-splitter-plugin.cjs.map +1 -0
  9. package/dist/cjs/core/router-composed-plugin.cjs +13 -0
  10. package/dist/cjs/core/router-composed-plugin.cjs.map +1 -0
  11. package/dist/cjs/{router-generator.cjs → core/router-generator-plugin.cjs} +1 -1
  12. package/dist/cjs/core/router-generator-plugin.cjs.map +1 -0
  13. package/dist/cjs/index.cjs +5 -5
  14. package/dist/cjs/index.d.cts +4 -4
  15. package/dist/cjs/rspack.cjs +7 -7
  16. package/dist/cjs/rspack.cjs.map +1 -1
  17. package/dist/cjs/rspack.d.cts +4 -1
  18. package/dist/cjs/vite.cjs +7 -7
  19. package/dist/cjs/vite.cjs.map +1 -1
  20. package/dist/cjs/vite.d.cts +4 -1
  21. package/dist/cjs/webpack.cjs +7 -7
  22. package/dist/cjs/webpack.cjs.map +1 -1
  23. package/dist/cjs/webpack.d.cts +4 -1
  24. package/dist/esm/core/code-splitter/ast.js.map +1 -0
  25. package/dist/esm/{compilers.js → core/code-splitter/compilers.js} +1 -1
  26. package/dist/esm/core/code-splitter/compilers.js.map +1 -0
  27. package/dist/esm/{config.d.ts → core/config.d.ts} +4 -0
  28. package/dist/esm/core/config.js.map +1 -0
  29. package/dist/esm/core/constants.js.map +1 -0
  30. package/dist/esm/{code-splitter.js → core/router-code-splitter-plugin.js} +24 -14
  31. package/dist/esm/core/router-code-splitter-plugin.js.map +1 -0
  32. package/dist/esm/{composed.js → core/router-composed-plugin.js} +3 -3
  33. package/dist/esm/core/router-composed-plugin.js.map +1 -0
  34. package/dist/esm/{router-generator.js → core/router-generator-plugin.js} +1 -1
  35. package/dist/esm/core/router-generator-plugin.js.map +1 -0
  36. package/dist/esm/index.d.ts +4 -4
  37. package/dist/esm/index.js +3 -3
  38. package/dist/esm/rspack.d.ts +4 -1
  39. package/dist/esm/rspack.js +4 -4
  40. package/dist/esm/rspack.js.map +1 -1
  41. package/dist/esm/vite.d.ts +4 -1
  42. package/dist/esm/vite.js +4 -4
  43. package/dist/esm/vite.js.map +1 -1
  44. package/dist/esm/webpack.d.ts +4 -1
  45. package/dist/esm/webpack.js +4 -4
  46. package/dist/esm/webpack.js.map +1 -1
  47. package/package.json +2 -2
  48. package/src/{compilers.ts → core/code-splitter/compilers.ts} +1 -1
  49. package/src/{code-splitter.ts → core/router-code-splitter-plugin.ts} +26 -10
  50. package/src/{composed.ts → core/router-composed-plugin.ts} +2 -2
  51. package/src/index.ts +4 -4
  52. package/src/rspack.ts +6 -5
  53. package/src/vite.ts +6 -5
  54. package/src/webpack.ts +6 -5
  55. package/dist/cjs/ast.cjs.map +0 -1
  56. package/dist/cjs/code-splitter.cjs.map +0 -1
  57. package/dist/cjs/compilers.cjs.map +0 -1
  58. package/dist/cjs/composed.cjs +0 -13
  59. package/dist/cjs/composed.cjs.map +0 -1
  60. package/dist/cjs/config.cjs.map +0 -1
  61. package/dist/cjs/constants.cjs.map +0 -1
  62. package/dist/cjs/router-generator.cjs.map +0 -1
  63. package/dist/esm/ast.js.map +0 -1
  64. package/dist/esm/code-splitter.js.map +0 -1
  65. package/dist/esm/compilers.js.map +0 -1
  66. package/dist/esm/composed.js.map +0 -1
  67. package/dist/esm/config.js.map +0 -1
  68. package/dist/esm/constants.js.map +0 -1
  69. package/dist/esm/router-generator.js.map +0 -1
  70. /package/dist/cjs/{ast.cjs → core/code-splitter/ast.cjs} +0 -0
  71. /package/dist/cjs/{ast.d.cts → core/code-splitter/ast.d.cts} +0 -0
  72. /package/dist/cjs/{compilers.d.cts → core/code-splitter/compilers.d.cts} +0 -0
  73. /package/dist/cjs/{config.cjs → core/config.cjs} +0 -0
  74. /package/dist/cjs/{constants.cjs → core/constants.cjs} +0 -0
  75. /package/dist/cjs/{constants.d.cts → core/constants.d.cts} +0 -0
  76. /package/dist/cjs/{code-splitter.d.cts → core/router-code-splitter-plugin.d.cts} +0 -0
  77. /package/dist/cjs/{composed.d.cts → core/router-composed-plugin.d.cts} +0 -0
  78. /package/dist/cjs/{router-generator.d.cts → core/router-generator-plugin.d.cts} +0 -0
  79. /package/dist/esm/{ast.d.ts → core/code-splitter/ast.d.ts} +0 -0
  80. /package/dist/esm/{ast.js → core/code-splitter/ast.js} +0 -0
  81. /package/dist/esm/{compilers.d.ts → core/code-splitter/compilers.d.ts} +0 -0
  82. /package/dist/esm/{config.js → core/config.js} +0 -0
  83. /package/dist/esm/{constants.d.ts → core/constants.d.ts} +0 -0
  84. /package/dist/esm/{constants.js → core/constants.js} +0 -0
  85. /package/dist/esm/{code-splitter.d.ts → core/router-code-splitter-plugin.d.ts} +0 -0
  86. /package/dist/esm/{composed.d.ts → core/router-composed-plugin.d.ts} +0 -0
  87. /package/dist/esm/{router-generator.d.ts → core/router-generator-plugin.d.ts} +0 -0
  88. /package/src/{ast.ts → core/code-splitter/ast.ts} +0 -0
  89. /package/src/{config.ts → core/config.ts} +0 -0
  90. /package/src/{constants.ts → core/constants.ts} +0 -0
  91. /package/src/{router-generator.ts → core/router-generator-plugin.ts} +0 -0
@@ -14,6 +14,7 @@ export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<{
14
14
  disableManifestGeneration: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
15
15
  routeTreeFileHeader: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
16
16
  routeTreeFileFooter: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
17
+ autoCodeSplitting: z.ZodOptional<z.ZodBoolean>;
17
18
  experimental: z.ZodOptional<z.ZodObject<{
18
19
  enableCodeSplitting: z.ZodOptional<z.ZodBoolean>;
19
20
  }, "strip", z.ZodTypeAny, {
@@ -38,6 +39,7 @@ export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<{
38
39
  enableRouteGeneration?: boolean | undefined;
39
40
  routeFilePrefix?: string | undefined;
40
41
  routeFileIgnorePattern?: string | undefined;
42
+ autoCodeSplitting?: boolean | undefined;
41
43
  experimental?: {
42
44
  enableCodeSplitting?: boolean | undefined;
43
45
  } | undefined;
@@ -56,6 +58,7 @@ export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<{
56
58
  disableManifestGeneration?: boolean | undefined;
57
59
  routeTreeFileHeader?: string[] | undefined;
58
60
  routeTreeFileFooter?: string[] | undefined;
61
+ autoCodeSplitting?: boolean | undefined;
59
62
  experimental?: {
60
63
  enableCodeSplitting?: boolean | undefined;
61
64
  } | undefined;
@@ -75,6 +78,7 @@ export declare const getConfig: (inlineConfig: Partial<Config>, root: string) =>
75
78
  enableRouteGeneration?: boolean | undefined;
76
79
  routeFilePrefix?: string | undefined;
77
80
  routeFileIgnorePattern?: string | undefined;
81
+ autoCodeSplitting?: boolean | undefined;
78
82
  experimental?: {
79
83
  enableCodeSplitting?: boolean | undefined;
80
84
  } | undefined;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sources":["../../../src/core/config.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n configSchema as generatorConfigSchema,\n getConfig as getGeneratorConfig,\n} from '@tanstack/router-generator'\n\nexport const configSchema = generatorConfigSchema.extend({\n enableRouteGeneration: z.boolean().optional(),\n})\n\nexport const getConfig = (inlineConfig: Partial<Config>, root: string) => {\n const config = getGeneratorConfig(inlineConfig, root)\n\n return configSchema.parse({ ...config, ...inlineConfig })\n}\n\nexport type Config = z.infer<typeof configSchema>\n"],"names":["generatorConfigSchema","getGeneratorConfig"],"mappings":";;AAMa,MAAA,eAAeA,eAAsB,OAAO;AAAA,EACvD,uBAAuB,EAAE,QAAQ,EAAE,SAAS;AAC9C,CAAC;AAEY,MAAA,YAAY,CAAC,cAA+B,SAAiB;AAClE,QAAA,SAASC,YAAmB,cAAc,IAAI;AAEpD,SAAO,aAAa,MAAM,EAAE,GAAG,QAAQ,GAAG,cAAc;AAC1D;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../src/core/constants.ts"],"sourcesContent":["export const CONFIG_FILE_NAME = 'tsr.config.json'\nexport const splitPrefix = 'tsr-split'\n"],"names":[],"mappings":"AAAO,MAAM,mBAAmB;AACzB,MAAM,cAAc;"}
@@ -1,7 +1,7 @@
1
1
  import { isAbsolute, join } from "node:path";
2
2
  import { pathToFileURL, fileURLToPath } from "node:url";
3
- import { compileCodeSplitVirtualRoute, compileCodeSplitReferenceRoute } from "./compilers.js";
4
3
  import { getConfig } from "./config.js";
4
+ import { compileCodeSplitVirtualRoute, compileCodeSplitReferenceRoute } from "./code-splitter/compilers.js";
5
5
  import { splitPrefix } from "./constants.js";
6
6
  function capitalizeFirst(str) {
7
7
  return str.charAt(0).toUpperCase() + str.slice(1);
@@ -71,8 +71,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
71
71
  name: "router-code-splitter-plugin",
72
72
  enforce: "pre",
73
73
  resolveId(source) {
74
- var _a;
75
- if (!((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting)) {
74
+ if (!userConfig.autoCodeSplitting) {
76
75
  return null;
77
76
  }
78
77
  if (source.startsWith(splitPrefix + ":")) {
@@ -81,8 +80,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
81
80
  return null;
82
81
  },
83
82
  transform(code, id) {
84
- var _a;
85
- if (!((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting)) {
83
+ if (!userConfig.autoCodeSplitting) {
86
84
  return null;
87
85
  }
88
86
  const url = pathToFileURL(id);
@@ -104,8 +102,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
104
102
  return null;
105
103
  },
106
104
  transformInclude(transformId) {
107
- var _a;
108
- if (!((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting)) {
105
+ if (!userConfig.autoCodeSplitting) {
109
106
  return void 0;
110
107
  }
111
108
  let id = transformId;
@@ -120,7 +117,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
120
117
  vite: {
121
118
  configResolved(config) {
122
119
  ROOT = config.root;
123
- userConfig = getConfig(options, ROOT);
120
+ userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(getConfig(options, ROOT));
124
121
  }
125
122
  },
126
123
  rspack(compiler) {
@@ -138,10 +135,9 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
138
135
  }
139
136
  );
140
137
  });
141
- userConfig = getConfig(options, ROOT);
138
+ userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(getConfig(options, ROOT));
142
139
  },
143
140
  webpack(compiler) {
144
- var _a;
145
141
  ROOT = process.cwd();
146
142
  compiler.hooks.beforeCompile.tap(PLUGIN_NAME, (self) => {
147
143
  self.normalModuleFactory.hooks.beforeResolve.tap(
@@ -156,9 +152,9 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
156
152
  }
157
153
  );
158
154
  });
159
- userConfig = getConfig(options, ROOT);
160
- if (((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting) && compiler.options.mode === "production") {
161
- compiler.hooks.done.tap(PLUGIN_NAME, (stats) => {
155
+ userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(getConfig(options, ROOT));
156
+ if (userConfig.autoCodeSplitting && compiler.options.mode === "production") {
157
+ compiler.hooks.done.tap(PLUGIN_NAME, () => {
162
158
  console.info("✅ " + PLUGIN_NAME + ": code-splitting done!");
163
159
  setTimeout(() => {
164
160
  process.exit(0);
@@ -168,7 +164,21 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
168
164
  }
169
165
  };
170
166
  };
167
+ function CHECK_USER_FLAGS_TO_BE_CHANGED(config) {
168
+ var _a;
169
+ if (typeof ((_a = config.experimental) == null ? void 0 : _a.enableCodeSplitting) !== "undefined") {
170
+ const message = `
171
+ ------
172
+ ⚠️ ⚠️ ⚠️
173
+ ERROR: The "experimental.enableCodeSplitting" flag has been made stable and is now "autoCodeSplitting". Please update your configuration file to use "autoCodeSplitting" instead of "experimental.enableCodeSplitting".
174
+ ------
175
+ `;
176
+ console.error(message);
177
+ throw new Error(message);
178
+ }
179
+ return config;
180
+ }
171
181
  export {
172
182
  unpluginRouterCodeSplitterFactory
173
183
  };
174
- //# sourceMappingURL=code-splitter.js.map
184
+ //# sourceMappingURL=router-code-splitter-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-code-splitter-plugin.js","sources":["../../../src/core/router-code-splitter-plugin.ts"],"sourcesContent":["import { isAbsolute, join } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\n\nimport { getConfig } from './config'\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n} from './code-splitter/compilers'\nimport { splitPrefix } from './constants'\n\nimport type { Config } from './config'\nimport type { UnpluginContextMeta, UnpluginFactory } from 'unplugin'\n\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nfunction fileIsInRoutesDirectory(filePath: string, routesDirectory: string) {\n const routesDirectoryPath = isAbsolute(routesDirectory)\n ? routesDirectory\n : join(process.cwd(), routesDirectory)\n\n return filePath.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'\nconst JoinedSplitPrefix = splitPrefix + ':'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, { framework }) => {\n const debug = Boolean(process.env.TSR_VITE_DEBUG)\n\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const handleSplittingFile = (code: string, id: string) => {\n if (debug) console.info('Splitting route: ', id)\n\n const compiledVirtualRoute = compileCodeSplitVirtualRoute({\n code,\n root: ROOT,\n filename: id,\n })\n\n if (debug) console.info('')\n if (debug) console.info('Split Output')\n if (debug) console.info('')\n if (debug) console.info(compiledVirtualRoute.code)\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n\n return compiledVirtualRoute\n }\n\n const handleCompilingFile = (code: string, id: string) => {\n if (debug) console.info('Handling createRoute: ', id)\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n root: ROOT,\n filename: id,\n })\n\n if (debug) console.info('')\n if (debug) console.info('Compiled Output')\n if (debug) console.info('')\n if (debug) console.info(compiledReferenceRoute.code)\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n\n return compiledReferenceRoute\n }\n\n return {\n name: 'router-code-splitter-plugin',\n enforce: 'pre',\n\n resolveId(source) {\n if (!userConfig.autoCodeSplitting) {\n return null\n }\n\n if (source.startsWith(splitPrefix + ':')) {\n return source.replace(splitPrefix + ':', '')\n }\n return null\n },\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(splitPrefix)) {\n return handleSplittingFile(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 handleCompilingFile(code, id)\n }\n\n return null\n },\n\n transformInclude(transformId) {\n if (!userConfig.autoCodeSplitting) {\n return undefined\n }\n\n let id = transformId\n\n if (id.startsWith(JoinedSplitPrefix)) {\n id = id.replace(JoinedSplitPrefix, '')\n }\n\n if (\n fileIsInRoutesDirectory(id, userConfig.routesDirectory) ||\n id.includes(splitPrefix)\n ) {\n return true\n }\n return false\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n\n userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(getConfig(options, ROOT))\n },\n },\n\n rspack(compiler) {\n ROOT = process.cwd()\n\n compiler.hooks.beforeCompile.tap(PLUGIN_NAME, (self) => {\n self.normalModuleFactory.hooks.beforeResolve.tap(\n PLUGIN_NAME,\n (resolveData: { request: string }) => {\n if (resolveData.request.includes(JoinedSplitPrefix)) {\n resolveData.request = resolveData.request.replace(\n JoinedSplitPrefix,\n '',\n )\n }\n },\n )\n })\n\n userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(getConfig(options, ROOT))\n },\n\n webpack(compiler) {\n ROOT = process.cwd()\n\n compiler.hooks.beforeCompile.tap(PLUGIN_NAME, (self) => {\n self.normalModuleFactory.hooks.beforeResolve.tap(\n PLUGIN_NAME,\n (resolveData: { request: string }) => {\n if (resolveData.request.includes(JoinedSplitPrefix)) {\n resolveData.request = resolveData.request.replace(\n JoinedSplitPrefix,\n '',\n )\n }\n },\n )\n })\n\n userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(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\nfunction CHECK_USER_FLAGS_TO_BE_CHANGED(config: Config): Config {\n if (typeof config.experimental?.enableCodeSplitting !== 'undefined') {\n const message = `\n------\n⚠️ ⚠️ ⚠️\nERROR: The \"experimental.enableCodeSplitting\" flag has been made stable and is now \"autoCodeSplitting\". Please update your configuration file to use \"autoCodeSplitting\" instead of \"experimental.enableCodeSplitting\".\n------\n`\n console.error(message)\n throw new Error(message)\n }\n\n return config\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { unpluginRouterGeneratorFactory } from "./router-generator.js";
2
- import { unpluginRouterCodeSplitterFactory } from "./code-splitter.js";
1
+ import { unpluginRouterGeneratorFactory } from "./router-generator-plugin.js";
2
+ import { unpluginRouterCodeSplitterFactory } from "./router-code-splitter-plugin.js";
3
3
  const unpluginRouterComposedFactory = (options = {}, meta) => {
4
4
  const routerGenerator = unpluginRouterGeneratorFactory(options);
5
5
  const routerGeneratorOptions = Array.isArray(routerGenerator) ? routerGenerator : [routerGenerator];
@@ -10,4 +10,4 @@ const unpluginRouterComposedFactory = (options = {}, meta) => {
10
10
  export {
11
11
  unpluginRouterComposedFactory
12
12
  };
13
- //# sourceMappingURL=composed.js.map
13
+ //# sourceMappingURL=router-composed-plugin.js.map
@@ -0,0 +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'\n\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\nexport const unpluginRouterComposedFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, meta) => {\n const routerGenerator = unpluginRouterGeneratorFactory(options, meta)\n\n const routerGeneratorOptions = Array.isArray(routerGenerator)\n ? routerGenerator\n : [routerGenerator]\n\n const routerCodeSplitter = unpluginRouterCodeSplitterFactory(options, meta)\n const routerCodeSplitterOptions = Array.isArray(routerCodeSplitter)\n ? routerCodeSplitter\n : [routerCodeSplitter]\n\n return [...routerGeneratorOptions, ...routerCodeSplitterOptions]\n}\n"],"names":[],"mappings":";;AAMO,MAAM,gCAET,CAAC,UAAU,IAAI,SAAS;AACpB,QAAA,kBAAkB,+BAA+B,OAAa;AAEpE,QAAM,yBAAyB,MAAM,QAAQ,eAAe,IACxD,kBACA,CAAC,eAAe;AAEd,QAAA,qBAAqB,kCAAkC,SAAS,IAAI;AAC1E,QAAM,4BAA4B,MAAM,QAAQ,kBAAkB,IAC9D,qBACA,CAAC,kBAAkB;AAEvB,SAAO,CAAC,GAAG,wBAAwB,GAAG,yBAAyB;AACjE;"}
@@ -98,4 +98,4 @@ const unpluginRouterGeneratorFactory = (options = {}) => {
98
98
  export {
99
99
  unpluginRouterGeneratorFactory
100
100
  };
101
- //# sourceMappingURL=router-generator.js.map
101
+ //# sourceMappingURL=router-generator-plugin.js.map
@@ -0,0 +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 } from '@tanstack/router-generator'\n\nimport { getConfig } from './config'\nimport { CONFIG_FILE_NAME } from './constants'\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)\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 === join(ROOT, CONFIG_FILE_NAME)) {\n userConfig = getConfig(options, ROOT)\n return\n }\n\n if (\n event === 'update' &&\n filePath === resolve(userConfig.generatedRouteTree)\n ) {\n // skip generating routes if the generated route tree is updated\n return\n }\n\n const routesDirectoryPath = getRoutesDirectoryPath()\n if (filePath.startsWith(routesDirectoryPath)) {\n await generate()\n }\n }\n\n const run: (cb: () => Promise<void> | void) => Promise<void> = async (cb) => {\n if (userConfig.enableRouteGeneration ?? true) {\n await cb()\n }\n }\n\n return {\n name: 'router-generator-plugin',\n async watchChange(id, { event }) {\n await run(async () => {\n await handleFile(id, event)\n })\n },\n vite: {\n async configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n\n await run(generate)\n },\n },\n async rspack(compiler) {\n userConfig = getConfig(options, ROOT)\n\n // rspack watcher doesn't register newly created files\n if (compiler.options.mode === 'production') {\n await run(generate)\n } else {\n const routesDirectoryPath = getRoutesDirectoryPath()\n const chokidar = await import('chokidar')\n chokidar.watch(routesDirectoryPath).on('add', async () => {\n await run(generate)\n })\n }\n },\n async webpack(compiler) {\n userConfig = getConfig(options, ROOT)\n\n // webpack watcher doesn't register newly created files\n if (compiler.options.mode === 'production') {\n await run(generate)\n } else {\n const routesDirectoryPath = getRoutesDirectoryPath()\n const chokidar = await import('chokidar')\n chokidar.watch(routesDirectoryPath).on('add', async () => {\n await run(generate)\n })\n }\n\n if (compiler.options.mode === 'production') {\n compiler.hooks.done.tap(PLUGIN_NAME, (stats) => {\n console.info('✅ ' + PLUGIN_NAME + ': route-tree generation done')\n setTimeout(() => {\n process.exit(0)\n })\n })\n }\n },\n }\n}\n"],"names":[],"mappings":";;;;AAQA,IAAI,OAAO;AACX,MAAM,YAAY,MAAM;AACxB,MAAM,UAAU,CAAC,SAAkB;AAC1B,SAAA;AACT;AAEA,MAAM,cAAc;AAEb,MAAM,iCAET,CAAC,UAAU,OAAO;AAChB,MAAA,OAAe,QAAQ;AAC3B,MAAI,aAAa;AAEjB,QAAM,yBAAyB,MAAM;AAC5B,WAAA,WAAW,WAAW,eAAe,IACxC,WAAW,kBACX,KAAK,MAAM,WAAW,eAAe;AAAA,EAAA;AAG3C,QAAM,WAAW,YAAY;AAC3B,QAAI,aAAa;AACf;AAAA,IACF;AAEA,YAAQ,IAAI;AAER,QAAA;AACF,YAAM,UAAU,UAAU;AAAA,aACnB,KAAK;AACZ,cAAQ,MAAM,GAAG;AACjB,cAAQ,KAAK;AAAA,IAAA,UACb;AACA,cAAQ,KAAK;AAAA,IACf;AAAA,EAAA;AAGI,QAAA,aAAa,OACjB,MACA,UACG;AACG,UAAA,WAAW,UAAU,IAAI;AAE/B,QAAI,aAAa,KAAK,MAAM,gBAAgB,GAAG;AAChC,mBAAA,UAAU,SAAS,IAAI;AACpC;AAAA,IACF;AAEA,QACE,UAAU,YACV,aAAa,QAAQ,WAAW,kBAAkB,GAClD;AAEA;AAAA,IACF;AAEA,UAAM,sBAAsB;AACxB,QAAA,SAAS,WAAW,mBAAmB,GAAG;AAC5C,YAAM,SAAS;AAAA,IACjB;AAAA,EAAA;AAGI,QAAA,MAAyD,OAAO,OAAO;AACvE,QAAA,WAAW,yBAAyB,MAAM;AAC5C,YAAM,GAAG;AAAA,IACX;AAAA,EAAA;AAGK,SAAA;AAAA,IACL,MAAM;AAAA,IACN,MAAM,YAAY,IAAI,EAAE,SAAS;AAC/B,YAAM,IAAI,YAAY;AACd,cAAA,WAAW,IAAI,KAAK;AAAA,MAAA,CAC3B;AAAA,IACH;AAAA,IACA,MAAM;AAAA,MACJ,MAAM,eAAe,QAAQ;AAC3B,eAAO,OAAO;AACD,qBAAA,UAAU,SAAS,IAAI;AAEpC,cAAM,IAAI,QAAQ;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM,OAAO,UAAU;AACR,mBAAA,UAAU,SAAS,IAAI;AAGhC,UAAA,SAAS,QAAQ,SAAS,cAAc;AAC1C,cAAM,IAAI,QAAQ;AAAA,MAAA,OACb;AACL,cAAM,sBAAsB;AACtB,cAAA,WAAW,MAAM,OAAO,UAAU;AACxC,iBAAS,MAAM,mBAAmB,EAAE,GAAG,OAAO,YAAY;AACxD,gBAAM,IAAI,QAAQ;AAAA,QAAA,CACnB;AAAA,MACH;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,UAAU;AACT,mBAAA,UAAU,SAAS,IAAI;AAGhC,UAAA,SAAS,QAAQ,SAAS,cAAc;AAC1C,cAAM,IAAI,QAAQ;AAAA,MAAA,OACb;AACL,cAAM,sBAAsB;AACtB,cAAA,WAAW,MAAM,OAAO,UAAU;AACxC,iBAAS,MAAM,mBAAmB,EAAE,GAAG,OAAO,YAAY;AACxD,gBAAM,IAAI,QAAQ;AAAA,QAAA,CACnB;AAAA,MACH;AAEI,UAAA,SAAS,QAAQ,SAAS,cAAc;AAC1C,iBAAS,MAAM,KAAK,IAAI,aAAa,CAAC,UAAU;AACtC,kBAAA,KAAK,OAAO,cAAc,8BAA8B;AAChE,qBAAW,MAAM;AACf,oBAAQ,KAAK,CAAC;AAAA,UAAA,CACf;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IACF;AAAA,EAAA;AAEJ;"}
@@ -1,4 +1,4 @@
1
- export { unpluginRouterCodeSplitterFactory } from './code-splitter.js';
2
- export { unpluginRouterGeneratorFactory } from './router-generator.js';
3
- export { configSchema } from './config.js';
4
- export type { Config } from './config.js';
1
+ export { configSchema } from './core/config.js';
2
+ export { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin.js';
3
+ export { unpluginRouterGeneratorFactory } from './core/router-generator-plugin.js';
4
+ export type { Config } from './core/config.js';
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { unpluginRouterCodeSplitterFactory } from "./code-splitter.js";
2
- import { unpluginRouterGeneratorFactory } from "./router-generator.js";
3
- import { configSchema } from "./config.js";
1
+ import { configSchema } from "./core/config.js";
2
+ import { unpluginRouterCodeSplitterFactory } from "./core/router-code-splitter-plugin.js";
3
+ import { unpluginRouterGeneratorFactory } from "./core/router-generator-plugin.js";
4
4
  export {
5
5
  configSchema,
6
6
  unpluginRouterCodeSplitterFactory,
@@ -1,4 +1,4 @@
1
- import { configSchema, Config } from './config.js';
1
+ import { configSchema, Config } from './core/config.js';
2
2
 
3
3
  /**
4
4
  * @example
@@ -28,6 +28,7 @@ declare const TanStackRouterGeneratorRspack: (options?: Partial<{
28
28
  enableRouteGeneration?: boolean | undefined;
29
29
  routeFilePrefix?: string | undefined;
30
30
  routeFileIgnorePattern?: string | undefined;
31
+ autoCodeSplitting?: boolean | undefined;
31
32
  experimental?: {
32
33
  enableCodeSplitting?: boolean | undefined;
33
34
  } | undefined;
@@ -60,6 +61,7 @@ declare const TanStackRouterCodeSplitterRspack: (options?: Partial<{
60
61
  enableRouteGeneration?: boolean | undefined;
61
62
  routeFilePrefix?: string | undefined;
62
63
  routeFileIgnorePattern?: string | undefined;
64
+ autoCodeSplitting?: boolean | undefined;
63
65
  experimental?: {
64
66
  enableCodeSplitting?: boolean | undefined;
65
67
  } | undefined;
@@ -92,6 +94,7 @@ declare const TanStackRouterRspack: (options?: Partial<{
92
94
  enableRouteGeneration?: boolean | undefined;
93
95
  routeFilePrefix?: string | undefined;
94
96
  routeFileIgnorePattern?: string | undefined;
97
+ autoCodeSplitting?: boolean | undefined;
95
98
  experimental?: {
96
99
  enableCodeSplitting?: boolean | undefined;
97
100
  } | undefined;
@@ -1,8 +1,8 @@
1
1
  import { createRspackPlugin } from "unplugin";
2
- import { unpluginRouterCodeSplitterFactory } from "./code-splitter.js";
3
- import { configSchema } from "./config.js";
4
- import { unpluginRouterGeneratorFactory } from "./router-generator.js";
5
- import { unpluginRouterComposedFactory } from "./composed.js";
2
+ import { configSchema } from "./core/config.js";
3
+ import { unpluginRouterCodeSplitterFactory } from "./core/router-code-splitter-plugin.js";
4
+ import { unpluginRouterGeneratorFactory } from "./core/router-generator-plugin.js";
5
+ import { unpluginRouterComposedFactory } from "./core/router-composed-plugin.js";
6
6
  const TanStackRouterGeneratorRspack = /* @__PURE__ */ createRspackPlugin(
7
7
  unpluginRouterGeneratorFactory
8
8
  );
@@ -1 +1 @@
1
- {"version":3,"file":"rspack.js","sources":["../../src/rspack.ts"],"sourcesContent":["import { createRspackPlugin } from 'unplugin'\nimport { unpluginRouterCodeSplitterFactory } from './code-splitter'\nimport { configSchema } from './config'\nimport { unpluginRouterGeneratorFactory } from './router-generator'\nimport { unpluginRouterComposedFactory } from './composed'\nimport type { Config } from './config'\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 unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterComposedFactory,\n)\n\nexport default TanStackRouterRspack\nexport {\n configSchema,\n TanStackRouterRspack,\n TanStackRouterGeneratorRspack,\n TanStackRouterCodeSplitterRspack,\n}\nexport type { Config }\n"],"names":[],"mappings":";;;;;AAoBA,MAAM,gCAAgD;AAAA,EACpD;AACF;AAeA,MAAM,mCAAmD;AAAA,EACvD;AACF;AAeA,MAAM,uBAAuC;AAAA,EAC3C;AACF;"}
1
+ {"version":3,"file":"rspack.js","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 { Config } from './core/config'\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 unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * // ...\n * tools: {\n * rspack: {\n * plugins: [TanStackRouterRspack()],\n * },\n * },\n * })\n * ```\n */\nconst TanStackRouterRspack = /* #__PURE__ */ createRspackPlugin(\n unpluginRouterComposedFactory,\n)\n\nexport default TanStackRouterRspack\nexport {\n configSchema,\n TanStackRouterRspack,\n TanStackRouterGeneratorRspack,\n TanStackRouterCodeSplitterRspack,\n}\nexport type { Config }\n"],"names":[],"mappings":";;;;;AAqBA,MAAM,gCAAgD;AAAA,EACpD;AACF;AAeA,MAAM,mCAAmD;AAAA,EACvD;AACF;AAeA,MAAM,uBAAuC;AAAA,EAC3C;AACF;"}
@@ -1,4 +1,4 @@
1
- import { configSchema, Config } from './config.js';
1
+ import { configSchema, Config } from './core/config.js';
2
2
 
3
3
  /**
4
4
  * @example
@@ -24,6 +24,7 @@ declare const TanStackRouterGeneratorVite: (options?: Partial<{
24
24
  enableRouteGeneration?: boolean | undefined;
25
25
  routeFilePrefix?: string | undefined;
26
26
  routeFileIgnorePattern?: string | undefined;
27
+ autoCodeSplitting?: boolean | undefined;
27
28
  experimental?: {
28
29
  enableCodeSplitting?: boolean | undefined;
29
30
  } | undefined;
@@ -52,6 +53,7 @@ declare const TanStackRouterCodeSplitterVite: (options?: Partial<{
52
53
  enableRouteGeneration?: boolean | undefined;
53
54
  routeFilePrefix?: string | undefined;
54
55
  routeFileIgnorePattern?: string | undefined;
56
+ autoCodeSplitting?: boolean | undefined;
55
57
  experimental?: {
56
58
  enableCodeSplitting?: boolean | undefined;
57
59
  } | undefined;
@@ -80,6 +82,7 @@ declare const TanStackRouterVite: (options?: Partial<{
80
82
  enableRouteGeneration?: boolean | undefined;
81
83
  routeFilePrefix?: string | undefined;
82
84
  routeFileIgnorePattern?: string | undefined;
85
+ autoCodeSplitting?: boolean | undefined;
83
86
  experimental?: {
84
87
  enableCodeSplitting?: boolean | undefined;
85
88
  } | undefined;
package/dist/esm/vite.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { createVitePlugin } from "unplugin";
2
- import { unpluginRouterCodeSplitterFactory } from "./code-splitter.js";
3
- import { configSchema } from "./config.js";
4
- import { unpluginRouterGeneratorFactory } from "./router-generator.js";
5
- import { unpluginRouterComposedFactory } from "./composed.js";
2
+ import { configSchema } from "./core/config.js";
3
+ import { unpluginRouterCodeSplitterFactory } from "./core/router-code-splitter-plugin.js";
4
+ import { unpluginRouterGeneratorFactory } from "./core/router-generator-plugin.js";
5
+ import { unpluginRouterComposedFactory } from "./core/router-composed-plugin.js";
6
6
  const TanStackRouterGeneratorVite = createVitePlugin(
7
7
  unpluginRouterGeneratorFactory
8
8
  );
@@ -1 +1 @@
1
- {"version":3,"file":"vite.js","sources":["../../src/vite.ts"],"sourcesContent":["import { createVitePlugin } from 'unplugin'\nimport { unpluginRouterCodeSplitterFactory } from './code-splitter'\nimport { configSchema } from './config'\nimport { unpluginRouterGeneratorFactory } from './router-generator'\nimport { unpluginRouterComposedFactory } from './composed'\n\nimport type { Config } from './config'\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [TanStackRouterGeneratorVite()],\n * // ...\n * })\n * ```\n */\nconst TanStackRouterGeneratorVite = createVitePlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [TanStackRouterCodeSplitterVite()],\n * // ...\n * })\n * ```\n */\nconst TanStackRouterCodeSplitterVite = createVitePlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [TanStackRouterVite()],\n * // ...\n * })\n * ```\n */\nconst TanStackRouterVite = createVitePlugin(unpluginRouterComposedFactory)\n\nexport default TanStackRouterVite\nexport {\n configSchema,\n TanStackRouterGeneratorVite,\n TanStackRouterCodeSplitterVite,\n TanStackRouterVite,\n}\nexport type { Config }\n"],"names":[],"mappings":";;;;;AAiBA,MAAM,8BAA8B;AAAA,EAClC;AACF;AAWA,MAAM,iCAAiC;AAAA,EACrC;AACF;AAWM,MAAA,qBAAqB,iBAAiB,6BAA6B;"}
1
+ {"version":3,"file":"vite.js","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'\n\nimport type { Config } from './core/config'\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [TanStackRouterGeneratorVite()],\n * // ...\n * })\n * ```\n */\nconst TanStackRouterGeneratorVite = createVitePlugin(\n unpluginRouterGeneratorFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [TanStackRouterCodeSplitterVite()],\n * // ...\n * })\n * ```\n */\nconst TanStackRouterCodeSplitterVite = createVitePlugin(\n unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [TanStackRouterVite()],\n * // ...\n * })\n * ```\n */\nconst TanStackRouterVite = createVitePlugin(unpluginRouterComposedFactory)\n\nexport default TanStackRouterVite\nexport {\n configSchema,\n TanStackRouterGeneratorVite,\n TanStackRouterCodeSplitterVite,\n TanStackRouterVite,\n}\nexport type { Config }\n"],"names":[],"mappings":";;;;;AAkBA,MAAM,8BAA8B;AAAA,EAClC;AACF;AAWA,MAAM,iCAAiC;AAAA,EACrC;AACF;AAWM,MAAA,qBAAqB,iBAAiB,6BAA6B;"}
@@ -1,4 +1,4 @@
1
- import { configSchema, Config } from './config.js';
1
+ import { configSchema, Config } from './core/config.js';
2
2
 
3
3
  /**
4
4
  * @example
@@ -24,6 +24,7 @@ declare const TanStackRouterGeneratorWebpack: (options?: Partial<{
24
24
  enableRouteGeneration?: boolean | undefined;
25
25
  routeFilePrefix?: string | undefined;
26
26
  routeFileIgnorePattern?: string | undefined;
27
+ autoCodeSplitting?: boolean | undefined;
27
28
  experimental?: {
28
29
  enableCodeSplitting?: boolean | undefined;
29
30
  } | undefined;
@@ -52,6 +53,7 @@ declare const TanStackRouterCodeSplitterWebpack: (options?: Partial<{
52
53
  enableRouteGeneration?: boolean | undefined;
53
54
  routeFilePrefix?: string | undefined;
54
55
  routeFileIgnorePattern?: string | undefined;
56
+ autoCodeSplitting?: boolean | undefined;
55
57
  experimental?: {
56
58
  enableCodeSplitting?: boolean | undefined;
57
59
  } | undefined;
@@ -80,6 +82,7 @@ declare const TanStackRouterWebpack: (options?: Partial<{
80
82
  enableRouteGeneration?: boolean | undefined;
81
83
  routeFilePrefix?: string | undefined;
82
84
  routeFileIgnorePattern?: string | undefined;
85
+ autoCodeSplitting?: boolean | undefined;
83
86
  experimental?: {
84
87
  enableCodeSplitting?: boolean | undefined;
85
88
  } | undefined;
@@ -1,8 +1,8 @@
1
1
  import { createWebpackPlugin } from "unplugin";
2
- import { unpluginRouterCodeSplitterFactory } from "./code-splitter.js";
3
- import { configSchema } from "./config.js";
4
- import { unpluginRouterGeneratorFactory } from "./router-generator.js";
5
- import { unpluginRouterComposedFactory } from "./composed.js";
2
+ import { configSchema } from "./core/config.js";
3
+ import { unpluginRouterCodeSplitterFactory } from "./core/router-code-splitter-plugin.js";
4
+ import { unpluginRouterGeneratorFactory } from "./core/router-generator-plugin.js";
5
+ import { unpluginRouterComposedFactory } from "./core/router-composed-plugin.js";
6
6
  const TanStackRouterGeneratorWebpack = /* @__PURE__ */ createWebpackPlugin(
7
7
  unpluginRouterGeneratorFactory
8
8
  );
@@ -1 +1 @@
1
- {"version":3,"file":"webpack.js","sources":["../../src/webpack.ts"],"sourcesContent":["import { createWebpackPlugin } from 'unplugin'\nimport { unpluginRouterCodeSplitterFactory } from './code-splitter'\nimport { configSchema } from './config'\nimport { unpluginRouterGeneratorFactory } from './router-generator'\nimport { unpluginRouterComposedFactory } from './composed'\nimport type { Config } from './config'\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 unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterWebpack()],\n * }\n * ```\n */\nconst TanStackRouterWebpack = /* #__PURE__ */ createWebpackPlugin(\n unpluginRouterComposedFactory,\n)\n\nexport default TanStackRouterWebpack\nexport {\n configSchema,\n TanStackRouterWebpack,\n TanStackRouterGeneratorWebpack,\n TanStackRouterCodeSplitterWebpack,\n}\nexport type { Config }\n"],"names":[],"mappings":";;;;;AAgBA,MAAM,iCAAiD;AAAA,EACrD;AACF;AAWA,MAAM,oCAAoD;AAAA,EACxD;AACF;AAWA,MAAM,wBAAwC;AAAA,EAC5C;AACF;"}
1
+ {"version":3,"file":"webpack.js","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 { Config } from './core/config'\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 unpluginRouterCodeSplitterFactory,\n)\n\n/**\n * @example\n * ```ts\n * export default {\n * // ...\n * plugins: [TanStackRouterWebpack()],\n * }\n * ```\n */\nconst TanStackRouterWebpack = /* #__PURE__ */ createWebpackPlugin(\n unpluginRouterComposedFactory,\n)\n\nexport default TanStackRouterWebpack\nexport {\n configSchema,\n TanStackRouterWebpack,\n TanStackRouterGeneratorWebpack,\n TanStackRouterCodeSplitterWebpack,\n}\nexport type { Config }\n"],"names":[],"mappings":";;;;;AAiBA,MAAM,iCAAiD;AAAA,EACrD;AACF;AAWA,MAAM,oCAAoD;AAAA,EACxD;AACF;AAWA,MAAM,wBAAwC;AAAA,EAC5C;AACF;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/router-plugin",
3
- "version": "1.48.5",
3
+ "version": "1.49.3",
4
4
  "description": "Modern and scalable routing for React applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -92,7 +92,7 @@
92
92
  "chokidar": "^3.6.0",
93
93
  "unplugin": "^1.12.2",
94
94
  "zod": "^3.23.8",
95
- "@tanstack/router-generator": "^1.48.3"
95
+ "@tanstack/router-generator": "^1.49.3"
96
96
  },
97
97
  "peerDependencies": {
98
98
  "@rsbuild/core": ">=1.0.0",
@@ -4,7 +4,7 @@ import _generate from '@babel/generator'
4
4
  import * as template from '@babel/template'
5
5
  import { deadCodeElimination } from 'babel-dead-code-elimination'
6
6
 
7
- import { splitPrefix } from './constants'
7
+ import { splitPrefix } from '../constants'
8
8
  import { parseAst } from './ast'
9
9
  import type { ParseAstOptions } from './ast'
10
10
 
@@ -1,11 +1,11 @@
1
1
  import { isAbsolute, join } from 'node:path'
2
2
  import { fileURLToPath, pathToFileURL } from 'node:url'
3
3
 
4
+ import { getConfig } from './config'
4
5
  import {
5
6
  compileCodeSplitReferenceRoute,
6
7
  compileCodeSplitVirtualRoute,
7
- } from './compilers'
8
- import { getConfig } from './config'
8
+ } from './code-splitter/compilers'
9
9
  import { splitPrefix } from './constants'
10
10
 
11
11
  import type { Config } from './config'
@@ -107,7 +107,7 @@ export const unpluginRouterCodeSplitterFactory: UnpluginFactory<
107
107
  enforce: 'pre',
108
108
 
109
109
  resolveId(source) {
110
- if (!userConfig.experimental?.enableCodeSplitting) {
110
+ if (!userConfig.autoCodeSplitting) {
111
111
  return null
112
112
  }
113
113
 
@@ -118,7 +118,7 @@ export const unpluginRouterCodeSplitterFactory: UnpluginFactory<
118
118
  },
119
119
 
120
120
  transform(code, id) {
121
- if (!userConfig.experimental?.enableCodeSplitting) {
121
+ if (!userConfig.autoCodeSplitting) {
122
122
  return null
123
123
  }
124
124
 
@@ -149,7 +149,7 @@ export const unpluginRouterCodeSplitterFactory: UnpluginFactory<
149
149
  },
150
150
 
151
151
  transformInclude(transformId) {
152
- if (!userConfig.experimental?.enableCodeSplitting) {
152
+ if (!userConfig.autoCodeSplitting) {
153
153
  return undefined
154
154
  }
155
155
 
@@ -171,7 +171,8 @@ export const unpluginRouterCodeSplitterFactory: UnpluginFactory<
171
171
  vite: {
172
172
  configResolved(config) {
173
173
  ROOT = config.root
174
- userConfig = getConfig(options, ROOT)
174
+
175
+ userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(getConfig(options, ROOT))
175
176
  },
176
177
  },
177
178
 
@@ -192,7 +193,7 @@ export const unpluginRouterCodeSplitterFactory: UnpluginFactory<
192
193
  )
193
194
  })
194
195
 
195
- userConfig = getConfig(options, ROOT)
196
+ userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(getConfig(options, ROOT))
196
197
  },
197
198
 
198
199
  webpack(compiler) {
@@ -212,13 +213,13 @@ export const unpluginRouterCodeSplitterFactory: UnpluginFactory<
212
213
  )
213
214
  })
214
215
 
215
- userConfig = getConfig(options, ROOT)
216
+ userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(getConfig(options, ROOT))
216
217
 
217
218
  if (
218
- userConfig.experimental?.enableCodeSplitting &&
219
+ userConfig.autoCodeSplitting &&
219
220
  compiler.options.mode === 'production'
220
221
  ) {
221
- compiler.hooks.done.tap(PLUGIN_NAME, (stats) => {
222
+ compiler.hooks.done.tap(PLUGIN_NAME, () => {
222
223
  console.info('✅ ' + PLUGIN_NAME + ': code-splitting done!')
223
224
  setTimeout(() => {
224
225
  process.exit(0)
@@ -228,3 +229,18 @@ export const unpluginRouterCodeSplitterFactory: UnpluginFactory<
228
229
  },
229
230
  }
230
231
  }
232
+
233
+ function CHECK_USER_FLAGS_TO_BE_CHANGED(config: Config): Config {
234
+ if (typeof config.experimental?.enableCodeSplitting !== 'undefined') {
235
+ const message = `
236
+ ------
237
+ ⚠️ ⚠️ ⚠️
238
+ ERROR: The "experimental.enableCodeSplitting" flag has been made stable and is now "autoCodeSplitting". Please update your configuration file to use "autoCodeSplitting" instead of "experimental.enableCodeSplitting".
239
+ ------
240
+ `
241
+ console.error(message)
242
+ throw new Error(message)
243
+ }
244
+
245
+ return config
246
+ }
@@ -1,5 +1,5 @@
1
- import { unpluginRouterGeneratorFactory } from './router-generator'
2
- import { unpluginRouterCodeSplitterFactory } from './code-splitter'
1
+ import { unpluginRouterGeneratorFactory } from './router-generator-plugin'
2
+ import { unpluginRouterCodeSplitterFactory } from './router-code-splitter-plugin'
3
3
 
4
4
  import type { Config } from './config'
5
5
  import type { UnpluginFactory } from 'unplugin'
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { unpluginRouterCodeSplitterFactory } from './code-splitter'
2
- export { unpluginRouterGeneratorFactory } from './router-generator'
3
- export { configSchema } from './config'
4
- export type { Config } from './config'
1
+ export { configSchema } from './core/config'
2
+ export { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'
3
+ export { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'
4
+ export type { Config } from './core/config'
package/src/rspack.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { createRspackPlugin } from 'unplugin'
2
- import { unpluginRouterCodeSplitterFactory } from './code-splitter'
3
- import { configSchema } from './config'
4
- import { unpluginRouterGeneratorFactory } from './router-generator'
5
- import { unpluginRouterComposedFactory } from './composed'
6
- import type { Config } from './config'
2
+
3
+ import { configSchema } from './core/config'
4
+ import { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'
5
+ import { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'
6
+ import { unpluginRouterComposedFactory } from './core/router-composed-plugin'
7
+ import type { Config } from './core/config'
7
8
 
8
9
  /**
9
10
  * @example
package/src/vite.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import { createVitePlugin } from 'unplugin'
2
- import { unpluginRouterCodeSplitterFactory } from './code-splitter'
3
- import { configSchema } from './config'
4
- import { unpluginRouterGeneratorFactory } from './router-generator'
5
- import { unpluginRouterComposedFactory } from './composed'
6
2
 
7
- import type { Config } from './config'
3
+ import { configSchema } from './core/config'
4
+ import { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'
5
+ import { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'
6
+ import { unpluginRouterComposedFactory } from './core/router-composed-plugin'
7
+
8
+ import type { Config } from './core/config'
8
9
 
9
10
  /**
10
11
  * @example
package/src/webpack.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { createWebpackPlugin } from 'unplugin'
2
- import { unpluginRouterCodeSplitterFactory } from './code-splitter'
3
- import { configSchema } from './config'
4
- import { unpluginRouterGeneratorFactory } from './router-generator'
5
- import { unpluginRouterComposedFactory } from './composed'
6
- import type { Config } from './config'
2
+
3
+ import { configSchema } from './core/config'
4
+ import { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin'
5
+ import { unpluginRouterGeneratorFactory } from './core/router-generator-plugin'
6
+ import { unpluginRouterComposedFactory } from './core/router-composed-plugin'
7
+ import type { Config } from './core/config'
7
8
 
8
9
  /**
9
10
  * @example
@@ -1 +0,0 @@
1
- {"version":3,"file":"ast.cjs","sources":["../../src/ast.ts"],"sourcesContent":["import * as babel from '@babel/core'\nimport '@babel/parser'\n// @ts-expect-error\nimport _babelPluginJsx from '@babel/plugin-syntax-jsx'\n// @ts-expect-error\nimport _babelPluginTypeScript from '@babel/plugin-syntax-typescript'\n\nlet babelPluginJsx = _babelPluginJsx\nlet babelPluginTypeScript = _babelPluginTypeScript\n\nif (babelPluginJsx.default) {\n babelPluginJsx = babelPluginJsx.default\n}\n\nif (babelPluginTypeScript.default) {\n babelPluginTypeScript = babelPluginTypeScript.default\n}\n\nexport type ParseAstOptions = {\n code: string\n filename: string\n root: string\n}\n\nexport function parseAst(opts: ParseAstOptions) {\n const babelPlugins: Array<babel.PluginItem> = [\n babelPluginJsx,\n [\n babelPluginTypeScript,\n {\n isTSX: true,\n },\n ],\n ]\n\n return babel.parse(opts.code, {\n plugins: babelPlugins,\n root: opts.root,\n filename: opts.filename,\n sourceMaps: true,\n sourceType: 'module',\n })\n}\n"],"names":["babel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAI,iBAAiB;AACrB,IAAI,wBAAwB;AAE5B,IAAI,eAAe,SAAS;AAC1B,mBAAiB,eAAe;AAClC;AAEA,IAAI,sBAAsB,SAAS;AACjC,0BAAwB,sBAAsB;AAChD;AAQO,SAAS,SAAS,MAAuB;AAC9C,QAAM,eAAwC;AAAA,IAC5C;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EAAA;AAGK,SAAAA,iBAAM,MAAM,KAAK,MAAM;AAAA,IAC5B,SAAS;AAAA,IACT,MAAM,KAAK;AAAA,IACX,UAAU,KAAK;AAAA,IACf,YAAY;AAAA,IACZ,YAAY;AAAA,EAAA,CACb;AACH;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"code-splitter.cjs","sources":["../../src/code-splitter.ts"],"sourcesContent":["import { isAbsolute, join } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\n\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n} from './compilers'\nimport { getConfig } from './config'\nimport { splitPrefix } from './constants'\n\nimport type { Config } from './config'\nimport type { UnpluginContextMeta, UnpluginFactory } from 'unplugin'\n\nfunction capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nfunction fileIsInRoutesDirectory(filePath: string, routesDirectory: string) {\n const routesDirectoryPath = isAbsolute(routesDirectory)\n ? routesDirectory\n : join(process.cwd(), routesDirectory)\n\n return filePath.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'\nconst JoinedSplitPrefix = splitPrefix + ':'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, { framework }) => {\n const debug = Boolean(process.env.TSR_VITE_DEBUG)\n\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const handleSplittingFile = (code: string, id: string) => {\n if (debug) console.info('Splitting route: ', id)\n\n const compiledVirtualRoute = compileCodeSplitVirtualRoute({\n code,\n root: ROOT,\n filename: id,\n })\n\n if (debug) console.info('')\n if (debug) console.info('Split Output')\n if (debug) console.info('')\n if (debug) console.info(compiledVirtualRoute.code)\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n\n return compiledVirtualRoute\n }\n\n const handleCompilingFile = (code: string, id: string) => {\n if (debug) console.info('Handling createRoute: ', id)\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n root: ROOT,\n filename: id,\n })\n\n if (debug) console.info('')\n if (debug) console.info('Compiled Output')\n if (debug) console.info('')\n if (debug) console.info(compiledReferenceRoute.code)\n if (debug) console.info('')\n if (debug) console.info('')\n if (debug) console.info('')\n\n return compiledReferenceRoute\n }\n\n return {\n name: 'router-code-splitter-plugin',\n enforce: 'pre',\n\n resolveId(source) {\n if (!userConfig.experimental?.enableCodeSplitting) {\n return null\n }\n\n if (source.startsWith(splitPrefix + ':')) {\n return source.replace(splitPrefix + ':', '')\n }\n return null\n },\n\n transform(code, id) {\n if (!userConfig.experimental?.enableCodeSplitting) {\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(splitPrefix)) {\n return handleSplittingFile(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 handleCompilingFile(code, id)\n }\n\n return null\n },\n\n transformInclude(transformId) {\n if (!userConfig.experimental?.enableCodeSplitting) {\n return undefined\n }\n\n let id = transformId\n\n if (id.startsWith(JoinedSplitPrefix)) {\n id = id.replace(JoinedSplitPrefix, '')\n }\n\n if (\n fileIsInRoutesDirectory(id, userConfig.routesDirectory) ||\n id.includes(splitPrefix)\n ) {\n return true\n }\n return false\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n },\n },\n\n rspack(compiler) {\n ROOT = process.cwd()\n\n compiler.hooks.beforeCompile.tap(PLUGIN_NAME, (self) => {\n self.normalModuleFactory.hooks.beforeResolve.tap(\n PLUGIN_NAME,\n (resolveData: { request: string }) => {\n if (resolveData.request.includes(JoinedSplitPrefix)) {\n resolveData.request = resolveData.request.replace(\n JoinedSplitPrefix,\n '',\n )\n }\n },\n )\n })\n\n userConfig = getConfig(options, ROOT)\n },\n\n webpack(compiler) {\n ROOT = process.cwd()\n\n compiler.hooks.beforeCompile.tap(PLUGIN_NAME, (self) => {\n self.normalModuleFactory.hooks.beforeResolve.tap(\n PLUGIN_NAME,\n (resolveData: { request: string }) => {\n if (resolveData.request.includes(JoinedSplitPrefix)) {\n resolveData.request = resolveData.request.replace(\n JoinedSplitPrefix,\n '',\n )\n }\n },\n )\n })\n\n userConfig = getConfig(options, ROOT)\n\n if (\n userConfig.experimental?.enableCodeSplitting &&\n compiler.options.mode === 'production'\n ) {\n compiler.hooks.done.tap(PLUGIN_NAME, (stats) => {\n console.info('✅ ' + PLUGIN_NAME + ': code-splitting done!')\n setTimeout(() => {\n process.exit(0)\n })\n })\n }\n },\n }\n}\n"],"names":["isAbsolute","join","splitPrefix","compileCodeSplitVirtualRoute","compileCodeSplitReferenceRoute","pathToFileURL","fileURLToPath","config","getConfig"],"mappings":"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"}