{"version":3,"file":"config-D1BwAgHh.mjs","names":["PACKAGE_ROOT","getErrorMessage"],"sources":["../src/config/pkl.js","../src/config.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { execFileSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nconst PACKAGE_ROOT = path.resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"../..\");\n\nconst DOCUMENTED_PKL_SCHEMA_IMPORT_RE =\n  /^(\\s*(?:amends|import)\\s+)([\"'])node_modules\\/vize\\/pkl\\/(VizeConfig\\.pkl|vize\\.pkl)\\2/gm;\n\n/**\n * Evaluate a `vize.config.pkl` file and return its JSON representation.\n *\n * The npm-facing loader keeps PKL execution in Node because it needs package\n * resolution for `@pkl-community/pkl`, but all structural config normalization\n * happens in Rust after this function returns. A missing PKL runtime returns\n * `null` so config discovery can fall through to lower-priority formats; an\n * evaluation failure throws because a present PKL config should not silently be\n * ignored.\n */\nexport function loadPklConfigJson(filePath) {\n  const pklBin = findPklBinary();\n  if (!pklBin) {\n    console.warn(\n      \"[vize] pkl CLI not found. Install @pkl-community/pkl or add pkl to PATH. \" +\n        \"Falling back to the next config format.\",\n    );\n    return null;\n  }\n\n  const patchedFilePath = createPklConfigWithBundledSchemaImports(filePath);\n  const evalFilePath = patchedFilePath ?? filePath;\n  try {\n    return execFileSync(pklBin, [\"eval\", \"-f\", \"json\", evalFilePath], {\n      cwd: path.dirname(filePath),\n      encoding: \"utf-8\",\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n      timeout: 30_000,\n    });\n  } catch (error) {\n    throw new Error(`Failed to evaluate vize PKL config at ${filePath}: ${getErrorMessage(error)}`);\n  } finally {\n    if (patchedFilePath) {\n      fs.rmSync(patchedFilePath, { force: true });\n    }\n  }\n}\n\nfunction findPklBinary() {\n  try {\n    const pklPkgPath = import.meta.resolve?.(\"@pkl-community/pkl\");\n    if (pklPkgPath) {\n      const pklLibDir = path.dirname(fileURLToPath(pklPkgPath));\n      const pklPackageDir = path.dirname(pklLibDir);\n      const candidates = [\n        path.join(pklLibDir, \"main.js\"),\n        path.join(pklPackageDir, \"pkl\"),\n        path.join(pklPackageDir, \"pkl.exe\"),\n      ];\n\n      for (const candidate of candidates) {\n        if (fs.existsSync(candidate)) {\n          try {\n            execFileSync(candidate, [\"--version\"], { stdio: \"ignore\" });\n            return candidate;\n          } catch {\n            // Keep looking: the shim can exist when its runtime is unavailable.\n          }\n        }\n      }\n    }\n  } catch {\n    // Fall back to PATH below.\n  }\n\n  try {\n    execFileSync(\"pkl\", [\"--version\"], { stdio: \"ignore\" });\n    return \"pkl\";\n  } catch {\n    return null;\n  }\n}\n\nfunction createPklConfigWithBundledSchemaImports(filePath) {\n  const configDir = path.dirname(filePath);\n  const source = fs.readFileSync(filePath, \"utf-8\");\n  let patched = false;\n\n  const content = source.replace(\n    DOCUMENTED_PKL_SCHEMA_IMPORT_RE,\n    (match, prefix, quote, schemaFile) => {\n      const projectSchemaPath = path.join(configDir, \"node_modules\", \"vize\", \"pkl\", schemaFile);\n      if (fs.existsSync(projectSchemaPath)) {\n        return match;\n      }\n\n      const bundledSchemaPath = path.join(PACKAGE_ROOT, \"pkl\", schemaFile);\n      if (!fs.existsSync(bundledSchemaPath)) {\n        return match;\n      }\n\n      patched = true;\n      return `${prefix}${quote}${pathToFileURL(bundledSchemaPath).href}${quote}`;\n    },\n  );\n\n  if (!patched) {\n    return null;\n  }\n\n  const tempFile = path.join(\n    configDir,\n    `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.pkl`,\n  );\n  fs.writeFileSync(tempFile, content, { flag: \"wx\", mode: 0o600 });\n  return tempFile;\n}\n\nfunction getErrorMessage(error) {\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  return String(error);\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { createRequire } from \"node:module\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { transform } from \"oxc-transform\";\nimport type {\n  ResolvedVizeConfig,\n  LoadConfigOptions,\n  UserConfigExport,\n  ConfigEnv,\n  GlobalTypesConfig,\n  GlobalTypeDeclaration,\n} from \"./types/index.js\";\nimport { loadPklConfigJson } from \"./config/pkl.js\";\n\ntype NativeConfigHelpers = {\n  normalizeVizeConfig(value: unknown): unknown;\n};\n\nconst require = createRequire(import.meta.url);\nconst native = require(\"@vizejs/native\") as NativeConfigHelpers;\n\nexport const CONFIG_FILE_NAMES = [\n  \"vize.config.pkl\",\n  \"vize.config.ts\",\n  \"vize.config.js\",\n  \"vize.config.mjs\",\n  \"vize.config.json\",\n] as const;\n\nconst DEFAULT_CONFIG_ENV: ConfigEnv = {\n  mode: \"development\",\n  command: \"serve\",\n};\n\nconst PACKAGE_ROOT = path.resolve(fileURLToPath(new URL(\".\", import.meta.url)), \"..\");\n\nexport const VIZE_CONFIG_JSON_SCHEMA_PATH = path.join(\n  PACKAGE_ROOT,\n  \"schemas\",\n  \"vize.config.schema.json\",\n);\n\nexport const VIZE_CONFIG_PKL_SCHEMA_PATH = path.join(PACKAGE_ROOT, \"pkl\", \"vize.pkl\");\n\n/**\n * Define a Vize configuration with type checking.\n * Accepts a plain object or a function that receives ConfigEnv.\n */\nexport function defineConfig(config: UserConfigExport): UserConfigExport {\n  return config;\n}\n\n/**\n * Load `vize.config.*` from the specified directory.\n */\nexport async function loadConfig(\n  root: string,\n  options: LoadConfigOptions = {},\n): Promise<ResolvedVizeConfig | null> {\n  const { mode = \"root\", configFile, env } = options;\n\n  if (mode === \"none\") {\n    return null;\n  }\n\n  if (configFile) {\n    const absolutePath = path.isAbsolute(configFile) ? configFile : path.resolve(root, configFile);\n    if (fs.existsSync(absolutePath)) {\n      return loadConfigFile(absolutePath, env);\n    }\n    return null;\n  }\n\n  if (mode === \"auto\") {\n    return loadConfigFromDirAuto(root, env);\n  }\n\n  return loadConfigFromDir(root, env);\n}\n\nasync function loadConfigFromDir(dir: string, env?: ConfigEnv): Promise<ResolvedVizeConfig | null> {\n  for (const name of CONFIG_FILE_NAMES) {\n    const filePath = path.join(dir, name);\n    if (!fs.existsSync(filePath)) {\n      continue;\n    }\n\n    const config = await loadConfigFile(filePath, env);\n    if (config !== null) {\n      return config;\n    }\n  }\n  return null;\n}\n\nasync function loadConfigFromDirAuto(\n  startDir: string,\n  env?: ConfigEnv,\n): Promise<ResolvedVizeConfig | null> {\n  let currentDir = path.resolve(startDir);\n\n  while (true) {\n    const config = await loadConfigFromDir(currentDir, env);\n    if (config !== null) {\n      return config;\n    }\n\n    const parentDir = path.dirname(currentDir);\n    if (parentDir === currentDir) {\n      return null;\n    }\n\n    currentDir = parentDir;\n  }\n}\n\nasync function loadConfigFile(\n  filePath: string,\n  env?: ConfigEnv,\n): Promise<ResolvedVizeConfig | null> {\n  const absolutePath = path.resolve(filePath);\n  if (!fs.existsSync(absolutePath)) {\n    return null;\n  }\n\n  const ext = path.extname(absolutePath);\n\n  if (ext === \".pkl\") {\n    return loadPklConfig(absolutePath);\n  }\n\n  if (ext === \".json\") {\n    const content = fs.readFileSync(absolutePath, \"utf-8\");\n    return parseJsonConfig(content, absolutePath);\n  }\n\n  if (ext === \".ts\") {\n    return loadTypeScriptConfig(absolutePath, env);\n  }\n\n  return loadESMConfig(absolutePath, env);\n}\n\nfunction loadPklConfig(filePath: string): ResolvedVizeConfig | null {\n  const output = loadPklConfigJson(filePath);\n  return output === null ? null : parseJsonConfig(output, filePath);\n}\n\nexport async function resolveConfigExport(\n  exported: UserConfigExport,\n  env?: ConfigEnv,\n): Promise<ResolvedVizeConfig> {\n  if (typeof exported === \"function\") {\n    return normalizeLoadedConfig(await exported(env ?? DEFAULT_CONFIG_ENV));\n  }\n\n  return normalizeLoadedConfig(exported);\n}\n\nasync function loadTypeScriptConfig(\n  filePath: string,\n  env?: ConfigEnv,\n): Promise<ResolvedVizeConfig> {\n  const source = fs.readFileSync(filePath, \"utf-8\");\n  const result = await transform(filePath, source, {\n    typescript: {\n      onlyRemoveTypeImports: true,\n    },\n  });\n\n  const tempFile = path.join(\n    path.dirname(filePath),\n    `.vize-config-${process.pid}-${Date.now()}-${randomUUID()}.mjs`,\n  );\n  fs.writeFileSync(tempFile, result.code, { flag: \"wx\", mode: 0o600 });\n\n  try {\n    const module = await importFresh(tempFile);\n    const exported: UserConfigExport = module.default || module;\n    return resolveConfigExport(exported, env);\n  } finally {\n    fs.rmSync(tempFile, { force: true });\n  }\n}\n\nasync function loadESMConfig(filePath: string, env?: ConfigEnv): Promise<ResolvedVizeConfig> {\n  const module = await importFresh(filePath);\n  const exported: UserConfigExport = module.default || module;\n  return resolveConfigExport(exported, env);\n}\n\nasync function importFresh(filePath: string): Promise<Record<string, unknown>> {\n  const fileUrl = pathToFileURL(filePath);\n  fileUrl.searchParams.set(\"t\", String(fs.statSync(filePath).mtimeMs));\n  return import(fileUrl.href);\n}\n\nfunction parseJsonConfig(content: string, filePath: string): ResolvedVizeConfig {\n  try {\n    return normalizeLoadedConfig(JSON.parse(content));\n  } catch (error) {\n    throw new Error(`Failed to parse vize config JSON at ${filePath}: ${getErrorMessage(error)}`);\n  }\n}\n\nfunction normalizeLoadedConfig(config: unknown): ResolvedVizeConfig {\n  return native.normalizeVizeConfig(config ?? null) as ResolvedVizeConfig;\n}\n\nfunction getErrorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  return String(error);\n}\n\n/**\n * Normalize GlobalTypesConfig shorthand strings to GlobalTypeDeclaration objects\n */\nexport function normalizeGlobalTypes(\n  config: GlobalTypesConfig,\n): Record<string, GlobalTypeDeclaration> {\n  const resolvedConfig =\n    \"types\" in config &&\n    typeof config.types === \"object\" &&\n    config.types !== null &&\n    !Array.isArray(config.types)\n      ? config.types\n      : config;\n\n  const result: Record<string, GlobalTypeDeclaration> = {};\n  for (const [key, value] of Object.entries(resolvedConfig)) {\n    if (typeof value === \"string\") {\n      result[key] = { type: value };\n    } else {\n      result[key] = value;\n    }\n  }\n  return result;\n}\n"],"mappings":"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"}