@enke.dev/bumper 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.mjs +32 -10
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -2253,6 +2253,7 @@ import { readFile as readFile4, writeFile as writeFile3 } from "node:fs/promises
2253
2253
  import { relative as relative2 } from "node:path";
2254
2254
 
2255
2255
  // src/utils/npm-registry.utils.ts
2256
+ var import_semver = __toESM(require_semver2(), 1);
2256
2257
  async function curlJson(url, run2 = execOk) {
2257
2258
  const { stdout } = await run2(["curl", "-sSL", "--fail", "--connect-timeout", "20", url]);
2258
2259
  return JSON.parse(stdout);
@@ -2300,6 +2301,27 @@ async function latestVersionInRange(pkg, range, tool, cwd, run2 = exec) {
2300
2301
  return null;
2301
2302
  }
2302
2303
  }
2304
+ async function maxSatisfyingRanges(pkg, ranges, tool, cwd, run2 = exec) {
2305
+ if (ranges.length === 0) {
2306
+ return null;
2307
+ }
2308
+ try {
2309
+ const { exitCode, stdout } = await run2([tool, "view", pkg, "versions", "--json"], { cwd });
2310
+ if (exitCode !== 0) {
2311
+ return null;
2312
+ }
2313
+ const trimmed = stdout.trim();
2314
+ if (!trimmed) {
2315
+ return null;
2316
+ }
2317
+ const parsed = JSON.parse(trimmed);
2318
+ const versions = Array.isArray(parsed) ? parsed : typeof parsed === "string" ? [parsed] : [];
2319
+ const match = versions.filter((v) => import_semver.default.valid(v) && import_semver.default.prerelease(v) === null).filter((v) => ranges.every((range) => import_semver.default.satisfies(v, range))).sort(import_semver.default.rcompare)[0];
2320
+ return match ?? null;
2321
+ } catch {
2322
+ return null;
2323
+ }
2324
+ }
2303
2325
 
2304
2326
  // src/modules/runtimes/node/node-lts.utils.ts
2305
2327
  var DIST_INDEX = "https://nodejs.org/dist/index.json";
@@ -2384,9 +2406,9 @@ var githubActionsFeature = {
2384
2406
  import { relative as relative3 } from "node:path";
2385
2407
 
2386
2408
  // src/utils/spec.utils.ts
2387
- var import_semver = __toESM(require_semver2(), 1);
2409
+ var import_semver2 = __toESM(require_semver2(), 1);
2388
2410
  function isPinnable(spec) {
2389
- return import_semver.default.valid(spec.replace(/^[\^~]/, "")) !== null;
2411
+ return import_semver2.default.valid(spec.replace(/^[\^~]/, "")) !== null;
2390
2412
  }
2391
2413
  function operatorOf(spec) {
2392
2414
  return spec.startsWith("^") ? "^" : spec.startsWith("~") ? "~" : "";
@@ -2513,7 +2535,7 @@ var BUCKETS2 = [
2513
2535
  var CONCURRENCY = 8;
2514
2536
  var defaultLookups = {
2515
2537
  latestVersion,
2516
- latestVersionInRange,
2538
+ maxSatisfyingRanges,
2517
2539
  peerDependencies: peerDependenciesOf
2518
2540
  };
2519
2541
  async function collectPackages(ctx) {
@@ -2548,7 +2570,7 @@ async function collectPeerCaps(cwd, depNames, latest, managed, tool, lookups) {
2548
2570
  (collected.get(peer) ?? collected.set(peer, new Set).get(peer))?.add(range);
2549
2571
  });
2550
2572
  }));
2551
- return new Map([...collected].map(([peer, ranges]) => [peer, [...ranges].join(" ")]));
2573
+ return new Map([...collected].map(([peer, ranges]) => [peer, [...ranges]]));
2552
2574
  }
2553
2575
  async function resolveLatest(names, tool, cwd, lookups) {
2554
2576
  const resolved = [];
@@ -2610,15 +2632,15 @@ function cappedRanges(pkg, managed) {
2610
2632
  }
2611
2633
  async function rewriteSpecs(pkg, managed, latest, peerCaps, tool, cwd, lookups) {
2612
2634
  const present = allDependencies(pkg);
2613
- const caps = cappedRanges(pkg, managed);
2614
- peerCaps.forEach((range, name) => {
2635
+ const capRanges = new Map;
2636
+ cappedRanges(pkg, managed).forEach((range, name) => capRanges.set(name, [range]));
2637
+ peerCaps.forEach((ranges, name) => {
2615
2638
  if (!(name in present)) {
2616
2639
  return;
2617
2640
  }
2618
- const own = caps.get(name);
2619
- caps.set(name, own ? `${own} ${range}` : range);
2641
+ capRanges.set(name, [...new Set([...capRanges.get(name) ?? [], ...ranges])]);
2620
2642
  });
2621
- const capped = new Map(await Promise.all([...caps].map(async ([name, range]) => [name, await lookups.latestVersionInRange(name, range, tool, cwd)])));
2643
+ const capped = new Map(await Promise.all([...capRanges].map(async ([name, ranges]) => [name, await lookups.maxSatisfyingRanges(name, ranges, tool, cwd)])));
2622
2644
  return BUCKETS2.reduce((bucketChanged, bucket) => {
2623
2645
  const deps = pkg[bucket];
2624
2646
  if (!deps) {
@@ -2628,7 +2650,7 @@ async function rewriteSpecs(pkg, managed, latest, peerCaps, tool, cwd, lookups)
2628
2650
  if (managed.has(name) || !isPinnable(spec)) {
2629
2651
  return acc;
2630
2652
  }
2631
- const version = caps.has(name) ? capped.get(name) : latest.get(name);
2653
+ const version = capRanges.has(name) ? capped.get(name) : latest.get(name);
2632
2654
  if (!version) {
2633
2655
  return acc;
2634
2656
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enke.dev/bumper",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org",