@tanstack/router-generator 1.87.3 → 1.87.7

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.
@@ -52,11 +52,14 @@ const configSchema = zod.z.object({
52
52
  enableCodeSplitting: zod.z.boolean().optional()
53
53
  }).optional()
54
54
  });
55
+ function resolveConfigPath({ configDirectory }) {
56
+ return path.resolve(configDirectory, "tsr.config.json");
57
+ }
55
58
  function getConfig(inlineConfig = {}, configDirectory) {
56
59
  if (configDirectory === void 0) {
57
60
  configDirectory = process.cwd();
58
61
  }
59
- const configFilePathJson = path.resolve(configDirectory, "tsr.config.json");
62
+ const configFilePathJson = resolveConfigPath({ configDirectory });
60
63
  const exists = fs.existsSync(configFilePathJson);
61
64
  let config2;
62
65
  if (exists) {
@@ -125,4 +128,5 @@ ERROR: The "experimental.enableCodeSplitting" flag has been made stable and is n
125
128
  }
126
129
  exports.configSchema = configSchema;
127
130
  exports.getConfig = getConfig;
131
+ exports.resolveConfigPath = resolveConfigPath;
128
132
  //# sourceMappingURL=config.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.cjs","sources":["../../src/config.ts"],"sourcesContent":["import path from 'node:path'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { z } from 'zod'\nimport { virtualRootRouteSchema } from './filesystem/virtual/config'\n\nconst defaultTemplate = {\n routeTemplate: [\n '%%tsrImports%%',\n '\\n\\n',\n '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n 'function RouteComponent() { return <div>Hello \"%%tsrPath%%\"!</div> };\\n',\n ].join(''),\n apiTemplate: [\n 'import { json } from \"@tanstack/start\";\\n',\n '%%tsrImports%%',\n '\\n\\n',\n '%%tsrExportStart%%{ GET: ({ request, params }) => { return json({ message:\\'Hello \"%%tsrPath%%\"!\\' }) }}%%tsrExportEnd%%\\n',\n ].join(''),\n}\n\nexport const configSchema = z.object({\n virtualRouteConfig: virtualRootRouteSchema.or(z.string()).optional(),\n routeFilePrefix: z.string().optional(),\n routeFileIgnorePrefix: z.string().optional().default('-'),\n routeFileIgnorePattern: z.string().optional(),\n routesDirectory: z.string().optional().default('./src/routes'),\n generatedRouteTree: z.string().optional().default('./src/routeTree.gen.ts'),\n quoteStyle: z.enum(['single', 'double']).optional().default('single'),\n semicolons: z.boolean().optional().default(false),\n disableTypes: z.boolean().optional().default(false),\n addExtensions: z.boolean().optional().default(false),\n disableLogging: z.boolean().optional().default(false),\n disableManifestGeneration: z.boolean().optional().default(false),\n apiBase: z.string().optional().default('/api'),\n routeTreeFileHeader: z\n .array(z.string())\n .optional()\n .default([\n '/* eslint-disable */',\n '// @ts-nocheck',\n '// noinspection JSUnusedGlobalSymbols',\n ]),\n routeTreeFileFooter: z.array(z.string()).optional().default([]),\n autoCodeSplitting: z.boolean().optional(),\n indexToken: z.string().optional().default('index'),\n routeToken: z.string().optional().default('route'),\n pathParamsAllowedCharacters: z\n .array(z.enum([';', ':', '@', '&', '=', '+', '$', ',']))\n .optional(),\n customScaffolding: z\n .object({\n routeTemplate: z\n .string()\n .optional()\n .default(defaultTemplate.routeTemplate),\n apiTemplate: z.string().optional().default(defaultTemplate.apiTemplate),\n })\n .optional()\n .default(defaultTemplate),\n experimental: z\n .object({\n // TODO: Remove this option in the next major release (v2).\n enableCodeSplitting: z.boolean().optional(),\n })\n .optional(),\n})\n\nexport type Config = z.infer<typeof configSchema>\n\nexport function getConfig(\n inlineConfig: Partial<Config> = {},\n configDirectory?: string,\n): Config {\n if (configDirectory === undefined) {\n configDirectory = process.cwd()\n }\n const configFilePathJson = path.resolve(configDirectory, 'tsr.config.json')\n const exists = existsSync(configFilePathJson)\n\n let config: Config\n\n if (exists) {\n config = configSchema.parse({\n ...JSON.parse(readFileSync(configFilePathJson, 'utf-8')),\n ...inlineConfig,\n })\n } else {\n config = configSchema.parse(inlineConfig)\n }\n\n // If typescript is disabled, make sure the generated route tree is a .js file\n if (config.disableTypes) {\n config.generatedRouteTree = config.generatedRouteTree.replace(\n /\\.(ts|tsx)$/,\n '.js',\n )\n }\n\n // if a configDirectory is used, paths should be relative to that directory\n if (configDirectory) {\n // if absolute configDirectory is provided, use it as the root\n if (path.isAbsolute(configDirectory)) {\n config.routesDirectory = path.resolve(\n configDirectory,\n config.routesDirectory,\n )\n config.generatedRouteTree = path.resolve(\n configDirectory,\n config.generatedRouteTree,\n )\n } else {\n config.routesDirectory = path.resolve(\n process.cwd(),\n configDirectory,\n config.routesDirectory,\n )\n config.generatedRouteTree = path.resolve(\n process.cwd(),\n configDirectory,\n config.generatedRouteTree,\n )\n }\n }\n\n validateConfig(config)\n return config\n}\n\nfunction validateConfig(config: Config) {\n if (typeof config.experimental?.enableCodeSplitting !== 'undefined') {\n const message = `\n------\n⚠️ ⚠️ ⚠️\nERROR: The \"experimental.enableCodeSplitting\" flag has been made stable and is now \"autoCodeSplitting\". Please update your configuration file to use \"autoCodeSplitting\" instead of \"experimental.enableCodeSplitting\".\n------\n`\n console.error(message)\n throw new Error(message)\n }\n\n if (config.indexToken === config.routeToken) {\n throw new Error(\n `The \"indexToken\" and \"routeToken\" options must be different.`,\n )\n }\n\n if (\n config.routeFileIgnorePrefix &&\n config.routeFileIgnorePrefix.trim() === '_'\n ) {\n throw new Error(\n `The \"routeFileIgnorePrefix\" cannot be an underscore (\"_\"). This is a reserved character used to denote a pathless route. Please use a different prefix.`,\n )\n }\n\n return config\n}\n"],"names":["z","virtualRootRouteSchema","existsSync","config","readFileSync"],"mappings":"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"}
1
+ {"version":3,"file":"config.cjs","sources":["../../src/config.ts"],"sourcesContent":["import path from 'node:path'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { z } from 'zod'\nimport { virtualRootRouteSchema } from './filesystem/virtual/config'\n\nconst defaultTemplate = {\n routeTemplate: [\n '%%tsrImports%%',\n '\\n\\n',\n '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n 'function RouteComponent() { return <div>Hello \"%%tsrPath%%\"!</div> };\\n',\n ].join(''),\n apiTemplate: [\n 'import { json } from \"@tanstack/start\";\\n',\n '%%tsrImports%%',\n '\\n\\n',\n '%%tsrExportStart%%{ GET: ({ request, params }) => { return json({ message:\\'Hello \"%%tsrPath%%\"!\\' }) }}%%tsrExportEnd%%\\n',\n ].join(''),\n}\n\nexport const configSchema = z.object({\n virtualRouteConfig: virtualRootRouteSchema.or(z.string()).optional(),\n routeFilePrefix: z.string().optional(),\n routeFileIgnorePrefix: z.string().optional().default('-'),\n routeFileIgnorePattern: z.string().optional(),\n routesDirectory: z.string().optional().default('./src/routes'),\n generatedRouteTree: z.string().optional().default('./src/routeTree.gen.ts'),\n quoteStyle: z.enum(['single', 'double']).optional().default('single'),\n semicolons: z.boolean().optional().default(false),\n disableTypes: z.boolean().optional().default(false),\n addExtensions: z.boolean().optional().default(false),\n disableLogging: z.boolean().optional().default(false),\n disableManifestGeneration: z.boolean().optional().default(false),\n apiBase: z.string().optional().default('/api'),\n routeTreeFileHeader: z\n .array(z.string())\n .optional()\n .default([\n '/* eslint-disable */',\n '// @ts-nocheck',\n '// noinspection JSUnusedGlobalSymbols',\n ]),\n routeTreeFileFooter: z.array(z.string()).optional().default([]),\n autoCodeSplitting: z.boolean().optional(),\n indexToken: z.string().optional().default('index'),\n routeToken: z.string().optional().default('route'),\n pathParamsAllowedCharacters: z\n .array(z.enum([';', ':', '@', '&', '=', '+', '$', ',']))\n .optional(),\n customScaffolding: z\n .object({\n routeTemplate: z\n .string()\n .optional()\n .default(defaultTemplate.routeTemplate),\n apiTemplate: z.string().optional().default(defaultTemplate.apiTemplate),\n })\n .optional()\n .default(defaultTemplate),\n experimental: z\n .object({\n // TODO: Remove this option in the next major release (v2).\n enableCodeSplitting: z.boolean().optional(),\n })\n .optional(),\n})\n\nexport type Config = z.infer<typeof configSchema>\n\ntype ResolveParams = {\n configDirectory: string\n}\n\nexport function resolveConfigPath({ configDirectory }: ResolveParams) {\n return path.resolve(configDirectory, 'tsr.config.json')\n}\n\nexport function getConfig(\n inlineConfig: Partial<Config> = {},\n configDirectory?: string,\n): Config {\n if (configDirectory === undefined) {\n configDirectory = process.cwd()\n }\n const configFilePathJson = resolveConfigPath({ configDirectory })\n const exists = existsSync(configFilePathJson)\n\n let config: Config\n\n if (exists) {\n config = configSchema.parse({\n ...JSON.parse(readFileSync(configFilePathJson, 'utf-8')),\n ...inlineConfig,\n })\n } else {\n config = configSchema.parse(inlineConfig)\n }\n\n // If typescript is disabled, make sure the generated route tree is a .js file\n if (config.disableTypes) {\n config.generatedRouteTree = config.generatedRouteTree.replace(\n /\\.(ts|tsx)$/,\n '.js',\n )\n }\n\n // if a configDirectory is used, paths should be relative to that directory\n if (configDirectory) {\n // if absolute configDirectory is provided, use it as the root\n if (path.isAbsolute(configDirectory)) {\n config.routesDirectory = path.resolve(\n configDirectory,\n config.routesDirectory,\n )\n config.generatedRouteTree = path.resolve(\n configDirectory,\n config.generatedRouteTree,\n )\n } else {\n config.routesDirectory = path.resolve(\n process.cwd(),\n configDirectory,\n config.routesDirectory,\n )\n config.generatedRouteTree = path.resolve(\n process.cwd(),\n configDirectory,\n config.generatedRouteTree,\n )\n }\n }\n\n validateConfig(config)\n return config\n}\n\nfunction validateConfig(config: Config) {\n if (typeof config.experimental?.enableCodeSplitting !== 'undefined') {\n const message = `\n------\n⚠️ ⚠️ ⚠️\nERROR: The \"experimental.enableCodeSplitting\" flag has been made stable and is now \"autoCodeSplitting\". Please update your configuration file to use \"autoCodeSplitting\" instead of \"experimental.enableCodeSplitting\".\n------\n`\n console.error(message)\n throw new Error(message)\n }\n\n if (config.indexToken === config.routeToken) {\n throw new Error(\n `The \"indexToken\" and \"routeToken\" options must be different.`,\n )\n }\n\n if (\n config.routeFileIgnorePrefix &&\n config.routeFileIgnorePrefix.trim() === '_'\n ) {\n throw new Error(\n `The \"routeFileIgnorePrefix\" cannot be an underscore (\"_\"). This is a reserved character used to denote a pathless route. Please use a different prefix.`,\n )\n }\n\n return config\n}\n"],"names":["z","virtualRootRouteSchema","existsSync","config","readFileSync"],"mappings":"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"}
@@ -92,4 +92,9 @@ export declare const configSchema: z.ZodObject<{
92
92
  } | undefined;
93
93
  }>;
94
94
  export type Config = z.infer<typeof configSchema>;
95
+ type ResolveParams = {
96
+ configDirectory: string;
97
+ };
98
+ export declare function resolveConfigPath({ configDirectory }: ResolveParams): string;
95
99
  export declare function getConfig(inlineConfig?: Partial<Config>, configDirectory?: string): Config;
100
+ export {};
@@ -4,6 +4,7 @@ const config = require("./config.cjs");
4
4
  const generator = require("./generator.cjs");
5
5
  exports.configSchema = config.configSchema;
6
6
  exports.getConfig = config.getConfig;
7
+ exports.resolveConfigPath = config.resolveConfigPath;
7
8
  exports.CONSTANTS = generator.CONSTANTS;
8
9
  exports.generator = generator.generator;
9
10
  exports.startAPIRouteSegmentsFromTSRFilePath = generator.startAPIRouteSegmentsFromTSRFilePath;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- export { configSchema, getConfig } from './config.cjs';
1
+ export { configSchema, getConfig, resolveConfigPath } from './config.cjs';
2
2
  export type { Config } from './config.cjs';
3
3
  export { generator, startAPIRouteSegmentsFromTSRFilePath, CONSTANTS, } from './generator.cjs';
4
4
  export type { StartAPIRoutePathSegment } from './generator.cjs';
@@ -92,4 +92,9 @@ export declare const configSchema: z.ZodObject<{
92
92
  } | undefined;
93
93
  }>;
94
94
  export type Config = z.infer<typeof configSchema>;
95
+ type ResolveParams = {
96
+ configDirectory: string;
97
+ };
98
+ export declare function resolveConfigPath({ configDirectory }: ResolveParams): string;
95
99
  export declare function getConfig(inlineConfig?: Partial<Config>, configDirectory?: string): Config;
100
+ export {};
@@ -50,11 +50,14 @@ const configSchema = z.object({
50
50
  enableCodeSplitting: z.boolean().optional()
51
51
  }).optional()
52
52
  });
53
+ function resolveConfigPath({ configDirectory }) {
54
+ return path.resolve(configDirectory, "tsr.config.json");
55
+ }
53
56
  function getConfig(inlineConfig = {}, configDirectory) {
54
57
  if (configDirectory === void 0) {
55
58
  configDirectory = process.cwd();
56
59
  }
57
- const configFilePathJson = path.resolve(configDirectory, "tsr.config.json");
60
+ const configFilePathJson = resolveConfigPath({ configDirectory });
58
61
  const exists = existsSync(configFilePathJson);
59
62
  let config;
60
63
  if (exists) {
@@ -123,6 +126,7 @@ ERROR: The "experimental.enableCodeSplitting" flag has been made stable and is n
123
126
  }
124
127
  export {
125
128
  configSchema,
126
- getConfig
129
+ getConfig,
130
+ resolveConfigPath
127
131
  };
128
132
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../src/config.ts"],"sourcesContent":["import path from 'node:path'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { z } from 'zod'\nimport { virtualRootRouteSchema } from './filesystem/virtual/config'\n\nconst defaultTemplate = {\n routeTemplate: [\n '%%tsrImports%%',\n '\\n\\n',\n '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n 'function RouteComponent() { return <div>Hello \"%%tsrPath%%\"!</div> };\\n',\n ].join(''),\n apiTemplate: [\n 'import { json } from \"@tanstack/start\";\\n',\n '%%tsrImports%%',\n '\\n\\n',\n '%%tsrExportStart%%{ GET: ({ request, params }) => { return json({ message:\\'Hello \"%%tsrPath%%\"!\\' }) }}%%tsrExportEnd%%\\n',\n ].join(''),\n}\n\nexport const configSchema = z.object({\n virtualRouteConfig: virtualRootRouteSchema.or(z.string()).optional(),\n routeFilePrefix: z.string().optional(),\n routeFileIgnorePrefix: z.string().optional().default('-'),\n routeFileIgnorePattern: z.string().optional(),\n routesDirectory: z.string().optional().default('./src/routes'),\n generatedRouteTree: z.string().optional().default('./src/routeTree.gen.ts'),\n quoteStyle: z.enum(['single', 'double']).optional().default('single'),\n semicolons: z.boolean().optional().default(false),\n disableTypes: z.boolean().optional().default(false),\n addExtensions: z.boolean().optional().default(false),\n disableLogging: z.boolean().optional().default(false),\n disableManifestGeneration: z.boolean().optional().default(false),\n apiBase: z.string().optional().default('/api'),\n routeTreeFileHeader: z\n .array(z.string())\n .optional()\n .default([\n '/* eslint-disable */',\n '// @ts-nocheck',\n '// noinspection JSUnusedGlobalSymbols',\n ]),\n routeTreeFileFooter: z.array(z.string()).optional().default([]),\n autoCodeSplitting: z.boolean().optional(),\n indexToken: z.string().optional().default('index'),\n routeToken: z.string().optional().default('route'),\n pathParamsAllowedCharacters: z\n .array(z.enum([';', ':', '@', '&', '=', '+', '$', ',']))\n .optional(),\n customScaffolding: z\n .object({\n routeTemplate: z\n .string()\n .optional()\n .default(defaultTemplate.routeTemplate),\n apiTemplate: z.string().optional().default(defaultTemplate.apiTemplate),\n })\n .optional()\n .default(defaultTemplate),\n experimental: z\n .object({\n // TODO: Remove this option in the next major release (v2).\n enableCodeSplitting: z.boolean().optional(),\n })\n .optional(),\n})\n\nexport type Config = z.infer<typeof configSchema>\n\nexport function getConfig(\n inlineConfig: Partial<Config> = {},\n configDirectory?: string,\n): Config {\n if (configDirectory === undefined) {\n configDirectory = process.cwd()\n }\n const configFilePathJson = path.resolve(configDirectory, 'tsr.config.json')\n const exists = existsSync(configFilePathJson)\n\n let config: Config\n\n if (exists) {\n config = configSchema.parse({\n ...JSON.parse(readFileSync(configFilePathJson, 'utf-8')),\n ...inlineConfig,\n })\n } else {\n config = configSchema.parse(inlineConfig)\n }\n\n // If typescript is disabled, make sure the generated route tree is a .js file\n if (config.disableTypes) {\n config.generatedRouteTree = config.generatedRouteTree.replace(\n /\\.(ts|tsx)$/,\n '.js',\n )\n }\n\n // if a configDirectory is used, paths should be relative to that directory\n if (configDirectory) {\n // if absolute configDirectory is provided, use it as the root\n if (path.isAbsolute(configDirectory)) {\n config.routesDirectory = path.resolve(\n configDirectory,\n config.routesDirectory,\n )\n config.generatedRouteTree = path.resolve(\n configDirectory,\n config.generatedRouteTree,\n )\n } else {\n config.routesDirectory = path.resolve(\n process.cwd(),\n configDirectory,\n config.routesDirectory,\n )\n config.generatedRouteTree = path.resolve(\n process.cwd(),\n configDirectory,\n config.generatedRouteTree,\n )\n }\n }\n\n validateConfig(config)\n return config\n}\n\nfunction validateConfig(config: Config) {\n if (typeof config.experimental?.enableCodeSplitting !== 'undefined') {\n const message = `\n------\n⚠️ ⚠️ ⚠️\nERROR: The \"experimental.enableCodeSplitting\" flag has been made stable and is now \"autoCodeSplitting\". Please update your configuration file to use \"autoCodeSplitting\" instead of \"experimental.enableCodeSplitting\".\n------\n`\n console.error(message)\n throw new Error(message)\n }\n\n if (config.indexToken === config.routeToken) {\n throw new Error(\n `The \"indexToken\" and \"routeToken\" options must be different.`,\n )\n }\n\n if (\n config.routeFileIgnorePrefix &&\n config.routeFileIgnorePrefix.trim() === '_'\n ) {\n throw new Error(\n `The \"routeFileIgnorePrefix\" cannot be an underscore (\"_\"). This is a reserved character used to denote a pathless route. Please use a different prefix.`,\n )\n }\n\n return config\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sources":["../../src/config.ts"],"sourcesContent":["import path from 'node:path'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { z } from 'zod'\nimport { virtualRootRouteSchema } from './filesystem/virtual/config'\n\nconst defaultTemplate = {\n routeTemplate: [\n '%%tsrImports%%',\n '\\n\\n',\n '%%tsrExportStart%%{\\n component: RouteComponent\\n }%%tsrExportEnd%%\\n\\n',\n 'function RouteComponent() { return <div>Hello \"%%tsrPath%%\"!</div> };\\n',\n ].join(''),\n apiTemplate: [\n 'import { json } from \"@tanstack/start\";\\n',\n '%%tsrImports%%',\n '\\n\\n',\n '%%tsrExportStart%%{ GET: ({ request, params }) => { return json({ message:\\'Hello \"%%tsrPath%%\"!\\' }) }}%%tsrExportEnd%%\\n',\n ].join(''),\n}\n\nexport const configSchema = z.object({\n virtualRouteConfig: virtualRootRouteSchema.or(z.string()).optional(),\n routeFilePrefix: z.string().optional(),\n routeFileIgnorePrefix: z.string().optional().default('-'),\n routeFileIgnorePattern: z.string().optional(),\n routesDirectory: z.string().optional().default('./src/routes'),\n generatedRouteTree: z.string().optional().default('./src/routeTree.gen.ts'),\n quoteStyle: z.enum(['single', 'double']).optional().default('single'),\n semicolons: z.boolean().optional().default(false),\n disableTypes: z.boolean().optional().default(false),\n addExtensions: z.boolean().optional().default(false),\n disableLogging: z.boolean().optional().default(false),\n disableManifestGeneration: z.boolean().optional().default(false),\n apiBase: z.string().optional().default('/api'),\n routeTreeFileHeader: z\n .array(z.string())\n .optional()\n .default([\n '/* eslint-disable */',\n '// @ts-nocheck',\n '// noinspection JSUnusedGlobalSymbols',\n ]),\n routeTreeFileFooter: z.array(z.string()).optional().default([]),\n autoCodeSplitting: z.boolean().optional(),\n indexToken: z.string().optional().default('index'),\n routeToken: z.string().optional().default('route'),\n pathParamsAllowedCharacters: z\n .array(z.enum([';', ':', '@', '&', '=', '+', '$', ',']))\n .optional(),\n customScaffolding: z\n .object({\n routeTemplate: z\n .string()\n .optional()\n .default(defaultTemplate.routeTemplate),\n apiTemplate: z.string().optional().default(defaultTemplate.apiTemplate),\n })\n .optional()\n .default(defaultTemplate),\n experimental: z\n .object({\n // TODO: Remove this option in the next major release (v2).\n enableCodeSplitting: z.boolean().optional(),\n })\n .optional(),\n})\n\nexport type Config = z.infer<typeof configSchema>\n\ntype ResolveParams = {\n configDirectory: string\n}\n\nexport function resolveConfigPath({ configDirectory }: ResolveParams) {\n return path.resolve(configDirectory, 'tsr.config.json')\n}\n\nexport function getConfig(\n inlineConfig: Partial<Config> = {},\n configDirectory?: string,\n): Config {\n if (configDirectory === undefined) {\n configDirectory = process.cwd()\n }\n const configFilePathJson = resolveConfigPath({ configDirectory })\n const exists = existsSync(configFilePathJson)\n\n let config: Config\n\n if (exists) {\n config = configSchema.parse({\n ...JSON.parse(readFileSync(configFilePathJson, 'utf-8')),\n ...inlineConfig,\n })\n } else {\n config = configSchema.parse(inlineConfig)\n }\n\n // If typescript is disabled, make sure the generated route tree is a .js file\n if (config.disableTypes) {\n config.generatedRouteTree = config.generatedRouteTree.replace(\n /\\.(ts|tsx)$/,\n '.js',\n )\n }\n\n // if a configDirectory is used, paths should be relative to that directory\n if (configDirectory) {\n // if absolute configDirectory is provided, use it as the root\n if (path.isAbsolute(configDirectory)) {\n config.routesDirectory = path.resolve(\n configDirectory,\n config.routesDirectory,\n )\n config.generatedRouteTree = path.resolve(\n configDirectory,\n config.generatedRouteTree,\n )\n } else {\n config.routesDirectory = path.resolve(\n process.cwd(),\n configDirectory,\n config.routesDirectory,\n )\n config.generatedRouteTree = path.resolve(\n process.cwd(),\n configDirectory,\n config.generatedRouteTree,\n )\n }\n }\n\n validateConfig(config)\n return config\n}\n\nfunction validateConfig(config: Config) {\n if (typeof config.experimental?.enableCodeSplitting !== 'undefined') {\n const message = `\n------\n⚠️ ⚠️ ⚠️\nERROR: The \"experimental.enableCodeSplitting\" flag has been made stable and is now \"autoCodeSplitting\". Please update your configuration file to use \"autoCodeSplitting\" instead of \"experimental.enableCodeSplitting\".\n------\n`\n console.error(message)\n throw new Error(message)\n }\n\n if (config.indexToken === config.routeToken) {\n throw new Error(\n `The \"indexToken\" and \"routeToken\" options must be different.`,\n )\n }\n\n if (\n config.routeFileIgnorePrefix &&\n config.routeFileIgnorePrefix.trim() === '_'\n ) {\n throw new Error(\n `The \"routeFileIgnorePrefix\" cannot be an underscore (\"_\"). This is a reserved character used to denote a pathless route. Please use a different prefix.`,\n )\n }\n\n return config\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { configSchema, getConfig } from './config.js';
1
+ export { configSchema, getConfig, resolveConfigPath } from './config.js';
2
2
  export type { Config } from './config.js';
3
3
  export { generator, startAPIRouteSegmentsFromTSRFilePath, CONSTANTS, } from './generator.js';
4
4
  export type { StartAPIRoutePathSegment } from './generator.js';
package/dist/esm/index.js CHANGED
@@ -1,10 +1,11 @@
1
- import { configSchema, getConfig } from "./config.js";
1
+ import { configSchema, getConfig, resolveConfigPath } from "./config.js";
2
2
  import { CONSTANTS, generator, startAPIRouteSegmentsFromTSRFilePath } from "./generator.js";
3
3
  export {
4
4
  CONSTANTS,
5
5
  configSchema,
6
6
  generator,
7
7
  getConfig,
8
+ resolveConfigPath,
8
9
  startAPIRouteSegmentsFromTSRFilePath
9
10
  };
10
11
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/router-generator",
3
- "version": "1.87.3",
3
+ "version": "1.87.7",
4
4
  "description": "Modern and scalable routing for React applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -52,7 +52,7 @@
52
52
  "tsx": "^4.19.2",
53
53
  "prettier": "^3.4.2",
54
54
  "zod": "^3.23.8",
55
- "@tanstack/virtual-file-routes": "^1.81.9"
55
+ "@tanstack/virtual-file-routes": "^1.87.6"
56
56
  },
57
57
  "scripts": {}
58
58
  }
package/src/config.ts CHANGED
@@ -67,6 +67,14 @@ export const configSchema = z.object({
67
67
 
68
68
  export type Config = z.infer<typeof configSchema>
69
69
 
70
+ type ResolveParams = {
71
+ configDirectory: string
72
+ }
73
+
74
+ export function resolveConfigPath({ configDirectory }: ResolveParams) {
75
+ return path.resolve(configDirectory, 'tsr.config.json')
76
+ }
77
+
70
78
  export function getConfig(
71
79
  inlineConfig: Partial<Config> = {},
72
80
  configDirectory?: string,
@@ -74,7 +82,7 @@ export function getConfig(
74
82
  if (configDirectory === undefined) {
75
83
  configDirectory = process.cwd()
76
84
  }
77
- const configFilePathJson = path.resolve(configDirectory, 'tsr.config.json')
85
+ const configFilePathJson = resolveConfigPath({ configDirectory })
78
86
  const exists = existsSync(configFilePathJson)
79
87
 
80
88
  let config: Config
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { configSchema, getConfig } from './config'
1
+ export { configSchema, getConfig, resolveConfigPath } from './config'
2
2
  export type { Config } from './config'
3
3
 
4
4
  export {