@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.cjs","sources":["../../../../src/core/code-splitter/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;;"}
@@ -5,7 +5,7 @@ const babel = require("@babel/core");
5
5
  const _generate = require("@babel/generator");
6
6
  const template = require("@babel/template");
7
7
  const babelDeadCodeElimination = require("babel-dead-code-elimination");
8
- const constants = require("./constants.cjs");
8
+ const constants = require("../constants.cjs");
9
9
  const ast = require("./ast.cjs");
10
10
  function _interopNamespaceDefault(e) {
11
11
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compilers.cjs","sources":["../../../../src/core/code-splitter/compilers.ts"],"sourcesContent":["import * as t from '@babel/types'\nimport babel from '@babel/core'\nimport _generate from '@babel/generator'\nimport * as template from '@babel/template'\nimport { deadCodeElimination } from 'babel-dead-code-elimination'\n\nimport { splitPrefix } from '../constants'\nimport { parseAst } from './ast'\nimport type { ParseAstOptions } from './ast'\n\n// Babel is a CJS package and uses `default` as named binding (`exports.default =`).\n// https://github.com/babel/babel/issues/15269.\nlet generate = (_generate as any)['default'] as typeof _generate\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nif (!generate) {\n generate = _generate\n}\n\ntype SplitModulesById = Record<\n string,\n { id: string; node: t.FunctionExpression }\n>\n\ninterface State {\n filename: string\n opts: {\n minify: boolean\n root: string\n }\n imported: Record<string, boolean>\n refs: Set<any>\n serverIndex: number\n splitIndex: number\n splitModulesById: SplitModulesById\n}\n\nexport function compileCodeSplitReferenceRoute(opts: ParseAstOptions) {\n const ast = parseAst(opts)\n\n if (!ast) {\n throw new Error(\n `Failed to compile ast for compileCodeSplitReferenceRoute() for the file: ${opts.filename}`,\n )\n }\n\n babel.traverse(ast, {\n Program: {\n enter(programPath, programState) {\n const state = programState as unknown as State\n\n const splitUrl = `${splitPrefix}:${opts.filename}?${splitPrefix}`\n\n /**\n * If the component for the route is being imported from\n * another file, this is to track the path to that file\n * the path itself doesn't matter, we just need to keep\n * track of it so that we can remove it from the imports\n * list if it's not being used like:\n *\n * `import '../shared/imported'`\n */\n let existingCompImportPath: string | null = null\n let existingLoaderImportPath: string | null = null\n\n programPath.traverse(\n {\n CallExpression: (path) => {\n if (!t.isIdentifier(path.node.callee)) {\n return\n }\n\n if (\n !(\n path.node.callee.name === 'createRoute' ||\n path.node.callee.name === 'createFileRoute'\n )\n ) {\n return\n }\n\n if (t.isCallExpression(path.parentPath.node)) {\n const options = resolveIdentifier(\n path,\n path.parentPath.node.arguments[0],\n )\n\n let found = false\n\n const hasImportedOrDefinedIdentifier = (name: string) => {\n return programPath.scope.hasBinding(name)\n }\n\n if (t.isObjectExpression(options)) {\n options.properties.forEach((prop) => {\n if (t.isObjectProperty(prop)) {\n if (t.isIdentifier(prop.key)) {\n if (prop.key.name === 'component') {\n const value = prop.value\n\n if (t.isIdentifier(value)) {\n existingCompImportPath =\n getImportSpecifierAndPathFromLocalName(\n programPath,\n value.name,\n ).path\n\n removeIdentifierLiteral(path, value)\n }\n\n // Prepend the import statement to the program along with the importer function\n // Check to see if lazyRouteComponent is already imported before attempting\n // to import it again\n\n if (\n !hasImportedOrDefinedIdentifier(\n 'lazyRouteComponent',\n )\n ) {\n programPath.unshiftContainer('body', [\n template.statement(\n `import { lazyRouteComponent } from '@tanstack/react-router'`,\n )(),\n ])\n }\n\n if (\n !hasImportedOrDefinedIdentifier(\n '$$splitComponentImporter',\n )\n ) {\n programPath.unshiftContainer('body', [\n template.statement(\n `const $$splitComponentImporter = () => import('${splitUrl}')`,\n )(),\n ])\n }\n\n prop.value = template.expression(\n `lazyRouteComponent($$splitComponentImporter, 'component')`,\n )()\n\n programPath.pushContainer('body', [\n template.statement(\n `function DummyComponent() { return null }`,\n )(),\n ])\n\n found = true\n } else if (prop.key.name === 'loader') {\n const value = prop.value\n\n if (t.isIdentifier(value)) {\n existingLoaderImportPath =\n getImportSpecifierAndPathFromLocalName(\n programPath,\n value.name,\n ).path\n\n removeIdentifierLiteral(path, value)\n }\n\n // Prepend the import statement to the program along with the importer function\n\n if (!hasImportedOrDefinedIdentifier('lazyFn')) {\n programPath.unshiftContainer('body', [\n template.smart(\n `import { lazyFn } from '@tanstack/react-router'`,\n )() as t.Statement,\n ])\n }\n\n if (\n !hasImportedOrDefinedIdentifier(\n '$$splitLoaderImporter',\n )\n ) {\n programPath.unshiftContainer('body', [\n template.statement(\n `const $$splitLoaderImporter = () => import('${splitUrl}')`,\n )(),\n ])\n }\n\n prop.value = template.expression(\n `lazyFn($$splitLoaderImporter, 'loader')`,\n )()\n\n found = true\n }\n }\n }\n\n programPath.scope.crawl()\n })\n }\n\n if (found as boolean) {\n programPath.pushContainer('body', [\n template.statement(`function TSR_Dummy_Component() {}`)(),\n ])\n }\n }\n },\n },\n state,\n )\n\n /**\n * If the component for the route is being imported,\n * and it's not being used, remove the import statement\n * from the program, by checking that the import has no\n * specifiers\n */\n if (\n (existingCompImportPath as string | null) ||\n (existingLoaderImportPath as string | null)\n ) {\n programPath.traverse({\n ImportDeclaration(path) {\n if (path.node.specifiers.length > 0) return\n if (\n path.node.source.value === existingCompImportPath ||\n path.node.source.value === existingLoaderImportPath\n ) {\n path.remove()\n }\n },\n })\n }\n },\n },\n })\n\n deadCodeElimination(ast)\n\n return generate(ast, {\n sourceMaps: true,\n minified: process.env.NODE_ENV === 'production',\n })\n}\n\nconst splitNodeTypes = ['component', 'loader'] as const\ntype SplitNodeType = (typeof splitNodeTypes)[number]\n\nexport function compileCodeSplitVirtualRoute(opts: ParseAstOptions) {\n const ast = parseAst(opts)\n\n if (!ast) {\n throw new Error(\n `Failed to compile ast for compileCodeSplitVirtualRoute() for the file: ${opts.filename}`,\n )\n }\n\n babel.traverse(ast, {\n Program: {\n enter(programPath, programState) {\n const state = programState as unknown as State\n\n const splitNodesByType: Record<SplitNodeType, t.Node | undefined> = {\n component: undefined,\n loader: undefined,\n }\n\n // Find the node\n programPath.traverse(\n {\n CallExpression: (path) => {\n if (!t.isIdentifier(path.node.callee)) {\n return\n }\n\n if (\n !(\n path.node.callee.name === 'createRoute' ||\n path.node.callee.name === 'createFileRoute'\n )\n ) {\n return\n }\n\n if (t.isCallExpression(path.parentPath.node)) {\n const options = resolveIdentifier(\n path,\n path.parentPath.node.arguments[0],\n )\n\n if (t.isObjectExpression(options)) {\n options.properties.forEach((prop) => {\n if (t.isObjectProperty(prop)) {\n splitNodeTypes.forEach((type) => {\n if (t.isIdentifier(prop.key)) {\n if (prop.key.name === type) {\n splitNodesByType[type] = prop.value\n }\n }\n })\n }\n })\n\n // Remove all of the options\n options.properties = []\n }\n }\n },\n },\n state,\n )\n\n splitNodeTypes.forEach((splitType) => {\n let splitNode = splitNodesByType[splitType]\n\n if (!splitNode) {\n return\n }\n\n while (t.isIdentifier(splitNode)) {\n const binding = programPath.scope.getBinding(splitNode.name)\n splitNode = binding?.path.node\n }\n\n // Add the node to the program\n if (splitNode) {\n if (t.isFunctionDeclaration(splitNode)) {\n programPath.pushContainer(\n 'body',\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(splitType),\n t.functionExpression(\n splitNode.id || null, // Anonymize the function expression\n splitNode.params,\n splitNode.body,\n splitNode.generator,\n splitNode.async,\n ),\n ),\n ]),\n )\n } else if (\n t.isFunctionExpression(splitNode) ||\n t.isArrowFunctionExpression(splitNode)\n ) {\n programPath.pushContainer(\n 'body',\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(splitType),\n splitNode as any,\n ),\n ]),\n )\n } else if (\n t.isImportSpecifier(splitNode) ||\n t.isImportDefaultSpecifier(splitNode)\n ) {\n programPath.pushContainer(\n 'body',\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(splitType),\n splitNode.local,\n ),\n ]),\n )\n } else if (t.isCallExpression(splitNode)) {\n const outputSplitNodeCode = generate(splitNode).code\n const splitNodeAst = babel.parse(outputSplitNodeCode)\n\n if (!splitNodeAst) {\n throw new Error(\n `Failed to parse the generated code for \"${splitType}\" in the node type \"${splitNode.type}\"`,\n )\n }\n\n const statement = splitNodeAst.program.body[0]\n\n if (!statement) {\n throw new Error(\n `Failed to parse the generated code for \"${splitType}\" in the node type \"${splitNode.type}\" as no statement was found in the program body`,\n )\n }\n\n if (t.isExpressionStatement(statement)) {\n const expression = statement.expression\n programPath.pushContainer(\n 'body',\n t.variableDeclaration('const', [\n t.variableDeclarator(t.identifier(splitType), expression),\n ]),\n )\n } else {\n throw new Error(\n `Unexpected expression type encounter for \"${splitType}\" in the node type \"${splitNode.type}\"`,\n )\n }\n } else {\n console.info('Unexpected splitNode type:', splitNode)\n throw new Error(`Unexpected splitNode type ☝️: ${splitNode.type}`)\n }\n }\n\n // If the splitNode exists at the top of the program\n // then we need to remove that copy\n programPath.node.body = programPath.node.body.filter((node) => {\n return node !== splitNode\n })\n\n // Export the node\n programPath.pushContainer('body', [\n t.exportNamedDeclaration(null, [\n t.exportSpecifier(\n t.identifier(splitType),\n t.identifier(splitType),\n ),\n ]),\n ])\n })\n\n // convert exports to imports from the original file\n programPath.traverse({\n ExportNamedDeclaration(path) {\n // e.g. export const x = 1 or export { x }\n // becomes\n // import { x } from '${opts.id}'\n\n if (path.node.declaration) {\n if (t.isVariableDeclaration(path.node.declaration)) {\n path.replaceWith(\n t.importDeclaration(\n path.node.declaration.declarations.map((decl) =>\n t.importSpecifier(\n t.identifier((decl.id as any).name),\n t.identifier((decl.id as any).name),\n ),\n ),\n t.stringLiteral(\n opts.filename.split(`?${splitPrefix}`)[0] as string,\n ),\n ),\n )\n }\n }\n },\n })\n },\n },\n })\n\n deadCodeElimination(ast)\n\n return generate(ast, {\n sourceMaps: true,\n minified: process.env.NODE_ENV === 'production',\n })\n}\n\nfunction getImportSpecifierAndPathFromLocalName(\n programPath: babel.NodePath<t.Program>,\n name: string,\n): {\n specifier:\n | t.ImportSpecifier\n | t.ImportDefaultSpecifier\n | t.ImportNamespaceSpecifier\n | null\n path: string | null\n} {\n let specifier:\n | t.ImportSpecifier\n | t.ImportDefaultSpecifier\n | t.ImportNamespaceSpecifier\n | null = null\n let path: string | null = null\n\n programPath.traverse({\n ImportDeclaration(importPath) {\n const found = importPath.node.specifiers.find(\n (targetSpecifier) => targetSpecifier.local.name === name,\n )\n if (found) {\n specifier = found\n path = importPath.node.source.value\n }\n },\n })\n\n return { specifier, path }\n}\n\n// Reusable function to get literal value or resolve variable to literal\nfunction resolveIdentifier(path: any, node: any) {\n if (t.isIdentifier(node)) {\n const binding = path.scope.getBinding(node.name)\n if (\n binding\n // && binding.kind === 'const'\n ) {\n const declarator = binding.path.node\n if (t.isObjectExpression(declarator.init)) {\n return declarator.init\n } else if (t.isFunctionDeclaration(declarator.init)) {\n return declarator.init\n }\n }\n return undefined\n }\n\n return node\n}\n\nfunction removeIdentifierLiteral(path: any, node: any) {\n if (t.isIdentifier(node)) {\n const binding = path.scope.getBinding(node.name)\n if (binding) {\n binding.path.remove()\n }\n }\n}\n"],"names":["ast","parseAst","splitPrefix","t","template","deadCodeElimination"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAI,WAAY,UAAkB,SAAS;AAG3C,IAAI,CAAC,UAAU;AACF,aAAA;AACb;AAoBO,SAAS,+BAA+B,MAAuB;AAC9D,QAAAA,QAAMC,aAAS,IAAI;AAEzB,MAAI,CAACD,OAAK;AACR,UAAM,IAAI;AAAA,MACR,4EAA4E,KAAK,QAAQ;AAAA,IAAA;AAAA,EAE7F;AAEA,QAAM,SAASA,OAAK;AAAA,IAClB,SAAS;AAAA,MACP,MAAM,aAAa,cAAc;AAC/B,cAAM,QAAQ;AAEd,cAAM,WAAW,GAAGE,UAAAA,WAAW,IAAI,KAAK,QAAQ,IAAIA,UAAW,WAAA;AAW/D,YAAI,yBAAwC;AAC5C,YAAI,2BAA0C;AAElC,oBAAA;AAAA,UACV;AAAA,YACE,gBAAgB,CAAC,SAAS;AACxB,kBAAI,CAACC,aAAE,aAAa,KAAK,KAAK,MAAM,GAAG;AACrC;AAAA,cACF;AAGE,kBAAA,EACE,KAAK,KAAK,OAAO,SAAS,iBAC1B,KAAK,KAAK,OAAO,SAAS,oBAE5B;AACA;AAAA,cACF;AAEA,kBAAIA,aAAE,iBAAiB,KAAK,WAAW,IAAI,GAAG;AAC5C,sBAAM,UAAU;AAAA,kBACd;AAAA,kBACA,KAAK,WAAW,KAAK,UAAU,CAAC;AAAA,gBAAA;AAGlC,oBAAI,QAAQ;AAEN,sBAAA,iCAAiC,CAAC,SAAiB;AAChD,yBAAA,YAAY,MAAM,WAAW,IAAI;AAAA,gBAAA;AAGtC,oBAAAA,aAAE,mBAAmB,OAAO,GAAG;AACzB,0BAAA,WAAW,QAAQ,CAAC,SAAS;AAC/B,wBAAAA,aAAE,iBAAiB,IAAI,GAAG;AAC5B,0BAAIA,aAAE,aAAa,KAAK,GAAG,GAAG;AACxB,4BAAA,KAAK,IAAI,SAAS,aAAa;AACjC,gCAAM,QAAQ,KAAK;AAEf,8BAAAA,aAAE,aAAa,KAAK,GAAG;AAEvB,qDAAA;AAAA,8BACE;AAAA,8BACA,MAAM;AAAA,4BACN,EAAA;AAEJ,oDAAwB,MAAM,KAAK;AAAA,0BACrC;AAMA,8BACE,CAAC;AAAA,4BACC;AAAA,0BAAA,GAEF;AACA,wCAAY,iBAAiB,QAAQ;AAAA,8BACnCC,oBAAS;AAAA,gCACP;AAAA,8BAAA,EACA;AAAA,4BAAA,CACH;AAAA,0BACH;AAEA,8BACE,CAAC;AAAA,4BACC;AAAA,0BAAA,GAEF;AACA,wCAAY,iBAAiB,QAAQ;AAAA,8BACnCA,oBAAS;AAAA,gCACP,kDAAkD,QAAQ;AAAA,8BAAA,EAC1D;AAAA,4BAAA,CACH;AAAA,0BACH;AAEA,+BAAK,QAAQA,oBAAS;AAAA,4BACpB;AAAA,0BAAA;AAGF,sCAAY,cAAc,QAAQ;AAAA,4BAChCA,oBAAS;AAAA,8BACP;AAAA,4BAAA,EACA;AAAA,0BAAA,CACH;AAEO,kCAAA;AAAA,wBACC,WAAA,KAAK,IAAI,SAAS,UAAU;AACrC,gCAAM,QAAQ,KAAK;AAEf,8BAAAD,aAAE,aAAa,KAAK,GAAG;AAEvB,uDAAA;AAAA,8BACE;AAAA,8BACA,MAAM;AAAA,4BACN,EAAA;AAEJ,oDAAwB,MAAM,KAAK;AAAA,0BACrC;AAII,8BAAA,CAAC,+BAA+B,QAAQ,GAAG;AAC7C,wCAAY,iBAAiB,QAAQ;AAAA,8BACnCC,oBAAS;AAAA,gCACP;AAAA,8BAAA,EACA;AAAA,4BAAA,CACH;AAAA,0BACH;AAEA,8BACE,CAAC;AAAA,4BACC;AAAA,0BAAA,GAEF;AACA,wCAAY,iBAAiB,QAAQ;AAAA,8BACnCA,oBAAS;AAAA,gCACP,+CAA+C,QAAQ;AAAA,8BAAA,EACvD;AAAA,4BAAA,CACH;AAAA,0BACH;AAEA,+BAAK,QAAQA,oBAAS;AAAA,4BACpB;AAAA,0BAAA;AAGM,kCAAA;AAAA,wBACV;AAAA,sBACF;AAAA,oBACF;AAEA,gCAAY,MAAM;kBAAM,CACzB;AAAA,gBACH;AAEA,oBAAI,OAAkB;AACpB,8BAAY,cAAc,QAAQ;AAAA,oBAChCA,oBAAS,UAAU,mCAAmC,EAAE;AAAA,kBAAA,CACzD;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QAAA;AASF,YACG,0BACA,0BACD;AACA,sBAAY,SAAS;AAAA,YACnB,kBAAkB,MAAM;AACtB,kBAAI,KAAK,KAAK,WAAW,SAAS,EAAG;AAEnC,kBAAA,KAAK,KAAK,OAAO,UAAU,0BAC3B,KAAK,KAAK,OAAO,UAAU,0BAC3B;AACA,qBAAK,OAAO;AAAA,cACd;AAAA,YACF;AAAA,UAAA,CACD;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EAAA,CACD;AAEDC,2BAAA,oBAAoBL,KAAG;AAEvB,SAAO,SAASA,OAAK;AAAA,IACnB,YAAY;AAAA,IACZ,UAAU,QAAQ,IAAI,aAAa;AAAA,EAAA,CACpC;AACH;AAEA,MAAM,iBAAiB,CAAC,aAAa,QAAQ;AAGtC,SAAS,6BAA6B,MAAuB;AAC5D,QAAAA,QAAMC,aAAS,IAAI;AAEzB,MAAI,CAACD,OAAK;AACR,UAAM,IAAI;AAAA,MACR,0EAA0E,KAAK,QAAQ;AAAA,IAAA;AAAA,EAE3F;AAEA,QAAM,SAASA,OAAK;AAAA,IAClB,SAAS;AAAA,MACP,MAAM,aAAa,cAAc;AAC/B,cAAM,QAAQ;AAEd,cAAM,mBAA8D;AAAA,UAClE,WAAW;AAAA,UACX,QAAQ;AAAA,QAAA;AAIE,oBAAA;AAAA,UACV;AAAA,YACE,gBAAgB,CAAC,SAAS;AACxB,kBAAI,CAACG,aAAE,aAAa,KAAK,KAAK,MAAM,GAAG;AACrC;AAAA,cACF;AAGE,kBAAA,EACE,KAAK,KAAK,OAAO,SAAS,iBAC1B,KAAK,KAAK,OAAO,SAAS,oBAE5B;AACA;AAAA,cACF;AAEA,kBAAIA,aAAE,iBAAiB,KAAK,WAAW,IAAI,GAAG;AAC5C,sBAAM,UAAU;AAAA,kBACd;AAAA,kBACA,KAAK,WAAW,KAAK,UAAU,CAAC;AAAA,gBAAA;AAG9B,oBAAAA,aAAE,mBAAmB,OAAO,GAAG;AACzB,0BAAA,WAAW,QAAQ,CAAC,SAAS;AAC/B,wBAAAA,aAAE,iBAAiB,IAAI,GAAG;AACb,qCAAA,QAAQ,CAAC,SAAS;AAC/B,4BAAIA,aAAE,aAAa,KAAK,GAAG,GAAG;AACxB,8BAAA,KAAK,IAAI,SAAS,MAAM;AACT,6CAAA,IAAI,IAAI,KAAK;AAAA,0BAChC;AAAA,wBACF;AAAA,sBAAA,CACD;AAAA,oBACH;AAAA,kBAAA,CACD;AAGD,0BAAQ,aAAa;gBACvB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QAAA;AAGa,uBAAA,QAAQ,CAAC,cAAc;AAChC,cAAA,YAAY,iBAAiB,SAAS;AAE1C,cAAI,CAAC,WAAW;AACd;AAAA,UACF;AAEO,iBAAAA,aAAE,aAAa,SAAS,GAAG;AAChC,kBAAM,UAAU,YAAY,MAAM,WAAW,UAAU,IAAI;AAC3D,wBAAY,mCAAS,KAAK;AAAA,UAC5B;AAGA,cAAI,WAAW;AACT,gBAAAA,aAAE,sBAAsB,SAAS,GAAG;AAC1B,0BAAA;AAAA,gBACV;AAAA,gBACAA,aAAE,oBAAoB,SAAS;AAAA,kBAC7BA,aAAE;AAAA,oBACAA,aAAE,WAAW,SAAS;AAAA,oBACtBA,aAAE;AAAA,sBACA,UAAU,MAAM;AAAA;AAAA,sBAChB,UAAU;AAAA,sBACV,UAAU;AAAA,sBACV,UAAU;AAAA,sBACV,UAAU;AAAA,oBACZ;AAAA,kBACF;AAAA,gBAAA,CACD;AAAA,cAAA;AAAA,YACH,WAEAA,aAAE,qBAAqB,SAAS,KAChCA,aAAE,0BAA0B,SAAS,GACrC;AACY,0BAAA;AAAA,gBACV;AAAA,gBACAA,aAAE,oBAAoB,SAAS;AAAA,kBAC7BA,aAAE;AAAA,oBACAA,aAAE,WAAW,SAAS;AAAA,oBACtB;AAAA,kBACF;AAAA,gBAAA,CACD;AAAA,cAAA;AAAA,YACH,WAEAA,aAAE,kBAAkB,SAAS,KAC7BA,aAAE,yBAAyB,SAAS,GACpC;AACY,0BAAA;AAAA,gBACV;AAAA,gBACAA,aAAE,oBAAoB,SAAS;AAAA,kBAC7BA,aAAE;AAAA,oBACAA,aAAE,WAAW,SAAS;AAAA,oBACtB,UAAU;AAAA,kBACZ;AAAA,gBAAA,CACD;AAAA,cAAA;AAAA,YAEM,WAAAA,aAAE,iBAAiB,SAAS,GAAG;AAClC,oBAAA,sBAAsB,SAAS,SAAS,EAAE;AAC1C,oBAAA,eAAe,MAAM,MAAM,mBAAmB;AAEpD,kBAAI,CAAC,cAAc;AACjB,sBAAM,IAAI;AAAA,kBACR,2CAA2C,SAAS,uBAAuB,UAAU,IAAI;AAAA,gBAAA;AAAA,cAE7F;AAEA,oBAAM,YAAY,aAAa,QAAQ,KAAK,CAAC;AAE7C,kBAAI,CAAC,WAAW;AACd,sBAAM,IAAI;AAAA,kBACR,2CAA2C,SAAS,uBAAuB,UAAU,IAAI;AAAA,gBAAA;AAAA,cAE7F;AAEI,kBAAAA,aAAE,sBAAsB,SAAS,GAAG;AACtC,sBAAM,aAAa,UAAU;AACjB,4BAAA;AAAA,kBACV;AAAA,kBACAA,aAAE,oBAAoB,SAAS;AAAA,oBAC7BA,aAAE,mBAAmBA,aAAE,WAAW,SAAS,GAAG,UAAU;AAAA,kBAAA,CACzD;AAAA,gBAAA;AAAA,cACH,OACK;AACL,sBAAM,IAAI;AAAA,kBACR,6CAA6C,SAAS,uBAAuB,UAAU,IAAI;AAAA,gBAAA;AAAA,cAE/F;AAAA,YAAA,OACK;AACG,sBAAA,KAAK,8BAA8B,SAAS;AACpD,oBAAM,IAAI,MAAM,iCAAiC,UAAU,IAAI,EAAE;AAAA,YACnE;AAAA,UACF;AAIA,sBAAY,KAAK,OAAO,YAAY,KAAK,KAAK,OAAO,CAAC,SAAS;AAC7D,mBAAO,SAAS;AAAA,UAAA,CACjB;AAGD,sBAAY,cAAc,QAAQ;AAAA,YAChCA,aAAE,uBAAuB,MAAM;AAAA,cAC7BA,aAAE;AAAA,gBACAA,aAAE,WAAW,SAAS;AAAA,gBACtBA,aAAE,WAAW,SAAS;AAAA,cACxB;AAAA,YAAA,CACD;AAAA,UAAA,CACF;AAAA,QAAA,CACF;AAGD,oBAAY,SAAS;AAAA,UACnB,uBAAuB,MAAM;AAKvB,gBAAA,KAAK,KAAK,aAAa;AACzB,kBAAIA,aAAE,sBAAsB,KAAK,KAAK,WAAW,GAAG;AAC7C,qBAAA;AAAA,kBACHA,aAAE;AAAA,oBACA,KAAK,KAAK,YAAY,aAAa;AAAA,sBAAI,CAAC,SACtCA,aAAE;AAAA,wBACAA,aAAE,WAAY,KAAK,GAAW,IAAI;AAAA,wBAClCA,aAAE,WAAY,KAAK,GAAW,IAAI;AAAA,sBACpC;AAAA,oBACF;AAAA,oBACAA,aAAE;AAAA,sBACA,KAAK,SAAS,MAAM,IAAID,qBAAW,EAAE,EAAE,CAAC;AAAA,oBAC1C;AAAA,kBACF;AAAA,gBAAA;AAAA,cAEJ;AAAA,YACF;AAAA,UACF;AAAA,QAAA,CACD;AAAA,MACH;AAAA,IACF;AAAA,EAAA,CACD;AAEDG,2BAAA,oBAAoBL,KAAG;AAEvB,SAAO,SAASA,OAAK;AAAA,IACnB,YAAY;AAAA,IACZ,UAAU,QAAQ,IAAI,aAAa;AAAA,EAAA,CACpC;AACH;AAEA,SAAS,uCACP,aACA,MAQA;AACA,MAAI,YAIO;AACX,MAAI,OAAsB;AAE1B,cAAY,SAAS;AAAA,IACnB,kBAAkB,YAAY;AACtB,YAAA,QAAQ,WAAW,KAAK,WAAW;AAAA,QACvC,CAAC,oBAAoB,gBAAgB,MAAM,SAAS;AAAA,MAAA;AAEtD,UAAI,OAAO;AACG,oBAAA;AACL,eAAA,WAAW,KAAK,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,EAAA,CACD;AAEM,SAAA,EAAE,WAAW;AACtB;AAGA,SAAS,kBAAkB,MAAW,MAAW;AAC3C,MAAAG,aAAE,aAAa,IAAI,GAAG;AACxB,UAAM,UAAU,KAAK,MAAM,WAAW,KAAK,IAAI;AAC/C,QACE,SAEA;AACM,YAAA,aAAa,QAAQ,KAAK;AAChC,UAAIA,aAAE,mBAAmB,WAAW,IAAI,GAAG;AACzC,eAAO,WAAW;AAAA,MACT,WAAAA,aAAE,sBAAsB,WAAW,IAAI,GAAG;AACnD,eAAO,WAAW;AAAA,MACpB;AAAA,IACF;AACO,WAAA;AAAA,EACT;AAEO,SAAA;AACT;AAEA,SAAS,wBAAwB,MAAW,MAAW;AACjD,MAAAA,aAAE,aAAa,IAAI,GAAG;AACxB,UAAM,UAAU,KAAK,MAAM,WAAW,KAAK,IAAI;AAC/C,QAAI,SAAS;AACX,cAAQ,KAAK;IACf;AAAA,EACF;AACF;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.cjs","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","z","getGeneratorConfig"],"mappings":";;;;AAMa,MAAA,eAAeA,6BAAsB,OAAO;AAAA,EACvD,uBAAuBC,IAAA,EAAE,QAAQ,EAAE,SAAS;AAC9C,CAAC;AAEY,MAAA,YAAY,CAAC,cAA+B,SAAiB;AAClE,QAAA,SAASC,gBAAAA,UAAmB,cAAc,IAAI;AAEpD,SAAO,aAAa,MAAM,EAAE,GAAG,QAAQ,GAAG,cAAc;AAC1D;;;"}
@@ -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":"constants.cjs","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;;;"}
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const node_path = require("node:path");
4
4
  const node_url = require("node:url");
5
- const compilers = require("./compilers.cjs");
6
5
  const config = require("./config.cjs");
6
+ const compilers = require("./code-splitter/compilers.cjs");
7
7
  const constants = require("./constants.cjs");
8
8
  function capitalizeFirst(str) {
9
9
  return str.charAt(0).toUpperCase() + str.slice(1);
@@ -73,8 +73,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
73
73
  name: "router-code-splitter-plugin",
74
74
  enforce: "pre",
75
75
  resolveId(source) {
76
- var _a;
77
- if (!((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting)) {
76
+ if (!userConfig.autoCodeSplitting) {
78
77
  return null;
79
78
  }
80
79
  if (source.startsWith(constants.splitPrefix + ":")) {
@@ -83,8 +82,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
83
82
  return null;
84
83
  },
85
84
  transform(code, id) {
86
- var _a;
87
- if (!((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting)) {
85
+ if (!userConfig.autoCodeSplitting) {
88
86
  return null;
89
87
  }
90
88
  const url = node_url.pathToFileURL(id);
@@ -106,8 +104,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
106
104
  return null;
107
105
  },
108
106
  transformInclude(transformId) {
109
- var _a;
110
- if (!((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting)) {
107
+ if (!userConfig.autoCodeSplitting) {
111
108
  return void 0;
112
109
  }
113
110
  let id = transformId;
@@ -122,7 +119,7 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
122
119
  vite: {
123
120
  configResolved(config$1) {
124
121
  ROOT = config$1.root;
125
- userConfig = config.getConfig(options, ROOT);
122
+ userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(config.getConfig(options, ROOT));
126
123
  }
127
124
  },
128
125
  rspack(compiler) {
@@ -140,10 +137,9 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
140
137
  }
141
138
  );
142
139
  });
143
- userConfig = config.getConfig(options, ROOT);
140
+ userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(config.getConfig(options, ROOT));
144
141
  },
145
142
  webpack(compiler) {
146
- var _a;
147
143
  ROOT = process.cwd();
148
144
  compiler.hooks.beforeCompile.tap(PLUGIN_NAME, (self) => {
149
145
  self.normalModuleFactory.hooks.beforeResolve.tap(
@@ -158,9 +154,9 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
158
154
  }
159
155
  );
160
156
  });
161
- userConfig = config.getConfig(options, ROOT);
162
- if (((_a = userConfig.experimental) == null ? void 0 : _a.enableCodeSplitting) && compiler.options.mode === "production") {
163
- compiler.hooks.done.tap(PLUGIN_NAME, (stats) => {
157
+ userConfig = CHECK_USER_FLAGS_TO_BE_CHANGED(config.getConfig(options, ROOT));
158
+ if (userConfig.autoCodeSplitting && compiler.options.mode === "production") {
159
+ compiler.hooks.done.tap(PLUGIN_NAME, () => {
164
160
  console.info("✅ " + PLUGIN_NAME + ": code-splitting done!");
165
161
  setTimeout(() => {
166
162
  process.exit(0);
@@ -170,5 +166,19 @@ const unpluginRouterCodeSplitterFactory = (options = {}, { framework }) => {
170
166
  }
171
167
  };
172
168
  };
169
+ function CHECK_USER_FLAGS_TO_BE_CHANGED(config2) {
170
+ var _a;
171
+ if (typeof ((_a = config2.experimental) == null ? void 0 : _a.enableCodeSplitting) !== "undefined") {
172
+ const message = `
173
+ ------
174
+ ⚠️ ⚠️ ⚠️
175
+ 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".
176
+ ------
177
+ `;
178
+ console.error(message);
179
+ throw new Error(message);
180
+ }
181
+ return config2;
182
+ }
173
183
  exports.unpluginRouterCodeSplitterFactory = unpluginRouterCodeSplitterFactory;
174
- //# sourceMappingURL=code-splitter.cjs.map
184
+ //# sourceMappingURL=router-code-splitter-plugin.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-code-splitter-plugin.cjs","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":["isAbsolute","join","splitPrefix","compileCodeSplitVirtualRoute","compileCodeSplitReferenceRoute","pathToFileURL","fileURLToPath","config","getConfig"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const routerGeneratorPlugin = require("./router-generator-plugin.cjs");
4
+ const routerCodeSplitterPlugin = require("./router-code-splitter-plugin.cjs");
5
+ const unpluginRouterComposedFactory = (options = {}, meta) => {
6
+ const routerGenerator = routerGeneratorPlugin.unpluginRouterGeneratorFactory(options);
7
+ const routerGeneratorOptions = Array.isArray(routerGenerator) ? routerGenerator : [routerGenerator];
8
+ const routerCodeSplitter = routerCodeSplitterPlugin.unpluginRouterCodeSplitterFactory(options, meta);
9
+ const routerCodeSplitterOptions = Array.isArray(routerCodeSplitter) ? routerCodeSplitter : [routerCodeSplitter];
10
+ return [...routerGeneratorOptions, ...routerCodeSplitterOptions];
11
+ };
12
+ exports.unpluginRouterComposedFactory = unpluginRouterComposedFactory;
13
+ //# sourceMappingURL=router-composed-plugin.cjs.map
@@ -0,0 +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'\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":["unpluginRouterGeneratorFactory","unpluginRouterCodeSplitterFactory"],"mappings":";;;;AAMO,MAAM,gCAET,CAAC,UAAU,IAAI,SAAS;AACpB,QAAA,kBAAkBA,qDAA+B,OAAa;AAEpE,QAAM,yBAAyB,MAAM,QAAQ,eAAe,IACxD,kBACA,CAAC,eAAe;AAEd,QAAA,qBAAqBC,yBAAAA,kCAAkC,SAAS,IAAI;AAC1E,QAAM,4BAA4B,MAAM,QAAQ,kBAAkB,IAC9D,qBACA,CAAC,kBAAkB;AAEvB,SAAO,CAAC,GAAG,wBAAwB,GAAG,yBAAyB;AACjE;;"}
@@ -120,4 +120,4 @@ const unpluginRouterGeneratorFactory = (options = {}) => {
120
120
  };
121
121
  };
122
122
  exports.unpluginRouterGeneratorFactory = unpluginRouterGeneratorFactory;
123
- //# sourceMappingURL=router-generator.cjs.map
123
+ //# sourceMappingURL=router-generator-plugin.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-generator-plugin.cjs","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":["isAbsolute","join","generator","normalize","CONFIG_FILE_NAME","getConfig","resolve","config"],"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,WAAAA,qBAAW,WAAW,eAAe,IACxC,WAAW,kBACXC,UAAAA,KAAK,MAAM,WAAW,eAAe;AAAA,EAAA;AAG3C,QAAM,WAAW,YAAY;AAC3B,QAAI,aAAa;AACf;AAAA,IACF;AAEA,YAAQ,IAAI;AAER,QAAA;AACF,YAAMC,gBAAAA,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,WAAWC,oBAAU,IAAI;AAE/B,QAAI,aAAaF,UAAAA,KAAK,MAAMG,UAAgB,gBAAA,GAAG;AAChC,mBAAAC,OAAA,UAAU,SAAS,IAAI;AACpC;AAAA,IACF;AAEA,QACE,UAAU,YACV,aAAaC,UAAAA,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,eAAeC,UAAQ;AAC3B,eAAOA,SAAO;AACD,qBAAAF,OAAA,UAAU,SAAS,IAAI;AAEpC,cAAM,IAAI,QAAQ;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM,OAAO,UAAU;AACR,mBAAAA,OAAA,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,mBAAAA,OAAA,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,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const codeSplitter = require("./code-splitter.cjs");
4
- const routerGenerator = require("./router-generator.cjs");
5
- const config = require("./config.cjs");
6
- exports.unpluginRouterCodeSplitterFactory = codeSplitter.unpluginRouterCodeSplitterFactory;
7
- exports.unpluginRouterGeneratorFactory = routerGenerator.unpluginRouterGeneratorFactory;
3
+ const config = require("./core/config.cjs");
4
+ const routerCodeSplitterPlugin = require("./core/router-code-splitter-plugin.cjs");
5
+ const routerGeneratorPlugin = require("./core/router-generator-plugin.cjs");
8
6
  exports.configSchema = config.configSchema;
7
+ exports.unpluginRouterCodeSplitterFactory = routerCodeSplitterPlugin.unpluginRouterCodeSplitterFactory;
8
+ exports.unpluginRouterGeneratorFactory = routerGeneratorPlugin.unpluginRouterGeneratorFactory;
9
9
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,4 @@
1
- export { unpluginRouterCodeSplitterFactory } from './code-splitter.cjs';
2
- export { unpluginRouterGeneratorFactory } from './router-generator.cjs';
3
- export { configSchema } from './config.cjs';
4
- export type { Config } from './config.cjs';
1
+ export { configSchema } from './core/config.cjs';
2
+ export { unpluginRouterCodeSplitterFactory } from './core/router-code-splitter-plugin.cjs';
3
+ export { unpluginRouterGeneratorFactory } from './core/router-generator-plugin.cjs';
4
+ export type { Config } from './core/config.cjs';
@@ -1,18 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const unplugin = require("unplugin");
4
- const codeSplitter = require("./code-splitter.cjs");
5
- const config = require("./config.cjs");
6
- const routerGenerator = require("./router-generator.cjs");
7
- const composed = require("./composed.cjs");
4
+ const config = require("./core/config.cjs");
5
+ const routerCodeSplitterPlugin = require("./core/router-code-splitter-plugin.cjs");
6
+ const routerGeneratorPlugin = require("./core/router-generator-plugin.cjs");
7
+ const routerComposedPlugin = require("./core/router-composed-plugin.cjs");
8
8
  const TanStackRouterGeneratorRspack = /* @__PURE__ */ unplugin.createRspackPlugin(
9
- routerGenerator.unpluginRouterGeneratorFactory
9
+ routerGeneratorPlugin.unpluginRouterGeneratorFactory
10
10
  );
11
11
  const TanStackRouterCodeSplitterRspack = /* @__PURE__ */ unplugin.createRspackPlugin(
12
- codeSplitter.unpluginRouterCodeSplitterFactory
12
+ routerCodeSplitterPlugin.unpluginRouterCodeSplitterFactory
13
13
  );
14
14
  const TanStackRouterRspack = /* @__PURE__ */ unplugin.createRspackPlugin(
15
- composed.unpluginRouterComposedFactory
15
+ routerComposedPlugin.unpluginRouterComposedFactory
16
16
  );
17
17
  exports.configSchema = config.configSchema;
18
18
  exports.TanStackRouterCodeSplitterRspack = TanStackRouterCodeSplitterRspack;
@@ -1 +1 @@
1
- {"version":3,"file":"rspack.cjs","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":["createRspackPlugin","unpluginRouterGeneratorFactory","unpluginRouterCodeSplitterFactory","unpluginRouterComposedFactory"],"mappings":";;;;;;;AAoBA,MAAM,gCAAgDA,yBAAA;AAAA,EACpDC,gBAAA;AACF;AAeA,MAAM,mCAAmDD,yBAAA;AAAA,EACvDE,aAAA;AACF;AAeA,MAAM,uBAAuCF,yBAAA;AAAA,EAC3CG,SAAA;AACF;;;;;;"}
1
+ {"version":3,"file":"rspack.cjs","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":["createRspackPlugin","unpluginRouterGeneratorFactory","unpluginRouterCodeSplitterFactory","unpluginRouterComposedFactory"],"mappings":";;;;;;;AAqBA,MAAM,gCAAgDA,yBAAA;AAAA,EACpDC,sBAAA;AACF;AAeA,MAAM,mCAAmDD,yBAAA;AAAA,EACvDE,yBAAA;AACF;AAeA,MAAM,uBAAuCF,yBAAA;AAAA,EAC3CG,qBAAA;AACF;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { configSchema, Config } from './config.cjs';
1
+ import { configSchema, Config } from './core/config.cjs';
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;
package/dist/cjs/vite.cjs CHANGED
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const unplugin = require("unplugin");
4
- const codeSplitter = require("./code-splitter.cjs");
5
- const config = require("./config.cjs");
6
- const routerGenerator = require("./router-generator.cjs");
7
- const composed = require("./composed.cjs");
4
+ const config = require("./core/config.cjs");
5
+ const routerCodeSplitterPlugin = require("./core/router-code-splitter-plugin.cjs");
6
+ const routerGeneratorPlugin = require("./core/router-generator-plugin.cjs");
7
+ const routerComposedPlugin = require("./core/router-composed-plugin.cjs");
8
8
  const TanStackRouterGeneratorVite = unplugin.createVitePlugin(
9
- routerGenerator.unpluginRouterGeneratorFactory
9
+ routerGeneratorPlugin.unpluginRouterGeneratorFactory
10
10
  );
11
11
  const TanStackRouterCodeSplitterVite = unplugin.createVitePlugin(
12
- codeSplitter.unpluginRouterCodeSplitterFactory
12
+ routerCodeSplitterPlugin.unpluginRouterCodeSplitterFactory
13
13
  );
14
- const TanStackRouterVite = unplugin.createVitePlugin(composed.unpluginRouterComposedFactory);
14
+ const TanStackRouterVite = unplugin.createVitePlugin(routerComposedPlugin.unpluginRouterComposedFactory);
15
15
  exports.configSchema = config.configSchema;
16
16
  exports.TanStackRouterCodeSplitterVite = TanStackRouterCodeSplitterVite;
17
17
  exports.TanStackRouterGeneratorVite = TanStackRouterGeneratorVite;
@@ -1 +1 @@
1
- {"version":3,"file":"vite.cjs","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":["createVitePlugin","unpluginRouterGeneratorFactory","unpluginRouterCodeSplitterFactory","unpluginRouterComposedFactory"],"mappings":";;;;;;;AAiBA,MAAM,8BAA8BA,SAAA;AAAA,EAClCC,gBAAA;AACF;AAWA,MAAM,iCAAiCD,SAAA;AAAA,EACrCE,aAAA;AACF;AAWM,MAAA,qBAAqBF,0BAAiBG,SAA6B,6BAAA;;;;;;"}
1
+ {"version":3,"file":"vite.cjs","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":["createVitePlugin","unpluginRouterGeneratorFactory","unpluginRouterCodeSplitterFactory","unpluginRouterComposedFactory"],"mappings":";;;;;;;AAkBA,MAAM,8BAA8BA,SAAA;AAAA,EAClCC,sBAAA;AACF;AAWA,MAAM,iCAAiCD,SAAA;AAAA,EACrCE,yBAAA;AACF;AAWM,MAAA,qBAAqBF,0BAAiBG,qBAA6B,6BAAA;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { configSchema, Config } from './config.cjs';
1
+ import { configSchema, Config } from './core/config.cjs';
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;
@@ -1,18 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const unplugin = require("unplugin");
4
- const codeSplitter = require("./code-splitter.cjs");
5
- const config = require("./config.cjs");
6
- const routerGenerator = require("./router-generator.cjs");
7
- const composed = require("./composed.cjs");
4
+ const config = require("./core/config.cjs");
5
+ const routerCodeSplitterPlugin = require("./core/router-code-splitter-plugin.cjs");
6
+ const routerGeneratorPlugin = require("./core/router-generator-plugin.cjs");
7
+ const routerComposedPlugin = require("./core/router-composed-plugin.cjs");
8
8
  const TanStackRouterGeneratorWebpack = /* @__PURE__ */ unplugin.createWebpackPlugin(
9
- routerGenerator.unpluginRouterGeneratorFactory
9
+ routerGeneratorPlugin.unpluginRouterGeneratorFactory
10
10
  );
11
11
  const TanStackRouterCodeSplitterWebpack = /* @__PURE__ */ unplugin.createWebpackPlugin(
12
- codeSplitter.unpluginRouterCodeSplitterFactory
12
+ routerCodeSplitterPlugin.unpluginRouterCodeSplitterFactory
13
13
  );
14
14
  const TanStackRouterWebpack = /* @__PURE__ */ unplugin.createWebpackPlugin(
15
- composed.unpluginRouterComposedFactory
15
+ routerComposedPlugin.unpluginRouterComposedFactory
16
16
  );
17
17
  exports.configSchema = config.configSchema;
18
18
  exports.TanStackRouterCodeSplitterWebpack = TanStackRouterCodeSplitterWebpack;
@@ -1 +1 @@
1
- {"version":3,"file":"webpack.cjs","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":["createWebpackPlugin","unpluginRouterGeneratorFactory","unpluginRouterCodeSplitterFactory","unpluginRouterComposedFactory"],"mappings":";;;;;;;AAgBA,MAAM,iCAAiDA,yBAAA;AAAA,EACrDC,gBAAA;AACF;AAWA,MAAM,oCAAoDD,yBAAA;AAAA,EACxDE,aAAA;AACF;AAWA,MAAM,wBAAwCF,yBAAA;AAAA,EAC5CG,SAAA;AACF;;;;;;"}
1
+ {"version":3,"file":"webpack.cjs","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":["createWebpackPlugin","unpluginRouterGeneratorFactory","unpluginRouterCodeSplitterFactory","unpluginRouterComposedFactory"],"mappings":";;;;;;;AAiBA,MAAM,iCAAiDA,yBAAA;AAAA,EACrDC,sBAAA;AACF;AAWA,MAAM,oCAAoDD,yBAAA;AAAA,EACxDE,yBAAA;AACF;AAWA,MAAM,wBAAwCF,yBAAA;AAAA,EAC5CG,qBAAA;AACF;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { configSchema, Config } from './config.cjs';
1
+ import { configSchema, Config } from './core/config.cjs';
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;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sources":["../../../../src/core/code-splitter/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":[],"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,SAAA,MAAM,MAAM,KAAK,MAAM;AAAA,IAC5B,SAAS;AAAA,IACT,MAAM,KAAK;AAAA,IACX,UAAU,KAAK;AAAA,IACf,YAAY;AAAA,IACZ,YAAY;AAAA,EAAA,CACb;AACH;"}
@@ -3,7 +3,7 @@ import babel__default from "@babel/core";
3
3
  import _generate from "@babel/generator";
4
4
  import * as template from "@babel/template";
5
5
  import { deadCodeElimination } from "babel-dead-code-elimination";
6
- import { splitPrefix } from "./constants.js";
6
+ import { splitPrefix } from "../constants.js";
7
7
  import { parseAst } from "./ast.js";
8
8
  let generate = _generate["default"];
9
9
  if (!generate) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compilers.js","sources":["../../../../src/core/code-splitter/compilers.ts"],"sourcesContent":["import * as t from '@babel/types'\nimport babel from '@babel/core'\nimport _generate from '@babel/generator'\nimport * as template from '@babel/template'\nimport { deadCodeElimination } from 'babel-dead-code-elimination'\n\nimport { splitPrefix } from '../constants'\nimport { parseAst } from './ast'\nimport type { ParseAstOptions } from './ast'\n\n// Babel is a CJS package and uses `default` as named binding (`exports.default =`).\n// https://github.com/babel/babel/issues/15269.\nlet generate = (_generate as any)['default'] as typeof _generate\n\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nif (!generate) {\n generate = _generate\n}\n\ntype SplitModulesById = Record<\n string,\n { id: string; node: t.FunctionExpression }\n>\n\ninterface State {\n filename: string\n opts: {\n minify: boolean\n root: string\n }\n imported: Record<string, boolean>\n refs: Set<any>\n serverIndex: number\n splitIndex: number\n splitModulesById: SplitModulesById\n}\n\nexport function compileCodeSplitReferenceRoute(opts: ParseAstOptions) {\n const ast = parseAst(opts)\n\n if (!ast) {\n throw new Error(\n `Failed to compile ast for compileCodeSplitReferenceRoute() for the file: ${opts.filename}`,\n )\n }\n\n babel.traverse(ast, {\n Program: {\n enter(programPath, programState) {\n const state = programState as unknown as State\n\n const splitUrl = `${splitPrefix}:${opts.filename}?${splitPrefix}`\n\n /**\n * If the component for the route is being imported from\n * another file, this is to track the path to that file\n * the path itself doesn't matter, we just need to keep\n * track of it so that we can remove it from the imports\n * list if it's not being used like:\n *\n * `import '../shared/imported'`\n */\n let existingCompImportPath: string | null = null\n let existingLoaderImportPath: string | null = null\n\n programPath.traverse(\n {\n CallExpression: (path) => {\n if (!t.isIdentifier(path.node.callee)) {\n return\n }\n\n if (\n !(\n path.node.callee.name === 'createRoute' ||\n path.node.callee.name === 'createFileRoute'\n )\n ) {\n return\n }\n\n if (t.isCallExpression(path.parentPath.node)) {\n const options = resolveIdentifier(\n path,\n path.parentPath.node.arguments[0],\n )\n\n let found = false\n\n const hasImportedOrDefinedIdentifier = (name: string) => {\n return programPath.scope.hasBinding(name)\n }\n\n if (t.isObjectExpression(options)) {\n options.properties.forEach((prop) => {\n if (t.isObjectProperty(prop)) {\n if (t.isIdentifier(prop.key)) {\n if (prop.key.name === 'component') {\n const value = prop.value\n\n if (t.isIdentifier(value)) {\n existingCompImportPath =\n getImportSpecifierAndPathFromLocalName(\n programPath,\n value.name,\n ).path\n\n removeIdentifierLiteral(path, value)\n }\n\n // Prepend the import statement to the program along with the importer function\n // Check to see if lazyRouteComponent is already imported before attempting\n // to import it again\n\n if (\n !hasImportedOrDefinedIdentifier(\n 'lazyRouteComponent',\n )\n ) {\n programPath.unshiftContainer('body', [\n template.statement(\n `import { lazyRouteComponent } from '@tanstack/react-router'`,\n )(),\n ])\n }\n\n if (\n !hasImportedOrDefinedIdentifier(\n '$$splitComponentImporter',\n )\n ) {\n programPath.unshiftContainer('body', [\n template.statement(\n `const $$splitComponentImporter = () => import('${splitUrl}')`,\n )(),\n ])\n }\n\n prop.value = template.expression(\n `lazyRouteComponent($$splitComponentImporter, 'component')`,\n )()\n\n programPath.pushContainer('body', [\n template.statement(\n `function DummyComponent() { return null }`,\n )(),\n ])\n\n found = true\n } else if (prop.key.name === 'loader') {\n const value = prop.value\n\n if (t.isIdentifier(value)) {\n existingLoaderImportPath =\n getImportSpecifierAndPathFromLocalName(\n programPath,\n value.name,\n ).path\n\n removeIdentifierLiteral(path, value)\n }\n\n // Prepend the import statement to the program along with the importer function\n\n if (!hasImportedOrDefinedIdentifier('lazyFn')) {\n programPath.unshiftContainer('body', [\n template.smart(\n `import { lazyFn } from '@tanstack/react-router'`,\n )() as t.Statement,\n ])\n }\n\n if (\n !hasImportedOrDefinedIdentifier(\n '$$splitLoaderImporter',\n )\n ) {\n programPath.unshiftContainer('body', [\n template.statement(\n `const $$splitLoaderImporter = () => import('${splitUrl}')`,\n )(),\n ])\n }\n\n prop.value = template.expression(\n `lazyFn($$splitLoaderImporter, 'loader')`,\n )()\n\n found = true\n }\n }\n }\n\n programPath.scope.crawl()\n })\n }\n\n if (found as boolean) {\n programPath.pushContainer('body', [\n template.statement(`function TSR_Dummy_Component() {}`)(),\n ])\n }\n }\n },\n },\n state,\n )\n\n /**\n * If the component for the route is being imported,\n * and it's not being used, remove the import statement\n * from the program, by checking that the import has no\n * specifiers\n */\n if (\n (existingCompImportPath as string | null) ||\n (existingLoaderImportPath as string | null)\n ) {\n programPath.traverse({\n ImportDeclaration(path) {\n if (path.node.specifiers.length > 0) return\n if (\n path.node.source.value === existingCompImportPath ||\n path.node.source.value === existingLoaderImportPath\n ) {\n path.remove()\n }\n },\n })\n }\n },\n },\n })\n\n deadCodeElimination(ast)\n\n return generate(ast, {\n sourceMaps: true,\n minified: process.env.NODE_ENV === 'production',\n })\n}\n\nconst splitNodeTypes = ['component', 'loader'] as const\ntype SplitNodeType = (typeof splitNodeTypes)[number]\n\nexport function compileCodeSplitVirtualRoute(opts: ParseAstOptions) {\n const ast = parseAst(opts)\n\n if (!ast) {\n throw new Error(\n `Failed to compile ast for compileCodeSplitVirtualRoute() for the file: ${opts.filename}`,\n )\n }\n\n babel.traverse(ast, {\n Program: {\n enter(programPath, programState) {\n const state = programState as unknown as State\n\n const splitNodesByType: Record<SplitNodeType, t.Node | undefined> = {\n component: undefined,\n loader: undefined,\n }\n\n // Find the node\n programPath.traverse(\n {\n CallExpression: (path) => {\n if (!t.isIdentifier(path.node.callee)) {\n return\n }\n\n if (\n !(\n path.node.callee.name === 'createRoute' ||\n path.node.callee.name === 'createFileRoute'\n )\n ) {\n return\n }\n\n if (t.isCallExpression(path.parentPath.node)) {\n const options = resolveIdentifier(\n path,\n path.parentPath.node.arguments[0],\n )\n\n if (t.isObjectExpression(options)) {\n options.properties.forEach((prop) => {\n if (t.isObjectProperty(prop)) {\n splitNodeTypes.forEach((type) => {\n if (t.isIdentifier(prop.key)) {\n if (prop.key.name === type) {\n splitNodesByType[type] = prop.value\n }\n }\n })\n }\n })\n\n // Remove all of the options\n options.properties = []\n }\n }\n },\n },\n state,\n )\n\n splitNodeTypes.forEach((splitType) => {\n let splitNode = splitNodesByType[splitType]\n\n if (!splitNode) {\n return\n }\n\n while (t.isIdentifier(splitNode)) {\n const binding = programPath.scope.getBinding(splitNode.name)\n splitNode = binding?.path.node\n }\n\n // Add the node to the program\n if (splitNode) {\n if (t.isFunctionDeclaration(splitNode)) {\n programPath.pushContainer(\n 'body',\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(splitType),\n t.functionExpression(\n splitNode.id || null, // Anonymize the function expression\n splitNode.params,\n splitNode.body,\n splitNode.generator,\n splitNode.async,\n ),\n ),\n ]),\n )\n } else if (\n t.isFunctionExpression(splitNode) ||\n t.isArrowFunctionExpression(splitNode)\n ) {\n programPath.pushContainer(\n 'body',\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(splitType),\n splitNode as any,\n ),\n ]),\n )\n } else if (\n t.isImportSpecifier(splitNode) ||\n t.isImportDefaultSpecifier(splitNode)\n ) {\n programPath.pushContainer(\n 'body',\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(splitType),\n splitNode.local,\n ),\n ]),\n )\n } else if (t.isCallExpression(splitNode)) {\n const outputSplitNodeCode = generate(splitNode).code\n const splitNodeAst = babel.parse(outputSplitNodeCode)\n\n if (!splitNodeAst) {\n throw new Error(\n `Failed to parse the generated code for \"${splitType}\" in the node type \"${splitNode.type}\"`,\n )\n }\n\n const statement = splitNodeAst.program.body[0]\n\n if (!statement) {\n throw new Error(\n `Failed to parse the generated code for \"${splitType}\" in the node type \"${splitNode.type}\" as no statement was found in the program body`,\n )\n }\n\n if (t.isExpressionStatement(statement)) {\n const expression = statement.expression\n programPath.pushContainer(\n 'body',\n t.variableDeclaration('const', [\n t.variableDeclarator(t.identifier(splitType), expression),\n ]),\n )\n } else {\n throw new Error(\n `Unexpected expression type encounter for \"${splitType}\" in the node type \"${splitNode.type}\"`,\n )\n }\n } else {\n console.info('Unexpected splitNode type:', splitNode)\n throw new Error(`Unexpected splitNode type ☝️: ${splitNode.type}`)\n }\n }\n\n // If the splitNode exists at the top of the program\n // then we need to remove that copy\n programPath.node.body = programPath.node.body.filter((node) => {\n return node !== splitNode\n })\n\n // Export the node\n programPath.pushContainer('body', [\n t.exportNamedDeclaration(null, [\n t.exportSpecifier(\n t.identifier(splitType),\n t.identifier(splitType),\n ),\n ]),\n ])\n })\n\n // convert exports to imports from the original file\n programPath.traverse({\n ExportNamedDeclaration(path) {\n // e.g. export const x = 1 or export { x }\n // becomes\n // import { x } from '${opts.id}'\n\n if (path.node.declaration) {\n if (t.isVariableDeclaration(path.node.declaration)) {\n path.replaceWith(\n t.importDeclaration(\n path.node.declaration.declarations.map((decl) =>\n t.importSpecifier(\n t.identifier((decl.id as any).name),\n t.identifier((decl.id as any).name),\n ),\n ),\n t.stringLiteral(\n opts.filename.split(`?${splitPrefix}`)[0] as string,\n ),\n ),\n )\n }\n }\n },\n })\n },\n },\n })\n\n deadCodeElimination(ast)\n\n return generate(ast, {\n sourceMaps: true,\n minified: process.env.NODE_ENV === 'production',\n })\n}\n\nfunction getImportSpecifierAndPathFromLocalName(\n programPath: babel.NodePath<t.Program>,\n name: string,\n): {\n specifier:\n | t.ImportSpecifier\n | t.ImportDefaultSpecifier\n | t.ImportNamespaceSpecifier\n | null\n path: string | null\n} {\n let specifier:\n | t.ImportSpecifier\n | t.ImportDefaultSpecifier\n | t.ImportNamespaceSpecifier\n | null = null\n let path: string | null = null\n\n programPath.traverse({\n ImportDeclaration(importPath) {\n const found = importPath.node.specifiers.find(\n (targetSpecifier) => targetSpecifier.local.name === name,\n )\n if (found) {\n specifier = found\n path = importPath.node.source.value\n }\n },\n })\n\n return { specifier, path }\n}\n\n// Reusable function to get literal value or resolve variable to literal\nfunction resolveIdentifier(path: any, node: any) {\n if (t.isIdentifier(node)) {\n const binding = path.scope.getBinding(node.name)\n if (\n binding\n // && binding.kind === 'const'\n ) {\n const declarator = binding.path.node\n if (t.isObjectExpression(declarator.init)) {\n return declarator.init\n } else if (t.isFunctionDeclaration(declarator.init)) {\n return declarator.init\n }\n }\n return undefined\n }\n\n return node\n}\n\nfunction removeIdentifierLiteral(path: any, node: any) {\n if (t.isIdentifier(node)) {\n const binding = path.scope.getBinding(node.name)\n if (binding) {\n binding.path.remove()\n }\n }\n}\n"],"names":["babel"],"mappings":"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"}