{"version":3,"file":"cli-kit-DByZIdCL.mjs","names":["intro","outro","clackText","clackConfirm","clackSelect","clackMultiselect","group","clackGroup"],"sources":["../src/cli-kit/errors.ts","../src/cli-kit/modes.ts","../src/cli-kit/prompts.ts","../src/cli-kit/parse.ts","../src/cli-kit/load-config.ts","../src/cli-kit/version.ts"],"sourcesContent":["/**\n * Errors and error formatting shared by all Pagesmith CLIs.\n *\n * `CliError` is preferred over plain `Error` when you want to control the\n * process exit code or attach a follow-up \"hint\" line for the user. `formatCliError`\n * walks the `cause` chain so deeply-wrapped errors still surface readable lines.\n */\n\nexport class CliError extends Error {\n  readonly exitCode: number;\n  readonly hint?: string;\n\n  constructor(\n    message: string,\n    options: { exitCode?: number; hint?: string; cause?: unknown } = {},\n  ) {\n    super(message, options.cause !== undefined ? { cause: options.cause } : undefined);\n    this.name = \"CliError\";\n    this.exitCode = options.exitCode ?? 1;\n    this.hint = options.hint;\n  }\n}\n\nfunction formatUnknownCause(value: unknown): string {\n  if (typeof value === \"string\") return value;\n  if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n    return String(value);\n  }\n  if (typeof value === \"symbol\") return value.toString();\n\n  try {\n    const json = JSON.stringify(value);\n    if (json) return json;\n  } catch {\n    // Fall through to the generic object tag below.\n  }\n\n  return Object.prototype.toString.call(value);\n}\n\nexport function formatCliError(error: unknown): string {\n  if (!(error instanceof Error)) return String(error);\n\n  const lines: string[] = [];\n  let current: unknown = error;\n  let depth = 0;\n\n  while (current instanceof Error) {\n    const prefix = depth === 0 ? \"\" : \"Caused by: \";\n    const message = current.message || current.name;\n    const line = `${prefix}${message}`;\n    if (line !== lines.at(-1)) {\n      lines.push(line);\n    }\n    current = (current as { cause?: unknown }).cause;\n    depth += 1;\n  }\n\n  if (current != null) {\n    lines.push(`Caused by: ${formatUnknownCause(current)}`);\n  }\n\n  if (error instanceof CliError && error.hint) {\n    lines.push(\"\");\n    lines.push(`Hint: ${error.hint}`);\n  }\n\n  return lines.join(\"\\n\");\n}\n\nexport function exitCodeFor(error: unknown): number {\n  if (error instanceof CliError) return error.exitCode;\n  return 1;\n}\n","/**\n * Interactive vs non-interactive mode resolution shared by all Pagesmith CLIs.\n *\n * Precedence (highest first):\n *   1. `--yes` / `--non-interactive` flags force non-interactive mode.\n *   2. `--interactive` flag forces interactive mode (errors when no TTY is\n *      attached so the user does not get a silently-hung prompt).\n *   3. Environment auto-detection: `CI`, `PAGESMITH_NON_INTERACTIVE`, and\n *      whether `process.stdin`/`process.stdout` are TTYs.\n *\n * Every Pagesmith CLI honors the same env vars and flag spelling so CI/CD\n * pipelines have one knob to flip.\n */\n\nimport { CliError } from \"./errors.js\";\n\nexport type InteractivityFlags = {\n  yes?: boolean;\n  nonInteractive?: boolean;\n  interactive?: boolean;\n};\n\nexport type InteractivityResolution = {\n  interactive: boolean;\n  /** Human-readable reason to print/log when running non-interactively. */\n  reason: string;\n};\n\nexport function isNonInteractiveEnv(): boolean {\n  if (process.env.CI) return true;\n  if (process.env.PAGESMITH_NON_INTERACTIVE) return true;\n  return !(process.stdout.isTTY && process.stdin.isTTY);\n}\n\nexport function isInteractive(): boolean {\n  return !isNonInteractiveEnv();\n}\n\nexport function resolveInteractive(flags: InteractivityFlags = {}): InteractivityResolution {\n  if (flags.yes) return { interactive: false, reason: \"--yes\" };\n  if (flags.nonInteractive) return { interactive: false, reason: \"--non-interactive\" };\n  if (flags.interactive) {\n    if (!process.stdout.isTTY || !process.stdin.isTTY) {\n      throw new CliError(\"--interactive requires a TTY for stdin and stdout.\", {\n        hint:\n          \"Remove the flag, attach a TTY, or pass --non-interactive / --yes for \" +\n          \"CI/CD pipelines.\",\n      });\n    }\n    return { interactive: true, reason: \"--interactive\" };\n  }\n\n  if (process.env.CI) return { interactive: false, reason: \"CI=1\" };\n  if (process.env.PAGESMITH_NON_INTERACTIVE) {\n    return { interactive: false, reason: \"PAGESMITH_NON_INTERACTIVE=1\" };\n  }\n  if (!process.stdout.isTTY || !process.stdin.isTTY) {\n    return { interactive: false, reason: \"no TTY detected\" };\n  }\n  return { interactive: true, reason: \"TTY\" };\n}\n\nexport type AssertValueOptions = {\n  /** Human label for the value (e.g. `\"project name\"`). */\n  label: string;\n  /** Flag the user can pass on the CLI to satisfy this requirement. */\n  flag: string;\n  /** Optional config key the user can set (e.g. `\"name\"` or `\"cli.core.template\"`). */\n  configKey?: string;\n  /** Optional environment variable that can also satisfy the requirement. */\n  envVar?: string;\n};\n\n/**\n * Throws a `CliError` when a required value is missing in non-interactive mode.\n * Passes the value through unchanged in the success path so callers can use it\n * inline: `const name = assertValue(args.name, { ... })`.\n */\nexport function assertValue<T>(value: T | undefined | null, opts: AssertValueOptions): T {\n  if (value !== undefined && value !== null && value !== \"\") return value;\n\n  const sources = [opts.flag];\n  if (opts.envVar) sources.push(`$${opts.envVar}`);\n  if (opts.configKey) sources.push(`${opts.configKey} in pagesmith.config.{ts,json5,...}`);\n\n  throw new CliError(`${opts.label} is required in non-interactive mode.`, {\n    hint: `Pass ${sources.join(\" or \")}, or rerun without --non-interactive / --yes.`,\n  });\n}\n","/**\n * Thin, opinionated wrappers around `@clack/prompts` shared by every Pagesmith CLI.\n *\n * Goals:\n *   - One cancel-handling policy: any prompt cancelled with Ctrl+C calls\n *     `cancel('Cancelled.')` and exits the process with code 130 (POSIX SIGINT).\n *   - Re-export the most useful clack helpers so command files can import a\n *     single module and follow modern clack patterns: `intro`, `outro`,\n *     `note`, `log.*`, `spinner`, `tasks`, `group`.\n *   - Keep the typed wrappers narrow so call-sites don't touch clack's\n *     `Symbol`-typed cancel returns directly.\n */\n\nimport {\n  cancel,\n  confirm as clackConfirm,\n  group as clackGroup,\n  intro as clackIntro,\n  isCancel,\n  log as clackLog,\n  multiselect as clackMultiselect,\n  note as clackNote,\n  outro as clackOutro,\n  select as clackSelect,\n  spinner as clackSpinner,\n  tasks as clackTasks,\n  text as clackText,\n} from \"@clack/prompts\";\n\nexport {\n  cancel,\n  isCancel,\n  clackLog as log,\n  clackNote as note,\n  clackSpinner as spinner,\n  clackTasks as tasks,\n};\n\nexport function intro(message: string): void {\n  clackIntro(message);\n}\n\nexport function outro(message: string): void {\n  clackOutro(message);\n}\n\nfunction exitOnCancel<T>(value: T | symbol): T {\n  if (isCancel(value)) {\n    cancel(\"Cancelled.\");\n    process.exit(130);\n  }\n  return value as T;\n}\n\nexport type TextPromptOptions = {\n  message: string;\n  placeholder?: string;\n  defaultValue?: string;\n  validate?: (value: string | undefined) => string | Error | undefined;\n};\n\nexport async function promptText(options: TextPromptOptions): Promise<string> {\n  const value = await clackText({\n    message: options.message,\n    placeholder: options.placeholder,\n    defaultValue: options.defaultValue,\n    validate: options.validate,\n  });\n  return exitOnCancel(value);\n}\n\nexport type ConfirmPromptOptions = {\n  message: string;\n  initialValue?: boolean;\n};\n\nexport async function promptConfirm(options: ConfirmPromptOptions): Promise<boolean> {\n  const value = await clackConfirm({\n    message: options.message,\n    initialValue: options.initialValue ?? true,\n  });\n  return exitOnCancel(value);\n}\n\nexport type SelectOption<T> = { value: T; label?: string; hint?: string };\n\nexport type SelectPromptOptions<T extends string> = {\n  message: string;\n  options: Array<SelectOption<T>>;\n  initialValue?: T;\n};\n\nexport async function promptSelect<T extends string>(options: SelectPromptOptions<T>): Promise<T> {\n  const value = await clackSelect({\n    message: options.message,\n    options: options.options as unknown as Parameters<typeof clackSelect<T>>[0][\"options\"],\n    initialValue: options.initialValue,\n  });\n  return exitOnCancel(value) as T;\n}\n\nexport type MultiselectPromptOptions<T extends string> = {\n  message: string;\n  options: Array<SelectOption<T>>;\n  initialValues?: T[];\n  required?: boolean;\n};\n\nexport async function promptMultiselect<T extends string>(\n  options: MultiselectPromptOptions<T>,\n): Promise<T[]> {\n  const value = await clackMultiselect({\n    message: options.message,\n    options: options.options as unknown as Parameters<typeof clackMultiselect<T>>[0][\"options\"],\n    initialValues: options.initialValues,\n    required: options.required ?? false,\n  });\n  return exitOnCancel(value) as T[];\n}\n\n/**\n * Sequential prompt group. The provided record is passed straight through to\n * clack's `group()`; we only keep the cancel-handling policy consistent by\n * intercepting cancel results in the typed wrappers above.\n */\nexport const group = clackGroup;\n","/**\n * Thin wrapper around `cac` so every Pagesmith CLI shares the same flag spelling\n * (`--yes`, `--non-interactive`, `--interactive`, `--config`) and consistent\n * help/version handling.\n *\n * Each command file calls `cli.command(...)` on the returned instance and\n * registers its own options/handler. The returned `runCli(argv)` helper handles\n * help-on-no-command, top-level error formatting, and exit codes.\n */\n\nimport cac from \"cac\";\nimport type { CAC, Command } from \"cac\";\nimport { exitCodeFor, formatCliError } from \"./errors.js\";\n\nexport type DefineCliOptions = {\n  /** Binary name shown in help (e.g. `\"pagesmith-docs\"`). */\n  name: string;\n  /** Package version printed by `--version`. */\n  version: string;\n  /**\n   * Optional descriptive line appended before help. Most CLIs leave this\n   * blank because cac's auto-generated help is already verbose.\n   */\n  description?: string;\n};\n\nexport type RunCliOptions = {\n  /** argv slice to parse. Defaults to `process.argv.slice(2)`. */\n  argv?: string[];\n  /**\n   * When `true`, do not call `process.exit`; instead let any thrown error\n   * bubble out so callers can handle it (used by tests).\n   */\n  rethrow?: boolean;\n};\n\nexport type CliInstance = {\n  cli: CAC;\n  /** Register `--config <path>` and the standard interactivity flags on a command. */\n  withInteractivityFlags(command: Command): Command;\n  withConfigFlag(command: Command): Command;\n  /** Parse argv and dispatch to the registered handlers. */\n  run(options?: RunCliOptions): Promise<number>;\n};\n\n/**\n * Adds the standard `--yes`, `--non-interactive`/`--no-interactive`, and\n * `--interactive` flags to a cac command. Centralizing the spelling here keeps\n * every Pagesmith CLI in lockstep — see `cli-kit/modes.ts` for how they're\n * resolved.\n */\nexport function withInteractivityFlags(command: Command): Command {\n  return command\n    .option(\"-y, --yes\", \"Skip prompts and accept detected defaults\")\n    .option(\"--non-interactive\", \"Force non-interactive mode (alias of --yes for CI)\")\n    .option(\"--interactive\", \"Force interactive prompts even when env looks non-TTY\");\n}\n\nexport function withConfigFlag(command: Command): Command {\n  return command.option(\n    \"--config <path>\",\n    \"Config file path (default: pagesmith.config.{ts,mts,js,mjs,json5,json})\",\n  );\n}\n\nexport function defineCli(options: DefineCliOptions): CliInstance {\n  const cli = cac(options.name);\n  cli.help();\n  cli.version(options.version);\n\n  const run = async (runOptions: RunCliOptions = {}): Promise<number> => {\n    const argv = runOptions.argv ?? process.argv.slice(2);\n\n    try {\n      const parsed = cli.parse([process.execPath, options.name, ...argv], { run: false });\n\n      // cac already prints --help / --version output before returning. Only\n      // dispatch when a command actually matched (`matchedCommandName` is set).\n      if (parsed.options[\"help\"] || parsed.options[\"version\"]) return 0;\n\n      if (!cli.matchedCommandName) {\n        cli.outputHelp();\n        return 0;\n      }\n\n      await cli.runMatchedCommand();\n      return 0;\n    } catch (error) {\n      if (runOptions.rethrow) throw error;\n      console.error(formatCliError(error));\n      return exitCodeFor(error);\n    }\n  };\n\n  return {\n    cli,\n    withInteractivityFlags,\n    withConfigFlag,\n    run,\n  };\n}\n","/**\n * Unified Pagesmith config loader.\n *\n * Resolves and reads `pagesmith.config.{ts,mts,js,mjs,json5,json}` (in that\n * order of preference). Each Pagesmith CLI uses this to:\n *   - Locate a config without forcing the user to pass `--config`.\n *   - Seed prompt defaults during interactive flows.\n *   - Pass a normalized config path/object to the underlying preset/resolver.\n *\n * The loader returns a loose `Record<string, unknown>` so the calling package\n * can narrow with its own zod schema (`DocsConfigSchema`, `SiteUserConfigSchema`,\n * etc.) — keeping cli-kit free of package-specific shapes.\n */\n\nimport { existsSync, readFileSync } from \"fs\";\nimport JSON5 from \"json5\";\nimport { isAbsolute, resolve } from \"path\";\nimport { pathToFileURL } from \"url\";\nimport { CliError } from \"./errors.js\";\n\nexport type PagesmithConfigFormat = \"ts\" | \"mts\" | \"js\" | \"mjs\" | \"json5\" | \"json\";\n\nexport const PAGESMITH_CONFIG_BASENAMES = [\n  \"pagesmith.config.ts\",\n  \"pagesmith.config.mts\",\n  \"pagesmith.config.mjs\",\n  \"pagesmith.config.js\",\n  \"pagesmith.config.json5\",\n  \"pagesmith.config.json\",\n] as const;\n\nexport type PagesmithConfigFile = {\n  /** Absolute path to the resolved config file, or `undefined` if none was found. */\n  configPath?: string;\n  /** File extension without the leading dot. */\n  format?: PagesmithConfigFormat;\n  /** Raw config object, or `undefined` if no config file was found. */\n  config?: Record<string, unknown>;\n};\n\nfunction detectFormat(file: string): PagesmithConfigFormat | undefined {\n  if (file.endsWith(\".ts\")) return \"ts\";\n  if (file.endsWith(\".mts\")) return \"mts\";\n  if (file.endsWith(\".mjs\")) return \"mjs\";\n  if (file.endsWith(\".js\")) return \"js\";\n  if (file.endsWith(\".json5\")) return \"json5\";\n  if (file.endsWith(\".json\")) return \"json\";\n  return undefined;\n}\n\nexport type FindConfigOptions = {\n  /** Base directory used to resolve relative paths. Defaults to `process.cwd()`. */\n  cwd?: string;\n  /**\n   * Explicit user-supplied path (e.g. `--config ./my.config.ts`). When set,\n   * this is the only candidate considered.\n   */\n  explicitPath?: string;\n};\n\nexport function findPagesmithConfig(options: FindConfigOptions = {}): {\n  configPath?: string;\n  format?: PagesmithConfigFormat;\n} {\n  const cwd = options.cwd ?? process.cwd();\n  if (options.explicitPath) {\n    const resolved = isAbsolute(options.explicitPath)\n      ? options.explicitPath\n      : resolve(cwd, options.explicitPath);\n    if (!existsSync(resolved)) {\n      throw new CliError(`Config file not found: ${resolved}`, {\n        hint:\n          \"Pass an existing path to --config, or omit the flag to auto-discover \" +\n          \"pagesmith.config.{ts,mts,js,mjs,json5,json}.\",\n      });\n    }\n    const format = detectFormat(resolved);\n    if (!format) {\n      throw new CliError(`Unsupported config file extension: ${resolved}`, {\n        hint: \"Supported: .ts, .mts, .js, .mjs, .json5, .json\",\n      });\n    }\n    return { configPath: resolved, format };\n  }\n\n  for (const basename of PAGESMITH_CONFIG_BASENAMES) {\n    const candidate = resolve(cwd, basename);\n    if (existsSync(candidate)) {\n      const format = detectFormat(candidate);\n      if (!format) continue;\n      return { configPath: candidate, format };\n    }\n  }\n  return {};\n}\n\nfunction parseJsonLike(filePath: string): Record<string, unknown> {\n  try {\n    const raw = readFileSync(filePath, \"utf-8\");\n    const parsed = JSON5.parse(raw);\n    if (parsed && typeof parsed === \"object\") return parsed as Record<string, unknown>;\n    throw new Error(\"expected an object\");\n  } catch (err) {\n    const message = err instanceof Error ? err.message : String(err);\n    throw new CliError(`Failed to parse config file: ${filePath}`, {\n      cause: err,\n      hint: `Check that the file contains a valid JSON5 object. (${message})`,\n    });\n  }\n}\n\nasync function loadEsmModule(filePath: string): Promise<Record<string, unknown>> {\n  try {\n    const url = pathToFileURL(filePath).href;\n    const mod = (await import(/* @vite-ignore */ /* webpackIgnore: true */ url)) as {\n      default?: unknown;\n    } & Record<string, unknown>;\n    const value = mod.default ?? mod;\n    if (value && typeof value === \"object\") return value as Record<string, unknown>;\n    throw new Error(\"expected the default export to be an object\");\n  } catch (err) {\n    throw new CliError(`Failed to load config module: ${filePath}`, {\n      cause: err,\n      hint: \"Ensure the file exports a default object via `export default { ... }` or `defineConfig({ ... })`.\",\n    });\n  }\n}\n\nasync function loadTsModule(filePath: string): Promise<Record<string, unknown>> {\n  try {\n    const { createJiti } = await import(\"jiti\");\n    const jiti = createJiti(import.meta.url, { interopDefault: true, fsCache: false });\n    const mod = (await jiti.import(filePath)) as unknown;\n    const value =\n      mod && typeof mod === \"object\" && \"default\" in (mod as Record<string, unknown>)\n        ? (mod as { default: unknown }).default\n        : mod;\n    if (value && typeof value === \"object\") return value as Record<string, unknown>;\n    throw new Error(\"expected the default export to be an object\");\n  } catch (err) {\n    throw new CliError(`Failed to load TypeScript config: ${filePath}`, {\n      cause: err,\n      hint: \"Ensure the file exports a default object via `export default { ... }` or `defineConfig({ ... })`.\",\n    });\n  }\n}\n\nexport async function readPagesmithConfig(\n  configPath: string,\n  format?: PagesmithConfigFormat,\n): Promise<Record<string, unknown>> {\n  const fmt = format ?? detectFormat(configPath);\n  if (!fmt) {\n    throw new CliError(`Unsupported config file extension: ${configPath}`, {\n      hint: \"Supported: .ts, .mts, .js, .mjs, .json5, .json\",\n    });\n  }\n  switch (fmt) {\n    case \"json\":\n    case \"json5\":\n      return parseJsonLike(configPath);\n    case \"js\":\n    case \"mjs\":\n      return loadEsmModule(configPath);\n    case \"ts\":\n    case \"mts\":\n      return loadTsModule(configPath);\n  }\n}\n\n/**\n * Find and load the closest Pagesmith config. Returns an empty object when no\n * config is found so callers can treat the result as \"use defaults\". When the\n * config file exists but cannot be parsed/imported, throws a `CliError` with a\n * helpful hint.\n */\nexport async function loadPagesmithConfig(\n  options: FindConfigOptions = {},\n): Promise<PagesmithConfigFile> {\n  const found = findPagesmithConfig(options);\n  if (!found.configPath || !found.format) return {};\n  const config = await readPagesmithConfig(found.configPath, found.format);\n  return { configPath: found.configPath, format: found.format, config };\n}\n","/**\n * Helper to read a CLI's version string from its sibling `package.json`.\n * Used by every Pagesmith CLI's `bin.ts` to wire up `cac.version()`.\n */\n\nimport { readFileSync } from \"fs\";\nimport { resolve } from \"path\";\n\n/**\n * Read the `version` field from a package.json located relative to the calling\n * module. Pass `import.meta.dirname` from the caller as the `dirname` argument.\n *\n * @param dirname Directory of the calling module (typically `import.meta.dirname`).\n * @param relativePath Relative path from `dirname` to the package.json (default: `'../../package.json'`).\n */\nexport function readPackageVersion(dirname: string, relativePath = \"../../package.json\"): string {\n  try {\n    const pkg = JSON.parse(readFileSync(resolve(dirname, relativePath), \"utf-8\")) as {\n      version?: string;\n    };\n    return pkg.version ?? \"0.0.0\";\n  } catch {\n    return \"0.0.0\";\n  }\n}\n"],"mappings":"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"}