{"version":3,"file":"cli.mjs","names":[],"sources":["../../src/aliases-store.ts","../../src/alias-list-output.ts","../../src/cli/argv.ts","../../src/copy-summary.ts","../../src/interactive-alias-menu.ts","../../src/version.ts","../../src/bin/cli.ts"],"sourcesContent":["import { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { parseSourceSpec } from './parse-source-spec.ts'\n\nexport type Aliases = Record<string, string>\n\nexport interface AliasStoreOptions {\n  configDir?: string\n  env?: Record<string, string | undefined>\n  homeDir?: string\n  platform?: NodeJS.Platform\n}\n\nconst ALIAS_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/\n\nfunction isNodeError (value: unknown): value is NodeJS.ErrnoException {\n  return value instanceof Error && 'code' in value\n}\n\nfunction assertPlainAliases (value: unknown, filePath: string): Aliases {\n  if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n    throw new Error(`Alias config at ${filePath} must be a JSON object`)\n  }\n\n  const aliases: Aliases = {}\n  for (const [name, sourceSpec] of Object.entries(value)) {\n    validateAliasName(name)\n    if (typeof sourceSpec !== 'string') {\n      throw new Error(`Alias \"${name}\" in ${filePath} must have a string source`)\n    }\n    validateAliasSource(sourceSpec)\n    aliases[name] = sourceSpec\n  }\n\n  return aliases\n}\n\nexport function validateAliasName (name: string): void {\n  if (!ALIAS_NAME_PATTERN.test(name)) {\n    throw new Error(\n      `Invalid alias name \"${name}\": use 1-64 letters, numbers, dots, ` +\n      'underscores, or dashes, starting with a letter or number'\n    )\n  }\n}\n\nexport function validateAliasSource (sourceSpec: string): void {\n  try {\n    parseSourceSpec(sourceSpec)\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e)\n    throw new Error(`Invalid alias source \"${sourceSpec}\": ${msg}`, { cause: e })\n  }\n}\n\nexport function resolveAliasConfigDir (opts: AliasStoreOptions = {}): string {\n  if (opts.configDir !== undefined && opts.configDir.length > 0) {\n    return path.resolve(opts.configDir)\n  }\n\n  const env = opts.env ?? process.env\n  const override = env.GH_CP_CONFIG_DIR\n  if (override !== undefined && override.length > 0) {\n    return path.resolve(override)\n  }\n\n  const platform = opts.platform ?? process.platform\n  const homeDir = opts.homeDir ?? os.homedir()\n  if (platform === 'win32') {\n    const appData =\n      env.LOCALAPPDATA ??\n      env.APPDATA ??\n      path.join(homeDir, 'AppData', 'Local')\n    return path.join(appData, 'gh-cp')\n  }\n\n  const xdgConfigHome = env.XDG_CONFIG_HOME\n  if (xdgConfigHome !== undefined && xdgConfigHome.length > 0) {\n    return path.join(xdgConfigHome, 'gh-cp')\n  }\n\n  return path.join(homeDir, '.config', 'gh-cp')\n}\n\nexport function resolveAliasesFilePath (opts: AliasStoreOptions = {}): string {\n  return path.join(resolveAliasConfigDir(opts), 'aliases.json')\n}\n\nexport async function loadAliases (opts: AliasStoreOptions = {}): Promise<Aliases> {\n  const filePath = resolveAliasesFilePath(opts)\n  let raw: string\n  try {\n    raw = await readFile(filePath, 'utf8')\n  } catch (e) {\n    if (isNodeError(e) && e.code === 'ENOENT') {\n      return {}\n    }\n    throw e\n  }\n\n  if (raw.trim().length === 0) {\n    return {}\n  }\n\n  try {\n    return assertPlainAliases(JSON.parse(raw), filePath)\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e)\n    throw new Error(`Failed to read aliases: ${msg}`, { cause: e })\n  }\n}\n\nexport async function saveAliases (\n  aliases: Aliases,\n  opts: AliasStoreOptions = {}\n): Promise<void> {\n  const filePath = resolveAliasesFilePath(opts)\n  const dir = path.dirname(filePath)\n  const sorted = Object.fromEntries(Object.entries(aliases).sort())\n  const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`\n\n  await mkdir(dir, { recursive: true })\n  await writeFile(tmpPath, `${JSON.stringify(sorted, null, 2)}\\n`, 'utf8')\n  await rename(tmpPath, filePath)\n}\n\nexport async function setAlias (\n  name: string,\n  sourceSpec: string,\n  opts: AliasStoreOptions = {}\n): Promise<void> {\n  validateAliasName(name)\n  validateAliasSource(sourceSpec)\n\n  const aliases = await loadAliases(opts)\n  aliases[name] = sourceSpec\n  await saveAliases(aliases, opts)\n}\n","import type { Aliases } from './aliases-store.ts'\n\nexport interface AliasListItem {\n  name: string\n  sourceSpec: string\n}\n\nexport function toAliasListItems (aliases: Aliases): AliasListItem[] {\n  return Object.entries(aliases)\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([name, sourceSpec]) => ({ name, sourceSpec }))\n}\n\nexport function formatAliasList (aliases: Aliases): string {\n  const items = toAliasListItems(aliases)\n  if (items.length === 0) {\n    return \"No aliases saved. Run 'gh-cp alias <name> <source>' first.\\n\"\n  }\n\n  const nameWidth = Math.max(...items.map((item) => item.name.length))\n  return `${items\n    .map((item) => `${item.name.padEnd(nameWidth)}  ${item.sourceSpec}`)\n    .join('\\n')}\\n`\n}\n","export interface ParsedArgv {\n  help: boolean\n  version: boolean\n  verbose: boolean\n  force: boolean\n  dryRun: boolean\n  json: boolean\n  pathFlag: string | undefined\n  refFlag: string | undefined\n  positionals: string[]\n}\n\nexport function parseArgv (argv: string[]): ParsedArgv {\n  const out: ParsedArgv = {\n    help: false,\n    version: false,\n    verbose: false,\n    force: false,\n    dryRun: false,\n    json: false,\n    pathFlag: undefined,\n    refFlag: undefined,\n    positionals: []\n  }\n\n  let i = 2\n  while (i < argv.length) {\n    const a = argv[i]\n    if (a === undefined) {\n      break\n    }\n    if (a === '--') {\n      out.positionals.push(...argv.slice(i + 1))\n      break\n    }\n    if (a === '-h' || a === '--help') {\n      out.help = true\n      i += 1\n      continue\n    }\n    if (a === '-V' || a === '--version') {\n      out.version = true\n      i += 1\n      continue\n    }\n    if (a === '-v' || a === '--verbose') {\n      out.verbose = true\n      i += 1\n      continue\n    }\n    if (a === '-f' || a === '--force') {\n      out.force = true\n      i += 1\n      continue\n    }\n    if (a === '--dry-run') {\n      out.dryRun = true\n      i += 1\n      continue\n    }\n    if (a === '--json') {\n      out.json = true\n      i += 1\n      continue\n    }\n    if (a === '--path') {\n      const v = argv[i + 1]\n      if (v === undefined || v.startsWith('-')) {\n        throw new Error('--path requires a directory argument')\n      }\n      out.pathFlag = v\n      i += 2\n      continue\n    }\n    if (a === '--ref') {\n      const v = argv[i + 1]\n      if (v === undefined || v.startsWith('-')) {\n        throw new Error('--ref requires a ref (branch, tag, or commit SHA)')\n      }\n      out.refFlag = v\n      i += 2\n      continue\n    }\n    if (a.startsWith('-')) {\n      throw new Error(`Unknown option: ${a}`)\n    }\n    out.positionals.push(a)\n    i += 1\n  }\n\n  return out\n}\n\nexport interface ResolvedCliInput {\n  sourceSpec: string\n  destination: string\n  ref: string | undefined\n  help: boolean\n  version: boolean\n  verbose: boolean\n  force: boolean\n  dryRun: boolean\n  json: boolean\n}\n\nexport interface ResolvedAliasCommand {\n  command: 'alias'\n  aliasName: string\n  sourceSpec: string\n}\n\nexport interface ResolvedAliasListCommand {\n  command: 'alias-list'\n  json: boolean\n}\n\nexport interface ResolvedInstallCommand {\n  command: 'install'\n  aliasName: string | undefined\n  destination: string\n  ref: string | undefined\n  verbose: boolean\n  force: boolean\n  dryRun: boolean\n  json: boolean\n}\n\nexport interface ResolvedCopyCommand extends ResolvedCliInput {\n  command: 'copy'\n}\n\nexport type ResolvedCliCommand =\n  | ResolvedAliasCommand\n  | ResolvedAliasListCommand\n  | ResolvedInstallCommand\n  | ResolvedCopyCommand\n\nexport function resolveCliInput (parsed: ParsedArgv): ResolvedCliInput {\n  if (parsed.help || parsed.version) {\n    return {\n      sourceSpec: '',\n      destination: '.',\n      ref: undefined,\n      help: parsed.help,\n      version: parsed.version,\n      verbose: parsed.verbose,\n      force: parsed.force,\n      dryRun: parsed.dryRun,\n      json: parsed.json\n    }\n  }\n\n  const [sourceSpec, destPositional] = parsed.positionals\n  if (sourceSpec === undefined || sourceSpec.length === 0) {\n    throw new Error('Missing source: expected owner/repo[/path][#ref]')\n  }\n\n  const destination =\n    parsed.pathFlag ?? destPositional ?? process.cwd()\n\n  return {\n    sourceSpec,\n    destination,\n    ref: parsed.refFlag,\n    help: false,\n    version: false,\n    verbose: parsed.verbose,\n    force: parsed.force,\n    dryRun: parsed.dryRun,\n    json: parsed.json\n  }\n}\n\nexport function resolveCliCommand (parsed: ParsedArgv): ResolvedCliCommand {\n  if (parsed.help || parsed.version) {\n    return {\n      command: 'copy',\n      ...resolveCliInput(parsed)\n    }\n  }\n\n  const [command, firstArg, secondArg, ...extra] = parsed.positionals\n\n  if (command === 'alias') {\n    if (firstArg === undefined || firstArg.length === 0) {\n      throw new Error('Missing alias name: expected gh-cp alias <alias-name> <source> or gh-cp alias list')\n    }\n    if (firstArg === 'list' && secondArg === undefined && extra.length === 0) {\n      if (\n        parsed.pathFlag !== undefined ||\n        parsed.refFlag !== undefined ||\n        parsed.force ||\n        parsed.dryRun\n      ) {\n        throw new Error('Copy flags are not supported with the alias list command')\n      }\n\n      return {\n        command: 'alias-list',\n        json: parsed.json\n      }\n    }\n    if (parsed.json) {\n      throw new Error('Copy flags are not supported with the alias command')\n    }\n    if (secondArg === undefined || secondArg.length === 0) {\n      throw new Error('Missing alias source: expected gh-cp alias <alias-name> <source>')\n    }\n    if (extra.length > 0) {\n      throw new Error('Too many arguments for alias: expected gh-cp alias <alias-name> <source>')\n    }\n    if (\n      parsed.pathFlag !== undefined ||\n      parsed.refFlag !== undefined ||\n      parsed.force ||\n      parsed.dryRun\n    ) {\n      throw new Error('Copy flags are not supported with the alias command')\n    }\n\n    return {\n      command: 'alias',\n      aliasName: firstArg,\n      sourceSpec: secondArg\n    }\n  }\n\n  if (command === 'install') {\n    if (extra.length > 0) {\n      throw new Error('Too many arguments for install: expected gh-cp install [alias-name] [destination]')\n    }\n\n    return {\n      command: 'install',\n      aliasName: firstArg,\n      destination: parsed.pathFlag ?? secondArg ?? process.cwd(),\n      ref: parsed.refFlag,\n      verbose: parsed.verbose,\n      force: parsed.force,\n      dryRun: parsed.dryRun,\n      json: parsed.json\n    }\n  }\n\n  return {\n    command: 'copy',\n    ...resolveCliInput(parsed)\n  }\n}\n","/** Count distinct directory prefixes implied by written relative paths (POSIX-style). */\nexport function countDistinctDirectories (written: string[]): number {\n  const dirs = new Set<string>()\n  for (const rel of written) {\n    const norm = rel.replace(/\\\\/g, '/')\n    const parts = norm.split('/')\n    parts.pop()\n    let acc = ''\n    for (const p of parts) {\n      acc = acc.length === 0 ? p : `${acc}/${p}`\n      dirs.add(acc)\n    }\n  }\n  return dirs.size\n}\n\nexport function formatCopySuccessLine (opts: {\n  written: string[]\n  dryRun: boolean\n}): string {\n  const n = opts.written.length\n  const d = countDistinctDirectories(opts.written)\n  const files =\n    n === 1 ? '1 file' : `${String(n)} files`\n  const dirs =\n    d === 1 ? '1 directory' : `${String(d)} directories`\n  if (opts.dryRun) {\n    return `✔︎ dry-run: would copy ${files}, ${dirs}`\n  }\n  return `✔︎ copied ${files}, ${dirs}`\n}\n","import * as readline from 'node:readline'\n\nexport interface AliasMenuItem {\n  name: string\n  sourceSpec: string\n}\n\ninterface KeypressKey {\n  ctrl?: boolean\n  name?: string\n}\n\ntype KeypressHandler = (str: string, key: KeypressKey) => void\n\ntype MenuInput = NodeJS.ReadStream\ntype MenuOutput = NodeJS.WriteStream\n\nexport function moveSelection (\n  current: number,\n  count: number,\n  delta: number\n): number {\n  if (count <= 0) {\n    return 0\n  }\n  return (current + delta + count) % count\n}\n\nexport function toAliasMenuItems (\n  aliases: Record<string, string>\n): AliasMenuItem[] {\n  return Object.entries(aliases)\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([name, sourceSpec]) => ({ name, sourceSpec }))\n}\n\nexport function formatAliasMenu (\n  items: readonly AliasMenuItem[],\n  selectedIndex: number,\n  destination: string\n): string {\n  const lines = [\n    '? Select a saved gh-cp source',\n    '  Use Up/Down or j/k to move, Enter to install',\n    ''\n  ]\n\n  for (let i = 0; i < items.length; i += 1) {\n    const item = items[i]\n    if (item === undefined) {\n      continue\n    }\n    const marker = i === selectedIndex ? '>' : ' '\n    lines.push(`${marker} ${item.name}`)\n    lines.push(`  ${item.sourceSpec}`)\n    lines.push('')\n  }\n\n  lines.push(`Destination: ${destination}`)\n  return `${lines.join('\\n')}\\n`\n}\n\nexport async function selectAliasInteractively (\n  items: readonly AliasMenuItem[],\n  destination: string,\n  input: MenuInput = process.stdin,\n  output: MenuOutput = process.stdout\n): Promise<AliasMenuItem | undefined> {\n  if (!input.isTTY || !output.isTTY) {\n    throw new Error(\n      'Interactive install requires a TTY. Pass an alias name, ' +\n      'for example: gh-cp install <alias-name>.'\n    )\n  }\n  if (items.length === 0) {\n    return undefined\n  }\n\n  let selectedIndex = 0\n  let lastLineCount = 0\n  const wasRaw = input.isRaw === true\n\n  function render (): void {\n    const view = formatAliasMenu(items, selectedIndex, destination)\n    if (lastLineCount > 0) {\n      readline.moveCursor(output, 0, -lastLineCount)\n      readline.clearScreenDown(output)\n    }\n    output.write(view)\n    lastLineCount = view.split('\\n').length - 1\n  }\n\n  return await new Promise<AliasMenuItem | undefined>((resolve) => {\n    let done = false\n\n    const finish = (item: AliasMenuItem | undefined): void => {\n      if (done) {\n        return\n      }\n      done = true\n      input.off('keypress', onKeypress)\n      input.setRawMode(wasRaw)\n      input.pause()\n      output.write('\\n')\n      resolve(item)\n    }\n\n    const onKeypress: KeypressHandler = (_str, key) => {\n      if (key.ctrl === true && key.name === 'c') {\n        finish(undefined)\n        process.kill(process.pid, 'SIGINT')\n        return\n      }\n      if (key.name === 'escape') {\n        finish(undefined)\n        return\n      }\n      if (key.name === 'return' || key.name === 'enter') {\n        finish(items[selectedIndex])\n        return\n      }\n      if (key.name === 'up' || key.name === 'k') {\n        selectedIndex = moveSelection(selectedIndex, items.length, -1)\n        render()\n        return\n      }\n      if (key.name === 'down' || key.name === 'j') {\n        selectedIndex = moveSelection(selectedIndex, items.length, 1)\n        render()\n      }\n    }\n\n    readline.emitKeypressEvents(input)\n    input.on('keypress', onKeypress)\n    input.setRawMode(true)\n    input.resume()\n    render()\n  })\n}\n","import { readFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nexport function readCliVersion (): string {\n  let dir = dirname(fileURLToPath(import.meta.url))\n  for (let i = 0; i < 8; i++) {\n    try {\n      const pkgPath = join(dir, 'package.json')\n      const raw = readFileSync(pkgPath, 'utf8')\n      const pkg = JSON.parse(raw) as { name?: string; version?: string }\n      if (pkg.name === 'gh-cp' && typeof pkg.version === 'string') {\n        return pkg.version\n      }\n    } catch {\n      // walk up\n    }\n    const parent = dirname(dir)\n    if (parent === dir) {\n      break\n    }\n    dir = parent\n  }\n  return '0.0.0'\n}\n","#!/usr/bin/env node\nimport { loadAliases, setAlias } from '../aliases-store.ts'\nimport { formatAliasList, toAliasListItems } from '../alias-list-output.ts'\nimport {\n  parseArgv,\n  resolveCliCommand,\n  type ResolvedCliInput\n} from '../cli/argv.ts'\nimport { formatCopySuccessLine } from '../copy-summary.ts'\nimport { copyFromGithub } from '../copy-from-github.ts'\nimport {\n  selectAliasInteractively,\n  toAliasMenuItems\n} from '../interactive-alias-menu.ts'\nimport { CopyFromGithubError } from '../strategy-result.ts'\nimport { readCliVersion } from '../version.ts'\n\nconst HELP = `gh-cp — copy files or directories from a GitHub repository\n\nUsage:\n  gh-cp [options] <owner/repo[/path][#ref]> [destination]\n  gh-cp alias <alias-name> <owner/repo[/path][#ref]>\n  gh-cp alias list\n  gh-cp install [alias-name] [destination]\n\nThe destination defaults to the current directory. Use --path to override the\noptional second positional argument.\n\nCommands:\n  <source> [destination]       Copy a GitHub repo, directory, or file to a destination\n  alias <alias-name> <source>  Save a reusable source shortcut\n  alias list                   List saved aliases\n  install [alias-name]         Copy from a saved alias; omit alias-name to choose interactively\n\nExamples:\n  gh-cp lirantal/npq/.devcontainer .\n  gh-cp lirantal/npq/.devcontainer --path ./vendor/gh\n  gh-cp lirantal/create-node-lib/blob/main/template/.npmrc\n  gh-cp lirantal/npq#main\n  gh-cp lirantal/npq --ref v1.0.0\n  gh-cp alias devcontainer github.com/lirantal/create-node-lib/tree/main/template/.devcontainer/\n  gh-cp alias list\n  gh-cp install devcontainer .\n  gh-cp install\n\nOptions:\n  -h, --help       Show this message\n  -V, --version    Show version\n  -v, --verbose    Log strategy and progress to stderr\n  -f, --force      Overwrite existing files\n      --dry-run    Show what would be written without writing\n      --json       Print a JSON summary or alias listing to stdout\n      --path DIR   Output directory (overrides destination positional)\n      --ref REF    Branch, tag, or SHA (overrides #ref in the source spec)\n\nExit codes:\n  0  Success\n  1  Usage or validation error\n  2  All fetch strategies failed\n`\n\nasync function runCopy (input: ResolvedCliInput): Promise<void> {\n  const result = await copyFromGithub({\n    sourceSpec: input.sourceSpec,\n    destination: input.destination,\n    refOverride: input.ref,\n    force: input.force,\n    dryRun: input.dryRun,\n    verbose: input.verbose\n  })\n\n  if (input.json) {\n    process.stdout.write(\n      `${JSON.stringify(\n        {\n          strategy: result.strategy,\n          files: result.written,\n          owner: result.owner,\n          repo: result.repo,\n          path: result.repoPath,\n          ref: result.ref ?? null\n        },\n        null,\n        input.verbose ? 2 : 0\n      )}\\n`\n    )\n  } else {\n    process.stdout.write(\n      `${formatCopySuccessLine({\n        written: result.written,\n        dryRun: input.dryRun\n      })}\\n`\n    )\n  }\n  process.exitCode = 0\n}\n\nasync function main (): Promise<void> {\n  let parsed\n  try {\n    parsed = parseArgv(process.argv)\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e)\n    process.stderr.write(`gh-cp: ${msg}\\n`)\n    process.exitCode = 1\n    return\n  }\n\n  if (parsed.help) {\n    process.stdout.write(HELP)\n    process.exitCode = 0\n    return\n  }\n\n  if (parsed.version) {\n    process.stdout.write(`${readCliVersion()}\\n`)\n    process.exitCode = 0\n    return\n  }\n\n  let command\n  try {\n    command = resolveCliCommand(parsed)\n  } catch (e) {\n    const msg = e instanceof Error ? e.message : String(e)\n    process.stderr.write(`gh-cp: ${msg}\\nTry 'gh-cp --help' for usage.\\n`)\n    process.exitCode = 1\n    return\n  }\n\n  try {\n    if (command.command === 'alias') {\n      await setAlias(command.aliasName, command.sourceSpec)\n      process.stdout.write(\n        `saved alias \"${command.aliasName}\" -> ${command.sourceSpec}\\n`\n      )\n      process.exitCode = 0\n      return\n    }\n\n    if (command.command === 'alias-list') {\n      const aliases = await loadAliases()\n      if (command.json) {\n        process.stdout.write(\n          `${JSON.stringify({ aliases: toAliasListItems(aliases) })}\\n`\n        )\n      } else {\n        process.stdout.write(formatAliasList(aliases))\n      }\n      process.exitCode = 0\n      return\n    }\n\n    if (command.command === 'install') {\n      const aliases = await loadAliases()\n      let sourceSpec: string | undefined\n      if (command.aliasName !== undefined) {\n        sourceSpec = aliases[command.aliasName]\n        if (sourceSpec === undefined) {\n          throw new Error(\n            `Unknown alias \"${command.aliasName}\". Run 'gh-cp install' to choose from saved aliases.`\n          )\n        }\n      } else {\n        if (command.json) {\n          throw new Error(\n            'Interactive install does not support --json. Pass an alias name, for example: gh-cp install <alias-name> --json.'\n          )\n        }\n        const items = toAliasMenuItems(aliases)\n        if (items.length === 0) {\n          throw new Error(\n            \"No aliases saved. Run 'gh-cp alias <name> <source>' first.\"\n          )\n        }\n        const selected = await selectAliasInteractively(items, command.destination)\n        if (selected === undefined) {\n          process.exitCode = 0\n          return\n        }\n        sourceSpec = selected.sourceSpec\n      }\n\n      await runCopy({\n        sourceSpec,\n        destination: command.destination,\n        ref: command.ref,\n        help: false,\n        version: false,\n        verbose: command.verbose,\n        force: command.force,\n        dryRun: command.dryRun,\n        json: command.json\n      })\n      return\n    }\n\n    await runCopy(command)\n  } catch (e) {\n    const version = readCliVersion()\n    if (e instanceof CopyFromGithubError) {\n      process.stderr.write(`gh-cp v${version} — ${e.message}\\n`)\n      process.exitCode = e.exitCode\n      return\n    }\n    const msg = e instanceof Error ? e.message : String(e)\n    process.stderr.write(`gh-cp v${version} — ${msg}\\n`)\n    process.exitCode = 1\n  }\n}\n\nmain().catch((e: unknown) => {\n  const version = readCliVersion()\n  const msg = e instanceof Error ? e.message : String(e)\n  process.stderr.write(`gh-cp v${version} — ${msg}\\n`)\n  process.exit(1)\n})\n"],"mappings":"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"}