{"version":3,"sources":["../../src/config/utils.ts","../../src/config/config.ts"],"names":["path","fs","bundleRequire","z"],"mappings":"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","file":"index.cjs","sourcesContent":["import path from \"node:path\"\nimport fs from \"node:fs/promises\"\nimport { bundleRequire } from \"bundle-require\"\nimport { EdgeSpecConfig } from \"src/config/config.js\"\nimport { SetRequired } from \"type-fest\"\n\nconst cloneObjectAndDeleteUndefinedKeys = <T extends Record<string, any>>(\n  obj: T\n) => {\n  const clone = { ...obj }\n  Object.keys(clone).forEach((key) => {\n    if (clone[key] === undefined) {\n      delete clone[key]\n    }\n  })\n  return clone\n}\n\nconst resolvePossibleRelativePath = (\n  possibleRelativePath: string,\n  configDirectory: string\n) => {\n  if (path.isAbsolute(possibleRelativePath)) {\n    return possibleRelativePath\n  }\n\n  return path.resolve(configDirectory, possibleRelativePath)\n}\n\nexport interface ResolvedEdgeSpecConfig extends EdgeSpecConfig {\n  rootDirectory: string\n  tsconfigPath: string\n  routesDirectory: string\n}\n\n/**\n * Resolves relative paths and sets defaults for any missing values.\n */\nexport const resolveConfig = (\n  config: SetRequired<EdgeSpecConfig, \"rootDirectory\">\n): ResolvedEdgeSpecConfig => {\n  const { rootDirectory, tsconfigPath, routesDirectory, ...rest } =\n    cloneObjectAndDeleteUndefinedKeys(config)\n\n  const resolvedRootDirectory = path.resolve(config.rootDirectory)\n\n  return {\n    rootDirectory: resolvedRootDirectory,\n    tsconfigPath: resolvePossibleRelativePath(\n      tsconfigPath ?? \"tsconfig.json\",\n      resolvedRootDirectory\n    ),\n    routesDirectory: resolvePossibleRelativePath(\n      routesDirectory ?? \"api\",\n      resolvedRootDirectory\n    ),\n    platform: \"wintercg-minimal\",\n    ...rest,\n  }\n}\n\nconst validateConfig = async (config: ResolvedEdgeSpecConfig) => {\n  try {\n    await fs.stat(config.routesDirectory)\n  } catch (error) {\n    throw new Error(`Could not find routes directory ${config.routesDirectory}`)\n  }\n\n  try {\n    await fs.stat(config.tsconfigPath)\n  } catch (error) {\n    throw new Error(`Could not find tsconfig.json at ${config.tsconfigPath}`)\n  }\n\n  return config\n}\n\nexport const loadConfig = async (\n  rootDirectory: string,\n  overrides?: Partial<EdgeSpecConfig>\n) => {\n  let loadedConfig: EdgeSpecConfig = {}\n\n  let configInRootExists = false\n  const potentialConfigPath = path.join(rootDirectory, \"edgespec.config.ts\")\n  try {\n    await fs.stat(potentialConfigPath)\n    configInRootExists = true\n  } catch {}\n\n  if (configInRootExists) {\n    const {\n      mod: { default: config },\n    } = await bundleRequire({\n      filepath: potentialConfigPath,\n    })\n\n    if (!config) {\n      throw new Error(\n        `Could not find a default export in ${potentialConfigPath}`\n      )\n    }\n\n    loadedConfig = config\n  }\n\n  return await validateConfig(\n    resolveConfig({\n      rootDirectory,\n      ...loadedConfig,\n      ...cloneObjectAndDeleteUndefinedKeys(overrides ?? {}),\n    })\n  )\n}\n","import { z } from \"zod\"\n\nconst edgeSpecConfigSchema = z\n  .object({\n    /**\n     * Defaults to the current working directory.\n     */\n    rootDirectory: z.string().optional(),\n    /**\n     * If this path is relative, it's resolved relative to the `rootDirectory` option.\n     */\n    tsconfigPath: z.string().optional(),\n    /**\n     * If this path is relative, it's resolved relative to the `rootDirectory` option.\n     */\n    routesDirectory: z.string().optional(),\n    /**\n     * The platform you're targeting.\n     *\n     * Defaults to `wintercg-minimal`, and you should use this whenever possible for maximal compatibility.\n     *\n     * Check [the docs](https://github.com/seamapi/edgespec/blob/main/docs/edgespec-config.md) for more information.\n     */\n    platform: z\n      .enum([\"node\", \"wintercg-minimal\"])\n      .default(\"wintercg-minimal\")\n      .optional(),\n  })\n  .strict()\n\nexport type EdgeSpecConfig = z.infer<typeof edgeSpecConfigSchema>\n\nexport const defineConfig = (config: EdgeSpecConfig): EdgeSpecConfig => {\n  const parsedConfig = edgeSpecConfigSchema.safeParse(config)\n\n  if (parsedConfig.success) {\n    return parsedConfig.data\n  }\n\n  throw new Error(`Invalid config: ${parsedConfig.error}`)\n}\n"]}