@tanstack/router-cli 0.0.1-beta.58 → 0.0.1-beta.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/generator.js +8 -8
- package/build/cjs/generator.js.map +1 -1
- package/build/cjs/transformCode.js +24 -25
- package/build/cjs/transformCode.js.map +1 -1
- package/build/esm/index.js +32 -33
- package/build/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/src/generator.ts +9 -9
- package/src/transformCode.ts +24 -27
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformCode.js","sources":["../../src/transformCode.ts"],"sourcesContent":["import * as babel from '@babel/core'\nimport * as t from '@babel/types'\n// @ts-ignore\nimport syntaxTS from '@babel/plugin-syntax-typescript'\nimport {\n IsolatedExport,\n removeExt,\n rootRouteName,\n rootRouteClientName,\n RouteNode,\n} from './generator'\nimport path from 'path'\n\nexport const isolatedProperties = [\n 'loader',\n 'action',\n 'component',\n 'errorComponent',\n 'pendingComponent',\n] as const\n\nexport type IsolatedProperty = typeof isolatedProperties[number]\n\ntype Opts = {\n isolate: IsolatedProperty\n}\n\nconst getBasePlugins = () => [\n [\n syntaxTS,\n {\n isTSX: true,\n },\n ],\n]\n\nexport async function ensureBoilerplate(node: RouteNode, code: string) {\n const relativeImportPath = path.relative(node.fullDir, node.genPathNoExt)\n\n const originalFile = await babel.transformAsync(code, {\n configFile: false,\n babelrc: false,\n plugins: [...getBasePlugins()],\n })\n\n const file = await babel.transformAsync(code, {\n configFile: false,\n babelrc: false,\n plugins: [\n ...getBasePlugins(),\n {\n visitor: {\n Program: {\n enter(programPath) {\n // Remove all properties except for our isolated one\n\n if (node.isRoot) {\n let foundImport = false\n\n programPath.traverse({\n ImportSpecifier(importPath) {\n if (\n t.isIdentifier(importPath.node.imported) &&\n importPath.node.imported.name === 'createRouteConfig'\n ) {\n foundImport = true\n }\n },\n })\n\n if (!foundImport) {\n programPath.node.body.unshift(\n babel.template.statement(\n `import { createRouteConfig } from '@tanstack/react-router'`,\n )(),\n )\n }\n } else {\n let foundImport = false\n programPath.traverse({\n ImportSpecifier(importPath) {\n if (\n t.isIdentifier(importPath.node.imported) &&\n importPath.node.imported.name === rootRoute\n ) {\n foundImport = true\n if (t.isImportDeclaration(importPath.parentPath.node)) {\n if (\n importPath.parentPath.node.source.value !==\n relativeImportPath\n ) {\n importPath.parentPath.node.source.value =\n relativeImportPath\n }\n }\n }\n },\n })\n if (!foundImport) {\n programPath.node.body.unshift(\n babel.template.statement(\n `import { routeConfig } from '${relativeImportPath.replace(\n /\\\\/gi,\n '/',\n )}'`,\n )(),\n )\n }\n }\n },\n },\n },\n },\n ],\n })\n\n const separator = node.isRoot ? 'createRouteConfig(' : 'routeConfig.generate('\n\n if (!originalFile?.code) {\n return `${file?.code}\\n\\n${separator}{\\n\\n})`\n }\n\n const originalHead = originalFile?.code?.substring(\n 0,\n originalFile?.code?.indexOf(separator),\n )\n\n const generatedHead = file?.code?.substring(0, file?.code?.indexOf(separator))\n\n if (originalHead !== generatedHead) {\n return `${generatedHead}\\n\\n${originalFile?.code?.substring(\n originalFile?.code?.indexOf(separator),\n )}`\n }\n\n return\n}\n\nexport async function isolateOptionToExport(\n node: RouteNode,\n code: string,\n opts: Opts,\n) {\n return (\n await babel.transformAsync(code, {\n configFile: false,\n babelrc: false,\n plugins: [...getBasePlugins(), plugin()],\n ast: true,\n })\n )?.code\n\n function plugin(): babel.PluginItem {\n return {\n visitor: {\n Program: {\n enter(programPath, state) {\n // If we're the root, handle things a bit differently\n if (node.isRoot) {\n programPath.traverse({\n Identifier(path) {\n if (\n path.node.name === 'createRouteConfig' &&\n t.isCallExpression(path.parentPath.node)\n ) {\n const options = getCreateRouteConfigOptions(path)\n\n if (options) {\n const property = options.properties.find((property) => {\n return (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name === opts.isolate\n )\n })\n\n if (t.isObjectProperty(property)) {\n const program = path.findParent((d) => d.isProgram())\n\n if (program?.isProgram()) {\n program.node.body.push(\n babel.template.statement(\n `export const ${opts.isolate} = $LOADER`,\n )({\n $LOADER: property.value,\n }),\n )\n }\n }\n\n path\n .findParent((d) => d.isExpressionStatement())\n ?.remove()\n }\n }\n },\n })\n }\n\n // We're not in the root, handle things normally\n if (!node.isRoot) {\n // Remove all properties except for our isolated one\n programPath.traverse({\n Identifier(path) {\n if (path.node.name === 'generate') {\n const options = getRouteConfigGenerateOptions(path)\n\n if (options) {\n const property = options.properties.find((property) => {\n return (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name === opts.isolate\n )\n })\n\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key)\n ) {\n if (property.key.name === opts.isolate) {\n const program = path.findParent((d) => d.isProgram())\n\n if (program?.isProgram()) {\n program.node.body.push(\n babel.template.statement(\n `export const ${opts.isolate} = $LOADER`,\n )({\n $LOADER: property.value,\n }),\n )\n }\n }\n }\n\n path\n .findParent((d) => d.isExpressionStatement())\n ?.remove()\n }\n }\n },\n })\n }\n\n cleanUnusedCode(programPath, state, [opts.isolate])\n },\n },\n },\n }\n }\n}\n\nexport async function detectExports(code: string) {\n let exported: string[] = []\n\n // try {\n await babel.transformAsync(code, {\n configFile: false,\n babelrc: false,\n plugins: [\n ...getBasePlugins(),\n {\n visitor: {\n ExportNamedDeclaration(path) {\n if (t.isVariableDeclaration(path.node.declaration)) {\n if (\n t.isVariableDeclarator(path.node.declaration.declarations?.[0])\n ) {\n if (t.isIdentifier(path.node.declaration.declarations[0].id)) {\n exported.push(path.node.declaration.declarations[0].id.name)\n }\n }\n }\n },\n },\n },\n ],\n ast: true,\n })\n\n return exported\n}\n\nexport async function generateRouteConfig(\n node: RouteNode,\n routeCode: string,\n imports: IsolatedExport[],\n clientOnly: boolean,\n) {\n const relativeParentRoutePath = clientOnly\n ? node.parent\n ? removeExt(\n path.relative(\n node.genDir,\n path.resolve(node.parent?.genDir, node.parent?.clientFilename),\n ),\n )\n : `./${rootRouteClientName}`\n : node.parent\n ? removeExt(\n path.relative(\n node.genDir,\n path.resolve(node.parent?.genDir, node.parent?.filename),\n ),\n )\n : `./${rootRouteName}`\n\n const pathName = node.isRoot\n ? undefined\n : node.fileNameNoExt.startsWith('__')\n ? undefined\n : node.fileNameNoExt === 'index'\n ? '/'\n : node.fileNameNoExt\n\n const routeId = node.isRoot ? undefined : node.fileNameNoExt\n\n function plugin(): babel.PluginItem {\n return {\n visitor: {\n Program: {\n enter(programPath, state) {\n // Remove all of the isolated import properties from the config\n programPath.traverse({\n ImportSpecifier(path) {\n if (t.isIdentifier(path.node.imported)) {\n if (!node.isRoot) {\n if (path.node.imported.name === rootRoute) {\n path.parentPath.remove()\n\n const program = path.findParent((d) => d.isProgram())\n\n if (program?.isProgram()) {\n program.node.body.unshift(\n babel.template.statement(\n `import { routeConfig as parentRouteConfig } from '$IMPORT'`,\n )({\n $IMPORT: relativeParentRoutePath,\n }),\n )\n }\n }\n }\n }\n },\n Identifier(iPath) {\n let options\n\n if (node.isRoot) {\n if (iPath.node.name === 'createRouteConfig') {\n if (t.isCallExpression(iPath.parentPath.node)) {\n if (\n t.isExpressionStatement(\n iPath.parentPath.parentPath?.node,\n )\n ) {\n iPath.parentPath.parentPath?.replaceWith(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(rootRoute),\n iPath.parentPath.node,\n ),\n ]) as any,\n )\n }\n }\n }\n } else {\n if (iPath.node.name === 'generate') {\n if (t.isMemberExpression(iPath.parentPath.node)) {\n if (t.isIdentifier(iPath.parentPath.node.object)) {\n iPath.node.name = 'createRoute'\n iPath.parentPath.node.object.name = 'parentRouteConfig'\n\n options = getRouteConfigGenerateOptions(iPath)\n }\n }\n }\n }\n\n if (options) {\n options.properties = [\n ...(pathName\n ? [\n t.objectProperty(\n t.identifier('path'),\n t.stringLiteral(pathName),\n ),\n ]\n : routeId\n ? [\n t.objectProperty(\n t.identifier('id'),\n t.stringLiteral(routeId),\n ),\n ]\n : []),\n ...options.properties.map((property) => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isolatedProperties.includes(\n property.key.name as IsolatedProperty,\n )\n ) {\n const key = property.key.name\n\n if (key === 'loader') {\n if (clientOnly) {\n return t.objectProperty(\n t.identifier('loader'),\n t.tSAsExpression(\n t.booleanLiteral(true),\n t.tsAnyKeyword(),\n ),\n )\n }\n return t.objectProperty(\n t.identifier(key),\n babel.template.expression(\n `(...args) => import('./${path.relative(\n node.genDir,\n node.genPathNoExt,\n )}-${key}').then(d => d.${key}.apply(d.${key}, (args as any)))`,\n {\n plugins: ['typescript'],\n },\n )({}),\n )\n }\n\n if (key === 'action') {\n if (clientOnly) {\n return t.objectProperty(\n t.identifier('action'),\n t.tSAsExpression(\n t.booleanLiteral(true),\n t.tSAnyKeyword(),\n ),\n )\n }\n return t.objectProperty(\n t.identifier(key),\n babel.template.expression(\n `(...payload: Parameters<typeof import('./${path.relative(\n node.genDir,\n node.genPathNoExt,\n )}-${key}').action>) => import('./${path.relative(\n node.genDir,\n node.genPathNoExt,\n )}-${key}').then(d => d.${key}.apply(d.${key}, (payload as any)))`,\n {\n plugins: ['typescript'],\n },\n )({}),\n )\n }\n\n if (clientOnly) {\n return t.objectProperty(\n t.identifier(key),\n babel.template.expression(`\n lazy(() => import('./${path.relative(\n node.genDir,\n node.genPathNoExt,\n )}-${key}').then(d => ({ default: d.${key} }) ))`)(),\n )\n }\n\n return t.objectProperty(\n t.identifier(key),\n property.value as any,\n )\n }\n\n return property\n }),\n ]\n\n const program = iPath.findParent((d) => d.isProgram())\n\n if (program?.isProgram() && options) {\n const index = program.node.body.findIndex(\n (d) =>\n d.start === iPath.parentPath.parentPath?.node.start,\n )\n\n if (node.isRoot) {\n program.node.body[index] = babel.template.statement(\n `const routeConfig = createRouteConfig(\n $OPTIONS\n )`,\n )({\n $OPTIONS: options,\n })\n } else {\n program.node.body[index] = babel.template.statement(\n `const routeConfig = parentRouteConfig.createRoute(\n $OPTIONS\n )`,\n )({\n $OPTIONS: options,\n })\n }\n }\n }\n },\n })\n\n programPath.node.body.unshift(\n babel.template.statement(\n `import { lazy } from '@tanstack/react-router'`,\n )(),\n )\n\n // Add the routeConfig exports\n programPath.node.body.push(\n babel.template.statement(\n clientOnly\n ? `export { routeConfig, routeConfig as ${node.variable}Route }`\n : `export { routeConfig }`,\n )(),\n )\n\n cleanUnusedCode(programPath, state, [\n rootRoute,\n `${node.variable}Route`,\n ])\n },\n },\n },\n }\n }\n\n const code = (\n await babel.transformAsync(routeCode, {\n configFile: false,\n babelrc: false,\n plugins: [...getBasePlugins(), plugin()],\n ast: true,\n })\n )?.code\n\n if (!code) {\n throw new Error('Error while generating a route file!')\n }\n\n return code\n}\n\nfunction getIdentifier(path: any) {\n const parentPath = path.parentPath\n if (parentPath.type === 'VariableDeclarator') {\n const pp = parentPath\n const name = pp.get('id')\n return name.node.type === 'Identifier' ? name : null\n }\n if (parentPath.type === 'AssignmentExpression') {\n const pp = parentPath\n const name = pp.get('left')\n return name.node.type === 'Identifier' ? name : null\n }\n if (path.node.type === 'ArrowFunctionExpression') {\n return null\n }\n return path.node.id && path.node.id.type === 'Identifier'\n ? path.get('id')\n : null\n}\n\nfunction isIdentifierReferenced(ident: any) {\n const b = ident.scope.getBinding(ident.node.name)\n if (b && b.referenced) {\n if (b.path.type === 'FunctionDeclaration') {\n return !b.constantViolations\n .concat(b.referencePaths)\n .every((ref: any) => ref.findParent((p: any) => p === b.path))\n }\n return true\n }\n return false\n}\nfunction markFunction(path: any, state: any) {\n const ident = getIdentifier(path)\n if (ident && ident.node && isIdentifierReferenced(ident)) {\n state.refs.add(ident)\n }\n}\nfunction markImport(path: any, state: any) {\n const local = path.get('local')\n if (isIdentifierReferenced(local)) {\n state.refs.add(local)\n }\n}\n\nfunction getRouteConfigGenerateOptions(path: any): t.ObjectExpression | void {\n const tryOptions = (node: any): t.ObjectExpression | void => {\n if (t.isIdentifier(node)) {\n const initNode = path.scope.getBinding(node.name)?.path.node\n if (t.isVariableDeclarator(initNode)) {\n return tryOptions(initNode.init)\n }\n } else if (t.isObjectExpression(node)) {\n return node\n }\n\n return\n }\n\n if (\n t.isMemberExpression(path.parentPath.node) &&\n t.isCallExpression(path.parentPath.parentPath?.node)\n ) {\n const options = path.parentPath.parentPath?.node.arguments[0]\n\n return tryOptions(options)\n }\n}\n\nfunction getCreateRouteConfigOptions(path: any): t.ObjectExpression | void {\n const tryOptions = (node: any): t.ObjectExpression | void => {\n if (t.isIdentifier(node)) {\n const initNode = path.scope.getBinding(node.name)?.path.node\n if (t.isVariableDeclarator(initNode)) {\n return tryOptions(initNode.init)\n }\n } else if (t.isObjectExpression(node)) {\n return node\n }\n\n return\n }\n\n if (t.isCallExpression(path.parentPath?.node)) {\n const options = path.parentPath?.node.arguments[0]\n\n return tryOptions(options)\n }\n}\n\n// All credit for this amazing function goes to the Next.js team\n// (and the Solid.js team for their derivative work).\n// https://github.com/vercel/next.js/blob/canary/packages/next/build/babel/plugins/next-ssg-transform.ts\n// https://github.com/solidjs/solid-start/blob/main/packages/start/server/routeData.js\n\nfunction cleanUnusedCode(\n programPath: babel.NodePath<babel.types.Program>,\n state: any,\n keepExports: string[] = [],\n) {\n state.refs = new Set()\n state.done = false\n\n function markVariable(variablePath: any, variableState: any) {\n if (variablePath.node.id.type === 'Identifier') {\n const local = variablePath.get('id')\n if (isIdentifierReferenced(local)) {\n variableState.refs.add(local)\n }\n } else if (variablePath.node.id.type === 'ObjectPattern') {\n const pattern = variablePath.get('id')\n const properties: any = pattern.get('properties')\n properties.forEach((p: any) => {\n const local = p.get(\n p.node.type === 'ObjectProperty'\n ? 'value'\n : p.node.type === 'RestElement'\n ? 'argument'\n : (function () {\n throw new Error('invariant')\n })(),\n )\n if (isIdentifierReferenced(local)) {\n variableState.refs.add(local)\n }\n })\n } else if (variablePath.node.id.type === 'ArrayPattern') {\n const pattern = variablePath.get('id')\n const elements: any = pattern.get('elements')\n elements.forEach((e: any) => {\n let local\n if (e.node && e.node.type === 'Identifier') {\n local = e\n } else if (e.node && e.node.type === 'RestElement') {\n local = e.get('argument')\n } else {\n return\n }\n if (isIdentifierReferenced(local)) {\n variableState.refs.add(local)\n }\n })\n }\n }\n\n // Mark all variables and functions if used\n programPath.traverse(\n {\n VariableDeclarator: markVariable,\n FunctionDeclaration: markFunction,\n FunctionExpression: markFunction,\n ArrowFunctionExpression: markFunction,\n ImportSpecifier: markImport,\n ImportDefaultSpecifier: markImport,\n ImportNamespaceSpecifier: markImport,\n ExportDefaultDeclaration: markImport,\n // ExportNamedDeclaration(path, state) {\n // if (t.isVariableDeclaration(path.node.declaration)) {\n // if (t.isVariableDeclarator(path.node.declaration.declarations?.[0])) {\n // if (t.isIdentifier(path.node.declaration.declarations[0].id)) {\n // if (\n // keepExports.includes(\n // path.node.declaration.declarations[0].id.name,\n // )\n // ) {\n // return\n // }\n // }\n // path.replaceWith(path.node.declaration.declarations[0])\n // return\n // }\n // }\n // path.remove()\n // },\n ImportDeclaration: (path) => {\n if (path.node.source.value.endsWith('.css')) {\n path.remove()\n }\n },\n },\n state,\n )\n\n // Sweet all of the remaining references and remove unused ones\n const refs: any = state.refs\n let count: number\n function sweepFunction(sweepPath: any) {\n const ident = getIdentifier(sweepPath)\n if (\n ident &&\n ident.node &&\n refs.has(ident) &&\n !isIdentifierReferenced(ident)\n ) {\n ++count\n if (\n t.isAssignmentExpression(sweepPath.parentPath) ||\n t.isVariableDeclarator(sweepPath.parentPath)\n ) {\n sweepPath.parentPath.remove()\n } else {\n sweepPath.remove()\n }\n }\n }\n function sweepImport(sweepPath: any) {\n const local = sweepPath.get('local')\n if (refs.has(local) && !isIdentifierReferenced(local)) {\n ++count\n sweepPath.remove()\n if (sweepPath.parent.specifiers.length === 0) {\n sweepPath.parentPath.remove()\n }\n }\n }\n do {\n programPath.scope.crawl()\n count = 0\n programPath.traverse({\n VariableDeclarator(variablePath) {\n if (variablePath.node.id.type === 'Identifier') {\n const local = variablePath.get('id')\n if (refs.has(local) && !isIdentifierReferenced(local)) {\n ++count\n\n variablePath.remove()\n }\n } else if (variablePath.node.id.type === 'ObjectPattern') {\n const pattern = variablePath.get('id')\n const beforeCount = count\n const properties: any = pattern.get('properties')\n properties.forEach((p: any) => {\n const local = p.get(\n p.node.type === 'ObjectProperty'\n ? 'value'\n : p.node.type === 'RestElement'\n ? 'argument'\n : (function () {\n throw new Error('invariant')\n })(),\n )\n if (refs.has(local) && !isIdentifierReferenced(local)) {\n ++count\n p.remove()\n }\n })\n if (\n beforeCount !== count &&\n (pattern.get('properties') as any).length < 1\n ) {\n variablePath.remove()\n }\n } else if (variablePath.node.id.type === 'ArrayPattern') {\n const pattern = variablePath.get('id')\n const beforeCount = count\n const elements: any = pattern.get('elements')\n elements.forEach((e: any) => {\n let local\n if (e.node && e.node.type === 'Identifier') {\n local = e\n } else if (e.node && e.node.type === 'RestElement') {\n local = e.get('argument')\n } else {\n return\n }\n if (refs.has(local) && !isIdentifierReferenced(local)) {\n ++count\n\n e.remove()\n }\n })\n if (\n beforeCount !== count &&\n (pattern.get('elements') as any).length < 1\n ) {\n variablePath.remove()\n }\n }\n },\n FunctionDeclaration: sweepFunction,\n FunctionExpression: sweepFunction,\n ArrowFunctionExpression: sweepFunction,\n ImportSpecifier: sweepImport,\n ImportDefaultSpecifier: sweepImport,\n ImportNamespaceSpecifier: sweepImport,\n })\n } while (count)\n\n // Do we need the * import for react?\n let hasReact = false\n\n // Mark react elements as having react\n programPath.traverse({\n JSXElement(path) {\n hasReact = true\n },\n })\n\n if (!hasReact) {\n // Mark all variables and functions if used\n programPath.traverse({\n ImportDeclaration(path) {\n if (\n t.isStringLiteral(path.node.source) &&\n path.node.source.value === 'react' &&\n t.isImportNamespaceSpecifier(path.node.specifiers[0])\n ) {\n path.remove()\n }\n },\n })\n }\n}\n"],"names":["isolatedProperties","getBasePlugins","syntaxTS","isTSX","ensureBoilerplate","node","code","relativeImportPath","path","relative","fullDir","genPathNoExt","originalFile","babel","transformAsync","configFile","babelrc","plugins","file","visitor","Program","enter","programPath","isRoot","foundImport","traverse","ImportSpecifier","importPath","t","isIdentifier","imported","name","body","unshift","template","statement","rootRoute","isImportDeclaration","parentPath","source","value","replace","separator","originalHead","substring","indexOf","generatedHead","isolateOptionToExport","opts","plugin","ast","state","Identifier","isCallExpression","options","getCreateRouteConfigOptions","property","properties","find","isObjectProperty","key","isolate","program","findParent","d","isProgram","push","$LOADER","isExpressionStatement","remove","getRouteConfigGenerateOptions","cleanUnusedCode","detectExports","exported","ExportNamedDeclaration","isVariableDeclaration","declaration","isVariableDeclarator","declarations","id","generateRouteConfig","routeCode","imports","clientOnly","relativeParentRoutePath","parent","removeExt","genDir","resolve","clientFilename","rootRouteClientName","filename","rootRouteName","pathName","undefined","fileNameNoExt","startsWith","routeId","$IMPORT","iPath","replaceWith","variableDeclaration","variableDeclarator","identifier","isMemberExpression","object","objectProperty","stringLiteral","map","includes","tSAsExpression","booleanLiteral","tsAnyKeyword","expression","tSAnyKeyword","index","findIndex","start","$OPTIONS","variable","Error","getIdentifier","type","pp","get","isIdentifierReferenced","ident","b","scope","getBinding","referenced","constantViolations","concat","referencePaths","every","ref","p","markFunction","refs","add","markImport","local","tryOptions","initNode","init","isObjectExpression","arguments","keepExports","Set","done","markVariable","variablePath","variableState","pattern","forEach","elements","e","VariableDeclarator","FunctionDeclaration","FunctionExpression","ArrowFunctionExpression","ImportDefaultSpecifier","ImportNamespaceSpecifier","ExportDefaultDeclaration","ImportDeclaration","endsWith","count","sweepFunction","sweepPath","has","isAssignmentExpression","sweepImport","specifiers","length","crawl","beforeCount","hasReact","JSXElement","isStringLiteral","isImportNamespaceSpecifier"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transformCode.js","sources":["../../src/transformCode.ts"],"sourcesContent":["import * as babel from '@babel/core'\nimport * as t from '@babel/types'\n// @ts-ignore\nimport syntaxTS from '@babel/plugin-syntax-typescript'\nimport {\n IsolatedExport,\n removeExt,\n rootRouteName,\n rootRouteClientName,\n RouteNode,\n} from './generator'\nimport path from 'path'\n\nexport const isolatedProperties = [\n 'component',\n 'errorComponent',\n 'pendingComponent',\n] as const\n\nexport type IsolatedProperty = typeof isolatedProperties[number]\n\ntype Opts = {\n isolate: IsolatedProperty\n}\n\nconst getBasePlugins = () => [\n [\n syntaxTS,\n {\n isTSX: true,\n },\n ],\n]\n\nexport async function ensureBoilerplate(node: RouteNode, code: string) {\n const relativeImportPath = path.relative(node.fullDir, node.genPathNoExt)\n\n const originalFile = await babel.transformAsync(code, {\n configFile: false,\n babelrc: false,\n plugins: [...getBasePlugins()],\n })\n\n const file = await babel.transformAsync(code, {\n configFile: false,\n babelrc: false,\n plugins: [\n ...getBasePlugins(),\n {\n visitor: {\n Program: {\n enter(programPath) {\n // Remove all properties except for our isolated one\n if (node.isRoot) {\n let foundImport = false\n\n programPath.traverse({\n ImportSpecifier(importPath) {\n if (\n t.isIdentifier(importPath.node.imported) &&\n importPath.node.imported.name === 'Route'\n ) {\n foundImport = true\n }\n },\n })\n\n if (!foundImport) {\n programPath.node.body.unshift(\n babel.template.statement(\n `import { Route } from '@tanstack/react-router'`,\n )(),\n )\n }\n } else {\n let foundImport = false\n programPath.traverse({\n ImportSpecifier(importPath) {\n if (\n t.isIdentifier(importPath.node.imported) &&\n importPath.node.imported.name === 'route'\n ) {\n foundImport = true\n if (t.isImportDeclaration(importPath.parentPath.node)) {\n if (\n importPath.parentPath.node.source.value !==\n relativeImportPath\n ) {\n importPath.parentPath.node.source.value =\n relativeImportPath\n }\n }\n }\n },\n })\n if (!foundImport) {\n programPath.node.body.unshift(\n babel.template.statement(\n `import { Route } from '${relativeImportPath.replace(\n /\\\\/gi,\n '/',\n )}'`,\n )(),\n )\n }\n }\n },\n },\n },\n },\n ],\n })\n\n const separator = 'new Route('\n\n if (!originalFile?.code) {\n return `${file?.code}\\n\\n${separator}{\\n\\n})`\n }\n\n const originalHead = originalFile?.code?.substring(\n 0,\n originalFile?.code?.indexOf(separator),\n )\n\n const generatedHead = file?.code?.substring(0, file?.code?.indexOf(separator))\n\n if (originalHead !== generatedHead) {\n return `${generatedHead}\\n\\n${originalFile?.code?.substring(\n originalFile?.code?.indexOf(separator),\n )}`\n }\n\n return\n}\n\nexport async function isolateOptionToExport(\n node: RouteNode,\n code: string,\n opts: Opts,\n) {\n return (\n await babel.transformAsync(code, {\n configFile: false,\n babelrc: false,\n plugins: [...getBasePlugins(), plugin()],\n ast: true,\n })\n )?.code\n\n function plugin(): babel.PluginItem {\n return {\n visitor: {\n Program: {\n enter(programPath, state) {\n // If we're the root, handle things a bit differently\n if (node.isRoot) {\n programPath.traverse({\n Identifier(path) {\n if (\n path.node.name === 'Route' &&\n t.isCallExpression(path.parentPath.node)\n ) {\n const options = getRouteOptions(path)\n\n if (options) {\n const property = options.properties.find((property) => {\n return (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name === opts.isolate\n )\n })\n\n if (t.isObjectProperty(property)) {\n const program = path.findParent((d) => d.isProgram())\n\n if (program?.isProgram()) {\n program.node.body.push(\n babel.template.statement(\n `export const ${opts.isolate} = $VAR`,\n )({\n $VAR: property.value,\n }),\n )\n }\n }\n\n path\n .findParent((d) => d.isExpressionStatement())\n ?.remove()\n }\n }\n },\n })\n }\n\n // We're not in the root, handle things normally\n if (!node.isRoot) {\n // Remove all properties except for our isolated one\n programPath.traverse({\n Identifier(path) {\n if (path.node.name === 'generate') {\n const options = getRouteConfigGenerateOptions(path)\n\n if (options) {\n const property = options.properties.find((property) => {\n return (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name === opts.isolate\n )\n })\n\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key)\n ) {\n if (property.key.name === opts.isolate) {\n const program = path.findParent((d) => d.isProgram())\n\n if (program?.isProgram()) {\n program.node.body.push(\n babel.template.statement(\n `export const ${opts.isolate} = $VAR`,\n )({\n $VAR: property.value,\n }),\n )\n }\n }\n }\n\n path\n .findParent((d) => d.isExpressionStatement())\n ?.remove()\n }\n }\n },\n })\n }\n\n cleanUnusedCode(programPath, state, [opts.isolate])\n },\n },\n },\n }\n }\n}\n\nexport async function detectExports(code: string) {\n let exported: string[] = []\n\n // try {\n await babel.transformAsync(code, {\n configFile: false,\n babelrc: false,\n plugins: [\n ...getBasePlugins(),\n {\n visitor: {\n ExportNamedDeclaration(path) {\n if (t.isVariableDeclaration(path.node.declaration)) {\n if (\n t.isVariableDeclarator(path.node.declaration.declarations?.[0])\n ) {\n if (t.isIdentifier(path.node.declaration.declarations[0].id)) {\n exported.push(path.node.declaration.declarations[0].id.name)\n }\n }\n }\n },\n },\n },\n ],\n ast: true,\n })\n\n return exported\n}\n\nexport async function generateRouteConfig(\n node: RouteNode,\n routeCode: string,\n imports: IsolatedExport[],\n clientOnly: boolean,\n) {\n const relativeParentRoutePath = clientOnly\n ? node.parent\n ? removeExt(\n path.relative(\n node.genDir,\n path.resolve(node.parent?.genDir, node.parent?.clientFilename),\n ),\n )\n : `./${rootRouteClientName}`\n : node.parent\n ? removeExt(\n path.relative(\n node.genDir,\n path.resolve(node.parent?.genDir, node.parent?.filename),\n ),\n )\n : `./${rootRouteName}`\n\n const pathName = node.isRoot\n ? undefined\n : node.fileNameNoExt.startsWith('__')\n ? undefined\n : node.fileNameNoExt === 'index'\n ? '/'\n : node.fileNameNoExt\n\n const routeId = node.isRoot ? undefined : node.fileNameNoExt\n\n function plugin(): babel.PluginItem {\n return {\n visitor: {\n Program: {\n enter(programPath, state) {\n // Remove all of the isolated import properties from the config\n programPath.traverse({\n ImportSpecifier(path) {\n if (t.isIdentifier(path.node.imported)) {\n if (!node.isRoot) {\n if (path.node.imported.name === 'route') {\n path.parentPath.remove()\n\n const program = path.findParent((d) => d.isProgram())\n\n if (program?.isProgram()) {\n program.node.body.unshift(\n babel.template.statement(\n `import { route as parentRoute } from '$IMPORT'`,\n )({\n $IMPORT: relativeParentRoutePath,\n }),\n )\n }\n }\n }\n }\n },\n Identifier(iPath) {\n let options\n\n if (node.isRoot) {\n if (iPath.node.name === 'Route') {\n if (t.isCallExpression(iPath.parentPath.node)) {\n if (\n t.isExpressionStatement(\n iPath.parentPath.parentPath?.node,\n )\n ) {\n iPath.parentPath.parentPath?.replaceWith(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier('route'),\n iPath.parentPath.node,\n ),\n ]) as any,\n )\n }\n }\n }\n } else {\n if (iPath.node.name === 'generate') {\n if (t.isMemberExpression(iPath.parentPath.node)) {\n if (t.isIdentifier(iPath.parentPath.node.object)) {\n iPath.node.name = 'Route'\n iPath.parentPath.node.object.name = 'parentRoute'\n\n options = getRouteConfigGenerateOptions(iPath)\n }\n }\n }\n }\n\n if (options) {\n options.properties = [\n ...(pathName\n ? [\n t.objectProperty(\n t.identifier('path'),\n t.stringLiteral(pathName),\n ),\n ]\n : routeId\n ? [\n t.objectProperty(\n t.identifier('id'),\n t.stringLiteral(routeId),\n ),\n ]\n : []),\n ...options.properties.map((property) => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isolatedProperties.includes(\n property.key.name as IsolatedProperty,\n )\n ) {\n const key = property.key.name\n\n if (key === 'loader') {\n if (clientOnly) {\n return t.objectProperty(\n t.identifier('loader'),\n t.tSAsExpression(\n t.booleanLiteral(true),\n t.tsAnyKeyword(),\n ),\n )\n }\n return t.objectProperty(\n t.identifier(key),\n babel.template.expression(\n `(...args) => import('./${path.relative(\n node.genDir,\n node.genPathNoExt,\n )}-${key}').then(d => d.${key}.apply(d.${key}, (args as any)))`,\n {\n plugins: ['typescript'],\n },\n )({}),\n )\n }\n\n if (key === 'action') {\n if (clientOnly) {\n return t.objectProperty(\n t.identifier('action'),\n t.tSAsExpression(\n t.booleanLiteral(true),\n t.tSAnyKeyword(),\n ),\n )\n }\n return t.objectProperty(\n t.identifier(key),\n babel.template.expression(\n `(...payload: Parameters<typeof import('./${path.relative(\n node.genDir,\n node.genPathNoExt,\n )}-${key}').action>) => import('./${path.relative(\n node.genDir,\n node.genPathNoExt,\n )}-${key}').then(d => d.${key}.apply(d.${key}, (payload as any)))`,\n {\n plugins: ['typescript'],\n },\n )({}),\n )\n }\n\n if (clientOnly) {\n return t.objectProperty(\n t.identifier(key),\n babel.template.expression(`\n lazy(() => import('./${path.relative(\n node.genDir,\n node.genPathNoExt,\n )}-${key}').then(d => ({ default: d.${key} }) ))`)(),\n )\n }\n\n return t.objectProperty(\n t.identifier(key),\n property.value as any,\n )\n }\n\n return property\n }),\n ]\n\n const program = iPath.findParent((d) => d.isProgram())\n\n if (program?.isProgram() && options) {\n const index = program.node.body.findIndex(\n (d) =>\n d.start === iPath.parentPath.parentPath?.node.start,\n )\n\n if (node.isRoot) {\n program.node.body[index] = babel.template.statement(\n `const route = new Route(\n $OPTIONS\n )`,\n )({\n $OPTIONS: options,\n })\n } else {\n program.node.body[index] = babel.template.statement(\n `const route = new Route(\n $OPTIONS\n )`,\n )({\n $OPTIONS: options,\n })\n }\n }\n }\n },\n })\n\n programPath.node.body.unshift(\n babel.template.statement(\n `import { lazy } from '@tanstack/react-router'`,\n )(),\n )\n\n // Add the route exports\n programPath.node.body.push(\n babel.template.statement(\n clientOnly\n ? `export { route, route as ${node.variable}Route }`\n : `export { route }`,\n )(),\n )\n\n cleanUnusedCode(programPath, state, [\n 'route',\n `${node.variable}Route`,\n ])\n },\n },\n },\n }\n }\n\n const code = (\n await babel.transformAsync(routeCode, {\n configFile: false,\n babelrc: false,\n plugins: [...getBasePlugins(), plugin()],\n ast: true,\n })\n )?.code\n\n if (!code) {\n throw new Error('Error while generating a route file!')\n }\n\n return code\n}\n\nfunction getIdentifier(path: any) {\n const parentPath = path.parentPath\n if (parentPath.type === 'VariableDeclarator') {\n const pp = parentPath\n const name = pp.get('id')\n return name.node.type === 'Identifier' ? name : null\n }\n if (parentPath.type === 'AssignmentExpression') {\n const pp = parentPath\n const name = pp.get('left')\n return name.node.type === 'Identifier' ? name : null\n }\n if (path.node.type === 'ArrowFunctionExpression') {\n return null\n }\n return path.node.id && path.node.id.type === 'Identifier'\n ? path.get('id')\n : null\n}\n\nfunction isIdentifierReferenced(ident: any) {\n const b = ident.scope.getBinding(ident.node.name)\n if (b && b.referenced) {\n if (b.path.type === 'FunctionDeclaration') {\n return !b.constantViolations\n .concat(b.referencePaths)\n .every((ref: any) => ref.findParent((p: any) => p === b.path))\n }\n return true\n }\n return false\n}\nfunction markFunction(path: any, state: any) {\n const ident = getIdentifier(path)\n if (ident && ident.node && isIdentifierReferenced(ident)) {\n state.refs.add(ident)\n }\n}\nfunction markImport(path: any, state: any) {\n const local = path.get('local')\n if (isIdentifierReferenced(local)) {\n state.refs.add(local)\n }\n}\n\nfunction getRouteConfigGenerateOptions(path: any): t.ObjectExpression | void {\n const tryOptions = (node: any): t.ObjectExpression | void => {\n if (t.isIdentifier(node)) {\n const initNode = path.scope.getBinding(node.name)?.path.node\n if (t.isVariableDeclarator(initNode)) {\n return tryOptions(initNode.init)\n }\n } else if (t.isObjectExpression(node)) {\n return node\n }\n\n return\n }\n\n if (\n t.isMemberExpression(path.parentPath.node) &&\n t.isCallExpression(path.parentPath.parentPath?.node)\n ) {\n const options = path.parentPath.parentPath?.node.arguments[0]\n\n return tryOptions(options)\n }\n}\n\nfunction getRouteOptions(path: any): t.ObjectExpression | void {\n const tryOptions = (node: any): t.ObjectExpression | void => {\n if (t.isIdentifier(node)) {\n const initNode = path.scope.getBinding(node.name)?.path.node\n if (t.isVariableDeclarator(initNode)) {\n return tryOptions(initNode.init)\n }\n } else if (t.isObjectExpression(node)) {\n return node\n }\n\n return\n }\n\n if (t.isCallExpression(path.parentPath?.node)) {\n const options = path.parentPath?.node.arguments[0]\n\n return tryOptions(options)\n }\n}\n\n// All credit for this amazing function goes to the Next.js team\n// (and the Solid.js team for their derivative work).\n// https://github.com/vercel/next.js/blob/canary/packages/next/build/babel/plugins/next-ssg-transform.ts\n// https://github.com/solidjs/solid-start/blob/main/packages/start/server/routeData.js\n\nfunction cleanUnusedCode(\n programPath: babel.NodePath<babel.types.Program>,\n state: any,\n keepExports: string[] = [],\n) {\n state.refs = new Set()\n state.done = false\n\n function markVariable(variablePath: any, variableState: any) {\n if (variablePath.node.id.type === 'Identifier') {\n const local = variablePath.get('id')\n if (isIdentifierReferenced(local)) {\n variableState.refs.add(local)\n }\n } else if (variablePath.node.id.type === 'ObjectPattern') {\n const pattern = variablePath.get('id')\n const properties: any = pattern.get('properties')\n properties.forEach((p: any) => {\n const local = p.get(\n p.node.type === 'ObjectProperty'\n ? 'value'\n : p.node.type === 'RestElement'\n ? 'argument'\n : (function () {\n throw new Error('invariant')\n })(),\n )\n if (isIdentifierReferenced(local)) {\n variableState.refs.add(local)\n }\n })\n } else if (variablePath.node.id.type === 'ArrayPattern') {\n const pattern = variablePath.get('id')\n const elements: any = pattern.get('elements')\n elements.forEach((e: any) => {\n let local\n if (e.node && e.node.type === 'Identifier') {\n local = e\n } else if (e.node && e.node.type === 'RestElement') {\n local = e.get('argument')\n } else {\n return\n }\n if (isIdentifierReferenced(local)) {\n variableState.refs.add(local)\n }\n })\n }\n }\n\n // Mark all variables and functions if used\n programPath.traverse(\n {\n VariableDeclarator: markVariable,\n FunctionDeclaration: markFunction,\n FunctionExpression: markFunction,\n ArrowFunctionExpression: markFunction,\n ImportSpecifier: markImport,\n ImportDefaultSpecifier: markImport,\n ImportNamespaceSpecifier: markImport,\n ExportDefaultDeclaration: markImport,\n // ExportNamedDeclaration(path, state) {\n // if (t.isVariableDeclaration(path.node.declaration)) {\n // if (t.isVariableDeclarator(path.node.declaration.declarations?.[0])) {\n // if (t.isIdentifier(path.node.declaration.declarations[0].id)) {\n // if (\n // keepExports.includes(\n // path.node.declaration.declarations[0].id.name,\n // )\n // ) {\n // return\n // }\n // }\n // path.replaceWith(path.node.declaration.declarations[0])\n // return\n // }\n // }\n // path.remove()\n // },\n ImportDeclaration: (path) => {\n if (path.node.source.value.endsWith('.css')) {\n path.remove()\n }\n },\n },\n state,\n )\n\n // Sweet all of the remaining references and remove unused ones\n const refs: any = state.refs\n let count: number\n function sweepFunction(sweepPath: any) {\n const ident = getIdentifier(sweepPath)\n if (\n ident &&\n ident.node &&\n refs.has(ident) &&\n !isIdentifierReferenced(ident)\n ) {\n ++count\n if (\n t.isAssignmentExpression(sweepPath.parentPath) ||\n t.isVariableDeclarator(sweepPath.parentPath)\n ) {\n sweepPath.parentPath.remove()\n } else {\n sweepPath.remove()\n }\n }\n }\n function sweepImport(sweepPath: any) {\n const local = sweepPath.get('local')\n if (refs.has(local) && !isIdentifierReferenced(local)) {\n ++count\n sweepPath.remove()\n if (sweepPath.parent.specifiers.length === 0) {\n sweepPath.parentPath.remove()\n }\n }\n }\n do {\n programPath.scope.crawl()\n count = 0\n programPath.traverse({\n VariableDeclarator(variablePath) {\n if (variablePath.node.id.type === 'Identifier') {\n const local = variablePath.get('id')\n if (refs.has(local) && !isIdentifierReferenced(local)) {\n ++count\n\n variablePath.remove()\n }\n } else if (variablePath.node.id.type === 'ObjectPattern') {\n const pattern = variablePath.get('id')\n const beforeCount = count\n const properties: any = pattern.get('properties')\n properties.forEach((p: any) => {\n const local = p.get(\n p.node.type === 'ObjectProperty'\n ? 'value'\n : p.node.type === 'RestElement'\n ? 'argument'\n : (function () {\n throw new Error('invariant')\n })(),\n )\n if (refs.has(local) && !isIdentifierReferenced(local)) {\n ++count\n p.remove()\n }\n })\n if (\n beforeCount !== count &&\n (pattern.get('properties') as any).length < 1\n ) {\n variablePath.remove()\n }\n } else if (variablePath.node.id.type === 'ArrayPattern') {\n const pattern = variablePath.get('id')\n const beforeCount = count\n const elements: any = pattern.get('elements')\n elements.forEach((e: any) => {\n let local\n if (e.node && e.node.type === 'Identifier') {\n local = e\n } else if (e.node && e.node.type === 'RestElement') {\n local = e.get('argument')\n } else {\n return\n }\n if (refs.has(local) && !isIdentifierReferenced(local)) {\n ++count\n\n e.remove()\n }\n })\n if (\n beforeCount !== count &&\n (pattern.get('elements') as any).length < 1\n ) {\n variablePath.remove()\n }\n }\n },\n FunctionDeclaration: sweepFunction,\n FunctionExpression: sweepFunction,\n ArrowFunctionExpression: sweepFunction,\n ImportSpecifier: sweepImport,\n ImportDefaultSpecifier: sweepImport,\n ImportNamespaceSpecifier: sweepImport,\n })\n } while (count)\n\n // Do we need the * import for react?\n let hasReact = false\n\n // Mark react elements as having react\n programPath.traverse({\n JSXElement(path) {\n hasReact = true\n },\n })\n\n if (!hasReact) {\n // Mark all variables and functions if used\n programPath.traverse({\n ImportDeclaration(path) {\n if (\n t.isStringLiteral(path.node.source) &&\n path.node.source.value === 'react' &&\n t.isImportNamespaceSpecifier(path.node.specifiers[0])\n ) {\n path.remove()\n }\n },\n })\n }\n}\n"],"names":["isolatedProperties","getBasePlugins","syntaxTS","isTSX","ensureBoilerplate","node","code","relativeImportPath","path","relative","fullDir","genPathNoExt","originalFile","babel","transformAsync","configFile","babelrc","plugins","file","visitor","Program","enter","programPath","isRoot","foundImport","traverse","ImportSpecifier","importPath","t","isIdentifier","imported","name","body","unshift","template","statement","isImportDeclaration","parentPath","source","value","replace","separator","originalHead","substring","indexOf","generatedHead","isolateOptionToExport","opts","plugin","ast","state","Identifier","isCallExpression","options","getRouteOptions","property","properties","find","isObjectProperty","key","isolate","program","findParent","d","isProgram","push","$VAR","isExpressionStatement","remove","getRouteConfigGenerateOptions","cleanUnusedCode","detectExports","exported","ExportNamedDeclaration","isVariableDeclaration","declaration","isVariableDeclarator","declarations","id","generateRouteConfig","routeCode","imports","clientOnly","relativeParentRoutePath","parent","removeExt","genDir","resolve","clientFilename","rootRouteClientName","filename","rootRouteName","pathName","undefined","fileNameNoExt","startsWith","routeId","$IMPORT","iPath","replaceWith","variableDeclaration","variableDeclarator","identifier","isMemberExpression","object","objectProperty","stringLiteral","map","includes","tSAsExpression","booleanLiteral","tsAnyKeyword","expression","tSAnyKeyword","index","findIndex","start","$OPTIONS","variable","Error","getIdentifier","type","pp","get","isIdentifierReferenced","ident","b","scope","getBinding","referenced","constantViolations","concat","referencePaths","every","ref","p","markFunction","refs","add","markImport","local","tryOptions","initNode","init","isObjectExpression","arguments","keepExports","Set","done","markVariable","variablePath","variableState","pattern","forEach","elements","e","VariableDeclarator","FunctionDeclaration","FunctionExpression","ArrowFunctionExpression","ImportDefaultSpecifier","ImportNamespaceSpecifier","ExportDefaultDeclaration","ImportDeclaration","endsWith","count","sweepFunction","sweepPath","has","isAssignmentExpression","sweepImport","specifiers","length","crawl","beforeCount","hasReact","JSXElement","isStringLiteral","isImportNamespaceSpecifier"],"mappings":"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"}
|
package/build/esm/index.js
CHANGED
|
@@ -24,7 +24,7 @@ async function getConfig() {
|
|
|
24
24
|
return fs.readJson(configFilePathJson);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
const isolatedProperties = ['
|
|
27
|
+
const isolatedProperties = ['component', 'errorComponent', 'pendingComponent'];
|
|
28
28
|
const getBasePlugins = () => [[syntaxTS, {
|
|
29
29
|
isTSX: true
|
|
30
30
|
}]];
|
|
@@ -43,24 +43,23 @@ async function ensureBoilerplate(node, code) {
|
|
|
43
43
|
Program: {
|
|
44
44
|
enter(programPath) {
|
|
45
45
|
// Remove all properties except for our isolated one
|
|
46
|
-
|
|
47
46
|
if (node.isRoot) {
|
|
48
47
|
let foundImport = false;
|
|
49
48
|
programPath.traverse({
|
|
50
49
|
ImportSpecifier(importPath) {
|
|
51
|
-
if (t.isIdentifier(importPath.node.imported) && importPath.node.imported.name === '
|
|
50
|
+
if (t.isIdentifier(importPath.node.imported) && importPath.node.imported.name === 'Route') {
|
|
52
51
|
foundImport = true;
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
});
|
|
56
55
|
if (!foundImport) {
|
|
57
|
-
programPath.node.body.unshift(babel.template.statement(`import {
|
|
56
|
+
programPath.node.body.unshift(babel.template.statement(`import { Route } from '@tanstack/react-router'`)());
|
|
58
57
|
}
|
|
59
58
|
} else {
|
|
60
59
|
let foundImport = false;
|
|
61
60
|
programPath.traverse({
|
|
62
61
|
ImportSpecifier(importPath) {
|
|
63
|
-
if (t.isIdentifier(importPath.node.imported) && importPath.node.imported.name ===
|
|
62
|
+
if (t.isIdentifier(importPath.node.imported) && importPath.node.imported.name === 'route') {
|
|
64
63
|
foundImport = true;
|
|
65
64
|
if (t.isImportDeclaration(importPath.parentPath.node)) {
|
|
66
65
|
if (importPath.parentPath.node.source.value !== relativeImportPath) {
|
|
@@ -71,7 +70,7 @@ async function ensureBoilerplate(node, code) {
|
|
|
71
70
|
}
|
|
72
71
|
});
|
|
73
72
|
if (!foundImport) {
|
|
74
|
-
programPath.node.body.unshift(babel.template.statement(`import {
|
|
73
|
+
programPath.node.body.unshift(babel.template.statement(`import { Route } from '${relativeImportPath.replace(/\\/gi, '/')}'`)());
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
76
|
}
|
|
@@ -79,7 +78,7 @@ async function ensureBoilerplate(node, code) {
|
|
|
79
78
|
}
|
|
80
79
|
}]
|
|
81
80
|
});
|
|
82
|
-
const separator =
|
|
81
|
+
const separator = 'new Route(';
|
|
83
82
|
if (!originalFile?.code) {
|
|
84
83
|
return `${file?.code}\n\n${separator}{\n\n})`;
|
|
85
84
|
}
|
|
@@ -106,8 +105,8 @@ async function isolateOptionToExport(node, code, opts) {
|
|
|
106
105
|
if (node.isRoot) {
|
|
107
106
|
programPath.traverse({
|
|
108
107
|
Identifier(path) {
|
|
109
|
-
if (path.node.name === '
|
|
110
|
-
const options =
|
|
108
|
+
if (path.node.name === 'Route' && t.isCallExpression(path.parentPath.node)) {
|
|
109
|
+
const options = getRouteOptions(path);
|
|
111
110
|
if (options) {
|
|
112
111
|
const property = options.properties.find(property => {
|
|
113
112
|
return t.isObjectProperty(property) && t.isIdentifier(property.key) && property.key.name === opts.isolate;
|
|
@@ -115,8 +114,8 @@ async function isolateOptionToExport(node, code, opts) {
|
|
|
115
114
|
if (t.isObjectProperty(property)) {
|
|
116
115
|
const program = path.findParent(d => d.isProgram());
|
|
117
116
|
if (program?.isProgram()) {
|
|
118
|
-
program.node.body.push(babel.template.statement(`export const ${opts.isolate} = $
|
|
119
|
-
$
|
|
117
|
+
program.node.body.push(babel.template.statement(`export const ${opts.isolate} = $VAR`)({
|
|
118
|
+
$VAR: property.value
|
|
120
119
|
}));
|
|
121
120
|
}
|
|
122
121
|
}
|
|
@@ -142,8 +141,8 @@ async function isolateOptionToExport(node, code, opts) {
|
|
|
142
141
|
if (property.key.name === opts.isolate) {
|
|
143
142
|
const program = path.findParent(d => d.isProgram());
|
|
144
143
|
if (program?.isProgram()) {
|
|
145
|
-
program.node.body.push(babel.template.statement(`export const ${opts.isolate} = $
|
|
146
|
-
$
|
|
144
|
+
program.node.body.push(babel.template.statement(`export const ${opts.isolate} = $VAR`)({
|
|
145
|
+
$VAR: property.value
|
|
147
146
|
}));
|
|
148
147
|
}
|
|
149
148
|
}
|
|
@@ -199,11 +198,11 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
|
|
|
199
198
|
ImportSpecifier(path) {
|
|
200
199
|
if (t.isIdentifier(path.node.imported)) {
|
|
201
200
|
if (!node.isRoot) {
|
|
202
|
-
if (path.node.imported.name ===
|
|
201
|
+
if (path.node.imported.name === 'route') {
|
|
203
202
|
path.parentPath.remove();
|
|
204
203
|
const program = path.findParent(d => d.isProgram());
|
|
205
204
|
if (program?.isProgram()) {
|
|
206
|
-
program.node.body.unshift(babel.template.statement(`import {
|
|
205
|
+
program.node.body.unshift(babel.template.statement(`import { route as parentRoute } from '$IMPORT'`)({
|
|
207
206
|
$IMPORT: relativeParentRoutePath
|
|
208
207
|
}));
|
|
209
208
|
}
|
|
@@ -214,10 +213,10 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
|
|
|
214
213
|
Identifier(iPath) {
|
|
215
214
|
let options;
|
|
216
215
|
if (node.isRoot) {
|
|
217
|
-
if (iPath.node.name === '
|
|
216
|
+
if (iPath.node.name === 'Route') {
|
|
218
217
|
if (t.isCallExpression(iPath.parentPath.node)) {
|
|
219
218
|
if (t.isExpressionStatement(iPath.parentPath.parentPath?.node)) {
|
|
220
|
-
iPath.parentPath.parentPath?.replaceWith(t.variableDeclaration('const', [t.variableDeclarator(t.identifier(
|
|
219
|
+
iPath.parentPath.parentPath?.replaceWith(t.variableDeclaration('const', [t.variableDeclarator(t.identifier('route'), iPath.parentPath.node)]));
|
|
221
220
|
}
|
|
222
221
|
}
|
|
223
222
|
}
|
|
@@ -225,8 +224,8 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
|
|
|
225
224
|
if (iPath.node.name === 'generate') {
|
|
226
225
|
if (t.isMemberExpression(iPath.parentPath.node)) {
|
|
227
226
|
if (t.isIdentifier(iPath.parentPath.node.object)) {
|
|
228
|
-
iPath.node.name = '
|
|
229
|
-
iPath.parentPath.node.object.name = '
|
|
227
|
+
iPath.node.name = 'Route';
|
|
228
|
+
iPath.parentPath.node.object.name = 'parentRoute';
|
|
230
229
|
options = getRouteConfigGenerateOptions(iPath);
|
|
231
230
|
}
|
|
232
231
|
}
|
|
@@ -264,13 +263,13 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
|
|
|
264
263
|
if (program?.isProgram() && options) {
|
|
265
264
|
const index = program.node.body.findIndex(d => d.start === iPath.parentPath.parentPath?.node.start);
|
|
266
265
|
if (node.isRoot) {
|
|
267
|
-
program.node.body[index] = babel.template.statement(`const
|
|
266
|
+
program.node.body[index] = babel.template.statement(`const route = new Route(
|
|
268
267
|
$OPTIONS
|
|
269
268
|
)`)({
|
|
270
269
|
$OPTIONS: options
|
|
271
270
|
});
|
|
272
271
|
} else {
|
|
273
|
-
program.node.body[index] = babel.template.statement(`const
|
|
272
|
+
program.node.body[index] = babel.template.statement(`const route = new Route(
|
|
274
273
|
$OPTIONS
|
|
275
274
|
)`)({
|
|
276
275
|
$OPTIONS: options
|
|
@@ -282,9 +281,9 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
|
|
|
282
281
|
});
|
|
283
282
|
programPath.node.body.unshift(babel.template.statement(`import { lazy } from '@tanstack/react-router'`)());
|
|
284
283
|
|
|
285
|
-
// Add the
|
|
286
|
-
programPath.node.body.push(babel.template.statement(clientOnly ? `export {
|
|
287
|
-
cleanUnusedCode(programPath, state, [
|
|
284
|
+
// Add the route exports
|
|
285
|
+
programPath.node.body.push(babel.template.statement(clientOnly ? `export { route, route as ${node.variable}Route }` : `export { route }`)());
|
|
286
|
+
cleanUnusedCode(programPath, state, ['route', `${node.variable}Route`]);
|
|
288
287
|
}
|
|
289
288
|
}
|
|
290
289
|
}
|
|
@@ -357,7 +356,7 @@ function getRouteConfigGenerateOptions(path) {
|
|
|
357
356
|
return tryOptions(options);
|
|
358
357
|
}
|
|
359
358
|
}
|
|
360
|
-
function
|
|
359
|
+
function getRouteOptions(path) {
|
|
361
360
|
const tryOptions = node => {
|
|
362
361
|
if (t.isIdentifier(node)) {
|
|
363
362
|
const initNode = path.scope.getBinding(node.name)?.path.node;
|
|
@@ -721,8 +720,8 @@ async function generator(config) {
|
|
|
721
720
|
node.hash = '';
|
|
722
721
|
}
|
|
723
722
|
}
|
|
724
|
-
routeConfigImports.push(`import {
|
|
725
|
-
routeConfigClientImports.push(`import {
|
|
723
|
+
routeConfigImports.push(`import { route as ${node.variable}Route } from './${removeExt(path.relative(config.routeGenDirectory, node.genPath).replace(/\\/gi, '/'))}'`);
|
|
724
|
+
routeConfigClientImports.push(`import { route as ${node.variable}Route } from './${removeExt(path.relative(config.routeGenDirectory, path.resolve(node.genDir, node.clientFilename)).replace(/\\/gi, '/'))}'`);
|
|
726
725
|
if (node.isRoot) {
|
|
727
726
|
return undefined;
|
|
728
727
|
}
|
|
@@ -738,13 +737,13 @@ async function generator(config) {
|
|
|
738
737
|
const routeConfigChildrenText = await buildRouteConfig(reparented);
|
|
739
738
|
routeConfigImports = multiSortBy(routeConfigImports, [d => d.includes('__root') ? -1 : 1, d => d.split('/').length, d => d.endsWith("index'") ? -1 : 1, d => d]);
|
|
740
739
|
routeConfigClientImports = multiSortBy(routeConfigClientImports, [d => d.includes('__root') ? -1 : 1, d => d.split('/').length, d => d.endsWith("index.client'") ? -1 : 1, d => d]);
|
|
741
|
-
const routeConfig = `export const
|
|
742
|
-
const routeConfigClient = `export const
|
|
740
|
+
const routeConfig = `export const routeTree = rootRoute.addChildren([\n ${routeConfigChildrenText}\n])\nexport type __GeneratedRouteConfig = typeof routeTree`;
|
|
741
|
+
const routeConfigClient = `export const routeTreeClient = rootRoute.addChildren([\n ${routeConfigChildrenText}\n]) as __GeneratedRouteConfig`;
|
|
743
742
|
const routeConfigFileContent = [routeConfigImports.join('\n'), routeConfig].join('\n\n');
|
|
744
|
-
const routeConfigClientFileContent = [`import type { __GeneratedRouteConfig } from './
|
|
743
|
+
const routeConfigClientFileContent = [`import type { __GeneratedRouteConfig } from './routeTree'`, routeConfigClientImports.join('\n'), routeConfigClient].join('\n\n');
|
|
745
744
|
if (nodesChanged) {
|
|
746
|
-
queueWriteFile(path.resolve(config.routeGenDirectory, '
|
|
747
|
-
queueWriteFile(path.resolve(config.routeGenDirectory, '
|
|
745
|
+
queueWriteFile(path.resolve(config.routeGenDirectory, 'routeTree.ts'), routeConfigFileContent);
|
|
746
|
+
queueWriteFile(path.resolve(config.routeGenDirectory, 'routeTree.client.ts'), routeConfigClientFileContent);
|
|
748
747
|
}
|
|
749
748
|
|
|
750
749
|
// Do all of our file system manipulation at the end
|
|
@@ -777,7 +776,7 @@ async function generator(config) {
|
|
|
777
776
|
const newNodes = nodeCache.filter(d => d.new);
|
|
778
777
|
const updatedNodes = nodeCache.filter(d => !d.new && d.changed);
|
|
779
778
|
const unusedFiles = allFiles.filter(d => {
|
|
780
|
-
if (d === path.resolve(config.routeGenDirectory, '
|
|
779
|
+
if (d === path.resolve(config.routeGenDirectory, 'routeTree.ts') || d === path.resolve(config.routeGenDirectory, 'routeTree.client.ts')) {
|
|
781
780
|
return false;
|
|
782
781
|
}
|
|
783
782
|
let node = nodeCache.find(n => n.genPath === d || path.resolve(n.genDir, n.clientFilename) === d || n.importedFiles?.includes(d));
|