{"version":3,"file":"info.mjs","names":[],"sources":["../../src/commands/info.ts"],"sourcesContent":["import type { Package } from \"../core/types.ts\";\nimport type { Registry } from \"../core/registry.ts\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { resolveDocsUrl } from \"../helpers.ts\";\nimport { sharedArgs, resolvePURL, withErrorHandling } from \"./shared.ts\";\n\nexport function outputPackageInfo(pkg: Package, name: string, reg: Registry): void {\n  const urls = reg.urls();\n  const registryUrl = urls.registry(name);\n  const docsUrl = resolveDocsUrl(pkg, urls, pkg.latestVersion || undefined);\n  const showDocs = shouldShowDocs(docsUrl, pkg, registryUrl);\n\n  consola.log(\"\");\n  consola.log(\n    `  \\x1B[1m\\x1B[36m${pkg.name}\\x1B[0m${pkg.latestVersion ? `\\x1B[90m@${pkg.latestVersion}\\x1B[0m` : \"\"}`,\n  );\n  if (pkg.description) {\n    consola.log(`  ${pkg.description}`);\n  }\n  consola.log(\"\");\n\n  const rows = [\n    [\"License:\", \"    \", pkg.licenses, Boolean(pkg.licenses)],\n    [\"Repository:\", \" \", pkg.repository, Boolean(pkg.repository)],\n    [\"Homepage:\", \"   \", pkg.homepage, Boolean(pkg.homepage)],\n    [\"Docs:\", \"       \", docsUrl, showDocs],\n    [\"Registry:\", \"   \", registryUrl, true],\n    [\"Keywords:\", \"   \", pkg.keywords.join(\", \"), pkg.keywords.length > 0],\n    [\"Namespace:\", \"  \", pkg.namespace, Boolean(pkg.namespace)],\n    [\"Ecosystem:\", \"  \", reg.ecosystem(), true],\n  ] as const;\n\n  for (const [label, spacing, value, visible] of rows) {\n    if (visible) consola.log(`  \\x1B[90m${label}\\x1B[0m${spacing}${value}`);\n  }\n  consola.log(\"\");\n}\n\nfunction shouldShowDocs(\n  docsUrl: string,\n  pkg: Readonly<Pick<Package, \"homepage\" | \"repository\">>,\n  registryUrl: string,\n): boolean {\n  return Boolean(docsUrl) && ![pkg.homepage, pkg.repository, registryUrl].includes(docsUrl);\n}\n\nexport default defineCommand({\n  meta: {\n    name: \"info\",\n    description: \"Show package metadata\",\n  },\n  args: {\n    ...sharedArgs,\n    purl: {\n      type: \"positional\",\n      description: \"Package PURL (e.g. pkg:npm/lodash, cargo/serde@1.0)\",\n      required: true,\n    },\n  },\n  async run({ args }) {\n    await withErrorHandling(async () => {\n      const [reg, name] = await resolvePURL(args.purl, !args[\"no-cache\"]);\n      const pkg = await reg.fetchPackage(name);\n\n      if (args.json) {\n        console.log(JSON.stringify(pkg, null, 2));\n        return;\n      }\n\n      outputPackageInfo(pkg, name, reg);\n    });\n  },\n});\n"],"mappings":";;;;;;;;;AAOA,SAAgB,kBAAkB,KAAc,MAAc,KAAqB;CACjF,MAAM,OAAO,IAAI,MAAM;CACvB,MAAM,cAAc,KAAK,SAAS,KAAK;CACvC,MAAM,UAAU,eAAe,KAAK,MAAM,IAAI,iBAAiB,KAAA,EAAU;CACzE,MAAM,WAAW,eAAe,SAAS,KAAK,YAAY;AAE1D,SAAQ,IAAI,GAAG;AACf,SAAQ,IACN,oBAAoB,IAAI,KAAK,SAAS,IAAI,gBAAgB,YAAY,IAAI,cAAc,WAAW,KACpG;AACD,KAAI,IAAI,YACN,SAAQ,IAAI,KAAK,IAAI,cAAc;AAErC,SAAQ,IAAI,GAAG;CAEf,MAAM,OAAO;EACX;GAAC;GAAY;GAAQ,IAAI;GAAU,QAAQ,IAAI,SAAA;GAAU;EACzD;GAAC;GAAe;GAAK,IAAI;GAAY,QAAQ,IAAI,WAAA;GAAY;EAC7D;GAAC;GAAa;GAAO,IAAI;GAAU,QAAQ,IAAI,SAAA;GAAU;EACzD;GAAC;GAAS;GAAW;GAAS;GAAS;EACvC;GAAC;GAAa;GAAO;GAAa;GAAK;EACvC;GAAC;GAAa;GAAO,IAAI,SAAS,KAAK,KAAK;GAAE,IAAI,SAAS,SAAS;GAAE;EACtE;GAAC;GAAc;GAAM,IAAI;GAAW,QAAQ,IAAI,UAAA;GAAW;EAC3D;GAAC;GAAc;GAAM,IAAI,WAAW;GAAE;;EACvC;AAED,MAAK,MAAM,CAAC,OAAO,SAAS,OAAO,YAAY,KAC7C,KAAI,QAAS,SAAQ,IAAI,aAAa,MAAM,SAAS,UAAU,QAAQ;AAEzE,SAAQ,IAAI,GAAG;;AAGjB,SAAS,eACP,SACA,KACA,aACS;AACT,QAAO,QAAQ,QAAQ,IAAI,CAAC;EAAC,IAAI;EAAU,IAAI;EAAY;EAAY,CAAC,SAAS,QAAQ;;AAG3F,IAAA,eAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;EACd;CACD,MAAM;EACJ,GAAG;EACH,MAAM;GACJ,MAAM;GACN,aAAa;GACb,UAAU;;EAEb;CACD,MAAM,IAAI,EAAE,QAAQ;AAClB,QAAM,kBAAkB,YAAY;GAClC,MAAM,CAAC,KAAK,QAAQ,MAAM,YAAY,KAAK,MAAM,CAAC,KAAK,YAAY;GACnE,MAAM,MAAM,MAAM,IAAI,aAAa,KAAK;AAExC,OAAI,KAAK,MAAM;AACb,YAAQ,IAAI,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC;AACzC;;AAGF,qBAAkB,KAAK,MAAM,IAAI;IACjC;;CAEL,CAAC"}