@tanstack/router-cli 0.0.1-beta.58 → 0.0.1-beta.63

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.
@@ -190,8 +190,8 @@ async function generator(config) {
190
190
  node.hash = '';
191
191
  }
192
192
  }
193
- routeConfigImports.push(`import { routeConfig as ${node.variable}Route } from './${removeExt(path__default["default"].relative(config.routeGenDirectory, node.genPath).replace(/\\/gi, '/'))}'`);
194
- routeConfigClientImports.push(`import { routeConfig as ${node.variable}Route } from './${removeExt(path__default["default"].relative(config.routeGenDirectory, path__default["default"].resolve(node.genDir, node.clientFilename)).replace(/\\/gi, '/'))}'`);
193
+ routeConfigImports.push(`import { route as ${node.variable}Route } from './${removeExt(path__default["default"].relative(config.routeGenDirectory, node.genPath).replace(/\\/gi, '/'))}'`);
194
+ routeConfigClientImports.push(`import { route as ${node.variable}Route } from './${removeExt(path__default["default"].relative(config.routeGenDirectory, path__default["default"].resolve(node.genDir, node.clientFilename)).replace(/\\/gi, '/'))}'`);
195
195
  if (node.isRoot) {
196
196
  return undefined;
197
197
  }
@@ -207,13 +207,13 @@ async function generator(config) {
207
207
  const routeConfigChildrenText = await buildRouteConfig(reparented);
208
208
  routeConfigImports = multiSortBy(routeConfigImports, [d => d.includes('__root') ? -1 : 1, d => d.split('/').length, d => d.endsWith("index'") ? -1 : 1, d => d]);
209
209
  routeConfigClientImports = multiSortBy(routeConfigClientImports, [d => d.includes('__root') ? -1 : 1, d => d.split('/').length, d => d.endsWith("index.client'") ? -1 : 1, d => d]);
210
- const routeConfig = `export const routeConfig = rootRoute.addChildren([\n ${routeConfigChildrenText}\n])\nexport type __GeneratedRouteConfig = typeof routeConfig`;
211
- const routeConfigClient = `export const routeConfigClient = rootRoute.addChildren([\n ${routeConfigChildrenText}\n]) as __GeneratedRouteConfig`;
210
+ const routeConfig = `export const routeTree = rootRoute.addChildren([\n ${routeConfigChildrenText}\n])\nexport type __GeneratedRouteConfig = typeof routeTree`;
211
+ const routeConfigClient = `export const routeTreeClient = rootRoute.addChildren([\n ${routeConfigChildrenText}\n]) as __GeneratedRouteConfig`;
212
212
  const routeConfigFileContent = [routeConfigImports.join('\n'), routeConfig].join('\n\n');
213
- const routeConfigClientFileContent = [`import type { __GeneratedRouteConfig } from './routeConfig'`, routeConfigClientImports.join('\n'), routeConfigClient].join('\n\n');
213
+ const routeConfigClientFileContent = [`import type { __GeneratedRouteConfig } from './routeTree'`, routeConfigClientImports.join('\n'), routeConfigClient].join('\n\n');
214
214
  if (nodesChanged) {
215
- queueWriteFile(path__default["default"].resolve(config.routeGenDirectory, 'routeConfig.ts'), routeConfigFileContent);
216
- queueWriteFile(path__default["default"].resolve(config.routeGenDirectory, 'routeConfig.client.ts'), routeConfigClientFileContent);
215
+ queueWriteFile(path__default["default"].resolve(config.routeGenDirectory, 'routeTree.ts'), routeConfigFileContent);
216
+ queueWriteFile(path__default["default"].resolve(config.routeGenDirectory, 'routeTree.client.ts'), routeConfigClientFileContent);
217
217
  }
218
218
 
219
219
  // Do all of our file system manipulation at the end
@@ -246,7 +246,7 @@ async function generator(config) {
246
246
  const newNodes = nodeCache.filter(d => d.new);
247
247
  const updatedNodes = nodeCache.filter(d => !d.new && d.changed);
248
248
  const unusedFiles = allFiles.filter(d => {
249
- if (d === path__default["default"].resolve(config.routeGenDirectory, 'routeConfig.ts') || d === path__default["default"].resolve(config.routeGenDirectory, 'routeConfig.client.ts')) {
249
+ if (d === path__default["default"].resolve(config.routeGenDirectory, 'routeTree.ts') || d === path__default["default"].resolve(config.routeGenDirectory, 'routeTree.client.ts')) {
250
250
  return false;
251
251
  }
252
252
  let node = nodeCache.find(n => n.genPath === d || path__default["default"].resolve(n.genDir, n.clientFilename) === d || n.importedFiles?.includes(d));
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sources":["../../src/generator.ts"],"sourcesContent":["import klaw from 'klaw'\nimport through2 from 'through2'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport crypto from 'crypto'\nimport {\n detectExports,\n ensureBoilerplate,\n generateRouteConfig,\n isolatedProperties,\n isolateOptionToExport,\n} from './transformCode'\nimport { Config } from './config'\n\nlet latestTask = 0\nexport const rootRouteName = '__root'\nexport const rootRouteClientName = '__root.client'\n\nexport type RouteNode = {\n filename: string\n clientFilename: string\n fileNameNoExt: string\n fullPath: string\n fullDir: string\n isDirectory: boolean\n isIndex: boolean\n variable: string\n childRoutesDir?: string\n genPath: string\n genDir: string\n genPathNoExt: string\n parent?: RouteNode\n hash?: string\n importedFiles?: string[]\n version?: number\n changed?: boolean\n new?: boolean\n isRoot?: boolean\n children?: RouteNode[]\n}\n\nexport type IsolatedExport = {\n key: string\n exported: boolean\n code?: string | null\n}\n\nlet nodeCache: RouteNode[] = undefined!\n\nexport async function generator(config: Config) {\n console.log()\n\n let first = false\n\n if (!nodeCache) {\n first = true\n console.log('🔄 Generating routes...')\n nodeCache = []\n } else {\n console.log('♻️ Regenerating routes...')\n }\n\n const taskId = latestTask + 1\n latestTask = taskId\n\n const checkLatest = () => {\n if (latestTask !== taskId) {\n console.log(`- Skipping since file changes were made while generating.`)\n return false\n }\n\n return true\n }\n\n const start = Date.now()\n let routeConfigImports: string[] = []\n let routeConfigClientImports: string[] = []\n\n let nodesChanged = false\n const fileQueue: [string, string][] = []\n const queueWriteFile = (filename: string, content: string) => {\n fileQueue.push([filename, content])\n }\n\n async function reparent(dir: string): Promise<RouteNode[]> {\n let dirList\n\n try {\n dirList = await fs.readdir(dir)\n } catch (err) {\n console.log()\n console.error(\n 'TSR: Error reading the config.routesDirectory. Does it exist?',\n )\n console.log()\n throw err\n }\n\n const dirListCombo = multiSortBy(\n await Promise.all(\n dirList.map(async (filename): Promise<RouteNode> => {\n const fullPath = path.resolve(dir, filename)\n const stat = await fs.lstat(fullPath)\n const ext = path.extname(filename)\n\n const clientFilename = filename.replace(ext, `.client${ext}`)\n\n const pathFromRoutes = path.relative(config.routesDirectory, fullPath)\n const genPath = path.resolve(config.routeGenDirectory, pathFromRoutes)\n\n const genPathNoExt = removeExt(genPath)\n const genDir = path.resolve(genPath, '..')\n\n const fileNameNoExt = removeExt(filename)\n\n return {\n filename,\n clientFilename,\n fileNameNoExt,\n fullPath,\n fullDir: dir,\n genPath,\n genDir,\n genPathNoExt,\n variable: fileToVariable(removeExt(pathFromRoutes)),\n isDirectory: stat.isDirectory(),\n isIndex: fileNameNoExt === 'index',\n }\n }),\n ),\n [\n (d) => (d.fileNameNoExt === 'index' ? -1 : 1),\n (d) => d.fileNameNoExt,\n (d) => (d.isDirectory ? 1 : -1),\n ],\n )\n\n const reparented: typeof dirListCombo = []\n\n dirListCombo.forEach(async (d, i) => {\n if (d.isDirectory) {\n const parent = reparented.find(\n (dd) => !dd.isDirectory && dd.fileNameNoExt === d.filename,\n )\n\n if (parent) {\n parent.childRoutesDir = d.fullPath\n } else {\n reparented.push(d)\n }\n } else {\n reparented.push(d)\n }\n })\n\n return Promise.all(\n reparented.map(async (d) => {\n if (d.childRoutesDir) {\n const children = await reparent(d.childRoutesDir)\n\n d = {\n ...d,\n children,\n }\n\n children.forEach((child) => (child.parent = d))\n\n return d\n }\n return d\n }),\n )\n }\n\n const reparented = await reparent(config.routesDirectory)\n\n async function buildRouteConfig(\n nodes: RouteNode[],\n depth = 1,\n ): Promise<string> {\n const children = nodes.map(async (n) => {\n let node = nodeCache.find((d) => d.fullPath === n.fullPath)!\n\n if (node) {\n node.new = false\n } else {\n node = n\n nodeCache.push(node)\n if (!first) {\n node.new = true\n }\n }\n\n node.version = latestTask\n if (node.fileNameNoExt === '__root') {\n node.isRoot = true\n }\n\n const routeCode = await fs.readFile(node.fullPath, 'utf-8')\n\n const hashSum = crypto.createHash('sha256')\n hashSum.update(routeCode)\n const hash = hashSum.digest('hex')\n\n node.changed = node.hash !== hash\n if (node.changed) {\n nodesChanged = true\n node.hash = hash\n\n try {\n // Ensure the boilerplate for the route exists\n const code = await ensureBoilerplate(node, routeCode)\n\n if (code) {\n await fs.writeFile(node.fullPath, code)\n }\n\n let imports: IsolatedExport[] = []\n\n if (!node.isRoot) {\n // Generate the isolated files\n const transforms = await Promise.all(\n isolatedProperties.map(async (key): Promise<IsolatedExport> => {\n let exported = false\n let exports: string[] = []\n\n const transformed = await isolateOptionToExport(\n node,\n routeCode,\n {\n isolate: key,\n },\n )\n\n if (transformed) {\n exports = await detectExports(transformed)\n if (exports.includes(key)) {\n exported = true\n }\n }\n\n return { key, exported, code: transformed }\n }),\n )\n\n imports = transforms.filter(({ exported }) => exported)\n\n node.importedFiles = await Promise.all(\n imports.map(({ key, code }) => {\n const importFilename = `${node.genPathNoExt}-${key}.tsx`\n queueWriteFile(importFilename, code!)\n return importFilename\n }),\n )\n }\n\n const routeConfigCode = await generateRouteConfig(\n node,\n routeCode,\n imports,\n false,\n )\n\n const clientRouteConfigCode = await generateRouteConfig(\n node,\n routeCode,\n imports,\n true,\n )\n\n queueWriteFile(node.genPath, routeConfigCode)\n queueWriteFile(\n path.resolve(node.genDir, node.clientFilename),\n clientRouteConfigCode,\n )\n } catch (err) {\n node.hash = ''\n }\n }\n\n routeConfigImports.push(\n `import { routeConfig as ${node.variable}Route } from './${removeExt(\n path\n .relative(config.routeGenDirectory, node.genPath)\n .replace(/\\\\/gi, '/'),\n )}'`,\n )\n\n routeConfigClientImports.push(\n `import { routeConfig as ${node.variable}Route } from './${removeExt(\n path\n .relative(\n config.routeGenDirectory,\n path.resolve(node.genDir, node.clientFilename),\n )\n .replace(/\\\\/gi, '/'),\n )}'`,\n )\n\n if (node.isRoot) {\n return undefined\n }\n\n const route = `${node.variable}Route`\n\n if (node.children?.length) {\n const childConfigs = await buildRouteConfig(node.children, depth + 1)\n return `${route}.addChildren([\\n${spaces(\n depth * 4,\n )}${childConfigs}\\n${spaces(depth * 2)}])`\n }\n\n return route\n })\n\n return (await Promise.all(children))\n .filter(Boolean)\n .join(`,\\n${spaces(depth * 2)}`)\n }\n\n const routeConfigChildrenText = await buildRouteConfig(reparented)\n\n routeConfigImports = multiSortBy(routeConfigImports, [\n (d) => (d.includes('__root') ? -1 : 1),\n (d) => d.split('/').length,\n (d) => (d.endsWith(\"index'\") ? -1 : 1),\n (d) => d,\n ])\n\n routeConfigClientImports = multiSortBy(routeConfigClientImports, [\n (d) => (d.includes('__root') ? -1 : 1),\n (d) => d.split('/').length,\n (d) => (d.endsWith(\"index.client'\") ? -1 : 1),\n (d) => d,\n ])\n\n const routeConfig = `export const routeConfig = rootRoute.addChildren([\\n ${routeConfigChildrenText}\\n])\\nexport type __GeneratedRouteConfig = typeof routeConfig`\n const routeConfigClient = `export const routeConfigClient = rootRoute.addChildren([\\n ${routeConfigChildrenText}\\n]) as __GeneratedRouteConfig`\n\n const routeConfigFileContent = [\n routeConfigImports.join('\\n'),\n routeConfig,\n ].join('\\n\\n')\n\n const routeConfigClientFileContent = [\n `import type { __GeneratedRouteConfig } from './routeConfig'`,\n routeConfigClientImports.join('\\n'),\n routeConfigClient,\n ].join('\\n\\n')\n\n if (nodesChanged) {\n queueWriteFile(\n path.resolve(config.routeGenDirectory, 'routeConfig.ts'),\n routeConfigFileContent,\n )\n queueWriteFile(\n path.resolve(config.routeGenDirectory, 'routeConfig.client.ts'),\n routeConfigClientFileContent,\n )\n }\n\n // Do all of our file system manipulation at the end\n await fs.mkdir(config.routeGenDirectory, { recursive: true })\n\n if (!checkLatest()) return\n\n await Promise.all(\n fileQueue.map(async ([filename, content]) => {\n await fs.ensureDir(path.dirname(filename))\n const exists = await fs.pathExists(filename)\n let current = ''\n if (exists) {\n current = await fs.readFile(filename, 'utf-8')\n }\n if (current !== content) {\n await fs.writeFile(filename, content)\n }\n }),\n )\n\n if (!checkLatest()) return\n\n const allFiles = await getAllFiles(config.routeGenDirectory)\n\n if (!checkLatest()) return\n\n const removedNodes: RouteNode[] = []\n\n nodeCache = nodeCache.filter((d) => {\n if (d.version !== latestTask) {\n removedNodes.push(d)\n return false\n }\n return true\n })\n\n const newNodes = nodeCache.filter((d) => d.new)\n const updatedNodes = nodeCache.filter((d) => !d.new && d.changed)\n\n const unusedFiles = allFiles.filter((d) => {\n if (\n d === path.resolve(config.routeGenDirectory, 'routeConfig.ts') ||\n d === path.resolve(config.routeGenDirectory, 'routeConfig.client.ts')\n ) {\n return false\n }\n\n let node = nodeCache.find(\n (n) =>\n n.genPath === d ||\n path.resolve(n.genDir, n.clientFilename) === d ||\n n.importedFiles?.includes(d),\n )\n\n return !node\n })\n\n await Promise.all(\n unusedFiles.map((d) => {\n fs.remove(d)\n }),\n )\n\n console.log(\n `🌲 Processed ${nodeCache.length} routes in ${Date.now() - start}ms`,\n )\n\n if (newNodes.length || updatedNodes.length || removedNodes.length) {\n if (newNodes.length) {\n console.log(`🥳 Added ${newNodes.length} new routes`)\n }\n\n if (updatedNodes.length) {\n console.log(`✅ Updated ${updatedNodes.length} routes`)\n }\n\n if (removedNodes.length) {\n console.log(`🗑 Removed ${removedNodes.length} unused routes`)\n }\n } else {\n console.log(`🎉 No changes were found. Carry on!`)\n }\n}\n\nfunction getAllFiles(dir: string): Promise<string[]> {\n return new Promise((resolve, reject) => {\n const excludeDirFilter = through2.obj(function (item, enc, next) {\n if (!item.stats.isDirectory()) this.push(item)\n next()\n })\n\n const items: string[] = []\n\n klaw(dir)\n .pipe(excludeDirFilter)\n .on('data', (item) => items.push(item.path))\n .on('error', (err) => reject(err))\n .on('end', () => resolve(items))\n })\n}\n\nfunction fileToVariable(d: string) {\n return d\n .split('/')\n .map((d, i) => (i > 0 ? capitalize(d) : d))\n .join('')\n .replace(/([^a-zA-Z0-9]|[\\.])/gm, '')\n}\n\nexport function removeExt(d: string) {\n return d.substring(0, d.lastIndexOf('.')) || d\n}\n\nfunction spaces(d: number): string {\n return Array.from({ length: d })\n .map(() => ' ')\n .join('')\n}\n\nexport function multiSortBy<T>(\n arr: T[],\n accessors: ((item: T) => any)[] = [(d) => d],\n): T[] {\n return arr\n .map((d, i) => [d, i] as const)\n .sort(([a, ai], [b, bi]) => {\n for (const accessor of accessors) {\n const ao = accessor(a)\n const bo = accessor(b)\n\n if (typeof ao === 'undefined') {\n if (typeof bo === 'undefined') {\n continue\n }\n return 1\n }\n\n if (ao === bo) {\n continue\n }\n\n return ao > bo ? 1 : -1\n }\n\n return ai - bi\n })\n .map(([d]) => d)\n}\n\nfunction capitalize(s: string) {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n"],"names":["latestTask","rootRouteName","rootRouteClientName","nodeCache","undefined","generator","config","console","log","first","taskId","checkLatest","start","Date","now","routeConfigImports","routeConfigClientImports","nodesChanged","fileQueue","queueWriteFile","filename","content","push","reparent","dir","dirList","fs","readdir","err","error","dirListCombo","multiSortBy","Promise","all","map","fullPath","path","resolve","stat","lstat","ext","extname","clientFilename","replace","pathFromRoutes","relative","routesDirectory","genPath","routeGenDirectory","genPathNoExt","removeExt","genDir","fileNameNoExt","fullDir","variable","fileToVariable","isDirectory","isIndex","d","reparented","forEach","i","parent","find","dd","childRoutesDir","children","child","buildRouteConfig","nodes","depth","n","node","new","version","isRoot","routeCode","readFile","hashSum","crypto","createHash","update","hash","digest","changed","code","ensureBoilerplate","writeFile","imports","transforms","isolatedProperties","key","exported","exports","transformed","isolateOptionToExport","isolate","detectExports","includes","filter","importedFiles","importFilename","routeConfigCode","generateRouteConfig","clientRouteConfigCode","route","length","childConfigs","spaces","Boolean","join","routeConfigChildrenText","split","endsWith","routeConfig","routeConfigClient","routeConfigFileContent","routeConfigClientFileContent","mkdir","recursive","ensureDir","dirname","exists","pathExists","current","allFiles","getAllFiles","removedNodes","newNodes","updatedNodes","unusedFiles","remove","reject","excludeDirFilter","through2","obj","item","enc","next","stats","items","klaw","pipe","on","capitalize","substring","lastIndexOf","Array","from","arr","accessors","sort","a","ai","b","bi","accessor","ao","bo","s","charAt","toUpperCase","slice"],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sources":["../../src/generator.ts"],"sourcesContent":["import klaw from 'klaw'\nimport through2 from 'through2'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport crypto from 'crypto'\nimport {\n detectExports,\n ensureBoilerplate,\n generateRouteConfig,\n isolatedProperties,\n isolateOptionToExport,\n} from './transformCode'\nimport { Config } from './config'\n\nlet latestTask = 0\nexport const rootRouteName = '__root'\nexport const rootRouteClientName = '__root.client'\n\nexport type RouteNode = {\n filename: string\n clientFilename: string\n fileNameNoExt: string\n fullPath: string\n fullDir: string\n isDirectory: boolean\n isIndex: boolean\n variable: string\n childRoutesDir?: string\n genPath: string\n genDir: string\n genPathNoExt: string\n parent?: RouteNode\n hash?: string\n importedFiles?: string[]\n version?: number\n changed?: boolean\n new?: boolean\n isRoot?: boolean\n children?: RouteNode[]\n}\n\nexport type IsolatedExport = {\n key: string\n exported: boolean\n code?: string | null\n}\n\nlet nodeCache: RouteNode[] = undefined!\n\nexport async function generator(config: Config) {\n console.log()\n\n let first = false\n\n if (!nodeCache) {\n first = true\n console.log('🔄 Generating routes...')\n nodeCache = []\n } else {\n console.log('♻️ Regenerating routes...')\n }\n\n const taskId = latestTask + 1\n latestTask = taskId\n\n const checkLatest = () => {\n if (latestTask !== taskId) {\n console.log(`- Skipping since file changes were made while generating.`)\n return false\n }\n\n return true\n }\n\n const start = Date.now()\n let routeConfigImports: string[] = []\n let routeConfigClientImports: string[] = []\n\n let nodesChanged = false\n const fileQueue: [string, string][] = []\n const queueWriteFile = (filename: string, content: string) => {\n fileQueue.push([filename, content])\n }\n\n async function reparent(dir: string): Promise<RouteNode[]> {\n let dirList\n\n try {\n dirList = await fs.readdir(dir)\n } catch (err) {\n console.log()\n console.error(\n 'TSR: Error reading the config.routesDirectory. Does it exist?',\n )\n console.log()\n throw err\n }\n\n const dirListCombo = multiSortBy(\n await Promise.all(\n dirList.map(async (filename): Promise<RouteNode> => {\n const fullPath = path.resolve(dir, filename)\n const stat = await fs.lstat(fullPath)\n const ext = path.extname(filename)\n\n const clientFilename = filename.replace(ext, `.client${ext}`)\n\n const pathFromRoutes = path.relative(config.routesDirectory, fullPath)\n const genPath = path.resolve(config.routeGenDirectory, pathFromRoutes)\n\n const genPathNoExt = removeExt(genPath)\n const genDir = path.resolve(genPath, '..')\n\n const fileNameNoExt = removeExt(filename)\n\n return {\n filename,\n clientFilename,\n fileNameNoExt,\n fullPath,\n fullDir: dir,\n genPath,\n genDir,\n genPathNoExt,\n variable: fileToVariable(removeExt(pathFromRoutes)),\n isDirectory: stat.isDirectory(),\n isIndex: fileNameNoExt === 'index',\n }\n }),\n ),\n [\n (d) => (d.fileNameNoExt === 'index' ? -1 : 1),\n (d) => d.fileNameNoExt,\n (d) => (d.isDirectory ? 1 : -1),\n ],\n )\n\n const reparented: typeof dirListCombo = []\n\n dirListCombo.forEach(async (d, i) => {\n if (d.isDirectory) {\n const parent = reparented.find(\n (dd) => !dd.isDirectory && dd.fileNameNoExt === d.filename,\n )\n\n if (parent) {\n parent.childRoutesDir = d.fullPath\n } else {\n reparented.push(d)\n }\n } else {\n reparented.push(d)\n }\n })\n\n return Promise.all(\n reparented.map(async (d) => {\n if (d.childRoutesDir) {\n const children = await reparent(d.childRoutesDir)\n\n d = {\n ...d,\n children,\n }\n\n children.forEach((child) => (child.parent = d))\n\n return d\n }\n return d\n }),\n )\n }\n\n const reparented = await reparent(config.routesDirectory)\n\n async function buildRouteConfig(\n nodes: RouteNode[],\n depth = 1,\n ): Promise<string> {\n const children = nodes.map(async (n) => {\n let node = nodeCache.find((d) => d.fullPath === n.fullPath)!\n\n if (node) {\n node.new = false\n } else {\n node = n\n nodeCache.push(node)\n if (!first) {\n node.new = true\n }\n }\n\n node.version = latestTask\n if (node.fileNameNoExt === '__root') {\n node.isRoot = true\n }\n\n const routeCode = await fs.readFile(node.fullPath, 'utf-8')\n\n const hashSum = crypto.createHash('sha256')\n hashSum.update(routeCode)\n const hash = hashSum.digest('hex')\n\n node.changed = node.hash !== hash\n if (node.changed) {\n nodesChanged = true\n node.hash = hash\n\n try {\n // Ensure the boilerplate for the route exists\n const code = await ensureBoilerplate(node, routeCode)\n\n if (code) {\n await fs.writeFile(node.fullPath, code)\n }\n\n let imports: IsolatedExport[] = []\n\n if (!node.isRoot) {\n // Generate the isolated files\n const transforms = await Promise.all(\n isolatedProperties.map(async (key): Promise<IsolatedExport> => {\n let exported = false\n let exports: string[] = []\n\n const transformed = await isolateOptionToExport(\n node,\n routeCode,\n {\n isolate: key,\n },\n )\n\n if (transformed) {\n exports = await detectExports(transformed)\n if (exports.includes(key)) {\n exported = true\n }\n }\n\n return { key, exported, code: transformed }\n }),\n )\n\n imports = transforms.filter(({ exported }) => exported)\n\n node.importedFiles = await Promise.all(\n imports.map(({ key, code }) => {\n const importFilename = `${node.genPathNoExt}-${key}.tsx`\n queueWriteFile(importFilename, code!)\n return importFilename\n }),\n )\n }\n\n const routeConfigCode = await generateRouteConfig(\n node,\n routeCode,\n imports,\n false,\n )\n\n const clientRouteConfigCode = await generateRouteConfig(\n node,\n routeCode,\n imports,\n true,\n )\n\n queueWriteFile(node.genPath, routeConfigCode)\n queueWriteFile(\n path.resolve(node.genDir, node.clientFilename),\n clientRouteConfigCode,\n )\n } catch (err) {\n node.hash = ''\n }\n }\n\n routeConfigImports.push(\n `import { route as ${node.variable}Route } from './${removeExt(\n path\n .relative(config.routeGenDirectory, node.genPath)\n .replace(/\\\\/gi, '/'),\n )}'`,\n )\n\n routeConfigClientImports.push(\n `import { route as ${node.variable}Route } from './${removeExt(\n path\n .relative(\n config.routeGenDirectory,\n path.resolve(node.genDir, node.clientFilename),\n )\n .replace(/\\\\/gi, '/'),\n )}'`,\n )\n\n if (node.isRoot) {\n return undefined\n }\n\n const route = `${node.variable}Route`\n\n if (node.children?.length) {\n const childConfigs = await buildRouteConfig(node.children, depth + 1)\n return `${route}.addChildren([\\n${spaces(\n depth * 4,\n )}${childConfigs}\\n${spaces(depth * 2)}])`\n }\n\n return route\n })\n\n return (await Promise.all(children))\n .filter(Boolean)\n .join(`,\\n${spaces(depth * 2)}`)\n }\n\n const routeConfigChildrenText = await buildRouteConfig(reparented)\n\n routeConfigImports = multiSortBy(routeConfigImports, [\n (d) => (d.includes('__root') ? -1 : 1),\n (d) => d.split('/').length,\n (d) => (d.endsWith(\"index'\") ? -1 : 1),\n (d) => d,\n ])\n\n routeConfigClientImports = multiSortBy(routeConfigClientImports, [\n (d) => (d.includes('__root') ? -1 : 1),\n (d) => d.split('/').length,\n (d) => (d.endsWith(\"index.client'\") ? -1 : 1),\n (d) => d,\n ])\n\n const routeConfig = `export const routeTree = rootRoute.addChildren([\\n ${routeConfigChildrenText}\\n])\\nexport type __GeneratedRouteConfig = typeof routeTree`\n const routeConfigClient = `export const routeTreeClient = rootRoute.addChildren([\\n ${routeConfigChildrenText}\\n]) as __GeneratedRouteConfig`\n\n const routeConfigFileContent = [\n routeConfigImports.join('\\n'),\n routeConfig,\n ].join('\\n\\n')\n\n const routeConfigClientFileContent = [\n `import type { __GeneratedRouteConfig } from './routeTree'`,\n routeConfigClientImports.join('\\n'),\n routeConfigClient,\n ].join('\\n\\n')\n\n if (nodesChanged) {\n queueWriteFile(\n path.resolve(config.routeGenDirectory, 'routeTree.ts'),\n routeConfigFileContent,\n )\n queueWriteFile(\n path.resolve(config.routeGenDirectory, 'routeTree.client.ts'),\n routeConfigClientFileContent,\n )\n }\n\n // Do all of our file system manipulation at the end\n await fs.mkdir(config.routeGenDirectory, { recursive: true })\n\n if (!checkLatest()) return\n\n await Promise.all(\n fileQueue.map(async ([filename, content]) => {\n await fs.ensureDir(path.dirname(filename))\n const exists = await fs.pathExists(filename)\n let current = ''\n if (exists) {\n current = await fs.readFile(filename, 'utf-8')\n }\n if (current !== content) {\n await fs.writeFile(filename, content)\n }\n }),\n )\n\n if (!checkLatest()) return\n\n const allFiles = await getAllFiles(config.routeGenDirectory)\n\n if (!checkLatest()) return\n\n const removedNodes: RouteNode[] = []\n\n nodeCache = nodeCache.filter((d) => {\n if (d.version !== latestTask) {\n removedNodes.push(d)\n return false\n }\n return true\n })\n\n const newNodes = nodeCache.filter((d) => d.new)\n const updatedNodes = nodeCache.filter((d) => !d.new && d.changed)\n\n const unusedFiles = allFiles.filter((d) => {\n if (\n d === path.resolve(config.routeGenDirectory, 'routeTree.ts') ||\n d === path.resolve(config.routeGenDirectory, 'routeTree.client.ts')\n ) {\n return false\n }\n\n let node = nodeCache.find(\n (n) =>\n n.genPath === d ||\n path.resolve(n.genDir, n.clientFilename) === d ||\n n.importedFiles?.includes(d),\n )\n\n return !node\n })\n\n await Promise.all(\n unusedFiles.map((d) => {\n fs.remove(d)\n }),\n )\n\n console.log(\n `🌲 Processed ${nodeCache.length} routes in ${Date.now() - start}ms`,\n )\n\n if (newNodes.length || updatedNodes.length || removedNodes.length) {\n if (newNodes.length) {\n console.log(`🥳 Added ${newNodes.length} new routes`)\n }\n\n if (updatedNodes.length) {\n console.log(`✅ Updated ${updatedNodes.length} routes`)\n }\n\n if (removedNodes.length) {\n console.log(`🗑 Removed ${removedNodes.length} unused routes`)\n }\n } else {\n console.log(`🎉 No changes were found. Carry on!`)\n }\n}\n\nfunction getAllFiles(dir: string): Promise<string[]> {\n return new Promise((resolve, reject) => {\n const excludeDirFilter = through2.obj(function (item, enc, next) {\n if (!item.stats.isDirectory()) this.push(item)\n next()\n })\n\n const items: string[] = []\n\n klaw(dir)\n .pipe(excludeDirFilter)\n .on('data', (item) => items.push(item.path))\n .on('error', (err) => reject(err))\n .on('end', () => resolve(items))\n })\n}\n\nfunction fileToVariable(d: string) {\n return d\n .split('/')\n .map((d, i) => (i > 0 ? capitalize(d) : d))\n .join('')\n .replace(/([^a-zA-Z0-9]|[\\.])/gm, '')\n}\n\nexport function removeExt(d: string) {\n return d.substring(0, d.lastIndexOf('.')) || d\n}\n\nfunction spaces(d: number): string {\n return Array.from({ length: d })\n .map(() => ' ')\n .join('')\n}\n\nexport function multiSortBy<T>(\n arr: T[],\n accessors: ((item: T) => any)[] = [(d) => d],\n): T[] {\n return arr\n .map((d, i) => [d, i] as const)\n .sort(([a, ai], [b, bi]) => {\n for (const accessor of accessors) {\n const ao = accessor(a)\n const bo = accessor(b)\n\n if (typeof ao === 'undefined') {\n if (typeof bo === 'undefined') {\n continue\n }\n return 1\n }\n\n if (ao === bo) {\n continue\n }\n\n return ao > bo ? 1 : -1\n }\n\n return ai - bi\n })\n .map(([d]) => d)\n}\n\nfunction capitalize(s: string) {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n"],"names":["latestTask","rootRouteName","rootRouteClientName","nodeCache","undefined","generator","config","console","log","first","taskId","checkLatest","start","Date","now","routeConfigImports","routeConfigClientImports","nodesChanged","fileQueue","queueWriteFile","filename","content","push","reparent","dir","dirList","fs","readdir","err","error","dirListCombo","multiSortBy","Promise","all","map","fullPath","path","resolve","stat","lstat","ext","extname","clientFilename","replace","pathFromRoutes","relative","routesDirectory","genPath","routeGenDirectory","genPathNoExt","removeExt","genDir","fileNameNoExt","fullDir","variable","fileToVariable","isDirectory","isIndex","d","reparented","forEach","i","parent","find","dd","childRoutesDir","children","child","buildRouteConfig","nodes","depth","n","node","new","version","isRoot","routeCode","readFile","hashSum","crypto","createHash","update","hash","digest","changed","code","ensureBoilerplate","writeFile","imports","transforms","isolatedProperties","key","exported","exports","transformed","isolateOptionToExport","isolate","detectExports","includes","filter","importedFiles","importFilename","routeConfigCode","generateRouteConfig","clientRouteConfigCode","route","length","childConfigs","spaces","Boolean","join","routeConfigChildrenText","split","endsWith","routeConfig","routeConfigClient","routeConfigFileContent","routeConfigClientFileContent","mkdir","recursive","ensureDir","dirname","exists","pathExists","current","allFiles","getAllFiles","removedNodes","newNodes","updatedNodes","unusedFiles","remove","reject","excludeDirFilter","through2","obj","item","enc","next","stats","items","klaw","pipe","on","capitalize","substring","lastIndexOf","Array","from","arr","accessors","sort","a","ai","b","bi","accessor","ao","bo","s","charAt","toUpperCase","slice"],"mappings":"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"}
@@ -43,7 +43,7 @@ var t__namespace = /*#__PURE__*/_interopNamespace(t);
43
43
  var syntaxTS__default = /*#__PURE__*/_interopDefaultLegacy(syntaxTS);
44
44
  var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
45
45
 
46
- const isolatedProperties = ['loader', 'action', 'component', 'errorComponent', 'pendingComponent'];
46
+ const isolatedProperties = ['component', 'errorComponent', 'pendingComponent'];
47
47
  const getBasePlugins = () => [[syntaxTS__default["default"], {
48
48
  isTSX: true
49
49
  }]];
@@ -62,24 +62,23 @@ async function ensureBoilerplate(node, code) {
62
62
  Program: {
63
63
  enter(programPath) {
64
64
  // Remove all properties except for our isolated one
65
-
66
65
  if (node.isRoot) {
67
66
  let foundImport = false;
68
67
  programPath.traverse({
69
68
  ImportSpecifier(importPath) {
70
- if (t__namespace.isIdentifier(importPath.node.imported) && importPath.node.imported.name === 'createRouteConfig') {
69
+ if (t__namespace.isIdentifier(importPath.node.imported) && importPath.node.imported.name === 'Route') {
71
70
  foundImport = true;
72
71
  }
73
72
  }
74
73
  });
75
74
  if (!foundImport) {
76
- programPath.node.body.unshift(babel__namespace.template.statement(`import { createRouteConfig } from '@tanstack/react-router'`)());
75
+ programPath.node.body.unshift(babel__namespace.template.statement(`import { Route } from '@tanstack/react-router'`)());
77
76
  }
78
77
  } else {
79
78
  let foundImport = false;
80
79
  programPath.traverse({
81
80
  ImportSpecifier(importPath) {
82
- if (t__namespace.isIdentifier(importPath.node.imported) && importPath.node.imported.name === rootRoute) {
81
+ if (t__namespace.isIdentifier(importPath.node.imported) && importPath.node.imported.name === 'route') {
83
82
  foundImport = true;
84
83
  if (t__namespace.isImportDeclaration(importPath.parentPath.node)) {
85
84
  if (importPath.parentPath.node.source.value !== relativeImportPath) {
@@ -90,7 +89,7 @@ async function ensureBoilerplate(node, code) {
90
89
  }
91
90
  });
92
91
  if (!foundImport) {
93
- programPath.node.body.unshift(babel__namespace.template.statement(`import { routeConfig } from '${relativeImportPath.replace(/\\/gi, '/')}'`)());
92
+ programPath.node.body.unshift(babel__namespace.template.statement(`import { route } from '${relativeImportPath.replace(/\\/gi, '/')}'`)());
94
93
  }
95
94
  }
96
95
  }
@@ -98,7 +97,7 @@ async function ensureBoilerplate(node, code) {
98
97
  }
99
98
  }]
100
99
  });
101
- const separator = node.isRoot ? 'createRouteConfig(' : 'routeConfig.generate(';
100
+ const separator = 'new Route(';
102
101
  if (!originalFile?.code) {
103
102
  return `${file?.code}\n\n${separator}{\n\n})`;
104
103
  }
@@ -125,7 +124,7 @@ async function isolateOptionToExport(node, code, opts) {
125
124
  if (node.isRoot) {
126
125
  programPath.traverse({
127
126
  Identifier(path) {
128
- if (path.node.name === 'createRouteConfig' && t__namespace.isCallExpression(path.parentPath.node)) {
127
+ if (path.node.name === 'Route' && t__namespace.isCallExpression(path.parentPath.node)) {
129
128
  const options = getCreateRouteConfigOptions(path);
130
129
  if (options) {
131
130
  const property = options.properties.find(property => {
@@ -134,8 +133,8 @@ async function isolateOptionToExport(node, code, opts) {
134
133
  if (t__namespace.isObjectProperty(property)) {
135
134
  const program = path.findParent(d => d.isProgram());
136
135
  if (program?.isProgram()) {
137
- program.node.body.push(babel__namespace.template.statement(`export const ${opts.isolate} = $LOADER`)({
138
- $LOADER: property.value
136
+ program.node.body.push(babel__namespace.template.statement(`export const ${opts.isolate} = $VAR`)({
137
+ $VAR: property.value
139
138
  }));
140
139
  }
141
140
  }
@@ -161,8 +160,8 @@ async function isolateOptionToExport(node, code, opts) {
161
160
  if (property.key.name === opts.isolate) {
162
161
  const program = path.findParent(d => d.isProgram());
163
162
  if (program?.isProgram()) {
164
- program.node.body.push(babel__namespace.template.statement(`export const ${opts.isolate} = $LOADER`)({
165
- $LOADER: property.value
163
+ program.node.body.push(babel__namespace.template.statement(`export const ${opts.isolate} = $VAR`)({
164
+ $VAR: property.value
166
165
  }));
167
166
  }
168
167
  }
@@ -218,11 +217,11 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
218
217
  ImportSpecifier(path) {
219
218
  if (t__namespace.isIdentifier(path.node.imported)) {
220
219
  if (!node.isRoot) {
221
- if (path.node.imported.name === rootRoute) {
220
+ if (path.node.imported.name === 'route') {
222
221
  path.parentPath.remove();
223
222
  const program = path.findParent(d => d.isProgram());
224
223
  if (program?.isProgram()) {
225
- program.node.body.unshift(babel__namespace.template.statement(`import { routeConfig as parentRouteConfig } from '$IMPORT'`)({
224
+ program.node.body.unshift(babel__namespace.template.statement(`import { route as parentRoute } from '$IMPORT'`)({
226
225
  $IMPORT: relativeParentRoutePath
227
226
  }));
228
227
  }
@@ -233,10 +232,10 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
233
232
  Identifier(iPath) {
234
233
  let options;
235
234
  if (node.isRoot) {
236
- if (iPath.node.name === 'createRouteConfig') {
235
+ if (iPath.node.name === 'Route') {
237
236
  if (t__namespace.isCallExpression(iPath.parentPath.node)) {
238
237
  if (t__namespace.isExpressionStatement(iPath.parentPath.parentPath?.node)) {
239
- iPath.parentPath.parentPath?.replaceWith(t__namespace.variableDeclaration('const', [t__namespace.variableDeclarator(t__namespace.identifier(rootRoute), iPath.parentPath.node)]));
238
+ iPath.parentPath.parentPath?.replaceWith(t__namespace.variableDeclaration('const', [t__namespace.variableDeclarator(t__namespace.identifier('route'), iPath.parentPath.node)]));
240
239
  }
241
240
  }
242
241
  }
@@ -244,8 +243,8 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
244
243
  if (iPath.node.name === 'generate') {
245
244
  if (t__namespace.isMemberExpression(iPath.parentPath.node)) {
246
245
  if (t__namespace.isIdentifier(iPath.parentPath.node.object)) {
247
- iPath.node.name = 'createRoute';
248
- iPath.parentPath.node.object.name = 'parentRouteConfig';
246
+ iPath.node.name = 'Route';
247
+ iPath.parentPath.node.object.name = 'parentRoute';
249
248
  options = getRouteConfigGenerateOptions(iPath);
250
249
  }
251
250
  }
@@ -283,13 +282,13 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
283
282
  if (program?.isProgram() && options) {
284
283
  const index = program.node.body.findIndex(d => d.start === iPath.parentPath.parentPath?.node.start);
285
284
  if (node.isRoot) {
286
- program.node.body[index] = babel__namespace.template.statement(`const routeConfig = createRouteConfig(
285
+ program.node.body[index] = babel__namespace.template.statement(`const route = new Route(
287
286
  $OPTIONS
288
287
  )`)({
289
288
  $OPTIONS: options
290
289
  });
291
290
  } else {
292
- program.node.body[index] = babel__namespace.template.statement(`const routeConfig = parentRouteConfig.createRoute(
291
+ program.node.body[index] = babel__namespace.template.statement(`const route = new Route(
293
292
  $OPTIONS
294
293
  )`)({
295
294
  $OPTIONS: options
@@ -301,9 +300,9 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
301
300
  });
302
301
  programPath.node.body.unshift(babel__namespace.template.statement(`import { lazy } from '@tanstack/react-router'`)());
303
302
 
304
- // Add the routeConfig exports
305
- programPath.node.body.push(babel__namespace.template.statement(clientOnly ? `export { routeConfig, routeConfig as ${node.variable}Route }` : `export { routeConfig }`)());
306
- cleanUnusedCode(programPath, state, [rootRoute, `${node.variable}Route`]);
303
+ // Add the route exports
304
+ programPath.node.body.push(babel__namespace.template.statement(clientOnly ? `export { route, route as ${node.variable}Route }` : `export { route }`)());
305
+ cleanUnusedCode(programPath, state, ['route', `${node.variable}Route`]);
307
306
  }
308
307
  }
309
308
  }