@tanstack/router-cli 0.0.1-beta.47 → 0.0.1-beta.56

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.
@@ -119,12 +119,8 @@ async function generator(config) {
119
119
  }));
120
120
  }
121
121
  const reparented = await reparent(config.routesDirectory);
122
- async function buildRouteConfig(nodes, depth) {
123
- if (depth === void 0) {
124
- depth = 1;
125
- }
122
+ async function buildRouteConfig(nodes, depth = 1) {
126
123
  const children = nodes.map(async n => {
127
- var _node$children;
128
124
  let node = nodeCache.find(d => d.fullPath === n.fullPath);
129
125
  if (node) {
130
126
  node.new = false;
@@ -174,17 +170,13 @@ async function generator(config) {
174
170
  code: transformed
175
171
  };
176
172
  }));
177
- imports = transforms.filter(_ref => {
178
- let {
179
- exported
180
- } = _ref;
181
- return exported;
182
- });
183
- node.importedFiles = await Promise.all(imports.map(_ref2 => {
184
- let {
185
- key,
186
- code
187
- } = _ref2;
173
+ imports = transforms.filter(({
174
+ exported
175
+ }) => exported);
176
+ node.importedFiles = await Promise.all(imports.map(({
177
+ key,
178
+ code
179
+ }) => {
188
180
  const importFilename = `${node.genPathNoExt}-${key}.tsx`;
189
181
  queueWriteFile(importFilename, code);
190
182
  return importFilename;
@@ -204,7 +196,7 @@ async function generator(config) {
204
196
  return undefined;
205
197
  }
206
198
  const route = `${node.variable}Route`;
207
- if ((_node$children = node.children) != null && _node$children.length) {
199
+ if (node.children?.length) {
208
200
  const childConfigs = await buildRouteConfig(node.children, depth + 1);
209
201
  return `${route}.addChildren([\n${spaces(depth * 4)}${childConfigs}\n${spaces(depth * 2)}])`;
210
202
  }
@@ -229,8 +221,7 @@ async function generator(config) {
229
221
  recursive: true
230
222
  });
231
223
  if (!checkLatest()) return;
232
- await Promise.all(fileQueue.map(async _ref3 => {
233
- let [filename, content] = _ref3;
224
+ await Promise.all(fileQueue.map(async ([filename, content]) => {
234
225
  await fs__default["default"].ensureDir(path__default["default"].dirname(filename));
235
226
  const exists = await fs__default["default"].pathExists(filename);
236
227
  let current = '';
@@ -258,10 +249,7 @@ async function generator(config) {
258
249
  if (d === path__default["default"].resolve(config.routeGenDirectory, 'routeConfig.ts') || d === path__default["default"].resolve(config.routeGenDirectory, 'routeConfig.client.ts')) {
259
250
  return false;
260
251
  }
261
- let node = nodeCache.find(n => {
262
- var _n$importedFiles;
263
- return n.genPath === d || path__default["default"].resolve(n.genDir, n.clientFilename) === d || ((_n$importedFiles = n.importedFiles) == null ? void 0 : _n$importedFiles.includes(d));
264
- });
252
+ let node = nodeCache.find(n => n.genPath === d || path__default["default"].resolve(n.genDir, n.clientFilename) === d || n.importedFiles?.includes(d));
265
253
  return !node;
266
254
  });
267
255
  await Promise.all(unusedFiles.map(d => {
@@ -303,13 +291,8 @@ function spaces(d) {
303
291
  length: d
304
292
  }).map(() => ' ').join('');
305
293
  }
306
- function multiSortBy(arr, accessors) {
307
- if (accessors === void 0) {
308
- accessors = [d => d];
309
- }
310
- return arr.map((d, i) => [d, i]).sort((_ref4, _ref5) => {
311
- let [a, ai] = _ref4;
312
- let [b, bi] = _ref5;
294
+ function multiSortBy(arr, accessors = [d => d]) {
295
+ return arr.map((d, i) => [d, i]).sort(([a, ai], [b, bi]) => {
313
296
  for (const accessor of accessors) {
314
297
  const ao = accessor(a);
315
298
  const bo = accessor(b);
@@ -325,10 +308,7 @@ function multiSortBy(arr, accessors) {
325
308
  return ao > bo ? 1 : -1;
326
309
  }
327
310
  return ai - bi;
328
- }).map(_ref6 => {
329
- let [d] = _ref6;
330
- return d;
331
- });
311
+ }).map(([d]) => d);
332
312
  }
333
313
  function capitalize(s) {
334
314
  if (typeof s !== 'string') return '';
@@ -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 { 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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"}
@@ -48,7 +48,6 @@ const getBasePlugins = () => [[syntaxTS__default["default"], {
48
48
  isTSX: true
49
49
  }]];
50
50
  async function ensureBoilerplate(node, code) {
51
- var _originalFile$code, _originalFile$code2, _file$code, _file$code2;
52
51
  const relativeImportPath = path__default["default"].relative(node.fullDir, node.genPathNoExt);
53
52
  const originalFile = await babel__namespace.transformAsync(code, {
54
53
  configFile: false,
@@ -100,25 +99,23 @@ async function ensureBoilerplate(node, code) {
100
99
  }]
101
100
  });
102
101
  const separator = node.isRoot ? 'createRouteConfig(' : 'routeConfig.generate(';
103
- if (!(originalFile != null && originalFile.code)) {
104
- return `${file == null ? void 0 : file.code}\n\n${separator}{\n\n})`;
102
+ if (!originalFile?.code) {
103
+ return `${file?.code}\n\n${separator}{\n\n})`;
105
104
  }
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));
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));
105
+ const originalHead = originalFile?.code?.substring(0, originalFile?.code?.indexOf(separator));
106
+ const generatedHead = file?.code?.substring(0, file?.code?.indexOf(separator));
108
107
  if (originalHead !== generatedHead) {
109
- var _originalFile$code3, _originalFile$code4;
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))}`;
108
+ return `${generatedHead}\n\n${originalFile?.code?.substring(originalFile?.code?.indexOf(separator))}`;
111
109
  }
112
110
  return;
113
111
  }
114
112
  async function isolateOptionToExport(node, code, opts) {
115
- var _await$babel$transfor;
116
- return (_await$babel$transfor = await babel__namespace.transformAsync(code, {
113
+ return (await babel__namespace.transformAsync(code, {
117
114
  configFile: false,
118
115
  babelrc: false,
119
116
  plugins: [...getBasePlugins(), plugin()],
120
117
  ast: true
121
- })) == null ? void 0 : _await$babel$transfor.code;
118
+ }))?.code;
122
119
  function plugin() {
123
120
  return {
124
121
  visitor: {
@@ -131,19 +128,18 @@ async function isolateOptionToExport(node, code, opts) {
131
128
  if (path.node.name === 'createRouteConfig' && t__namespace.isCallExpression(path.parentPath.node)) {
132
129
  const options = getCreateRouteConfigOptions(path);
133
130
  if (options) {
134
- var _path$findParent;
135
131
  const property = options.properties.find(property => {
136
132
  return t__namespace.isObjectProperty(property) && t__namespace.isIdentifier(property.key) && property.key.name === opts.isolate;
137
133
  });
138
134
  if (t__namespace.isObjectProperty(property)) {
139
135
  const program = path.findParent(d => d.isProgram());
140
- if (program != null && program.isProgram()) {
136
+ if (program?.isProgram()) {
141
137
  program.node.body.push(babel__namespace.template.statement(`export const ${opts.isolate} = $LOADER`)({
142
138
  $LOADER: property.value
143
139
  }));
144
140
  }
145
141
  }
146
- (_path$findParent = path.findParent(d => d.isExpressionStatement())) == null ? void 0 : _path$findParent.remove();
142
+ path.findParent(d => d.isExpressionStatement())?.remove();
147
143
  }
148
144
  }
149
145
  }
@@ -158,21 +154,20 @@ async function isolateOptionToExport(node, code, opts) {
158
154
  if (path.node.name === 'generate') {
159
155
  const options = getRouteConfigGenerateOptions(path);
160
156
  if (options) {
161
- var _path$findParent2;
162
157
  const property = options.properties.find(property => {
163
158
  return t__namespace.isObjectProperty(property) && t__namespace.isIdentifier(property.key) && property.key.name === opts.isolate;
164
159
  });
165
160
  if (t__namespace.isObjectProperty(property) && t__namespace.isIdentifier(property.key)) {
166
161
  if (property.key.name === opts.isolate) {
167
162
  const program = path.findParent(d => d.isProgram());
168
- if (program != null && program.isProgram()) {
163
+ if (program?.isProgram()) {
169
164
  program.node.body.push(babel__namespace.template.statement(`export const ${opts.isolate} = $LOADER`)({
170
165
  $LOADER: property.value
171
166
  }));
172
167
  }
173
168
  }
174
169
  }
175
- (_path$findParent2 = path.findParent(d => d.isExpressionStatement())) == null ? void 0 : _path$findParent2.remove();
170
+ path.findParent(d => d.isExpressionStatement())?.remove();
176
171
  }
177
172
  }
178
173
  }
@@ -196,8 +191,7 @@ async function detectExports(code) {
196
191
  visitor: {
197
192
  ExportNamedDeclaration(path) {
198
193
  if (t__namespace.isVariableDeclaration(path.node.declaration)) {
199
- var _path$node$declaratio;
200
- if (t__namespace.isVariableDeclarator((_path$node$declaratio = path.node.declaration.declarations) == null ? void 0 : _path$node$declaratio[0])) {
194
+ if (t__namespace.isVariableDeclarator(path.node.declaration.declarations?.[0])) {
201
195
  if (t__namespace.isIdentifier(path.node.declaration.declarations[0].id)) {
202
196
  exported.push(path.node.declaration.declarations[0].id.name);
203
197
  }
@@ -211,8 +205,7 @@ async function detectExports(code) {
211
205
  return exported;
212
206
  }
213
207
  async function generateRouteConfig(node, routeCode, imports, clientOnly) {
214
- var _node$parent, _node$parent2, _node$parent3, _node$parent4, _await$babel$transfor2;
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}`;
208
+ const relativeParentRoutePath = clientOnly ? node.parent ? generator.removeExt(path__default["default"].relative(node.genDir, path__default["default"].resolve(node.parent?.genDir, node.parent?.clientFilename))) : `./${generator.rootRouteClientName}` : node.parent ? generator.removeExt(path__default["default"].relative(node.genDir, path__default["default"].resolve(node.parent?.genDir, node.parent?.filename))) : `./${generator.rootRouteName}`;
216
209
  const pathName = node.isRoot ? undefined : node.fileNameNoExt.startsWith('__') ? undefined : node.fileNameNoExt === 'index' ? '/' : node.fileNameNoExt;
217
210
  const routeId = node.isRoot ? undefined : node.fileNameNoExt;
218
211
  function plugin() {
@@ -228,7 +221,7 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
228
221
  if (path.node.imported.name === 'routeConfig') {
229
222
  path.parentPath.remove();
230
223
  const program = path.findParent(d => d.isProgram());
231
- if (program != null && program.isProgram()) {
224
+ if (program?.isProgram()) {
232
225
  program.node.body.unshift(babel__namespace.template.statement(`import { routeConfig as parentRouteConfig } from '$IMPORT'`)({
233
226
  $IMPORT: relativeParentRoutePath
234
227
  }));
@@ -242,10 +235,8 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
242
235
  if (node.isRoot) {
243
236
  if (iPath.node.name === 'createRouteConfig') {
244
237
  if (t__namespace.isCallExpression(iPath.parentPath.node)) {
245
- var _iPath$parentPath$par;
246
- if (t__namespace.isExpressionStatement((_iPath$parentPath$par = iPath.parentPath.parentPath) == null ? void 0 : _iPath$parentPath$par.node)) {
247
- var _iPath$parentPath$par2;
248
- (_iPath$parentPath$par2 = iPath.parentPath.parentPath) == null ? void 0 : _iPath$parentPath$par2.replaceWith(t__namespace.variableDeclaration('const', [t__namespace.variableDeclarator(t__namespace.identifier('routeConfig'), iPath.parentPath.node)]));
238
+ if (t__namespace.isExpressionStatement(iPath.parentPath.parentPath?.node)) {
239
+ iPath.parentPath.parentPath?.replaceWith(t__namespace.variableDeclaration('const', [t__namespace.variableDeclarator(t__namespace.identifier('routeConfig'), iPath.parentPath.node)]));
249
240
  }
250
241
  }
251
242
  }
@@ -289,11 +280,8 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
289
280
  return property;
290
281
  })];
291
282
  const program = iPath.findParent(d => d.isProgram());
292
- if (program != null && program.isProgram() && options) {
293
- const index = program.node.body.findIndex(d => {
294
- var _iPath$parentPath$par3;
295
- return d.start === ((_iPath$parentPath$par3 = iPath.parentPath.parentPath) == null ? void 0 : _iPath$parentPath$par3.node.start);
296
- });
283
+ if (program?.isProgram() && options) {
284
+ const index = program.node.body.findIndex(d => d.start === iPath.parentPath.parentPath?.node.start);
297
285
  if (node.isRoot) {
298
286
  program.node.body[index] = babel__namespace.template.statement(`const routeConfig = createRouteConfig(
299
287
  $OPTIONS
@@ -321,12 +309,12 @@ async function generateRouteConfig(node, routeCode, imports, clientOnly) {
321
309
  }
322
310
  };
323
311
  }
324
- const code = (_await$babel$transfor2 = await babel__namespace.transformAsync(routeCode, {
312
+ const code = (await babel__namespace.transformAsync(routeCode, {
325
313
  configFile: false,
326
314
  babelrc: false,
327
315
  plugins: [...getBasePlugins(), plugin()],
328
316
  ast: true
329
- })) == null ? void 0 : _await$babel$transfor2.code;
317
+ }))?.code;
330
318
  if (!code) {
331
319
  throw new Error('Error while generating a route file!');
332
320
  }
@@ -372,11 +360,9 @@ function markImport(path, state) {
372
360
  }
373
361
  }
374
362
  function getRouteConfigGenerateOptions(path) {
375
- var _path$parentPath$pare;
376
363
  const tryOptions = node => {
377
364
  if (t__namespace.isIdentifier(node)) {
378
- var _path$scope$getBindin;
379
- const initNode = (_path$scope$getBindin = path.scope.getBinding(node.name)) == null ? void 0 : _path$scope$getBindin.path.node;
365
+ const initNode = path.scope.getBinding(node.name)?.path.node;
380
366
  if (t__namespace.isVariableDeclarator(initNode)) {
381
367
  return tryOptions(initNode.init);
382
368
  }
@@ -385,18 +371,15 @@ function getRouteConfigGenerateOptions(path) {
385
371
  }
386
372
  return;
387
373
  };
388
- if (t__namespace.isMemberExpression(path.parentPath.node) && t__namespace.isCallExpression((_path$parentPath$pare = path.parentPath.parentPath) == null ? void 0 : _path$parentPath$pare.node)) {
389
- var _path$parentPath$pare2;
390
- const options = (_path$parentPath$pare2 = path.parentPath.parentPath) == null ? void 0 : _path$parentPath$pare2.node.arguments[0];
374
+ if (t__namespace.isMemberExpression(path.parentPath.node) && t__namespace.isCallExpression(path.parentPath.parentPath?.node)) {
375
+ const options = path.parentPath.parentPath?.node.arguments[0];
391
376
  return tryOptions(options);
392
377
  }
393
378
  }
394
379
  function getCreateRouteConfigOptions(path) {
395
- var _path$parentPath;
396
380
  const tryOptions = node => {
397
381
  if (t__namespace.isIdentifier(node)) {
398
- var _path$scope$getBindin2;
399
- const initNode = (_path$scope$getBindin2 = path.scope.getBinding(node.name)) == null ? void 0 : _path$scope$getBindin2.path.node;
382
+ const initNode = path.scope.getBinding(node.name)?.path.node;
400
383
  if (t__namespace.isVariableDeclarator(initNode)) {
401
384
  return tryOptions(initNode.init);
402
385
  }
@@ -405,9 +388,8 @@ function getCreateRouteConfigOptions(path) {
405
388
  }
406
389
  return;
407
390
  };
408
- if (t__namespace.isCallExpression((_path$parentPath = path.parentPath) == null ? void 0 : _path$parentPath.node)) {
409
- var _path$parentPath2;
410
- const options = (_path$parentPath2 = path.parentPath) == null ? void 0 : _path$parentPath2.node.arguments[0];
391
+ if (t__namespace.isCallExpression(path.parentPath?.node)) {
392
+ const options = path.parentPath?.node.arguments[0];
411
393
  return tryOptions(options);
412
394
  }
413
395
  }
@@ -417,7 +399,7 @@ function getCreateRouteConfigOptions(path) {
417
399
  // https://github.com/vercel/next.js/blob/canary/packages/next/build/babel/plugins/next-ssg-transform.ts
418
400
  // https://github.com/solidjs/solid-start/blob/main/packages/start/server/routeData.js
419
401
 
420
- function cleanUnusedCode(programPath, state, keepExports) {
402
+ function cleanUnusedCode(programPath, state, keepExports = []) {
421
403
  state.refs = new Set();
422
404
  state.done = false;
423
405
  function markVariable(variablePath, variableState) {