@tanstack/router-cli 0.0.1-beta.56 → 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.
- package/build/cjs/generator.js +8 -8
- package/build/cjs/generator.js.map +1 -1
- package/build/cjs/transformCode.js +22 -23
- package/build/cjs/transformCode.js.map +1 -1
- package/build/esm/index.js +30 -31
- package/build/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/src/generator.ts +9 -9
- package/src/transformCode.ts +25 -25
package/build/cjs/generator.js
CHANGED
|
@@ -190,8 +190,8 @@ async function generator(config) {
|
|
|
190
190
|
node.hash = '';
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
-
routeConfigImports.push(`import {
|
|
194
|
-
routeConfigClientImports.push(`import {
|
|
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
|
|
211
|
-
const routeConfigClient = `export const
|
|
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 './
|
|
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, '
|
|
216
|
-
queueWriteFile(path__default["default"].resolve(config.routeGenDirectory, '
|
|
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, '
|
|
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 = ['
|
|
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 === '
|
|
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 {
|
|
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 === '
|
|
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 {
|
|
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 =
|
|
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 === '
|
|
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} = $
|
|
138
|
-
$
|
|
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} = $
|
|
165
|
-
$
|
|
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 === '
|
|
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 {
|
|
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 === '
|
|
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('
|
|
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 = '
|
|
248
|
-
iPath.parentPath.node.object.name = '
|
|
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
|
|
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
|
|
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
|
|
305
|
-
programPath.node.body.push(babel__namespace.template.statement(clientOnly ? `export {
|
|
306
|
-
cleanUnusedCode(programPath, state, ['
|
|
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
|
}
|