{"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[\"no-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;AAC3F,QAAO,SACJ,UAAU,GAAG,MAAM;AAClB,MAAI,EAAE,gBAAgB,KAAM,QAAO,EAAE,gBAAgB,OAAO,IAAI;AAChE,MAAI,EAAE,gBAAgB,KAAM,QAAO;AACnC,SAAO,EAAE,YAAY,SAAS,GAAG,EAAE,YAAY,SAAS;GACxD,CACD,MAAM,GAAG,MAAM;;AAGpB,IAAA,mBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;EACd;CACD,MAAM;EACJ,GAAG;EACH,MAAM;GACJ,MAAM;GACN,aAAa;GACb,UAAU;GACX;EACD,OAAO;GACL,MAAM;GACN,OAAO;GACP,aAAa;GACb,SAAS;;EAEZ;CACD,MAAM,IAAI,EAAE,QAAQ;AAClB,QAAM,kBAAkB,YAAY;GAClC,MAAM,CAAC,KAAK,QAAQ,MAAM,YAAY,KAAK,MAAM,CAAC,KAAK,YAAY;GACnE,MAAM,WAAW,MAAM,IAAI,cAAc,KAAK;GAC9C,MAAM,QAAQ,OAAO,SAAS,KAAK,OAAO,GAAG,IAAI;GACjD,MAAM,QAAQ,qBAAqB,UAAU,MAAM;AAEnD,OAAI,KAAK,MAAM;AACb,YAAQ,IAAI,KAAK,UAAU,OAAO,MAAM,EAAE,CAAC;AAC3C;;AAGF,WAAQ,IAAI,GAAG;AACf,WAAQ,IACN,YAAY,KAAK,YAAY,SAAS,OAAO,UAAU,SAAS,WAAW,IAAI,KAAK,MACrF;AACD,WAAQ,IAAI,GAAG;AAEf,QAAK,MAAM,KAAK,OAAO;IACrB,MAAM,SAAS,EAAE,SAAS,aAAa,EAAE,OAAO,YAAY;IAC5D,MAAM,OAAO,EAAE,cACX,aAAa,EAAE,YAAY,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,WACtD;AACJ,YAAQ,IAAI,KAAK,EAAE,SAAS,SAAS,OAAO;;AAG9C,OAAI,SAAS,SAAS,MACpB,SAAQ,IACN,uBAAuB,SAAS,SAAS,MAAM,yCAChD;AAEH,WAAQ,IAAI,GAAG;IACf;;CAEL,CAAC"}