@tanstack/router-plugin 1.121.0-alpha.27 → 1.121.0-alpha.28

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 (77) hide show
  1. package/dist/cjs/core/code-splitter/compilers.cjs +66 -40
  2. package/dist/cjs/core/code-splitter/compilers.cjs.map +1 -1
  3. package/dist/cjs/core/code-splitter/compilers.d.cts +3 -3
  4. package/dist/cjs/core/code-splitter/framework-options.cjs.map +1 -1
  5. package/dist/cjs/core/code-splitter/path-ids.cjs.map +1 -1
  6. package/dist/cjs/core/config.cjs +11 -1
  7. package/dist/cjs/core/config.cjs.map +1 -1
  8. package/dist/cjs/core/config.d.cts +49 -4
  9. package/dist/cjs/core/route-autoimport-plugin.cjs +52 -45
  10. package/dist/cjs/core/route-autoimport-plugin.cjs.map +1 -1
  11. package/dist/cjs/core/route-hmr-statement.cjs.map +1 -1
  12. package/dist/cjs/core/router-code-splitter-plugin.cjs +84 -64
  13. package/dist/cjs/core/router-code-splitter-plugin.cjs.map +1 -1
  14. package/dist/cjs/core/router-composed-plugin.cjs +12 -3
  15. package/dist/cjs/core/router-composed-plugin.cjs.map +1 -1
  16. package/dist/cjs/core/router-generator-plugin.cjs +27 -25
  17. package/dist/cjs/core/router-generator-plugin.cjs.map +1 -1
  18. package/dist/cjs/core/router-hmr-plugin.cjs +38 -29
  19. package/dist/cjs/core/router-hmr-plugin.cjs.map +1 -1
  20. package/dist/cjs/core/router-hmr-plugin.d.cts +1 -6
  21. package/dist/cjs/core/utils.cjs +0 -7
  22. package/dist/cjs/core/utils.cjs.map +1 -1
  23. package/dist/cjs/core/utils.d.cts +0 -1
  24. package/dist/cjs/esbuild.cjs.map +1 -1
  25. package/dist/cjs/esbuild.d.cts +20 -0
  26. package/dist/cjs/index.cjs +4 -0
  27. package/dist/cjs/index.cjs.map +1 -1
  28. package/dist/cjs/index.d.cts +1 -0
  29. package/dist/cjs/rspack.cjs.map +1 -1
  30. package/dist/cjs/rspack.d.cts +20 -0
  31. package/dist/cjs/vite.cjs.map +1 -1
  32. package/dist/cjs/vite.d.cts +25 -0
  33. package/dist/cjs/webpack.cjs.map +1 -1
  34. package/dist/cjs/webpack.d.cts +20 -0
  35. package/dist/esm/core/code-splitter/compilers.d.ts +3 -3
  36. package/dist/esm/core/code-splitter/compilers.js +66 -40
  37. package/dist/esm/core/code-splitter/compilers.js.map +1 -1
  38. package/dist/esm/core/code-splitter/framework-options.js.map +1 -1
  39. package/dist/esm/core/code-splitter/path-ids.js.map +1 -1
  40. package/dist/esm/core/config.d.ts +49 -4
  41. package/dist/esm/core/config.js +11 -1
  42. package/dist/esm/core/config.js.map +1 -1
  43. package/dist/esm/core/route-autoimport-plugin.js +53 -46
  44. package/dist/esm/core/route-autoimport-plugin.js.map +1 -1
  45. package/dist/esm/core/route-hmr-statement.js.map +1 -1
  46. package/dist/esm/core/router-code-splitter-plugin.js +86 -66
  47. package/dist/esm/core/router-code-splitter-plugin.js.map +1 -1
  48. package/dist/esm/core/router-composed-plugin.js +11 -2
  49. package/dist/esm/core/router-composed-plugin.js.map +1 -1
  50. package/dist/esm/core/router-generator-plugin.js +28 -26
  51. package/dist/esm/core/router-generator-plugin.js.map +1 -1
  52. package/dist/esm/core/router-hmr-plugin.d.ts +1 -6
  53. package/dist/esm/core/router-hmr-plugin.js +39 -30
  54. package/dist/esm/core/router-hmr-plugin.js.map +1 -1
  55. package/dist/esm/core/utils.d.ts +0 -1
  56. package/dist/esm/core/utils.js +1 -8
  57. package/dist/esm/core/utils.js.map +1 -1
  58. package/dist/esm/esbuild.d.ts +20 -0
  59. package/dist/esm/esbuild.js.map +1 -1
  60. package/dist/esm/index.d.ts +1 -0
  61. package/dist/esm/index.js +4 -0
  62. package/dist/esm/index.js.map +1 -1
  63. package/dist/esm/rspack.d.ts +20 -0
  64. package/dist/esm/vite.d.ts +25 -0
  65. package/dist/esm/vite.js.map +1 -1
  66. package/dist/esm/webpack.d.ts +20 -0
  67. package/package.json +15 -15
  68. package/src/core/code-splitter/compilers.ts +95 -60
  69. package/src/core/config.ts +25 -0
  70. package/src/core/route-autoimport-plugin.ts +59 -53
  71. package/src/core/router-code-splitter-plugin.ts +95 -80
  72. package/src/core/router-composed-plugin.ts +12 -2
  73. package/src/core/router-generator-plugin.ts +32 -32
  74. package/src/core/router-hmr-plugin.ts +42 -37
  75. package/src/core/utils.ts +0 -15
  76. package/src/global.d.ts +7 -0
  77. package/src/index.ts +5 -0
@@ -18,8 +18,20 @@ export type CodeSplittingOptions = {
18
18
  * @default [['component'],['pendingComponent'],['errorComponent'],['notFoundComponent']]
19
19
  */
20
20
  defaultBehavior?: CodeSplitGroupings;
21
+ /**
22
+ * The nodes that shall be deleted from the route.
23
+ * @default undefined
24
+ */
25
+ deleteNodes?: Array<DeletableNodes>;
26
+ /**
27
+ * @default true
28
+ */
29
+ addHmr?: boolean;
21
30
  };
22
- export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
31
+ declare const DELETABLE_NODES: readonly ["ssr"];
32
+ export declare const deletableNodesSchema: z.ZodEnum<["ssr"]>;
33
+ export type DeletableNodes = (typeof DELETABLE_NODES)[number];
34
+ export declare const configSchema: z.ZodObject<{
23
35
  target: z.ZodDefault<z.ZodOptional<z.ZodEnum<["react", "solid"]>>>;
24
36
  virtualRouteConfig: z.ZodOptional<z.ZodUnion<[z.ZodType<import('@tanstack/virtual-file-routes').VirtualRootRoute, z.ZodTypeDef, import('@tanstack/virtual-file-routes').VirtualRootRoute>, z.ZodString]>>;
25
37
  routeFilePrefix: z.ZodOptional<z.ZodString>;
@@ -33,7 +45,7 @@ export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<z.object
33
45
  indexToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
34
46
  routeToken: z.ZodDefault<z.ZodOptional<z.ZodString>>;
35
47
  pathParamsAllowedCharacters: z.ZodOptional<z.ZodArray<z.ZodEnum<[";", ":", "@", "&", "=", "+", "$", ","]>, "many">>;
36
- }, {
48
+ } & {
37
49
  generatedRouteTree: z.ZodDefault<z.ZodOptional<z.ZodString>>;
38
50
  disableTypes: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
39
51
  verboseFileRoutes: z.ZodOptional<z.ZodBoolean>;
@@ -60,10 +72,27 @@ export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<z.object
60
72
  }>>;
61
73
  plugins: z.ZodOptional<z.ZodArray<z.ZodType<import('@tanstack/router-generator').GeneratorPlugin, z.ZodTypeDef, import('@tanstack/router-generator').GeneratorPlugin>, "many">>;
62
74
  tmpDir: z.ZodDefault<z.ZodOptional<z.ZodString>>;
63
- }>, {
75
+ } & {
64
76
  enableRouteGeneration: z.ZodOptional<z.ZodBoolean>;
65
77
  codeSplittingOptions: z.ZodOptional<z.ZodType<CodeSplittingOptions, z.ZodTypeDef, CodeSplittingOptions>>;
66
- }>, "strip", z.ZodTypeAny, {
78
+ plugin: z.ZodOptional<z.ZodObject<{
79
+ vite: z.ZodOptional<z.ZodObject<{
80
+ environmentName: z.ZodOptional<z.ZodString>;
81
+ }, "strip", z.ZodTypeAny, {
82
+ environmentName?: string | undefined;
83
+ }, {
84
+ environmentName?: string | undefined;
85
+ }>>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ vite?: {
88
+ environmentName?: string | undefined;
89
+ } | undefined;
90
+ }, {
91
+ vite?: {
92
+ environmentName?: string | undefined;
93
+ } | undefined;
94
+ }>>;
95
+ }, "strip", z.ZodTypeAny, {
67
96
  target: "react" | "solid";
68
97
  routeFileIgnorePrefix: string;
69
98
  routesDirectory: string;
@@ -81,6 +110,11 @@ export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<z.object
81
110
  tmpDir: string;
82
111
  enableRouteGeneration?: boolean | undefined;
83
112
  codeSplittingOptions?: CodeSplittingOptions | undefined;
113
+ plugin?: {
114
+ vite?: {
115
+ environmentName?: string | undefined;
116
+ } | undefined;
117
+ } | undefined;
84
118
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
85
119
  routeFilePrefix?: string | undefined;
86
120
  routeFileIgnorePattern?: string | undefined;
@@ -98,6 +132,11 @@ export declare const configSchema: z.ZodObject<z.objectUtil.extendShape<z.object
98
132
  }, {
99
133
  enableRouteGeneration?: boolean | undefined;
100
134
  codeSplittingOptions?: CodeSplittingOptions | undefined;
135
+ plugin?: {
136
+ vite?: {
137
+ environmentName?: string | undefined;
138
+ } | undefined;
139
+ } | undefined;
101
140
  target?: "react" | "solid" | undefined;
102
141
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
103
142
  routeFilePrefix?: string | undefined;
@@ -146,6 +185,11 @@ export declare const getConfig: (inlineConfig: Partial<Config>, root: string) =>
146
185
  tmpDir: string;
147
186
  enableRouteGeneration?: boolean | undefined;
148
187
  codeSplittingOptions?: CodeSplittingOptions | undefined;
188
+ plugin?: {
189
+ vite?: {
190
+ environmentName?: string | undefined;
191
+ } | undefined;
192
+ } | undefined;
149
193
  virtualRouteConfig?: string | import('@tanstack/virtual-file-routes').VirtualRootRoute | undefined;
150
194
  routeFilePrefix?: string | undefined;
151
195
  routeFileIgnorePattern?: string | undefined;
@@ -164,3 +208,4 @@ export declare const getConfig: (inlineConfig: Partial<Config>, root: string) =>
164
208
  export type Config = z.infer<typeof configSchema>;
165
209
  export type ConfigInput = z.input<typeof configSchema>;
166
210
  export type ConfigOutput = z.output<typeof configSchema>;
211
+ export {};
@@ -26,57 +26,64 @@ const unpluginRouteAutoImportFactory = (options = {}) => {
26
26
  let ROOT = process.cwd();
27
27
  let userConfig = options;
28
28
  return {
29
- name: "router-autoimport-plugin",
29
+ name: "tanstack-router:autoimport",
30
30
  enforce: "pre",
31
- transform(code, id) {
32
- let routeType;
33
- if (code.includes("export const Route = createFileRoute(")) {
34
- routeType = "createFileRoute";
35
- } else if (code.includes("export const Route = createLazyFileRoute(")) {
36
- routeType = "createLazyFileRoute";
37
- } else {
38
- return null;
39
- }
40
- const routerImportPath = `@tanstack/${userConfig.target}-router`;
41
- const ast = routerUtils.parseAst({ code });
42
- let isCreateRouteFunctionImported = false;
43
- babel.traverse(ast, {
44
- Program: {
45
- enter(programPath) {
46
- programPath.traverse({
47
- ImportDeclaration(path) {
48
- const importedSpecifiers = path.node.specifiers.map(
49
- (specifier) => specifier.local.name
50
- );
51
- if (importedSpecifiers.includes(routeType) && path.node.source.value === routerImportPath) {
52
- isCreateRouteFunctionImported = true;
31
+ transform: {
32
+ filter: {
33
+ // this is necessary for webpack / rspack to avoid matching .html files
34
+ id: /\.(m|c)?(j|t)sx?$/,
35
+ code: /createFileRoute\(|createLazyFileRoute\(/
36
+ },
37
+ handler(code, id) {
38
+ if (!globalThis.TSR_ROUTES_BY_ID_MAP?.has(id)) {
39
+ return null;
40
+ }
41
+ let routeType;
42
+ if (code.includes("createFileRoute(")) {
43
+ routeType = "createFileRoute";
44
+ } else if (code.includes("createLazyFileRoute(")) {
45
+ routeType = "createLazyFileRoute";
46
+ } else {
47
+ return null;
48
+ }
49
+ const routerImportPath = `@tanstack/${userConfig.target}-router`;
50
+ const ast = routerUtils.parseAst({ code });
51
+ let isCreateRouteFunctionImported = false;
52
+ babel.traverse(ast, {
53
+ Program: {
54
+ enter(programPath) {
55
+ programPath.traverse({
56
+ ImportDeclaration(path) {
57
+ const importedSpecifiers = path.node.specifiers.map(
58
+ (specifier) => specifier.local.name
59
+ );
60
+ if (importedSpecifiers.includes(routeType) && path.node.source.value === routerImportPath) {
61
+ isCreateRouteFunctionImported = true;
62
+ }
53
63
  }
54
- }
55
- });
64
+ });
65
+ }
56
66
  }
57
- }
58
- });
59
- if (!isCreateRouteFunctionImported) {
60
- if (utils.debug) console.info("Adding autoimports to route ", id);
61
- const autoImportStatement = template__namespace.statement(
62
- `import { ${routeType} } from '${routerImportPath}'`
63
- )();
64
- ast.program.body.unshift(autoImportStatement);
65
- const result = routerUtils.generateFromAst(ast, {
66
- sourceMaps: true,
67
- filename: id,
68
- sourceFileName: id
69
67
  });
70
- if (utils.debug) {
71
- routerUtils.logDiff(code, result.code);
72
- console.log("Output:\n", result.code + "\n\n");
68
+ if (!isCreateRouteFunctionImported) {
69
+ if (utils.debug) console.info("Adding autoimports to route ", id);
70
+ const autoImportStatement = template__namespace.statement(
71
+ `import { ${routeType} } from '${routerImportPath}'`
72
+ )();
73
+ ast.program.body.unshift(autoImportStatement);
74
+ const result = routerUtils.generateFromAst(ast, {
75
+ sourceMaps: true,
76
+ filename: id,
77
+ sourceFileName: id
78
+ });
79
+ if (utils.debug) {
80
+ routerUtils.logDiff(code, result.code);
81
+ console.log("Output:\n", result.code + "\n\n");
82
+ }
83
+ return result;
73
84
  }
74
- return result;
85
+ return null;
75
86
  }
76
- return null;
77
- },
78
- transformInclude(id) {
79
- return utils.fileIsInRoutesDirectory(id, userConfig.routesDirectory);
80
87
  },
81
88
  vite: {
82
89
  configResolved(config$1) {
@@ -1 +1 @@
1
- {"version":3,"file":"route-autoimport-plugin.cjs","sources":["../../../src/core/route-autoimport-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport babel from '@babel/core'\nimport * as template from '@babel/template'\nimport { getConfig } from './config'\nimport { debug, fileIsInRoutesDirectory } from './utils'\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\n/**\n * This plugin adds imports for createFileRoute and createLazyFileRoute to the file route.\n */\nexport const unpluginRouteAutoImportFactory: 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-autoimport-plugin',\n enforce: 'pre',\n\n transform(code, id) {\n let routeType: 'createFileRoute' | 'createLazyFileRoute'\n if (code.includes('export const Route = createFileRoute(')) {\n routeType = 'createFileRoute'\n } else if (code.includes('export const Route = createLazyFileRoute(')) {\n routeType = 'createLazyFileRoute'\n } else {\n return null\n }\n\n const routerImportPath = `@tanstack/${userConfig.target}-router`\n\n const ast = parseAst({ code })\n\n let isCreateRouteFunctionImported = false as boolean\n\n babel.traverse(ast, {\n Program: {\n enter(programPath) {\n programPath.traverse({\n ImportDeclaration(path) {\n const importedSpecifiers = path.node.specifiers.map(\n (specifier) => specifier.local.name,\n )\n if (\n importedSpecifiers.includes(routeType) &&\n path.node.source.value === routerImportPath\n ) {\n isCreateRouteFunctionImported = true\n }\n },\n })\n },\n },\n })\n\n if (!isCreateRouteFunctionImported) {\n if (debug) console.info('Adding autoimports to route ', id)\n\n const autoImportStatement = template.statement(\n `import { ${routeType} } from '${routerImportPath}'`,\n )()\n ast.program.body.unshift(autoImportStatement)\n\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 return null\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":["parseAst","debug","template","generateFromAst","logDiff","fileIsInRoutesDirectory","config","getConfig"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAWO,MAAM,iCAET,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;AACd,UAAA;AACA,UAAA,KAAK,SAAS,uCAAuC,GAAG;AAC9C,oBAAA;AAAA,MACH,WAAA,KAAK,SAAS,2CAA2C,GAAG;AACzD,oBAAA;AAAA,MAAA,OACP;AACE,eAAA;AAAA,MAAA;AAGH,YAAA,mBAAmB,aAAa,WAAW,MAAM;AAEvD,YAAM,MAAMA,YAAAA,SAAS,EAAE,MAAM;AAE7B,UAAI,gCAAgC;AAEpC,YAAM,SAAS,KAAK;AAAA,QAClB,SAAS;AAAA,UACP,MAAM,aAAa;AACjB,wBAAY,SAAS;AAAA,cACnB,kBAAkB,MAAM;AAChB,sBAAA,qBAAqB,KAAK,KAAK,WAAW;AAAA,kBAC9C,CAAC,cAAc,UAAU,MAAM;AAAA,gBACjC;AAEE,oBAAA,mBAAmB,SAAS,SAAS,KACrC,KAAK,KAAK,OAAO,UAAU,kBAC3B;AACgC,kDAAA;AAAA,gBAAA;AAAA,cAClC;AAAA,YACF,CACD;AAAA,UAAA;AAAA,QACH;AAAA,MACF,CACD;AAED,UAAI,CAAC,+BAA+B;AAClC,YAAIC,MAAO,MAAA,SAAQ,KAAK,gCAAgC,EAAE;AAE1D,cAAM,sBAAsBC,oBAAS;AAAA,UACnC,YAAY,SAAS,YAAY,gBAAgB;AAAA,QAAA,EACjD;AACE,YAAA,QAAQ,KAAK,QAAQ,mBAAmB;AAEtC,cAAA,SAASC,4BAAgB,KAAK;AAAA,UAClC,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,gBAAgB;AAAA,QAAA,CACjB;AACD,YAAIF,aAAO;AACDG,8BAAA,MAAM,OAAO,IAAI;AACzB,kBAAQ,IAAI,aAAa,OAAO,OAAO,MAAM;AAAA,QAAA;AAExC,eAAA;AAAA,MAAA;AAGF,aAAA;AAAA,IACT;AAAA,IAEA,iBAAiB,IAAI;AACZ,aAAAC,8BAAwB,IAAI,WAAW,eAAe;AAAA,IAC/D;AAAA,IAEA,MAAM;AAAA,MACJ,eAAeC,UAAQ;AACrB,eAAOA,SAAO;AACD,qBAAAC,OAAAA,UAAU,SAAS,IAAI;AAAA,MAAA;AAAA,IAExC;AAAA,IAEA,SAAS;AACP,aAAO,QAAQ,IAAI;AACN,mBAAAA,OAAAA,UAAU,SAAS,IAAI;AAAA,IACtC;AAAA,IAEA,UAAU;AACR,aAAO,QAAQ,IAAI;AACN,mBAAAA,OAAAA,UAAU,SAAS,IAAI;AAAA,IAAA;AAAA,EAExC;AACF;;"}
1
+ {"version":3,"file":"route-autoimport-plugin.cjs","sources":["../../../src/core/route-autoimport-plugin.ts"],"sourcesContent":["import { generateFromAst, logDiff, parseAst } from '@tanstack/router-utils'\nimport babel from '@babel/core'\nimport * as template from '@babel/template'\nimport { getConfig } from './config'\nimport { debug } from './utils'\nimport type { Config } from './config'\nimport type { UnpluginFactory } from 'unplugin'\n\n/**\n * This plugin adds imports for createFileRoute and createLazyFileRoute to the file route.\n */\nexport const unpluginRouteAutoImportFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n return {\n name: 'tanstack-router:autoimport',\n enforce: 'pre',\n\n transform: {\n filter: {\n // this is necessary for webpack / rspack to avoid matching .html files\n id: /\\.(m|c)?(j|t)sx?$/,\n code: /createFileRoute\\(|createLazyFileRoute\\(/,\n },\n handler(code, id) {\n if (!globalThis.TSR_ROUTES_BY_ID_MAP?.has(id)) {\n return null\n }\n let routeType: 'createFileRoute' | 'createLazyFileRoute'\n if (code.includes('createFileRoute(')) {\n routeType = 'createFileRoute'\n } else if (code.includes('createLazyFileRoute(')) {\n routeType = 'createLazyFileRoute'\n } else {\n return null\n }\n\n const routerImportPath = `@tanstack/${userConfig.target}-router`\n\n const ast = parseAst({ code })\n\n let isCreateRouteFunctionImported = false as boolean\n\n babel.traverse(ast, {\n Program: {\n enter(programPath) {\n programPath.traverse({\n ImportDeclaration(path) {\n const importedSpecifiers = path.node.specifiers.map(\n (specifier) => specifier.local.name,\n )\n if (\n importedSpecifiers.includes(routeType) &&\n path.node.source.value === routerImportPath\n ) {\n isCreateRouteFunctionImported = true\n }\n },\n })\n },\n },\n })\n\n if (!isCreateRouteFunctionImported) {\n if (debug) console.info('Adding autoimports to route ', id)\n\n const autoImportStatement = template.statement(\n `import { ${routeType} } from '${routerImportPath}'`,\n )()\n ast.program.body.unshift(autoImportStatement)\n\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 return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n },\n },\n\n rspack() {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n\n webpack() {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n }\n}\n"],"names":["parseAst","debug","template","generateFromAst","logDiff","config","getConfig"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAWO,MAAM,iCAET,CAAC,UAAU,OAAO;AACpB,MAAI,OAAe,QAAQ,IAAA;AAC3B,MAAI,aAAa;AAEjB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IAET,WAAW;AAAA,MACT,QAAQ;AAAA;AAAA,QAEN,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,MAER,QAAQ,MAAM,IAAI;AAChB,YAAI,CAAC,WAAW,sBAAsB,IAAI,EAAE,GAAG;AAC7C,iBAAO;AAAA,QACT;AACA,YAAI;AACJ,YAAI,KAAK,SAAS,kBAAkB,GAAG;AACrC,sBAAY;AAAA,QACd,WAAW,KAAK,SAAS,sBAAsB,GAAG;AAChD,sBAAY;AAAA,QACd,OAAO;AACL,iBAAO;AAAA,QACT;AAEA,cAAM,mBAAmB,aAAa,WAAW,MAAM;AAEvD,cAAM,MAAMA,YAAAA,SAAS,EAAE,MAAM;AAE7B,YAAI,gCAAgC;AAEpC,cAAM,SAAS,KAAK;AAAA,UAClB,SAAS;AAAA,YACP,MAAM,aAAa;AACjB,0BAAY,SAAS;AAAA,gBACnB,kBAAkB,MAAM;AACtB,wBAAM,qBAAqB,KAAK,KAAK,WAAW;AAAA,oBAC9C,CAAC,cAAc,UAAU,MAAM;AAAA,kBAAA;AAEjC,sBACE,mBAAmB,SAAS,SAAS,KACrC,KAAK,KAAK,OAAO,UAAU,kBAC3B;AACA,oDAAgC;AAAA,kBAClC;AAAA,gBACF;AAAA,cAAA,CACD;AAAA,YACH;AAAA,UAAA;AAAA,QACF,CACD;AAED,YAAI,CAAC,+BAA+B;AAClC,cAAIC,MAAAA,MAAO,SAAQ,KAAK,gCAAgC,EAAE;AAE1D,gBAAM,sBAAsBC,oBAAS;AAAA,YACnC,YAAY,SAAS,YAAY,gBAAgB;AAAA,UAAA,EACnD;AACA,cAAI,QAAQ,KAAK,QAAQ,mBAAmB;AAE5C,gBAAM,SAASC,YAAAA,gBAAgB,KAAK;AAAA,YAClC,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,gBAAgB;AAAA,UAAA,CACjB;AACD,cAAIF,aAAO;AACTG,gCAAQ,MAAM,OAAO,IAAI;AACzB,oBAAQ,IAAI,aAAa,OAAO,OAAO,MAAM;AAAA,UAC/C;AACA,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,IAAA;AAAA,IAGF,MAAM;AAAA,MACJ,eAAeC,UAAQ;AACrB,eAAOA,SAAO;AACd,qBAAaC,OAAAA,UAAU,SAAS,IAAI;AAAA,MACtC;AAAA,IAAA;AAAA,IAGF,SAAS;AACP,aAAO,QAAQ,IAAA;AACf,mBAAaA,OAAAA,UAAU,SAAS,IAAI;AAAA,IACtC;AAAA,IAEA,UAAU;AACR,aAAO,QAAQ,IAAA;AACf,mBAAaA,OAAAA,UAAU,SAAS,IAAI;AAAA,IACtC;AAAA,EAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"route-hmr-statement.cjs","sources":["../../../src/core/route-hmr-statement.ts"],"sourcesContent":["import * as template from '@babel/template'\n\nexport const routeHmrStatement = template.statement(\n `\nif (import.meta.hot) {\n import.meta.hot.accept((newModule) => {\n if (newModule && newModule.Route && typeof newModule.Route.clone === 'function') {\n newModule.Route.clone(Route)\n }\n })\n}\n`,\n)()\n"],"names":["template"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEO,MAAM,oBAAoBA,oBAAS;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASF,EAAE;;"}
1
+ {"version":3,"file":"route-hmr-statement.cjs","sources":["../../../src/core/route-hmr-statement.ts"],"sourcesContent":["import * as template from '@babel/template'\n\nexport const routeHmrStatement = template.statement(\n `\nif (import.meta.hot) {\n import.meta.hot.accept((newModule) => {\n if (newModule && newModule.Route && typeof newModule.Route.clone === 'function') {\n newModule.Route.clone(Route)\n }\n })\n}\n`,\n)()\n"],"names":["template"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEO,MAAM,oBAAoBA,oBAAS;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASF,EAAA;;"}
@@ -7,9 +7,6 @@ const compilers = require("./code-splitter/compilers.cjs");
7
7
  const constants = require("./constants.cjs");
8
8
  const pathIds = require("./code-splitter/path-ids.cjs");
9
9
  const utils = require("./utils.cjs");
10
- function capitalizeFirst(str) {
11
- return str.charAt(0).toUpperCase() + str.slice(1);
12
- }
13
10
  const bannedBeforeExternalPlugins = [
14
11
  {
15
12
  identifier: "@react-refresh",
@@ -19,11 +16,11 @@ const bannedBeforeExternalPlugins = [
19
16
  }
20
17
  ];
21
18
  class FoundPluginInBeforeCode extends Error {
22
- constructor(externalPlugin, framework) {
23
- 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:
19
+ constructor(externalPlugin, pluginFramework) {
20
+ super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin/${pluginFramework}'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again:
24
21
  e.g.
25
22
  plugins: [
26
- TanStackRouter${capitalizeFirst(framework)}(), // Place this before ${externalPlugin.usage}
23
+ tanstackRouter(), // Place this before ${externalPlugin.usage}
27
24
  ${externalPlugin.usage},
28
25
  ]
29
26
  `);
@@ -35,14 +32,12 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
35
32
  let userConfig = options;
36
33
  const isProduction = process.env.NODE_ENV === "production";
37
34
  const getGlobalCodeSplitGroupings = () => {
38
- var _a;
39
- return ((_a = userConfig.codeSplittingOptions) == null ? void 0 : _a.defaultBehavior) || constants.defaultCodeSplitGroupings;
35
+ return userConfig.codeSplittingOptions?.defaultBehavior || constants.defaultCodeSplitGroupings;
40
36
  };
41
37
  const getShouldSplitFn = () => {
42
- var _a;
43
- return (_a = userConfig.codeSplittingOptions) == null ? void 0 : _a.splitBehavior;
38
+ return userConfig.codeSplittingOptions?.splitBehavior;
44
39
  };
45
- const handleCompilingReferenceFile = (code, id) => {
40
+ const handleCompilingReferenceFile = (code, id, generatorNodeInfo) => {
46
41
  if (utils.debug) console.info("Compiling Route: ", id);
47
42
  const fromCode = compilers.detectCodeSplitGroupingsFromRoute({
48
43
  code
@@ -58,8 +53,8 @@ ${message}`
58
53
  }
59
54
  }
60
55
  const userShouldSplitFn = getShouldSplitFn();
61
- const pluginSplitBehavior = userShouldSplitFn == null ? void 0 : userShouldSplitFn({
62
- routeId: fromCode.routeId
56
+ const pluginSplitBehavior = userShouldSplitFn?.({
57
+ routeId: generatorNodeInfo.routePath
63
58
  });
64
59
  if (pluginSplitBehavior) {
65
60
  const res = config.splitGroupingsSchema.safeParse(pluginSplitBehavior);
@@ -74,11 +69,12 @@ ${message}`
74
69
  const splitGroupings = fromCode.groupings || pluginSplitBehavior || getGlobalCodeSplitGroupings();
75
70
  const compiledReferenceRoute = compilers.compileCodeSplitReferenceRoute({
76
71
  code,
77
- runtimeEnv: isProduction ? "prod" : "dev",
78
72
  codeSplitGroupings: splitGroupings,
79
73
  targetFramework: userConfig.target,
80
74
  filename: id,
81
- id
75
+ id,
76
+ deleteNodes: new Set(userConfig.codeSplittingOptions?.deleteNodes),
77
+ addHmr: (options.codeSplittingOptions?.addHmr ?? true) && !isProduction
82
78
  });
83
79
  if (utils.debug) {
84
80
  routerUtils.logDiff(code, compiledReferenceRoute.code);
@@ -111,63 +107,87 @@ ${message}`
111
107
  }
112
108
  return result;
113
109
  };
114
- return {
115
- name: "router-code-splitter-plugin",
116
- enforce: "pre",
117
- transform(code, id) {
118
- if (!userConfig.autoCodeSplitting) {
119
- return null;
120
- }
121
- const url = node_url.pathToFileURL(id);
122
- url.searchParams.delete("v");
123
- id = node_url.fileURLToPath(url).replace(/\\/g, "/");
124
- if (id.includes(constants.tsrSplit)) {
125
- return handleCompilingVirtualFile(code, id);
126
- } else if (utils.fileIsInRoutesDirectory(id, userConfig.routesDirectory) && (code.includes("createRoute(") || code.includes("createFileRoute("))) {
127
- for (const externalPlugin of bannedBeforeExternalPlugins) {
128
- if (!externalPlugin.frameworks.includes(framework)) {
129
- continue;
110
+ const includedCode = [
111
+ "createFileRoute(",
112
+ "createRootRoute(",
113
+ "createRootRouteWithContext("
114
+ ];
115
+ return [
116
+ {
117
+ name: "tanstack-router:code-splitter:compile-reference-file",
118
+ enforce: "pre",
119
+ transform: {
120
+ filter: {
121
+ id: {
122
+ exclude: constants.tsrSplit,
123
+ // this is necessary for webpack / rspack to avoid matching .html files
124
+ include: /\.(m|c)?(j|t)sx?$/
125
+ },
126
+ code: {
127
+ include: includedCode
130
128
  }
131
- if (code.includes(externalPlugin.identifier)) {
132
- throw new FoundPluginInBeforeCode(externalPlugin, framework);
129
+ },
130
+ handler(code, id) {
131
+ const generatorFileInfo = globalThis.TSR_ROUTES_BY_ID_MAP?.get(id);
132
+ if (generatorFileInfo && includedCode.some((included) => code.includes(included))) {
133
+ for (const externalPlugin of bannedBeforeExternalPlugins) {
134
+ if (!externalPlugin.frameworks.includes(framework)) {
135
+ continue;
136
+ }
137
+ if (code.includes(externalPlugin.identifier)) {
138
+ throw new FoundPluginInBeforeCode(externalPlugin, framework);
139
+ }
140
+ }
141
+ return handleCompilingReferenceFile(code, id, generatorFileInfo);
133
142
  }
143
+ return null;
134
144
  }
135
- return handleCompilingReferenceFile(code, id);
136
- }
137
- return null;
138
- },
139
- transformInclude(id) {
140
- if (!userConfig.autoCodeSplitting) {
141
- return void 0;
142
- }
143
- if (utils.fileIsInRoutesDirectory(id, userConfig.routesDirectory) || id.includes(constants.tsrSplit)) {
144
- return true;
145
- }
146
- return false;
147
- },
148
- vite: {
149
- configResolved(config$1) {
150
- ROOT = config$1.root;
145
+ },
146
+ vite: {
147
+ configResolved(config$1) {
148
+ ROOT = config$1.root;
149
+ userConfig = config.getConfig(options, ROOT);
150
+ },
151
+ applyToEnvironment(environment) {
152
+ if (userConfig.plugin?.vite?.environmentName) {
153
+ return userConfig.plugin.vite.environmentName === environment.name;
154
+ }
155
+ return true;
156
+ }
157
+ },
158
+ rspack() {
159
+ ROOT = process.cwd();
160
+ userConfig = config.getConfig(options, ROOT);
161
+ },
162
+ webpack(compiler) {
163
+ ROOT = process.cwd();
151
164
  userConfig = config.getConfig(options, ROOT);
165
+ if (compiler.options.mode === "production") {
166
+ compiler.hooks.done.tap(PLUGIN_NAME, () => {
167
+ console.info("✅ " + PLUGIN_NAME + ": code-splitting done!");
168
+ setTimeout(() => {
169
+ process.exit(0);
170
+ });
171
+ });
172
+ }
152
173
  }
153
174
  },
154
- rspack(_compiler) {
155
- ROOT = process.cwd();
156
- userConfig = config.getConfig(options, ROOT);
157
- },
158
- webpack(compiler) {
159
- ROOT = process.cwd();
160
- userConfig = config.getConfig(options, ROOT);
161
- if (userConfig.autoCodeSplitting && compiler.options.mode === "production") {
162
- compiler.hooks.done.tap(PLUGIN_NAME, () => {
163
- console.info("" + PLUGIN_NAME + ": code-splitting done!");
164
- setTimeout(() => {
165
- process.exit(0);
166
- });
167
- });
175
+ {
176
+ name: "tanstack-router:code-splitter:compile-virtual-file",
177
+ enforce: "pre",
178
+ transform: {
179
+ filter: {
180
+ id: /tsr-split/
181
+ },
182
+ handler(code, id) {
183
+ const url = node_url.pathToFileURL(id);
184
+ url.searchParams.delete("v");
185
+ id = node_url.fileURLToPath(url).replace(/\\/g, "/");
186
+ return handleCompilingVirtualFile(code, id);
187
+ }
168
188
  }
169
189
  }
170
- };
190
+ ];
171
191
  };
172
192
  exports.unpluginRouterCodeSplitterFactory = unpluginRouterCodeSplitterFactory;
173
193
  //# sourceMappingURL=router-code-splitter-plugin.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"router-code-splitter-plugin.cjs","sources":["../../../src/core/router-code-splitter-plugin.ts"],"sourcesContent":["/**\n * It is important to familiarize yourself with how the code-splitting works in this plugin.\n * https://github.com/TanStack/router/pull/3355\n */\n\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\nimport { getConfig, splitGroupingsSchema } from './config'\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug, 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":["defaultCodeSplitGroupings","debug","detectCodeSplitGroupingsFromRoute","splitGroupingsSchema","compileCodeSplitReferenceRoute","logDiff","tsrSplit","decodeIdentifier","splitRouteIdentNodes","compileCodeSplitVirtualRoute","pathToFileURL","fileURLToPath","fileIsInRoutesDirectory","config","getConfig"],"mappings":"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"}
1
+ {"version":3,"file":"router-code-splitter-plugin.cjs","sources":["../../../src/core/router-code-splitter-plugin.ts"],"sourcesContent":["/**\n * It is important to familiarize yourself with how the code-splitting works in this plugin.\n * https://github.com/TanStack/router/pull/3355\n */\n\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { logDiff } from '@tanstack/router-utils'\nimport { getConfig, splitGroupingsSchema } from './config'\nimport {\n compileCodeSplitReferenceRoute,\n compileCodeSplitVirtualRoute,\n detectCodeSplitGroupingsFromRoute,\n} from './code-splitter/compilers'\nimport {\n defaultCodeSplitGroupings,\n splitRouteIdentNodes,\n tsrSplit,\n} from './constants'\nimport { decodeIdentifier } from './code-splitter/path-ids'\nimport { debug } from './utils'\nimport type { CodeSplitGroupings, SplitRouteIdentNodes } from './constants'\nimport type { GetRoutesByFileMapResultValue } from '@tanstack/router-generator'\nimport type { Config } from './config'\nimport type {\n UnpluginContextMeta,\n UnpluginFactory,\n TransformResult as UnpluginTransformResult,\n} from 'unplugin'\n\ntype BannedBeforeExternalPlugin = {\n identifier: string\n pkg: string\n usage: string\n frameworks: Array<UnpluginContextMeta['framework']>\n}\n\nconst bannedBeforeExternalPlugins: Array<BannedBeforeExternalPlugin> = [\n {\n identifier: '@react-refresh',\n pkg: '@vitejs/plugin-react',\n usage: 'viteReact()',\n frameworks: ['vite'],\n },\n]\n\nclass FoundPluginInBeforeCode extends Error {\n constructor(\n externalPlugin: BannedBeforeExternalPlugin,\n pluginFramework: string,\n ) {\n super(`We detected that the '${externalPlugin.pkg}' was passed before '@tanstack/router-plugin/${pluginFramework}'. Please make sure that '@tanstack/router-plugin' is passed before '${externalPlugin.pkg}' and try again: \ne.g.\nplugins: [\n tanstackRouter(), // Place this before ${externalPlugin.usage}\n ${externalPlugin.usage},\n]\n`)\n }\n}\n\nconst PLUGIN_NAME = 'unplugin:router-code-splitter'\n\nexport const unpluginRouterCodeSplitterFactory: UnpluginFactory<\n Partial<Config> | undefined\n> = (options = {}, { framework }) => {\n let ROOT: string = process.cwd()\n let userConfig = options as Config\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n const getGlobalCodeSplitGroupings = () => {\n return (\n userConfig.codeSplittingOptions?.defaultBehavior ||\n defaultCodeSplitGroupings\n )\n }\n const getShouldSplitFn = () => {\n return userConfig.codeSplittingOptions?.splitBehavior\n }\n\n const handleCompilingReferenceFile = (\n code: string,\n id: string,\n generatorNodeInfo: GetRoutesByFileMapResultValue,\n ): UnpluginTransformResult => {\n if (debug) console.info('Compiling Route: ', id)\n\n const fromCode = detectCodeSplitGroupingsFromRoute({\n code,\n })\n\n if (fromCode.groupings) {\n const res = splitGroupingsSchema.safeParse(fromCode.groupings)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const userShouldSplitFn = getShouldSplitFn()\n\n const pluginSplitBehavior = userShouldSplitFn?.({\n routeId: generatorNodeInfo.routePath,\n }) as CodeSplitGroupings | undefined\n\n if (pluginSplitBehavior) {\n const res = splitGroupingsSchema.safeParse(pluginSplitBehavior)\n if (!res.success) {\n const message = res.error.errors.map((e) => e.message).join('. ')\n throw new Error(\n `The groupings returned when using \\`splitBehavior\\` for the route \"${id}\" are invalid.\\n${message}`,\n )\n }\n }\n\n const splitGroupings: CodeSplitGroupings =\n fromCode.groupings || pluginSplitBehavior || getGlobalCodeSplitGroupings()\n\n const compiledReferenceRoute = compileCodeSplitReferenceRoute({\n code,\n codeSplitGroupings: splitGroupings,\n targetFramework: userConfig.target,\n filename: id,\n id,\n deleteNodes: new Set(userConfig.codeSplittingOptions?.deleteNodes),\n addHmr: (options.codeSplittingOptions?.addHmr ?? true) && !isProduction,\n })\n\n if (debug) {\n logDiff(code, compiledReferenceRoute.code)\n console.log('Output:\\n', compiledReferenceRoute.code + '\\n\\n')\n }\n\n return compiledReferenceRoute\n }\n\n const handleCompilingVirtualFile = (\n code: string,\n id: string,\n ): UnpluginTransformResult => {\n if (debug) console.info('Splitting Route: ', id)\n\n const [_, ...pathnameParts] = id.split('?')\n\n const searchParams = new URLSearchParams(pathnameParts.join('?'))\n const splitValue = searchParams.get(tsrSplit)\n\n if (!splitValue) {\n throw new Error(\n `The split value for the virtual route \"${id}\" was not found.`,\n )\n }\n\n const rawGrouping = decodeIdentifier(splitValue)\n const grouping = [...new Set(rawGrouping)].filter((p) =>\n splitRouteIdentNodes.includes(p as any),\n ) as Array<SplitRouteIdentNodes>\n\n const result = compileCodeSplitVirtualRoute({\n code,\n filename: id,\n splitTargets: grouping,\n })\n\n if (debug) {\n logDiff(code, result.code)\n console.log('Output:\\n', result.code + '\\n\\n')\n }\n\n return result\n }\n\n const includedCode = [\n 'createFileRoute(',\n 'createRootRoute(',\n 'createRootRouteWithContext(',\n ]\n return [\n {\n name: 'tanstack-router:code-splitter:compile-reference-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: {\n exclude: tsrSplit,\n // this is necessary for webpack / rspack to avoid matching .html files\n include: /\\.(m|c)?(j|t)sx?$/,\n },\n code: {\n include: includedCode,\n },\n },\n handler(code, id) {\n const generatorFileInfo = globalThis.TSR_ROUTES_BY_ID_MAP?.get(id)\n if (\n generatorFileInfo &&\n includedCode.some((included) => code.includes(included))\n ) {\n for (const externalPlugin of bannedBeforeExternalPlugins) {\n if (!externalPlugin.frameworks.includes(framework)) {\n continue\n }\n\n if (code.includes(externalPlugin.identifier)) {\n throw new FoundPluginInBeforeCode(externalPlugin, framework)\n }\n }\n\n return handleCompilingReferenceFile(code, id, generatorFileInfo)\n }\n\n return null\n },\n },\n\n vite: {\n configResolved(config) {\n ROOT = config.root\n userConfig = getConfig(options, ROOT)\n },\n applyToEnvironment(environment) {\n if (userConfig.plugin?.vite?.environmentName) {\n return userConfig.plugin.vite.environmentName === environment.name\n }\n return true\n },\n },\n\n rspack() {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n },\n\n webpack(compiler) {\n ROOT = process.cwd()\n userConfig = getConfig(options, ROOT)\n\n if (compiler.options.mode === 'production') {\n compiler.hooks.done.tap(PLUGIN_NAME, () => {\n console.info('✅ ' + PLUGIN_NAME + ': code-splitting done!')\n setTimeout(() => {\n process.exit(0)\n })\n })\n }\n },\n },\n {\n name: 'tanstack-router:code-splitter:compile-virtual-file',\n enforce: 'pre',\n\n transform: {\n filter: {\n id: /tsr-split/,\n },\n handler(code, id) {\n const url = pathToFileURL(id)\n url.searchParams.delete('v')\n id = fileURLToPath(url).replace(/\\\\/g, '/')\n return handleCompilingVirtualFile(code, id)\n },\n },\n },\n ]\n}\n"],"names":["defaultCodeSplitGroupings","debug","detectCodeSplitGroupingsFromRoute","splitGroupingsSchema","compileCodeSplitReferenceRoute","logDiff","tsrSplit","decodeIdentifier","splitRouteIdentNodes","compileCodeSplitVirtualRoute","config","getConfig","pathToFileURL","fileURLToPath"],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const routerGenerator = require("@tanstack/router-generator");
3
4
  const routerGeneratorPlugin = require("./router-generator-plugin.cjs");
4
5
  const routerCodeSplitterPlugin = require("./router-code-splitter-plugin.cjs");
5
6
  const routerHmrPlugin = require("./router-hmr-plugin.cjs");
6
7
  const routeAutoimportPlugin = require("./route-autoimport-plugin.cjs");
7
8
  const unpluginRouterComposedFactory = (options = {}, meta) => {
9
+ const ROOT = process.cwd();
10
+ const userConfig = routerGenerator.getConfig(options, ROOT);
8
11
  const getPlugin = (pluginFactory) => {
9
12
  const plugin = pluginFactory(options, meta);
10
13
  if (!Array.isArray(plugin)) {
@@ -12,12 +15,18 @@ const unpluginRouterComposedFactory = (options = {}, meta) => {
12
15
  }
13
16
  return plugin;
14
17
  };
15
- const routerGenerator = getPlugin(routerGeneratorPlugin.unpluginRouterGeneratorFactory);
18
+ const routerGenerator$1 = getPlugin(routerGeneratorPlugin.unpluginRouterGeneratorFactory);
16
19
  const routerCodeSplitter = getPlugin(routerCodeSplitterPlugin.unpluginRouterCodeSplitterFactory);
17
20
  const routeAutoImport = getPlugin(routeAutoimportPlugin.unpluginRouteAutoImportFactory);
18
- const result = [...routerGenerator, ...routerCodeSplitter, ...routeAutoImport];
21
+ const result = [...routerGenerator$1];
22
+ if (userConfig.autoCodeSplitting) {
23
+ result.push(...routerCodeSplitter);
24
+ }
25
+ if (userConfig.verboseFileRoutes === false) {
26
+ result.push(...routeAutoImport);
27
+ }
19
28
  const isProduction = process.env.NODE_ENV === "production";
20
- if (!isProduction && !options.autoCodeSplitting) {
29
+ if (!isProduction && !userConfig.autoCodeSplitting) {
21
30
  const routerHmr = getPlugin(routerHmrPlugin.unpluginRouterHmrFactory);
22
31
  result.push(...routerHmr);
23
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router-composed-plugin.cjs","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":["unpluginRouterGeneratorFactory","unpluginRouterCodeSplitterFactory","unpluginRouteAutoImportFactory","unpluginRouterHmrFactory"],"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,UAAUA,oDAA8B;AAC1D,QAAA,qBAAqB,UAAUC,0DAAiC;AAChE,QAAA,kBAAkB,UAAUC,oDAA8B;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,UAAUC,wCAAwB;AAC7C,WAAA,KAAK,GAAG,SAAS;AAAA,EAAA;AAEnB,SAAA;AACT;;"}
1
+ {"version":3,"file":"router-composed-plugin.cjs","sources":["../../../src/core/router-composed-plugin.ts"],"sourcesContent":["import { getConfig } from '@tanstack/router-generator'\nimport { unpluginRouterGeneratorFactory } from './router-generator-plugin'\nimport { unpluginRouterCodeSplitterFactory } from './router-code-splitter-plugin'\nimport { unpluginRouterHmrFactory } from './router-hmr-plugin'\nimport { 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 ROOT: string = process.cwd()\n const userConfig = getConfig(options, ROOT)\n\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]\n if (userConfig.autoCodeSplitting) {\n result.push(...routerCodeSplitter)\n }\n if (userConfig.verboseFileRoutes === false) {\n result.push(...routeAutoImport)\n }\n\n const isProduction = process.env.NODE_ENV === 'production'\n\n if (!isProduction && !userConfig.autoCodeSplitting) {\n const routerHmr = getPlugin(unpluginRouterHmrFactory)\n result.push(...routerHmr)\n }\n return result\n}\n"],"names":["getConfig","routerGenerator","unpluginRouterGeneratorFactory","unpluginRouterCodeSplitterFactory","unpluginRouteAutoImportFactory","unpluginRouterHmrFactory"],"mappings":";;;;;;;AAQO,MAAM,gCAET,CAAC,UAAU,CAAA,GAAI,SAAS;AAC1B,QAAM,OAAe,QAAQ,IAAA;AAC7B,QAAM,aAAaA,gBAAAA,UAAU,SAAS,IAAI;AAE1C,QAAM,YAAY,CAAC,kBAAoD;AACrE,UAAM,SAAS,cAAc,SAAS,IAAI;AAC1C,QAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,aAAO,CAAC,MAAM;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAEA,QAAMC,oBAAkB,UAAUC,oDAA8B;AAChE,QAAM,qBAAqB,UAAUC,0DAAiC;AACtE,QAAM,kBAAkB,UAAUC,oDAA8B;AAEhE,QAAM,SAAS,CAAC,GAAGH,iBAAe;AAClC,MAAI,WAAW,mBAAmB;AAChC,WAAO,KAAK,GAAG,kBAAkB;AAAA,EACnC;AACA,MAAI,WAAW,sBAAsB,OAAO;AAC1C,WAAO,KAAK,GAAG,eAAe;AAAA,EAChC;AAEA,QAAM,eAAe,QAAQ,IAAI,aAAa;AAE9C,MAAI,CAAC,gBAAgB,CAAC,WAAW,mBAAmB;AAClD,UAAM,YAAY,UAAUI,wCAAwB;AACpD,WAAO,KAAK,GAAG,SAAS;AAAA,EAC1B;AACA,SAAO;AACT;;"}