fyn 3.2.0 → 3.2.1

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/fyn.mjs +33 -43
  2. package/package.json +2 -2
package/dist/fyn.mjs CHANGED
@@ -114540,12 +114540,16 @@ var FynGlobal = class {
114540
114540
  } catch (err) {}
114541
114541
  }
114542
114542
  /**
114543
- * Get next global package ID by reading directory
114543
+ * Get next global package ID by reading directory.
114544
+ * Reuses the lowest gN freed by a removed package.
114544
114545
  */
114545
114546
  async getNextGlobalId() {
114546
114547
  try {
114547
- const numbers = (await file_ops_default.readdir(this.packagesDir)).filter((d) => /^g\d+$/.test(d)).map((d) => parseInt(d.substring(1), 10)).filter((n) => !isNaN(n));
114548
- return `g${numbers.length > 0 ? Math.max(...numbers) + 1 : 1}`;
114548
+ const dirs = await file_ops_default.readdir(this.packagesDir);
114549
+ const used = new Set(dirs.filter((d) => /^g\d+$/.test(d)).map((d) => parseInt(d.substring(1), 10)));
114550
+ let nextNum = 1;
114551
+ while (used.has(nextNum)) nextNum++;
114552
+ return `g${nextNum}`;
114549
114553
  } catch (err) {
114550
114554
  return "g1";
114551
114555
  }
@@ -114764,7 +114768,7 @@ var FynGlobal = class {
114764
114768
  linked: shouldLink
114765
114769
  });
114766
114770
  await this.ensureBinSymlink();
114767
- logger$1.info(`${packageName}@${installedVersion || depVersion} installed globally`);
114771
+ logger$1.info(`${packageName}@${installedVersion || depVersion} installed globally. Tag: ${gId}`);
114768
114772
  if (Object.keys(bins).length > 0) logger$1.info(`Binaries available: ${Object.keys(bins).join(", ")}`);
114769
114773
  if (shouldLink) logger$1.info(`This version is now active (linked)`);
114770
114774
  else logger$1.info(`Note: An older version was installed. Use 'fyn global link ${packageName}@${installedVersion}' to activate it.`);
@@ -114919,46 +114923,32 @@ var FynGlobal = class {
114919
114923
  return [];
114920
114924
  }
114921
114925
  const result = [];
114922
- namesToShow.sort();
114923
- for (const packageName of namesToShow) {
114924
- const versions = registry.packages[packageName].versions || [];
114925
- if (versions.length === 0) continue;
114926
- const byVersion = {};
114927
- for (const v of versions) {
114928
- const key = v.version;
114929
- if (!byVersion[key]) byVersion[key] = [];
114930
- byVersion[key].push(v);
114931
- }
114932
- const sortedVersions = Object.keys(byVersion).sort((a, b) => {
114933
- if (import_semver.default.valid(a) && import_semver.default.valid(b)) return import_semver.default.rcompare(a, b);
114934
- return a.localeCompare(b);
114926
+ const tagNum = (v) => parseInt(v.dir.slice(1), 10);
114927
+ const packages = namesToShow.map((name) => ({
114928
+ name,
114929
+ entries: [...registry.packages[name].versions || []].sort((a, b) => {
114930
+ if (a.linked !== b.linked) return a.linked ? -1 : 1;
114931
+ return tagNum(a) - tagNum(b);
114932
+ })
114933
+ })).filter((p) => p.entries.length > 0).sort((a, b) => tagNum(a.entries[0]) - tagNum(b.entries[0]));
114934
+ const home = os$1.homedir();
114935
+ const pad = (n) => String(n).padStart(2, "0");
114936
+ for (const { name: packageName, entries } of packages) entries.forEach((v, ix) => {
114937
+ const d = new Date(v.installedAt);
114938
+ const time = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
114939
+ const fields = [
114940
+ v.dir,
114941
+ ix === 0 ? `${packageName}@${v.version}` : v.version,
114942
+ v.semver?.replace(`file:${home}`, "file:~"),
114943
+ time,
114944
+ v.bins?.length > 0 ? `[${v.bins.join(", ")}]` : ""
114945
+ ].filter(Boolean);
114946
+ console.log(`${ix === 0 ? "" : " "}${fields.join(" ")}`);
114947
+ result.push({
114948
+ package: packageName,
114949
+ ...v
114935
114950
  });
114936
- console.log(`\n${packageName}:`);
114937
- for (const version of sortedVersions) {
114938
- const entries = byVersion[version];
114939
- for (const v of entries) {
114940
- const tagLinked = v.linked ? " *" : "";
114941
- const local = v.local ? " (local)" : "";
114942
- const bins = v.bins?.length > 0 ? ` [${v.bins.join(", ")}]` : "";
114943
- const fromSemver = v.semver ? `(from '${v.semver}')` : "";
114944
- const installedDate = new Date(v.installedAt);
114945
- const dateStr = installedDate.toLocaleDateString();
114946
- const timeStr = installedDate.toLocaleTimeString([], {
114947
- hour12: true,
114948
- hour: "2-digit",
114949
- minute: "2-digit",
114950
- second: "2-digit"
114951
- });
114952
- console.log(` ${v.dir} (${v.version})${tagLinked}${local}${bins}${fromSemver ? ` ${fromSemver}` : ""}`);
114953
- console.log(` installed ${dateStr} ${timeStr}`);
114954
- result.push({
114955
- package: packageName,
114956
- ...v
114957
- });
114958
- }
114959
- }
114960
- }
114961
- console.log("\n* = linked (active) version");
114951
+ });
114962
114952
  return result;
114963
114953
  }
114964
114954
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "fyn",
3
3
  "type": "module",
4
- "version": "3.2.0",
4
+ "version": "3.2.1",
5
5
  "description": "fyn is a node.js package manager, and supports fynpo -- a zero setup monorepo tool",
6
6
  "main": "./bin/index.mjs",
7
7
  "homepage": "https://github.com/jchip/fynjs/tree/main/packages/fyn",
@@ -81,7 +81,7 @@
81
81
  "Walmart GTP.js Team and Contributors"
82
82
  ],
83
83
  "devDependencies": {
84
- "@fynjs/run": "^1.1.8",
84
+ "@fynjs/run": "^1.1.9",
85
85
  "@fynjs/ts-resolve": "^1.0.3",
86
86
  "@types/node": "^26.4.1",
87
87
  "@vitest/coverage-v8": "^5.0.0",