@tanstack/router-cli 0.0.1-beta.30 → 0.0.1-beta.39

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.
@@ -12,7 +12,6 @@
12
12
 
13
13
  Object.defineProperty(exports, '__esModule', { value: true });
14
14
 
15
- var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
16
15
  var klaw = require('klaw');
17
16
  var through2 = require('through2');
18
17
  var path = require('path');
@@ -46,7 +45,7 @@ async function generator(config) {
46
45
  latestTask = taskId;
47
46
  const checkLatest = () => {
48
47
  if (latestTask !== taskId) {
49
- console.log("- Skipping since file changes were made while generating.");
48
+ console.log(`- Skipping since file changes were made while generating.`);
50
49
  return false;
51
50
  }
52
51
  return true;
@@ -73,7 +72,7 @@ async function generator(config) {
73
72
  const fullPath = path__default["default"].resolve(dir, filename);
74
73
  const stat = await fs__default["default"].lstat(fullPath);
75
74
  const ext = path__default["default"].extname(filename);
76
- const clientFilename = filename.replace(ext, ".client" + ext);
75
+ const clientFilename = filename.replace(ext, `.client${ext}`);
77
76
  const pathFromRoutes = path__default["default"].relative(config.routesDirectory, fullPath);
78
77
  const genPath = path__default["default"].resolve(config.routeGenDirectory, pathFromRoutes);
79
78
  const genPathNoExt = removeExt(genPath);
@@ -109,9 +108,10 @@ async function generator(config) {
109
108
  return Promise.all(reparented.map(async d => {
110
109
  if (d.childRoutesDir) {
111
110
  const children = await reparent(d.childRoutesDir);
112
- d = _rollupPluginBabelHelpers["extends"]({}, d, {
111
+ d = {
112
+ ...d,
113
113
  children
114
- });
114
+ };
115
115
  children.forEach(child => child.parent = d);
116
116
  return d;
117
117
  }
@@ -185,7 +185,7 @@ async function generator(config) {
185
185
  key,
186
186
  code
187
187
  } = _ref2;
188
- const importFilename = node.genPathNoExt + "-" + key + ".tsx";
188
+ const importFilename = `${node.genPathNoExt}-${key}.tsx`;
189
189
  queueWriteFile(importFilename, code);
190
190
  return importFilename;
191
191
  }));
@@ -198,27 +198,27 @@ async function generator(config) {
198
198
  node.hash = '';
199
199
  }
200
200
  }
201
- routeConfigImports.push("import { routeConfig as " + node.variable + "Route } from './" + removeExt(path__default["default"].relative(config.routeGenDirectory, node.genPath)) + "'");
202
- routeConfigClientImports.push("import { routeConfig as " + node.variable + "Route } from './" + removeExt(path__default["default"].relative(config.routeGenDirectory, path__default["default"].resolve(node.genDir, node.clientFilename))) + "'");
201
+ routeConfigImports.push(`import { routeConfig as ${node.variable}Route } from './${removeExt(path__default["default"].relative(config.routeGenDirectory, node.genPath).replace(/\\/gi, '/'))}'`);
202
+ 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, '/'))}'`);
203
203
  if (node.isRoot) {
204
204
  return undefined;
205
205
  }
206
- const route = node.variable + "Route";
206
+ const route = `${node.variable}Route`;
207
207
  if ((_node$children = node.children) != null && _node$children.length) {
208
208
  const childConfigs = await buildRouteConfig(node.children, depth + 1);
209
- return route + ".addChildren([\n" + spaces(depth * 4) + childConfigs + "\n" + spaces(depth * 2) + "])";
209
+ return `${route}.addChildren([\n${spaces(depth * 4)}${childConfigs}\n${spaces(depth * 2)}])`;
210
210
  }
211
211
  return route;
212
212
  });
213
- return (await Promise.all(children)).filter(Boolean).join(",\n" + spaces(depth * 2));
213
+ return (await Promise.all(children)).filter(Boolean).join(`,\n${spaces(depth * 2)}`);
214
214
  }
215
215
  const routeConfigChildrenText = await buildRouteConfig(reparented);
216
216
  routeConfigImports = multiSortBy(routeConfigImports, [d => d.includes('__root') ? -1 : 1, d => d.split('/').length, d => d.endsWith("index'") ? -1 : 1, d => d]);
217
217
  routeConfigClientImports = multiSortBy(routeConfigClientImports, [d => d.includes('__root') ? -1 : 1, d => d.split('/').length, d => d.endsWith("index.client'") ? -1 : 1, d => d]);
218
- const routeConfig = "export const routeConfig = rootRoute.addChildren([\n " + routeConfigChildrenText + "\n])\nexport type __GeneratedRouteConfig = typeof routeConfig";
219
- const routeConfigClient = "export const routeConfigClient = rootRoute.addChildren([\n " + routeConfigChildrenText + "\n]) as __GeneratedRouteConfig";
218
+ const routeConfig = `export const routeConfig = rootRoute.addChildren([\n ${routeConfigChildrenText}\n])\nexport type __GeneratedRouteConfig = typeof routeConfig`;
219
+ const routeConfigClient = `export const routeConfigClient = rootRoute.addChildren([\n ${routeConfigChildrenText}\n]) as __GeneratedRouteConfig`;
220
220
  const routeConfigFileContent = [routeConfigImports.join('\n'), routeConfig].join('\n\n');
221
- const routeConfigClientFileContent = ["import type { __GeneratedRouteConfig } from './routeConfig'", routeConfigClientImports.join('\n'), routeConfigClient].join('\n\n');
221
+ const routeConfigClientFileContent = [`import type { __GeneratedRouteConfig } from './routeConfig'`, routeConfigClientImports.join('\n'), routeConfigClient].join('\n\n');
222
222
  if (nodesChanged) {
223
223
  queueWriteFile(path__default["default"].resolve(config.routeGenDirectory, 'routeConfig.ts'), routeConfigFileContent);
224
224
  queueWriteFile(path__default["default"].resolve(config.routeGenDirectory, 'routeConfig.client.ts'), routeConfigClientFileContent);
@@ -267,19 +267,19 @@ async function generator(config) {
267
267
  await Promise.all(unusedFiles.map(d => {
268
268
  fs__default["default"].remove(d);
269
269
  }));
270
- console.log("\uD83C\uDF32 Processed " + nodeCache.length + " routes in " + (Date.now() - start) + "ms");
270
+ console.log(`🌲 Processed ${nodeCache.length} routes in ${Date.now() - start}ms`);
271
271
  if (newNodes.length || updatedNodes.length || removedNodes.length) {
272
272
  if (newNodes.length) {
273
- console.log("\uD83E\uDD73 Added " + newNodes.length + " new routes");
273
+ console.log(`🥳 Added ${newNodes.length} new routes`);
274
274
  }
275
275
  if (updatedNodes.length) {
276
- console.log("\u2705 Updated " + updatedNodes.length + " routes");
276
+ console.log(`✅ Updated ${updatedNodes.length} routes`);
277
277
  }
278
278
  if (removedNodes.length) {
279
- console.log("\uD83D\uDDD1 Removed " + removedNodes.length + " unused routes");
279
+ console.log(`🗑 Removed ${removedNodes.length} unused routes`);
280
280
  }
281
281
  } else {
282
- console.log("\uD83C\uDF89 No changes were found. Carry on!");
282
+ console.log(`🎉 No changes were found. Carry on!`);
283
283
  }
284
284
  }
285
285
  function getAllFiles(dir) {
@@ -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.relative(config.routeGenDirectory, node.genPath),\n )}'`,\n )\n\n routeConfigClientImports.push(\n `import { routeConfig as ${node.variable}Route } from './${removeExt(\n path.relative(\n config.routeGenDirectory,\n path.resolve(node.genDir, node.clientFilename),\n ),\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 { 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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"}
@@ -46,9 +46,7 @@ var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
46
46
  const isolatedProperties = ['loader', 'action', 'component', 'errorComponent', 'pendingComponent'];
47
47
  const getBasePlugins = () => [[syntaxTS__default["default"], {
48
48
  isTSX: true
49
- // disallowAmbiguousJSXLike: true,
50
49
  }]];
51
-
52
50
  async function ensureBoilerplate(node, code) {
53
51
  var _originalFile$code, _originalFile$code2, _file$code, _file$code2;
54
52
  const relativeImportPath = path__default["default"].relative(node.fullDir, node.genPathNoExt);
@@ -76,7 +74,7 @@ async function ensureBoilerplate(node, code) {
76
74
  }
77
75
  });
78
76
  if (!foundImport) {
79
- programPath.node.body.unshift(babel__namespace.template.statement("import { createRouteConfig } from '@tanstack/react-router'")());
77
+ programPath.node.body.unshift(babel__namespace.template.statement(`import { createRouteConfig } from '@tanstack/react-router'`)());
80
78
  }
81
79
  } else {
82
80
  let foundImport = false;
@@ -93,7 +91,7 @@ async function ensureBoilerplate(node, code) {
93
91
  }
94
92
  });
95
93
  if (!foundImport) {
96
- programPath.node.body.unshift(babel__namespace.template.statement("import { routeConfig } from '" + relativeImportPath + "'")());
94
+ programPath.node.body.unshift(babel__namespace.template.statement(`import { routeConfig } from '${relativeImportPath}'`)());
97
95
  }
98
96
  }
99
97
  }
@@ -103,13 +101,13 @@ async function ensureBoilerplate(node, code) {
103
101
  });
104
102
  const separator = node.isRoot ? 'createRouteConfig(' : 'routeConfig.generate(';
105
103
  if (!(originalFile != null && originalFile.code)) {
106
- return (file == null ? void 0 : file.code) + "\n\n" + separator + "{\n\n})";
104
+ return `${file == null ? void 0 : file.code}\n\n${separator}{\n\n})`;
107
105
  }
108
106
  const originalHead = originalFile == null ? void 0 : (_originalFile$code = originalFile.code) == null ? void 0 : _originalFile$code.substring(0, originalFile == null ? void 0 : (_originalFile$code2 = originalFile.code) == null ? void 0 : _originalFile$code2.indexOf(separator));
109
107
  const generatedHead = file == null ? void 0 : (_file$code = file.code) == null ? void 0 : _file$code.substring(0, file == null ? void 0 : (_file$code2 = file.code) == null ? void 0 : _file$code2.indexOf(separator));
110
108
  if (originalHead !== generatedHead) {
111
109
  var _originalFile$code3, _originalFile$code4;
112
- return generatedHead + "\n\n" + (originalFile == null ? void 0 : (_originalFile$code3 = originalFile.code) == null ? void 0 : _originalFile$code3.substring(originalFile == null ? void 0 : (_originalFile$code4 = originalFile.code) == null ? void 0 : _originalFile$code4.indexOf(separator)));
110
+ return `${generatedHead}\n\n${originalFile == null ? void 0 : (_originalFile$code3 = originalFile.code) == null ? void 0 : _originalFile$code3.substring(originalFile == null ? void 0 : (_originalFile$code4 = originalFile.code) == null ? void 0 : _originalFile$code4.indexOf(separator))}`;
113
111
  }
114
112
  return;
115
113
  }
@@ -140,7 +138,7 @@ async function isolateOptionToExport(node, code, opts) {
140
138
  if (t__namespace.isObjectProperty(property)) {
141
139
  const program = path.findParent(d => d.isProgram());
142
140
  if (program != null && program.isProgram()) {
143
- program.node.body.push(babel__namespace.template.statement("export const " + opts.isolate + " = $LOADER")({
141
+ program.node.body.push(babel__namespace.template.statement(`export const ${opts.isolate} = $LOADER`)({
144
142
  $LOADER: property.value
145
143
  }));
146
144
  }
@@ -168,7 +166,7 @@ async function isolateOptionToExport(node, code, opts) {
168
166
  if (property.key.name === opts.isolate) {
169
167
  const program = path.findParent(d => d.isProgram());
170
168
  if (program != null && program.isProgram()) {
171
- program.node.body.push(babel__namespace.template.statement("export const " + opts.isolate + " = $LOADER")({
169
+ program.node.body.push(babel__namespace.template.statement(`export const ${opts.isolate} = $LOADER`)({
172
170
  $LOADER: property.value
173
171
  }));
174
172
  }
@@ -214,7 +212,7 @@ async function detectExports(code) {
214
212
  }
215
213
  async function generateRouteConfig(node, routeCode, imports, clientOnly) {
216
214
  var _node$parent, _node$parent2, _node$parent3, _node$parent4, _await$babel$transfor2;
217
- const relativeParentRoutePath = clientOnly ? node.parent ? generator.removeExt(path__default["default"].relative(node.genDir, path__default["default"].resolve((_node$parent = node.parent) == null ? void 0 : _node$parent.genDir, (_node$parent2 = node.parent) == null ? void 0 : _node$parent2.clientFilename))) : "./" + generator.rootRouteClientName : node.parent ? generator.removeExt(path__default["default"].relative(node.genDir, path__default["default"].resolve((_node$parent3 = node.parent) == null ? void 0 : _node$parent3.genDir, (_node$parent4 = node.parent) == null ? void 0 : _node$parent4.filename))) : "./" + generator.rootRouteName;
215
+ const relativeParentRoutePath = clientOnly ? node.parent ? generator.removeExt(path__default["default"].relative(node.genDir, path__default["default"].resolve((_node$parent = node.parent) == null ? void 0 : _node$parent.genDir, (_node$parent2 = node.parent) == null ? void 0 : _node$parent2.clientFilename))) : `./${generator.rootRouteClientName}` : node.parent ? generator.removeExt(path__default["default"].relative(node.genDir, path__default["default"].resolve((_node$parent3 = node.parent) == null ? void 0 : _node$parent3.genDir, (_node$parent4 = node.parent) == null ? void 0 : _node$parent4.filename))) : `./${generator.rootRouteName}`;
218
216
  const pathName = node.isRoot ? undefined : node.fileNameNoExt.startsWith('__') ? undefined : node.fileNameNoExt === 'index' ? '/' : node.fileNameNoExt;
219
217
  const routeId = node.isRoot ? undefined : node.fileNameNoExt;
220
218
  function plugin() {
@@ -231,7 +229,7 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
231
229
  path.parentPath.remove();
232
230
  const program = path.findParent(d => d.isProgram());
233
231
  if (program != null && program.isProgram()) {
234
- program.node.body.unshift(babel__namespace.template.statement("import { routeConfig as parentRouteConfig } from '$IMPORT'")({
232
+ program.node.body.unshift(babel__namespace.template.statement(`import { routeConfig as parentRouteConfig } from '$IMPORT'`)({
235
233
  $IMPORT: relativeParentRoutePath
236
234
  }));
237
235
  }
@@ -270,7 +268,7 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
270
268
  if (clientOnly) {
271
269
  return t__namespace.objectProperty(t__namespace.identifier('loader'), t__namespace.tSAsExpression(t__namespace.booleanLiteral(true), t__namespace.tsAnyKeyword()));
272
270
  }
273
- return t__namespace.objectProperty(t__namespace.identifier(key), babel__namespace.template.expression("(...args) => import('./" + path__default["default"].relative(node.genDir, node.genPathNoExt) + "-" + key + "').then(d => d." + key + ".apply(d." + key + ", (args as any)))", {
271
+ return t__namespace.objectProperty(t__namespace.identifier(key), babel__namespace.template.expression(`(...args) => import('./${path__default["default"].relative(node.genDir, node.genPathNoExt)}-${key}').then(d => d.${key}.apply(d.${key}, (args as any)))`, {
274
272
  plugins: ['typescript']
275
273
  })({}));
276
274
  }
@@ -278,11 +276,15 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
278
276
  if (clientOnly) {
279
277
  return t__namespace.objectProperty(t__namespace.identifier('action'), t__namespace.tSAsExpression(t__namespace.booleanLiteral(true), t__namespace.tSAnyKeyword()));
280
278
  }
281
- return t__namespace.objectProperty(t__namespace.identifier(key), babel__namespace.template.expression("(...payload: Parameters<typeof import('./" + path__default["default"].relative(node.genDir, node.genPathNoExt) + "-" + key + "').action>) => import('./" + path__default["default"].relative(node.genDir, node.genPathNoExt) + "-" + key + "').then(d => d." + key + ".apply(d." + key + ", (payload as any)))", {
279
+ return t__namespace.objectProperty(t__namespace.identifier(key), babel__namespace.template.expression(`(...payload: Parameters<typeof import('./${path__default["default"].relative(node.genDir, node.genPathNoExt)}-${key}').action>) => import('./${path__default["default"].relative(node.genDir, node.genPathNoExt)}-${key}').then(d => d.${key}.apply(d.${key}, (payload as any)))`, {
282
280
  plugins: ['typescript']
283
281
  })({}));
284
282
  }
285
- return t__namespace.objectProperty(t__namespace.identifier(key), babel__namespace.template.expression("\n lazy(() => import('./" + path__default["default"].relative(node.genDir, node.genPathNoExt) + "-" + key + "').then(d => ({ default: d." + key + " }) ))")());
283
+ if (clientOnly) {
284
+ return t__namespace.objectProperty(t__namespace.identifier(key), babel__namespace.template.expression(`
285
+ lazy(() => import('./${path__default["default"].relative(node.genDir, node.genPathNoExt)}-${key}').then(d => ({ default: d.${key} }) ))`)());
286
+ }
287
+ return t__namespace.objectProperty(t__namespace.identifier(key), property.value);
286
288
  }
287
289
  return property;
288
290
  })];
@@ -293,11 +295,15 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
293
295
  return d.start === ((_iPath$parentPath$par3 = iPath.parentPath.parentPath) == null ? void 0 : _iPath$parentPath$par3.node.start);
294
296
  });
295
297
  if (node.isRoot) {
296
- program.node.body[index] = babel__namespace.template.statement("const routeConfig = createRouteConfig(\n $OPTIONS\n )")({
298
+ program.node.body[index] = babel__namespace.template.statement(`const routeConfig = createRouteConfig(
299
+ $OPTIONS
300
+ )`)({
297
301
  $OPTIONS: options
298
302
  });
299
303
  } else {
300
- program.node.body[index] = babel__namespace.template.statement("const routeConfig = parentRouteConfig.createRoute(\n $OPTIONS\n )")({
304
+ program.node.body[index] = babel__namespace.template.statement(`const routeConfig = parentRouteConfig.createRoute(
305
+ $OPTIONS
306
+ )`)({
301
307
  $OPTIONS: options
302
308
  });
303
309
  }
@@ -305,11 +311,11 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
305
311
  }
306
312
  }
307
313
  });
308
- programPath.node.body.unshift(babel__namespace.template.statement("import { lazy } from '@tanstack/react-router'")());
314
+ programPath.node.body.unshift(babel__namespace.template.statement(`import { lazy } from '@tanstack/react-router'`)());
309
315
 
310
316
  // Add the routeConfig exports
311
- programPath.node.body.push(babel__namespace.template.statement(clientOnly ? "export { routeConfig, routeConfig as " + node.variable + "Route }" : "export { routeConfig }")());
312
- cleanUnusedCode(programPath, state, ['routeConfig', node.variable + "Route"]);
317
+ programPath.node.body.push(babel__namespace.template.statement(clientOnly ? `export { routeConfig, routeConfig as ${node.variable}Route }` : `export { routeConfig }`)());
318
+ cleanUnusedCode(programPath, state, ['routeConfig', `${node.variable}Route`]);
313
319
  }
314
320
  }
315
321
  }
@@ -322,7 +328,6 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
322
328
  ast: true
323
329
  })) == null ? void 0 : _await$babel$transfor2.code;
324
330
  if (!code) {
325
- // console.log(code, node, imports)
326
331
  throw new Error('Error while generating a route file!');
327
332
  }
328
333
  return code;