{"version":3,"file":"config.cjs","sources":["../../src/config.ts"],"sourcesContent":["import path from 'node:path'\nimport { existsSync, mkdirSync, readFileSync } from 'node:fs'\nimport { z } from 'zod'\nimport { virtualRootRouteSchema } from './filesystem/virtual/config'\nimport type { GeneratorPlugin } from './plugin/types'\n\nexport const baseConfigSchema = z.object({\n  target: z.enum(['react', 'solid']).optional().default('react'),\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  quoteStyle: z.enum(['single', 'double']).optional().default('single'),\n  semicolons: z.boolean().optional().default(false),\n  disableLogging: z.boolean().optional().default(false),\n  routeTreeFileHeader: z\n    .array(z.string())\n    .optional()\n    .default([\n      '/* eslint-disable */',\n      '// @ts-nocheck',\n      '// noinspection JSUnusedGlobalSymbols',\n    ]),\n  indexToken: z.string().optional().default('index'),\n  routeToken: z.string().optional().default('route'),\n  pathParamsAllowedCharacters: z\n    .array(z.enum([';', ':', '@', '&', '=', '+', '$', ',']))\n    .optional(),\n})\n\nexport type BaseConfig = z.infer<typeof baseConfigSchema>\n\nexport const configSchema = baseConfigSchema.extend({\n  generatedRouteTree: z.string().optional().default('./src/routeTree.gen.ts'),\n  disableTypes: z.boolean().optional().default(false),\n  verboseFileRoutes: z.boolean().optional(),\n  addExtensions: z.boolean().optional().default(false),\n  enableRouteTreeFormatting: z.boolean().optional().default(true),\n  routeTreeFileFooter: z.array(z.string()).optional().default([]),\n  autoCodeSplitting: z.boolean().optional(),\n  customScaffolding: z\n    .object({\n      routeTemplate: z.string().optional(),\n      lazyRouteTemplate: z.string().optional(),\n    })\n    .optional(),\n  experimental: z\n    .object({\n      // TODO: This has been made stable and is now \"autoCodeSplitting\". Remove in next major version.\n      enableCodeSplitting: z.boolean().optional(),\n    })\n    .optional(),\n  plugins: z.array(z.custom<GeneratorPlugin>()).optional(),\n  tmpDir: z.string().optional().default(''),\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  const resolveTmpDir = (dir: string | Array<string>) => {\n    if (Array.isArray(dir)) {\n      dir = path.join(...dir)\n    }\n    if (!path.isAbsolute(dir)) {\n      dir = path.resolve(process.cwd(), dir)\n    }\n    mkdirSync(dir, { recursive: true })\n    return dir\n  }\n\n  if (config.tmpDir) {\n    config.tmpDir = resolveTmpDir(config.tmpDir)\n  } else if (process.env.TSR_TMP_DIR) {\n    config.tmpDir = resolveTmpDir(process.env.TSR_TMP_DIR)\n  } else {\n    config.tmpDir = resolveTmpDir(['.tanstack', 'tmp'])\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","mkdirSync"],"mappings":"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"}