@vltpkg/cli-js 1.4.0 → 1.6.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.
Files changed (105) hide show
  1. package/{access-422UGEWN.js → access-AJ654YKY.js} +13 -12
  2. package/{bugs-RED7Y33Q.js → bugs-N73DVYHD.js} +32 -25
  3. package/{build-IHMPBWRO.js → build-VZ3EZKMM.js} +65 -21
  4. package/{cache-FJP2RZJX.js → cache-VROEWG2C.js} +20 -17
  5. package/cache-unzip-src-unzip.js +58 -15
  6. package/{chunk-TPRK6IDA.js → chunk-22LZBDEC.js} +2 -2
  7. package/chunk-36UIE654.js +6248 -0
  8. package/{chunk-UGCKF5ZE.js → chunk-3JIN46K5.js} +1 -1
  9. package/{chunk-OAJ3PO3Z.js → chunk-44AWMA4F.js} +25 -13
  10. package/chunk-4E65BBTM.js +77 -0
  11. package/{chunk-SR2VOY5J.js → chunk-4GMNWW4C.js} +1 -1
  12. package/{chunk-5IJTPZXP.js → chunk-6D3QAFNZ.js} +1 -1
  13. package/{chunk-X4FVR4R5.js → chunk-75HGJVNG.js} +12 -10
  14. package/{chunk-THSYN5EK.js → chunk-7M2VTFLP.js} +12 -1
  15. package/{chunk-2AMOC4DN.js → chunk-ANW36H4T.js} +4 -4
  16. package/chunk-B6RIGNEO.js +626 -0
  17. package/{chunk-FLH4YC6W.js → chunk-BF5DRGRZ.js} +60 -15
  18. package/chunk-BH5CVXNY.js +115 -0
  19. package/{chunk-PLG3OYCX.js → chunk-CAV7FKWQ.js} +3 -2
  20. package/{chunk-C23TDXRG.js → chunk-CYK6I4M6.js} +1 -1
  21. package/chunk-DXED4ARV.js +436 -0
  22. package/chunk-E74WGW5C.js +49 -0
  23. package/{chunk-WF6KLKRN.js → chunk-EFHOWRKU.js} +103 -1
  24. package/chunk-EMTGRCSE.js +1111 -0
  25. package/{chunk-5Y4SYLJ2.js → chunk-EYGOEAJM.js} +1 -1
  26. package/{chunk-OVPHE4O7.js → chunk-F5LZMLAQ.js} +5335 -10902
  27. package/{chunk-HZXJ423P.js → chunk-FXD3IV2S.js} +4 -2
  28. package/chunk-GCTREKA4.js +115 -0
  29. package/{chunk-ZJMJ7MCT.js → chunk-GEQFMH5M.js} +1 -1
  30. package/{chunk-ISE4IRHF.js → chunk-GZVI75KX.js} +7 -14
  31. package/chunk-HOF7LEIC.js +24 -0
  32. package/{chunk-LHPEBLOU.js → chunk-HT6FS4VB.js} +1 -1
  33. package/{chunk-PHJJPY5G.js → chunk-IXAMCWIT.js} +5 -5
  34. package/{chunk-ASLX43R3.js → chunk-JCNI6ZHH.js} +7 -5
  35. package/chunk-JV5XR5JQ.js +349 -0
  36. package/{chunk-7T3XAYP4.js → chunk-KD5ZK72K.js} +1 -1
  37. package/{chunk-FZUYGJZU.js → chunk-KVWGMSPW.js} +137 -19
  38. package/{chunk-TO23PR7J.js → chunk-LCLRP64K.js} +14 -12
  39. package/{chunk-QCSUWACA.js → chunk-LGQVZTYR.js} +8 -36
  40. package/{chunk-5RHABCYI.js → chunk-LP3ORD3D.js} +143 -17
  41. package/chunk-MCDLJZXT.js +82 -0
  42. package/{chunk-DNRR3XMG.js → chunk-N6HV7JWC.js} +1 -1
  43. package/chunk-O6MQ7NN6.js +1155 -0
  44. package/{chunk-GIIAODRI.js → chunk-PC2HOBAQ.js} +7 -5
  45. package/{chunk-APMYKJI2.js → chunk-QNHBAGXQ.js} +1 -1
  46. package/chunk-RBQO54TG.js +59 -0
  47. package/chunk-SUU2WETN.js +268 -0
  48. package/{chunk-I7UMHYZX.js → chunk-TQQO2F56.js} +113 -1187
  49. package/{chunk-4UCADW6S.js → chunk-TWDSXQPN.js} +9 -7
  50. package/{chunk-MKWPTN3C.js → chunk-VLVMLSIF.js} +2 -2
  51. package/chunk-W4T5CGCO.js +52 -0
  52. package/{chunk-5TNXLRW2.js → chunk-YTDABXPD.js} +50 -12
  53. package/{ci-YSKNNO5M.js → ci-3BVMVQIT.js} +35 -13
  54. package/cli-package.json +3 -1
  55. package/{config-HO7GY3QT.js → config-2KQV7N5A.js} +16 -13
  56. package/{config-CSPCDMR3.js → config-EKHBW6I5.js} +12 -9
  57. package/{create-2TJT3AHJ.js → create-QVHNOIV3.js} +35 -29
  58. package/{deprecate-7FRJI2RL.js → deprecate-E254QBH6.js} +17 -15
  59. package/{dist-tag-WCFF5OEG.js → dist-tag-SITRFD7O.js} +13 -12
  60. package/{docs-JMBPTU23.js → docs-IDL2P7CA.js} +32 -25
  61. package/{exec-FBOUKZZ2.js → exec-7BK2W2WL.js} +35 -29
  62. package/{exec-cache-X3ZWM5S3.js → exec-cache-VY46L7DR.js} +27 -21
  63. package/{exec-local-Y3KQC22N.js → exec-local-D7R5T3DF.js} +26 -20
  64. package/{help-PUKVH5X7.js → help-RMRIEJQL.js} +6 -5
  65. package/{init-GOKAQXXZ.js → init-BGW4HJ6V.js} +15 -11
  66. package/{install-XFN4UFOC.js → install-U5GATZ2N.js} +144 -49
  67. package/{list-43JFFG5D.js → list-3VG4M2XL.js} +41 -28
  68. package/{login-RSTZKNKN.js → login-PHQWI6S6.js} +19 -16
  69. package/{logout-4576FFXZ.js → logout-DJCOGRFF.js} +13 -12
  70. package/{outdated-ACQ5A2Y7.js → outdated-JH3O6R3Y.js} +27 -22
  71. package/{pack-QQVJ3G25.js → pack-U5W5YWHK.js} +23 -18
  72. package/package.json +1 -1
  73. package/{ping-QCDQQRO5.js → ping-EKX43AOW.js} +13 -12
  74. package/{pkg-CSOJV7UC.js → pkg-SW5GMERT.js} +19 -14
  75. package/{profile-VL4HPW3N.js → profile-UGDRDMQ6.js} +13 -12
  76. package/{publish-2YBO6ZXE.js → publish-HTWKK3NN.js} +60 -45
  77. package/{query-IHHFMJRT.js → query-YE3FUVGG.js} +43 -30
  78. package/{registry-W7BRZZZ2.js → registry-ZGGWVLBM.js} +7 -7
  79. package/registry-client-src-revalidate.js +76 -22
  80. package/{repo-L3BXAAWS.js → repo-WDOCU6SE.js} +32 -25
  81. package/{reporter-5NYOHBO7.js → reporter-N5PAXB26.js} +121 -17
  82. package/{run-AMUUVLTI.js → run-IPARVIIQ.js} +26 -20
  83. package/{run-exec-5W3XWQZA.js → run-exec-C4RTREEW.js} +26 -20
  84. package/security-archive-src-update-expired.js +66 -21
  85. package/{setup-TFM4GJF7.js → setup-SYYUEHZL.js} +212 -32
  86. package/skills-KA2VR5Q5.js +480 -0
  87. package/skills-UBBMSBDQ.js +416 -0
  88. package/{src-4CYCUWZL.js → src-FUSTSM4J.js} +33 -22
  89. package/{src-I3GMULFP.js → src-QO5G2S4O.js} +11 -8
  90. package/{src-LUTN2ODD.js → src-W2VQULRG.js} +2 -2
  91. package/{token-OANOBE3G.js → token-UQNABECH.js} +15 -13
  92. package/{uninstall-YXTQ4AIZ.js → uninstall-FHBJ3OUV.js} +59 -18
  93. package/{unpublish-SZXYMYIU.js → unpublish-APJTEUBA.js} +31 -16
  94. package/{update-FHLMWGIM.js → update-NWZTL4S7.js} +52 -25
  95. package/{version-ZWFCTU5V.js → version-EMKKTL77.js} +20 -14
  96. package/{view-NFNJXMLV.js → view-BUUI33RV.js} +17 -15
  97. package/vlr.js +1 -1
  98. package/vlrx.js +1 -1
  99. package/vlt.js +1 -1
  100. package/vlx.js +1 -1
  101. package/vlxl.js +1 -1
  102. package/{whoami-O7GOSGCI.js → whoami-F6BSXGQ2.js} +13 -12
  103. package/chunk-G2YT2GWF.js +0 -120
  104. package/chunk-T6FBP4OU.js +0 -76
  105. package/chunk-U7TEQCBN.js +0 -880
@@ -11,35 +11,57 @@ import {createRequire as _vlt_createRequire} from "node:module";
11
11
  var require = _vlt_createRequire(import.meta.filename);
12
12
  import {
13
13
  persistedEntries
14
- } from "./chunk-2AMOC4DN.js";
14
+ } from "./chunk-ANW36H4T.js";
15
+ import {
16
+ keptLine,
17
+ savedLine,
18
+ unmatchedLines,
19
+ unscannedLines
20
+ } from "./chunk-W4T5CGCO.js";
21
+ import {
22
+ isSelfUpdateArgs,
23
+ selfUpdateLines
24
+ } from "./chunk-DXED4ARV.js";
15
25
  import {
16
26
  require_emoji_regex
17
27
  } from "./chunk-VTEFO2FT.js";
18
- import "./chunk-5RHABCYI.js";
19
- import "./chunk-TO23PR7J.js";
28
+ import "./chunk-LP3ORD3D.js";
29
+ import "./chunk-LCLRP64K.js";
20
30
  import "./chunk-SRWDPPLX.js";
21
31
  import {
22
- source_default
23
- } from "./chunk-WGDTG44V.js";
24
- import "./chunk-THSYN5EK.js";
25
- import "./chunk-I7UMHYZX.js";
32
+ globalBinsLines,
33
+ offerPathSetup
34
+ } from "./chunk-O6MQ7NN6.js";
35
+ import "./chunk-BH5CVXNY.js";
36
+ import "./chunk-JV5XR5JQ.js";
37
+ import "./chunk-EMTGRCSE.js";
38
+ import "./chunk-TQQO2F56.js";
26
39
  import {
27
40
  ViewClass
28
41
  } from "./chunk-4KCU2KZL.js";
29
- import "./chunk-PLG3OYCX.js";
30
- import "./chunk-5IJTPZXP.js";
31
- import "./chunk-WF6KLKRN.js";
42
+ import {
43
+ source_default
44
+ } from "./chunk-WGDTG44V.js";
45
+ import "./chunk-E74WGW5C.js";
46
+ import "./chunk-GCTREKA4.js";
47
+ import "./chunk-MCDLJZXT.js";
48
+ import "./chunk-7M2VTFLP.js";
49
+ import "./chunk-EFHOWRKU.js";
50
+ import "./chunk-CAV7FKWQ.js";
51
+ import "./chunk-6D3QAFNZ.js";
32
52
  import "./chunk-HTOTG4TS.js";
33
- import "./chunk-SR2VOY5J.js";
53
+ import "./chunk-4GMNWW4C.js";
54
+ import "./chunk-SUU2WETN.js";
34
55
  import {
35
56
  emitter
36
- } from "./chunk-U7TEQCBN.js";
57
+ } from "./chunk-B6RIGNEO.js";
37
58
  import "./chunk-XNLSTHDK.js";
38
59
  import "./chunk-6IF3RJND.js";
60
+ import "./chunk-PDWPFR5T.js";
39
61
  import "./chunk-Y5PA7DVK.js";
40
62
  import {
41
63
  asError
42
- } from "./chunk-FLH4YC6W.js";
64
+ } from "./chunk-BF5DRGRZ.js";
43
65
  import "./chunk-WZWDS3W4.js";
44
66
  import {
45
67
  __commonJS,
@@ -18620,19 +18642,77 @@ var App2 = ({ trailer }) => {
18620
18642
  };
18621
18643
  var InstallReporter = class extends ViewClass {
18622
18644
  #instance = null;
18645
+ #plain = false;
18623
18646
  start() {
18647
+ if (!process.stdout.isTTY) {
18648
+ const cols = Number(process.env.COLUMNS);
18649
+ process.stdout.columns ||= Number.isInteger(cols) && cols > 0 ? cols : 80;
18650
+ }
18651
+ if (isSelfUpdateArgs(this.config)) {
18652
+ this.#plain = true;
18653
+ return;
18654
+ }
18624
18655
  this.#instance = render_default((0, import_react30.createElement)(App2));
18625
18656
  }
18626
18657
  async done(_result, { time }) {
18627
- let out = `Done in ${time}ms`;
18658
+ const { self } = _result;
18659
+ let out = self && !_result.graph ? "" : `Done in ${time}ms`;
18660
+ const g = _result.global ? " -g" : "";
18628
18661
  if (_result.buildQueue?.length) {
18629
18662
  out += `
18630
18663
 
18631
18664
  \u{1F4E6} ${_result.buildQueue.length} packages have install scripts defined & were not fully built
18632
18665
  `;
18633
- out += "\u{1F50E} Run `vlt query :scripts` to list them\n";
18634
- out += "\u{1F528} Run `vlt build` to run all required scripts to build installed packages.\n";
18666
+ out += `\u{1F50E} Run \`vlt query${g} :scripts\` to list them
18667
+ `;
18668
+ out += `\u{1F528} Run \`vlt build${g}\` to run all required scripts to build installed packages.
18669
+ `;
18670
+ }
18671
+ if (self) {
18672
+ for (const l of selfUpdateLines(self)) out += out ? `
18673
+ ${l}` : l;
18635
18674
  }
18675
+ if (_result.global) {
18676
+ const bins = self?.status === "updated" && self.case === "bootstrap" ? { ..._result.global, notWritable: void 0 } : _result.global;
18677
+ for (const l of globalBinsLines(bins)) out += `
18678
+ ${l}`;
18679
+ }
18680
+ const {
18681
+ linked = [],
18682
+ removed = [],
18683
+ conflicts = [],
18684
+ skipped = [],
18685
+ gitignore = [],
18686
+ unmatched = []
18687
+ } = _result.skills ?? {};
18688
+ const s = (n) => n === 1 ? "" : "s";
18689
+ const skills = [];
18690
+ if (linked.length) {
18691
+ const n = new Set(linked.map((r) => `${r.id}\0${r.skill}`)).size;
18692
+ const dirs = [...new Set(linked.map((r) => r.dir))].join(", ");
18693
+ skills.push(`\u{1F517} Linked ${n} agent skill${s(n)} into ${dirs}`);
18694
+ }
18695
+ if (removed.length) {
18696
+ skills.push(
18697
+ `\u{1F9F9} Removed ${removed.length} stale skill link${s(removed.length)}: ${removed.join(", ")}`
18698
+ );
18699
+ }
18700
+ if (conflicts.length) {
18701
+ skills.push(
18702
+ `\u26A0\uFE0F ${conflicts.length} skill link${s(conflicts.length)} skipped, path in use or taken by another package: ${conflicts.join(", ")}`
18703
+ );
18704
+ }
18705
+ skills.push(...unmatchedLines(unmatched));
18706
+ if (skipped.length) {
18707
+ skills.push(`\u26A0\uFE0F Skipped ${skipped.join(", ")}`);
18708
+ }
18709
+ if (gitignore.length) {
18710
+ skills.push(`\u26A0\uFE0F Could not update ${gitignore.join(", ")}`);
18711
+ }
18712
+ skills.push(...unscannedLines(_result.skills ?? {}));
18713
+ if (skills.length) out += `
18714
+ ${skills.join("\n")}
18715
+ `;
18636
18716
  const saved = _result.persistedConfig;
18637
18717
  if (saved) {
18638
18718
  for (const e of persistedEntries(saved.values)) {
@@ -18640,7 +18720,31 @@ var InstallReporter = class extends ViewClass {
18640
18720
  Saved ${e} to ${saved.which} vlt.json`;
18641
18721
  }
18642
18722
  }
18643
- this.#instance?.rerender((0, import_react30.createElement)(App2, { trailer: out }));
18723
+ const migrated = _result.migratedWorkspaces;
18724
+ if (migrated) {
18725
+ out += `
18726
+ Saved workspaces from ${migrated.source} to vlt.json`;
18727
+ }
18728
+ const a = _result.allowSkills;
18729
+ if (a?.stored) out += `
18730
+ ${keptLine(a.stored)}`;
18731
+ else if (a) out += `
18732
+ ${savedLine(a.query, "project")}`;
18733
+ if (!out) return void 0;
18734
+ if (this.#plain) this.#instance = render_default((0, import_react30.createElement)(Text, null, out));
18735
+ else this.#instance?.rerender((0, import_react30.createElement)(App2, { trailer: out }));
18736
+ if (_result.global) {
18737
+ await offerPathSetup(_result.global, {
18738
+ globalDir: this.config.projectRoot,
18739
+ yes: !!this.config.get("yes"),
18740
+ noModifyPath: !!this.config.get("no-modify-path"),
18741
+ // ink owns the terminal until unmounted
18742
+ beforeOutput: () => {
18743
+ this.#instance?.unmount();
18744
+ this.#instance = null;
18745
+ }
18746
+ });
18747
+ }
18644
18748
  return void 0;
18645
18749
  }
18646
18750
  error(err) {
@@ -12,37 +12,43 @@ var require = _vlt_createRequire(import.meta.filename);
12
12
  import {
13
13
  ExecCommand,
14
14
  views
15
- } from "./chunk-X4FVR4R5.js";
16
- import "./chunk-UGCKF5ZE.js";
15
+ } from "./chunk-75HGJVNG.js";
16
+ import "./chunk-3JIN46K5.js";
17
17
  import "./chunk-RIYFGX27.js";
18
- import "./chunk-ASLX43R3.js";
19
- import "./chunk-FZUYGJZU.js";
20
- import "./chunk-QCSUWACA.js";
21
- import "./chunk-G2YT2GWF.js";
22
- import "./chunk-5Y4SYLJ2.js";
23
- import "./chunk-VTEFO2FT.js";
24
- import "./chunk-WGDTG44V.js";
25
- import "./chunk-THSYN5EK.js";
18
+ import "./chunk-JCNI6ZHH.js";
26
19
  import {
27
20
  run,
28
21
  runFG
29
- } from "./chunk-OVPHE4O7.js";
30
- import "./chunk-5TNXLRW2.js";
22
+ } from "./chunk-36UIE654.js";
23
+ import "./chunk-F5LZMLAQ.js";
24
+ import "./chunk-YTDABXPD.js";
25
+ import "./chunk-KVWGMSPW.js";
26
+ import "./chunk-LGQVZTYR.js";
27
+ import "./chunk-EYGOEAJM.js";
31
28
  import {
32
29
  commandUsage
33
- } from "./chunk-LHPEBLOU.js";
34
- import "./chunk-I7UMHYZX.js";
30
+ } from "./chunk-HT6FS4VB.js";
31
+ import "./chunk-VTEFO2FT.js";
32
+ import "./chunk-JV5XR5JQ.js";
33
+ import "./chunk-EMTGRCSE.js";
34
+ import "./chunk-TQQO2F56.js";
35
35
  import "./chunk-4KCU2KZL.js";
36
- import "./chunk-PLG3OYCX.js";
37
- import "./chunk-5IJTPZXP.js";
38
- import "./chunk-WF6KLKRN.js";
36
+ import "./chunk-WGDTG44V.js";
37
+ import "./chunk-E74WGW5C.js";
38
+ import "./chunk-GCTREKA4.js";
39
+ import "./chunk-MCDLJZXT.js";
40
+ import "./chunk-7M2VTFLP.js";
41
+ import "./chunk-EFHOWRKU.js";
42
+ import "./chunk-CAV7FKWQ.js";
43
+ import "./chunk-6D3QAFNZ.js";
39
44
  import "./chunk-HTOTG4TS.js";
40
- import "./chunk-ZJMJ7MCT.js";
41
- import "./chunk-U7TEQCBN.js";
45
+ import "./chunk-GEQFMH5M.js";
46
+ import "./chunk-SUU2WETN.js";
47
+ import "./chunk-B6RIGNEO.js";
42
48
  import "./chunk-XNLSTHDK.js";
43
49
  import "./chunk-PDWPFR5T.js";
44
50
  import "./chunk-Y5PA7DVK.js";
45
- import "./chunk-FLH4YC6W.js";
51
+ import "./chunk-BF5DRGRZ.js";
46
52
  import "./chunk-WZWDS3W4.js";
47
53
  import "./chunk-PZLD7RTK.js";
48
54
 
@@ -12,37 +12,43 @@ var require = _vlt_createRequire(import.meta.filename);
12
12
  import {
13
13
  ExecCommand,
14
14
  views
15
- } from "./chunk-X4FVR4R5.js";
16
- import "./chunk-UGCKF5ZE.js";
15
+ } from "./chunk-75HGJVNG.js";
16
+ import "./chunk-3JIN46K5.js";
17
17
  import "./chunk-RIYFGX27.js";
18
- import "./chunk-ASLX43R3.js";
19
- import "./chunk-FZUYGJZU.js";
20
- import "./chunk-QCSUWACA.js";
21
- import "./chunk-G2YT2GWF.js";
22
- import "./chunk-5Y4SYLJ2.js";
23
- import "./chunk-VTEFO2FT.js";
24
- import "./chunk-WGDTG44V.js";
25
- import "./chunk-THSYN5EK.js";
18
+ import "./chunk-JCNI6ZHH.js";
26
19
  import {
27
20
  runExec,
28
21
  runExecFG
29
- } from "./chunk-OVPHE4O7.js";
30
- import "./chunk-5TNXLRW2.js";
22
+ } from "./chunk-36UIE654.js";
23
+ import "./chunk-F5LZMLAQ.js";
24
+ import "./chunk-YTDABXPD.js";
25
+ import "./chunk-KVWGMSPW.js";
26
+ import "./chunk-LGQVZTYR.js";
27
+ import "./chunk-EYGOEAJM.js";
31
28
  import {
32
29
  commandUsage
33
- } from "./chunk-LHPEBLOU.js";
34
- import "./chunk-I7UMHYZX.js";
30
+ } from "./chunk-HT6FS4VB.js";
31
+ import "./chunk-VTEFO2FT.js";
32
+ import "./chunk-JV5XR5JQ.js";
33
+ import "./chunk-EMTGRCSE.js";
34
+ import "./chunk-TQQO2F56.js";
35
35
  import "./chunk-4KCU2KZL.js";
36
- import "./chunk-PLG3OYCX.js";
37
- import "./chunk-5IJTPZXP.js";
38
- import "./chunk-WF6KLKRN.js";
36
+ import "./chunk-WGDTG44V.js";
37
+ import "./chunk-E74WGW5C.js";
38
+ import "./chunk-GCTREKA4.js";
39
+ import "./chunk-MCDLJZXT.js";
40
+ import "./chunk-7M2VTFLP.js";
41
+ import "./chunk-EFHOWRKU.js";
42
+ import "./chunk-CAV7FKWQ.js";
43
+ import "./chunk-6D3QAFNZ.js";
39
44
  import "./chunk-HTOTG4TS.js";
40
- import "./chunk-ZJMJ7MCT.js";
41
- import "./chunk-U7TEQCBN.js";
45
+ import "./chunk-GEQFMH5M.js";
46
+ import "./chunk-SUU2WETN.js";
47
+ import "./chunk-B6RIGNEO.js";
42
48
  import "./chunk-XNLSTHDK.js";
43
49
  import "./chunk-PDWPFR5T.js";
44
50
  import "./chunk-Y5PA7DVK.js";
45
- import "./chunk-FLH4YC6W.js";
51
+ import "./chunk-BF5DRGRZ.js";
46
52
  import "./chunk-WZWDS3W4.js";
47
53
  import "./chunk-PZLD7RTK.js";
48
54
 
@@ -1027,12 +1027,31 @@ var Comparator = class {
1027
1027
  );
1028
1028
  }
1029
1029
  #parseCaret(comp) {
1030
- const min = this.#xInclusiveMin(comp);
1031
- if (isAny(min)) {
1032
- this.tuples.push(min);
1030
+ const parsed = this.#parseX(comp);
1031
+ if (isXMajor(parsed)) {
1032
+ this.tuples.push(this.#getComparatorAny());
1033
+ return;
1034
+ }
1035
+ const z = this.includePrerelease ? "0" : void 0;
1036
+ if (isXMinor(parsed)) {
1037
+ const [M2] = parsed;
1038
+ this.tuples.push(
1039
+ [">=", new Version(comp, M2, 0, 0, z, void 0)],
1040
+ ["<", new Version(comp, M2 + 1, 0, 0, "0", void 0)]
1041
+ );
1042
+ return;
1043
+ }
1044
+ if (isXPatch(parsed)) {
1045
+ const [M2, m2] = parsed;
1046
+ this.tuples.push(
1047
+ [">=", new Version(comp, M2, m2, 0, z, void 0)],
1048
+ M2 !== 0 ? ["<", new Version(comp, M2 + 1, 0, 0, "0", void 0)] : ["<", new Version(comp, 0, m2 + 1, 0, "0", void 0)]
1049
+ );
1033
1050
  return;
1034
1051
  }
1035
- const minv = min[1];
1052
+ const [M, m, p, pr = z, build] = parsed;
1053
+ const minv = new Version(comp, M, m, p, pr, build);
1054
+ const min = [">=", minv];
1036
1055
  if (minv.major !== 0) {
1037
1056
  this.tuples.push(min, [
1038
1057
  "<",
@@ -1312,9 +1331,10 @@ var gitHostWebsites = {
1312
1331
  gitlab: "https://gitlab.com/"
1313
1332
  };
1314
1333
  var getOptions = (options) => ({
1315
- catalog: {},
1316
1334
  catalogs: {},
1317
1335
  ...options,
1336
+ // after spread: explicit `catalog: undefined` gets default too
1337
+ catalog: options?.catalog ?? {},
1318
1338
  // built-in aliases are user/service-overridable: user config wins
1319
1339
  "jsr-registries": {
1320
1340
  ...defaultJsrRegistries,
@@ -1491,19 +1511,25 @@ var Spec = class _Spec {
1491
1511
  }
1492
1512
  if (this.bareSpec.startsWith("catalog:")) {
1493
1513
  this.catalog = this.bareSpec.substring("catalog:".length);
1494
- const catalog = this.catalog ? this.options.catalogs?.[this.catalog] : this.options.catalog;
1514
+ const { catalog: defaultCatalog, catalogs = {} } = this.options;
1515
+ const catalog = this.catalog ? Object.hasOwn(catalogs, this.catalog) ? catalogs[this.catalog] : void 0 : Object.keys(defaultCatalog).length ? defaultCatalog : void 0;
1495
1516
  if (!catalog) {
1496
- throw this.#error("Named catalog not found", {
1497
- name: this.catalog,
1498
- validOptions: this.options.catalogs && Object.keys(this.options.catalogs)
1499
- });
1517
+ throw this.#catalogError(
1518
+ this.catalog ? `Catalog "${this.catalog}" not found for ${this.spec}` : `Default catalog not found for ${this.spec}`
1519
+ );
1500
1520
  }
1501
- const sub = catalog[this.name];
1521
+ const catalogName = this.catalog ? `catalog "${this.catalog}"` : "default catalog";
1522
+ const sub = Object.hasOwn(catalog, this.name) ? catalog[this.name] : void 0;
1502
1523
  if (!sub) {
1503
- throw this.#error("Name not found in catalog", {
1504
- name: this.name,
1505
- validOptions: Object.keys(catalog)
1506
- });
1524
+ throw this.#catalogError(
1525
+ `Package "${this.name}" not found in ${catalogName}`
1526
+ );
1527
+ }
1528
+ if (sub.startsWith("catalog:")) {
1529
+ throw this.#error(
1530
+ `Catalog entry "${this.name}" in ${catalogName} cannot be a catalog: spec`,
1531
+ { code: "ECONFIG", found: sub }
1532
+ );
1507
1533
  }
1508
1534
  this.subspec = _Spec.parse(this.name, sub, this.options);
1509
1535
  this.type = "catalog";
@@ -1819,6 +1845,23 @@ var Spec = class _Spec {
1819
1845
  ].map((p) => `${p}:`)
1820
1846
  });
1821
1847
  }
1848
+ /** ECONFIG error listing defined catalogs & ones defining this dep */
1849
+ #catalogError(message) {
1850
+ const { catalog, catalogs = {} } = this.options;
1851
+ const defined = [
1852
+ ...Object.keys(catalog).length ? [["", catalog]] : [],
1853
+ ...Object.entries(catalogs)
1854
+ ];
1855
+ const validOptions = defined.map(([n]) => `catalog:${n}`);
1856
+ const wanted = defined.filter(
1857
+ ([, c]) => Object.hasOwn(c, this.name) && !!c[this.name]
1858
+ ).map(([n]) => `catalog:${n}`);
1859
+ return this.#error(message, {
1860
+ code: "ECONFIG",
1861
+ ...validOptions.length ? { validOptions } : {},
1862
+ ...wanted.length ? { wanted } : {}
1863
+ });
1864
+ }
1822
1865
  #error(message, extra = {}) {
1823
1866
  return error(message, { spec: this.spec, ...extra }, this.#error);
1824
1867
  }
@@ -2166,7 +2209,7 @@ var baseDepID = (id) => {
2166
2209
  var package_default = {
2167
2210
  name: "@vltpkg/user-agent",
2168
2211
  description: "The User-Agent string that vlt sends with every outbound request",
2169
- version: "1.4.0",
2212
+ version: "1.6.0",
2170
2213
  repository: {
2171
2214
  type: "git",
2172
2215
  url: "git+https://github.com/vltpkg/vltpkg.git",
@@ -2270,7 +2313,8 @@ var __CODE_SPLIT_SCRIPT_NAME = import.meta.filename;
2270
2313
  var SOCKET_API_V0_URL = "https://api.socket.dev/v0/purl?alerts=true";
2271
2314
  var SOCKET_PUBLIC_API_TOKEN = "sktsec_t_--RAN5U4ivauy4w37-6aoKyYPDt5ZbaT5JBVMqiwKo_api";
2272
2315
  var isMain = (path) => path === __CODE_SPLIT_SCRIPT_NAME || path === pathToFileURL(__CODE_SPLIT_SCRIPT_NAME).toString();
2273
- var retrieveRemoteData = async (queue, retries) => {
2316
+ var retrieveRemoteData = async (queue, retries, timeout) => {
2317
+ const signal = AbortSignal.timeout(timeout);
2274
2318
  return pRetry(
2275
2319
  async () => {
2276
2320
  const req = await fetch(SOCKET_API_V0_URL, {
@@ -2281,7 +2325,8 @@ var retrieveRemoteData = async (queue, retries) => {
2281
2325
  },
2282
2326
  body: JSON.stringify({
2283
2327
  components: Array.from(queue)
2284
- })
2328
+ }),
2329
+ signal
2285
2330
  });
2286
2331
  if (req.status === 404) {
2287
2332
  throw new AbortError("Missing API");
@@ -2294,7 +2339,7 @@ var retrieveRemoteData = async (queue, retries) => {
2294
2339
  const str = await req.text();
2295
2340
  return str.trim() + "\n";
2296
2341
  },
2297
- { retries }
2342
+ { retries, signal }
2298
2343
  );
2299
2344
  };
2300
2345
  var main = async (input = process.stdin) => {
@@ -2317,7 +2362,7 @@ var main = async (input = process.stdin) => {
2317
2362
  input.on("error", reject);
2318
2363
  }
2319
2364
  );
2320
- const { dbPath, retries, ttl, expired } = payload;
2365
+ const { dbPath, retries, timeout, ttl, expired } = payload;
2321
2366
  if (!expired.length) {
2322
2367
  return false;
2323
2368
  }
@@ -2328,7 +2373,7 @@ var main = async (input = process.stdin) => {
2328
2373
  expiredQueue.add({ purl });
2329
2374
  entryByNameVersion.set(`${entry.name}@${entry.version}`, entry);
2330
2375
  }
2331
- const res = await retrieveRemoteData(expiredQueue, retries);
2376
+ const res = await retrieveRemoteData(expiredQueue, retries, timeout);
2332
2377
  const now = Date.now();
2333
2378
  const results = [];
2334
2379
  const json = res.split("}\n");