comze 0.1.0 → 0.2.0
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.
- package/dist/cli.mjs +89 -17
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -7394,6 +7394,9 @@ var dist_default = cac;
|
|
|
7394
7394
|
var import_picocolors2 = __toESM(require_picocolors(), 1);
|
|
7395
7395
|
import { resolve } from "path";
|
|
7396
7396
|
|
|
7397
|
+
// src/fetcher.ts
|
|
7398
|
+
var import_semver2 = __toESM(require_semver2(), 1);
|
|
7399
|
+
|
|
7397
7400
|
// src/types.ts
|
|
7398
7401
|
var STABILITY_ORDER = {
|
|
7399
7402
|
dev: 0,
|
|
@@ -7520,7 +7523,7 @@ function formatNewVersion(originalConstraint, newVersion) {
|
|
|
7520
7523
|
|
|
7521
7524
|
// src/fetcher.ts
|
|
7522
7525
|
var PACKAGIST_API = "https://repo.packagist.org/p2";
|
|
7523
|
-
async function fetchPackage(packageName, minStability = "stable", preferStable = true) {
|
|
7526
|
+
async function fetchPackage(packageName, minStability = "stable", preferStable = true, currentVersion, allowMajor = true) {
|
|
7524
7527
|
try {
|
|
7525
7528
|
const url = `${PACKAGIST_API}/${packageName}.json`;
|
|
7526
7529
|
const response = await fetch(url);
|
|
@@ -7542,31 +7545,59 @@ async function fetchPackage(packageName, minStability = "stable", preferStable =
|
|
|
7542
7545
|
return null;
|
|
7543
7546
|
return { latestVersion: first.version, releaseTime: first.time };
|
|
7544
7547
|
}
|
|
7548
|
+
let selectedVersion = null;
|
|
7545
7549
|
if (preferStable) {
|
|
7546
7550
|
const stableVersions = eligibleVersions.filter((v) => getVersionStability(v.version) === "stable");
|
|
7547
7551
|
if (stableVersions.length > 0) {
|
|
7548
|
-
|
|
7549
|
-
if (!latest2)
|
|
7550
|
-
return null;
|
|
7551
|
-
return { latestVersion: latest2.version, releaseTime: latest2.time };
|
|
7552
|
+
selectedVersion = stableVersions[0] ?? null;
|
|
7552
7553
|
}
|
|
7553
7554
|
}
|
|
7554
|
-
|
|
7555
|
-
|
|
7555
|
+
if (!selectedVersion) {
|
|
7556
|
+
selectedVersion = eligibleVersions[0] ?? null;
|
|
7557
|
+
}
|
|
7558
|
+
if (!selectedVersion)
|
|
7556
7559
|
return null;
|
|
7557
|
-
|
|
7560
|
+
const phpRequirement = selectedVersion.require?.php;
|
|
7561
|
+
let majorDetected;
|
|
7562
|
+
if (currentVersion) {
|
|
7563
|
+
const currentNorm = normalizeVersion(currentVersion);
|
|
7564
|
+
const selectedNorm = normalizeVersion(selectedVersion.version);
|
|
7565
|
+
if (currentNorm && selectedNorm) {
|
|
7566
|
+
const currentMajor = import_semver2.default.major(currentNorm);
|
|
7567
|
+
const selectedMajor = import_semver2.default.major(selectedNorm);
|
|
7568
|
+
if (selectedMajor > currentMajor) {
|
|
7569
|
+
majorDetected = selectedVersion.version;
|
|
7570
|
+
if (!allowMajor) {
|
|
7571
|
+
const versionsToCheck = preferStable ? eligibleVersions.filter((v) => getVersionStability(v.version) === "stable") : eligibleVersions;
|
|
7572
|
+
const sameMajorVersion = versionsToCheck.find((v) => {
|
|
7573
|
+
const norm = normalizeVersion(v.version);
|
|
7574
|
+
return norm && import_semver2.default.major(norm) === currentMajor;
|
|
7575
|
+
});
|
|
7576
|
+
if (sameMajorVersion) {
|
|
7577
|
+
selectedVersion = sameMajorVersion;
|
|
7578
|
+
}
|
|
7579
|
+
}
|
|
7580
|
+
}
|
|
7581
|
+
}
|
|
7582
|
+
}
|
|
7583
|
+
return {
|
|
7584
|
+
latestVersion: selectedVersion.version,
|
|
7585
|
+
releaseTime: selectedVersion.time,
|
|
7586
|
+
phpRequirement: selectedVersion.require?.php ?? phpRequirement,
|
|
7587
|
+
majorVersion: majorDetected
|
|
7588
|
+
};
|
|
7558
7589
|
} catch {
|
|
7559
7590
|
return null;
|
|
7560
7591
|
}
|
|
7561
7592
|
}
|
|
7562
|
-
async function fetchAllPackages(packages, minStability = "stable", preferStable = true) {
|
|
7593
|
+
async function fetchAllPackages(packages, minStability = "stable", preferStable = true, allowMajor = true) {
|
|
7563
7594
|
const results = new Map;
|
|
7564
7595
|
const entries = Object.entries(packages);
|
|
7565
7596
|
const CONCURRENCY = 5;
|
|
7566
7597
|
for (let i = 0;i < entries.length; i += CONCURRENCY) {
|
|
7567
7598
|
const batch = entries.slice(i, i + CONCURRENCY);
|
|
7568
|
-
const promises = batch.map(async ([name]) => {
|
|
7569
|
-
const result = await fetchPackage(name, minStability, preferStable);
|
|
7599
|
+
const promises = batch.map(async ([name, version]) => {
|
|
7600
|
+
const result = await fetchPackage(name, minStability, preferStable, version, allowMajor);
|
|
7570
7601
|
if (result)
|
|
7571
7602
|
results.set(name, result);
|
|
7572
7603
|
});
|
|
@@ -7764,9 +7795,25 @@ function formatAge(isoDate) {
|
|
|
7764
7795
|
}
|
|
7765
7796
|
return "now";
|
|
7766
7797
|
}
|
|
7798
|
+
function getAgeMonths(isoDate) {
|
|
7799
|
+
const date = new Date(isoDate);
|
|
7800
|
+
const now = new Date;
|
|
7801
|
+
const diffMs = now.getTime() - date.getTime();
|
|
7802
|
+
const msPerMonth = 30 * 24 * 60 * 60 * 1000;
|
|
7803
|
+
return Math.floor(diffMs / msPerMonth);
|
|
7804
|
+
}
|
|
7767
7805
|
|
|
7768
7806
|
// src/ui/render.ts
|
|
7769
7807
|
var import_picocolors = __toESM(require_picocolors(), 1);
|
|
7808
|
+
function colorAge(age, ageMonths) {
|
|
7809
|
+
if (ageMonths < 3) {
|
|
7810
|
+
return import_picocolors.default.green(age.padStart(6));
|
|
7811
|
+
} else if (ageMonths < 12) {
|
|
7812
|
+
return import_picocolors.default.yellow(age.padStart(6));
|
|
7813
|
+
} else {
|
|
7814
|
+
return import_picocolors.default.red(age.padStart(6));
|
|
7815
|
+
}
|
|
7816
|
+
}
|
|
7770
7817
|
function renderTable(packages) {
|
|
7771
7818
|
if (packages.length === 0) {
|
|
7772
7819
|
console.log(import_picocolors.default.green(`
|
|
@@ -7783,7 +7830,7 @@ function renderTable(packages) {
|
|
|
7783
7830
|
const oldVer = pkg.currentVersion.padStart(oldWidth);
|
|
7784
7831
|
const arrow = "→";
|
|
7785
7832
|
const newVer = pkg.latestVersion.padEnd(newWidth);
|
|
7786
|
-
const age =
|
|
7833
|
+
const age = colorAge(pkg.age, pkg.ageMonths);
|
|
7787
7834
|
let diffLabel;
|
|
7788
7835
|
let coloredNewVer;
|
|
7789
7836
|
switch (pkg.diffType) {
|
|
@@ -7800,7 +7847,14 @@ function renderTable(packages) {
|
|
|
7800
7847
|
coloredNewVer = import_picocolors.default.green(newVer);
|
|
7801
7848
|
break;
|
|
7802
7849
|
}
|
|
7803
|
-
|
|
7850
|
+
let extra = "";
|
|
7851
|
+
if (pkg.majorAvailable) {
|
|
7852
|
+
extra += import_picocolors.default.magenta(` ${pkg.majorAvailable} available`);
|
|
7853
|
+
}
|
|
7854
|
+
if (pkg.phpRequirement) {
|
|
7855
|
+
extra += import_picocolors.default.gray(` php ${pkg.phpRequirement}`);
|
|
7856
|
+
}
|
|
7857
|
+
console.log(` ${name} ${oldVer} ${arrow} ${coloredNewVer} ${diffLabel} ${age}${extra}`);
|
|
7804
7858
|
}
|
|
7805
7859
|
console.log("");
|
|
7806
7860
|
}
|
|
@@ -7834,7 +7888,15 @@ function formatPackageChoice(pkg) {
|
|
|
7834
7888
|
coloredNewVer = import_picocolors.default.green(pkg.latestVersion);
|
|
7835
7889
|
break;
|
|
7836
7890
|
}
|
|
7837
|
-
|
|
7891
|
+
const age = colorAge(pkg.age, pkg.ageMonths);
|
|
7892
|
+
let extra = "";
|
|
7893
|
+
if (pkg.majorAvailable) {
|
|
7894
|
+
extra += import_picocolors.default.magenta(` ${pkg.majorAvailable} available`);
|
|
7895
|
+
}
|
|
7896
|
+
if (pkg.phpRequirement) {
|
|
7897
|
+
extra += import_picocolors.default.gray(` php ${pkg.phpRequirement}`);
|
|
7898
|
+
}
|
|
7899
|
+
return `${import_picocolors.default.bold(pkg.name)} ${pkg.currentVersion} ${arrow} ${coloredNewVer} ${diffLabel} ${age}${extra}`;
|
|
7838
7900
|
}
|
|
7839
7901
|
|
|
7840
7902
|
// src/interactive.ts
|
|
@@ -7888,7 +7950,7 @@ async function run(options) {
|
|
|
7888
7950
|
console.log(import_picocolors2.default.gray(` Checking ${Object.keys(filteredPackages).length} packages...`));
|
|
7889
7951
|
console.log(import_picocolors2.default.gray(` Stability: ${minStability}${preferStable ? " (prefer-stable)" : ""}
|
|
7890
7952
|
`));
|
|
7891
|
-
const results = await fetchAllPackages(filteredPackages, minStability, preferStable);
|
|
7953
|
+
const results = await fetchAllPackages(filteredPackages, minStability, preferStable, options.major);
|
|
7892
7954
|
const updates = [];
|
|
7893
7955
|
for (const [name, currentVersion] of Object.entries(filteredPackages)) {
|
|
7894
7956
|
const result = results.get(name);
|
|
@@ -7903,13 +7965,17 @@ async function run(options) {
|
|
|
7903
7965
|
continue;
|
|
7904
7966
|
if (diffType === "patch" && !options.patch)
|
|
7905
7967
|
continue;
|
|
7968
|
+
const majorAvailable = !options.major && result.majorVersion ? result.majorVersion : undefined;
|
|
7906
7969
|
updates.push({
|
|
7907
7970
|
name,
|
|
7908
7971
|
currentVersion,
|
|
7909
7972
|
latestVersion: result.latestVersion,
|
|
7910
7973
|
diffType,
|
|
7911
7974
|
releaseTime: result.releaseTime,
|
|
7912
|
-
age: formatAge(result.releaseTime)
|
|
7975
|
+
age: formatAge(result.releaseTime),
|
|
7976
|
+
ageMonths: getAgeMonths(result.releaseTime),
|
|
7977
|
+
majorAvailable,
|
|
7978
|
+
phpRequirement: result.phpRequirement
|
|
7913
7979
|
});
|
|
7914
7980
|
}
|
|
7915
7981
|
const order = { major: 0, minor: 1, patch: 2 };
|
|
@@ -7929,8 +7995,14 @@ async function run(options) {
|
|
|
7929
7995
|
if (options.write || options.install) {
|
|
7930
7996
|
const success = await writeComposerJson(composerPath, selectedUpdates, options.dryRun);
|
|
7931
7997
|
if (success && !options.dryRun) {
|
|
7932
|
-
console.log(import_picocolors2.default.green(
|
|
7998
|
+
console.log(import_picocolors2.default.green(" ✓ Updated composer.json"));
|
|
7999
|
+
if (options.write && !options.install) {
|
|
8000
|
+
console.log(import_picocolors2.default.gray(`
|
|
8001
|
+
Run "composer update" to install the new versions
|
|
7933
8002
|
`));
|
|
8003
|
+
} else {
|
|
8004
|
+
console.log("");
|
|
8005
|
+
}
|
|
7934
8006
|
}
|
|
7935
8007
|
}
|
|
7936
8008
|
if (options.install && !options.dryRun) {
|