{"version":3,"file":"versions.mjs","names":[],"sources":["../../src/commands/versions.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport type { Version } from \"../core/types.ts\";\n\nimport { sharedArgs, resolvePURL, withErrorHandling } from \"./shared.ts\";\nexport function selectRecentVersions(versions: readonly Version[], limit: number): Version[] {\n  return versions\n    .toSorted((a, b) => {\n      if (a.publishedAt === null) return b.publishedAt === null ? 0 : 1;\n      if (b.publishedAt === null) return -1;\n      return b.publishedAt.getTime() - a.publishedAt.getTime();\n    })\n    .slice(0, limit);\n}\n\nexport default defineCommand({\n  meta: {\n    name: \"versions\",\n    description: \"List package versions\",\n  },\n  args: {\n    ...sharedArgs,\n    purl: {\n      type: \"positional\",\n      description: \"Package PURL (e.g. pkg:npm/lodash, cargo/serde)\",\n      required: true,\n    },\n    limit: {\n      type: \"string\",\n      alias: \"l\",\n      description: \"Max versions to show\",\n      default: \"20\",\n    },\n  },\n  async run({ args }) {\n    await withErrorHandling(async () => {\n      const [reg, name] = await resolvePURL(args.purl, args.cache);\n      const versions = await reg.fetchVersions(name);\n      const limit = Number.parseInt(args.limit, 10) || 20;\n      const shown = selectRecentVersions(versions, limit);\n\n      if (args.json) {\n        console.log(JSON.stringify(shown, null, 2));\n        return;\n      }\n\n      consola.log(\"\");\n      consola.log(\n        `  \\x1B[1m${name}\\x1B[0m — ${versions.length} version${versions.length === 1 ? \"\" : \"s\"}`,\n      );\n      consola.log(\"\");\n\n      for (const v of shown) {\n        const status = v.status ? ` \\x1B[33m[${v.status}]\\x1B[0m` : \"\";\n        const date = v.publishedAt\n          ? `  \\x1B[90m${v.publishedAt.toISOString().slice(0, 10)}\\x1B[0m`\n          : \"\";\n        consola.log(`  ${v.number}${status}${date}`);\n      }\n\n      if (versions.length > limit) {\n        consola.log(\n          `\\n  \\x1B[90m... and ${versions.length - limit} more (use --limit to show more)\\x1B[0m`,\n        );\n      }\n      consola.log(\"\");\n    });\n  },\n});\n"],"mappings":";;;AAKA,SAAgB,qBAAqB,UAA8B,OAA0B;CAC3F,OAAO,SACJ,UAAU,GAAG,MAAM;EAClB,IAAI,EAAE,gBAAgB,MAAM,OAAO,EAAE,gBAAgB,OAAO,IAAI;EAChE,IAAI,EAAE,gBAAgB,MAAM,OAAO;EACnC,OAAO,EAAE,YAAY,QAAQ,IAAI,EAAE,YAAY,QAAQ;CACzD,CAAC,CAAC,CACD,MAAM,GAAG,KAAK;AACnB;AAEA,IAAA,mBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;EACJ,GAAG;EACH,MAAM;GACJ,MAAM;GACN,aAAa;GACb,UAAU;EACZ;EACA,OAAO;GACL,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;EACX;CACF;CACA,MAAM,IAAI,EAAE,QAAQ;EAClB,MAAM,kBAAkB,YAAY;GAClC,MAAM,CAAC,KAAK,QAAQ,MAAM,YAAY,KAAK,MAAM,KAAK,KAAK;GAC3D,MAAM,WAAW,MAAM,IAAI,cAAc,IAAI;GAC7C,MAAM,QAAQ,OAAO,SAAS,KAAK,OAAO,EAAE,KAAK;GACjD,MAAM,QAAQ,qBAAqB,UAAU,KAAK;GAElD,IAAI,KAAK,MAAM;IACb,QAAQ,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;IAC1C;GACF;GAEA,QAAQ,IAAI,EAAE;GACd,QAAQ,IACN,YAAY,KAAK,YAAY,SAAS,OAAO,UAAU,SAAS,WAAW,IAAI,KAAK,KACtF;GACA,QAAQ,IAAI,EAAE;GAEd,KAAK,MAAM,KAAK,OAAO;IACrB,MAAM,SAAS,EAAE,SAAS,aAAa,EAAE,OAAO,YAAY;IAC5D,MAAM,OAAO,EAAE,cACX,aAAa,EAAE,YAAY,YAAY,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,WACtD;IACJ,QAAQ,IAAI,KAAK,EAAE,SAAS,SAAS,MAAM;GAC7C;GAEA,IAAI,SAAS,SAAS,OACpB,QAAQ,IACN,uBAAuB,SAAS,SAAS,MAAM,wCACjD;GAEF,QAAQ,IAAI,EAAE;EAChB,CAAC;CACH;AACF,CAAC"}