@pipelab/cli 2.0.0-beta.27 → 2.0.0-beta.30

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/index.mjs +64 -6
  2. package/package.json +1 -1
package/index.mjs CHANGED
@@ -67003,6 +67003,17 @@ async function isOnline() {
67003
67003
  lastCheckTime = now;
67004
67004
  return isOnlineCached;
67005
67005
  }
67006
+ function allowPrereleaseInRange(rangeStr) {
67007
+ try {
67008
+ return new import_semver.default.Range(rangeStr).set.map((conj) => conj.map((c) => {
67009
+ const v = c.semver;
67010
+ if (v.prerelease && v.prerelease.length) return c.operator + v.format();
67011
+ return c.operator + v.major + "." + v.minor + "." + v.patch + "-0";
67012
+ }).join(" ")).join(" || ");
67013
+ } catch {
67014
+ return rangeStr;
67015
+ }
67016
+ }
67006
67017
  /**
67007
67018
  * Robust utility to fetch, cache, and resolve an NPM package.
67008
67019
  * Centralized in core-node to avoid circular dependencies.
@@ -67012,6 +67023,7 @@ async function fetchPackage(packageName, versionOrRange, options) {
67012
67023
  const ctx = options.context;
67013
67024
  const baseDir = ctx.getPackagesPath(packageName);
67014
67025
  let resolvedVersion;
67026
+ const includePrerelease = !!(ctx.releaseTag && ctx.releaseTag !== "latest");
67015
67027
  let resolvedVersionOrRange = versionOrRange;
67016
67028
  if (resolvedVersionOrRange === "local") resolvedVersionOrRange = "latest";
67017
67029
  console.log(`[Fetcher] Resolving ${packageName}@${resolvedVersionOrRange || "latest"}...`);
@@ -67019,7 +67031,7 @@ async function fetchPackage(packageName, versionOrRange, options) {
67019
67031
  if (!await isOnline()) {
67020
67032
  console.warn(`[Fetcher] ${packageName}: offline mode detected (${Date.now() - resolveStart}ms), trying local fallback...`);
67021
67033
  const fallbackStart = Date.now();
67022
- const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, /* @__PURE__ */ new Error("Offline"), baseDir, packageName);
67034
+ const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, /* @__PURE__ */ new Error("Offline"), baseDir, packageName, includePrerelease);
67023
67035
  if (fallbackVersion) {
67024
67036
  resolvedVersion = fallbackVersion;
67025
67037
  console.log(`[Fetcher] ${packageName}: Resolved to local fallback ${resolvedVersion} (${Date.now() - fallbackStart}ms)`);
@@ -67034,7 +67046,27 @@ async function fetchPackage(packageName, versionOrRange, options) {
67034
67046
  const packument = await packumentPromise;
67035
67047
  const versions = Object.keys(packument.versions);
67036
67048
  const range = resolvedVersionOrRange || "latest";
67037
- let foundVersion = packument["dist-tags"]?.[range] || import_semver.default.maxSatisfying(versions, range);
67049
+ let foundVersion = packument["dist-tags"]?.[range] || import_semver.default.maxSatisfying(versions, range, { includePrerelease });
67050
+ if (!foundVersion && ctx.releaseTag && ctx.releaseTag !== "latest") {
67051
+ const releaseTagVersion = packument["dist-tags"]?.[ctx.releaseTag];
67052
+ if (releaseTagVersion && import_semver.default.valid(releaseTagVersion)) {
67053
+ const rewrittenRangeForCheck = allowPrereleaseInRange(range);
67054
+ if (import_semver.default.satisfies(releaseTagVersion, rewrittenRangeForCheck, { includePrerelease: true })) {
67055
+ console.log(`[Fetcher] Using release tag "${ctx.releaseTag}" (${releaseTagVersion}) for ${packageName}@${range} because it satisfies the range`);
67056
+ foundVersion = releaseTagVersion;
67057
+ }
67058
+ }
67059
+ }
67060
+ if (!foundVersion && includePrerelease) {
67061
+ const rewrittenRange = allowPrereleaseInRange(range);
67062
+ if (rewrittenRange !== range) {
67063
+ const matched = import_semver.default.maxSatisfying(versions, rewrittenRange, { includePrerelease });
67064
+ if (matched) {
67065
+ console.log(`[Fetcher] Resolved ${packageName}@${range} to ${matched} via rewritten range ${rewrittenRange}`);
67066
+ foundVersion = matched;
67067
+ }
67068
+ }
67069
+ }
67038
67070
  if (range === "latest" && ctx.releaseTag && ctx.releaseTag !== "latest") {
67039
67071
  const releaseTagVersion = packument["dist-tags"]?.[ctx.releaseTag];
67040
67072
  if (releaseTagVersion && import_semver.default.valid(releaseTagVersion)) {
@@ -67050,7 +67082,7 @@ async function fetchPackage(packageName, versionOrRange, options) {
67050
67082
  } catch (error) {
67051
67083
  console.warn(`[Fetcher] ${packageName}: remote resolution failed (${Date.now() - resolveStart}ms), trying local fallback...`);
67052
67084
  const fallbackStart = Date.now();
67053
- const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, error, baseDir, packageName);
67085
+ const fallbackVersion = await tryLocalFallback(resolvedVersionOrRange, error, baseDir, packageName, includePrerelease);
67054
67086
  if (fallbackVersion) {
67055
67087
  resolvedVersion = fallbackVersion;
67056
67088
  console.log(`[Fetcher] ${packageName}: Resolved to local fallback ${resolvedVersion} (${Date.now() - fallbackStart}ms)`);
@@ -67272,7 +67304,7 @@ async function fetchPipelabPlugin(pluginName, versionOrRange, options) {
67272
67304
  isLocal: !!isLocal
67273
67305
  };
67274
67306
  }
67275
- async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
67307
+ async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix, includePrerelease = false) {
67276
67308
  if (!existsSync(baseDir)) return null;
67277
67309
  try {
67278
67310
  const localVersions = (await readdir(baseDir, { withFileTypes: true })).filter((e) => e.isDirectory() || e.isSymbolicLink()).map((e) => e.name).filter((name) => !!import_semver.default.valid(name));
@@ -67285,7 +67317,7 @@ async function tryLocalFallback(versionOrRange, _error, baseDir, logPrefix) {
67285
67317
  return latestLocal;
67286
67318
  }
67287
67319
  } else {
67288
- const matched = import_semver.default.maxSatisfying(localVersions, range);
67320
+ const matched = import_semver.default.maxSatisfying(localVersions, range, { includePrerelease });
67289
67321
  if (matched) {
67290
67322
  console.info(`[Fetcher] ${logPrefix}: Using locally cached matching version: ${matched} for range ${range}`);
67291
67323
  return matched;
@@ -68503,6 +68535,32 @@ const registerSystemHandlers = (options) => {
68503
68535
  }
68504
68536
  });
68505
68537
  });
68538
+ handle("system:packages:cleanup", async (_, { send }) => {
68539
+ try {
68540
+ const packagesDir = options.context.getPackagesPath();
68541
+ const { existsSync } = await import("fs");
68542
+ const { rm } = await import("fs/promises");
68543
+ if (existsSync(packagesDir)) await rm(packagesDir, {
68544
+ recursive: true,
68545
+ force: true
68546
+ });
68547
+ send({
68548
+ type: "end",
68549
+ data: {
68550
+ type: "success",
68551
+ result: true
68552
+ }
68553
+ });
68554
+ } catch (e) {
68555
+ send({
68556
+ type: "end",
68557
+ data: {
68558
+ type: "error",
68559
+ ipcError: e.message
68560
+ }
68561
+ });
68562
+ }
68563
+ });
68506
68564
  };
68507
68565
  /**
68508
68566
  * Resolves a requested plugin version.
@@ -69305,7 +69363,7 @@ async function runPipelineCommand(file, options, version) {
69305
69363
  }
69306
69364
  //#endregion
69307
69365
  //#region package.json
69308
- var version$2 = "2.0.0-beta.27";
69366
+ var version$2 = "2.0.0-beta.30";
69309
69367
  //#endregion
69310
69368
  //#region src/paths.ts
69311
69369
  const getDefaultUserDataPath = () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipelab/cli",
3
- "version": "2.0.0-beta.27",
3
+ "version": "2.0.0-beta.30",
4
4
  "description": "The command line interface for Pipelab",
5
5
  "license": "FSL-1.1-MIT",
6
6
  "author": "CynToolkit",