updates 17.13.5 → 17.14.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.
package/README.md CHANGED
@@ -82,11 +82,49 @@ export default {
82
82
  - `exclude` *Array\<string | RegExp>*: Array of dependencies to exclude
83
83
  - `types` *Array\<string>*: Array of dependency types to use
84
84
  - `registry` *string*: URL to npm registry
85
- - `minAge` *number*: Minimum dependency age in hours
85
+ - `cooldown` *number | string*: Minimum dependency age, e.g. `7` (days), `"1w"`, `"2d"`, `"6h"`
86
86
  - `pin` *Record\<string, string>*: Pin dependencies to semver ranges
87
+ - `files` *Array\<string>*: File or directory paths to use
88
+ - `modes` *Array\<string>*: Which modes to enable
89
+ - `greatest` *boolean | Array\<string | RegExp>*: Prefer greatest over latest version
90
+ - `prerelease` *boolean | Array\<string | RegExp>*: Consider prerelease versions
91
+ - `release` *boolean | Array\<string | RegExp>*: Only use release versions
92
+ - `patch` *boolean | Array\<string | RegExp>*: Consider only up to semver-patch
93
+ - `minor` *boolean | Array\<string | RegExp>*: Consider only up to semver-minor
94
+ - `allowDowngrade` *boolean | Array\<string | RegExp>*: Allow version downgrades
87
95
 
88
96
  CLI arguments have precedence over options in the config file. `include`, `exclude`, and `pin` options are merged.
89
97
 
98
+ ## API
99
+
100
+ `updates` can be used as a library:
101
+
102
+ ```ts
103
+ import {updates} from "updates";
104
+
105
+ const output = await updates({
106
+ files: ["package.json"],
107
+ include: [/^react/],
108
+ modes: ["npm"],
109
+ });
110
+ //=> {
111
+ //=> "results": {
112
+ //=> "npm": {
113
+ //=> "dependencies": {
114
+ //=> "react": {
115
+ //=> "old": "18.0.0",
116
+ //=> "new": "19.2.0",
117
+ //=> "info": "https://github.com/facebook/react",
118
+ //=> "age": "2 days"
119
+ //=> }
120
+ //=> }
121
+ //=> }
122
+ //=> }
123
+ //=> }
124
+ ```
125
+
126
+ The `updates()` function accepts all [config options](#config-options).
127
+
90
128
  ## Environment Variables
91
129
 
92
130
  |Variable|Description|
package/dist/api.d.ts ADDED
@@ -0,0 +1,67 @@
1
+ //#region config.d.ts
2
+ type Config = {
3
+ /** Array of dependencies to include */include?: Array<string | RegExp>; /** Array of dependencies to exclude */
4
+ exclude?: Array<string | RegExp>; /** Array of package types to use */
5
+ types?: Array<string>; /** URL to npm registry */
6
+ registry?: string; /** Minimum dependency age, e.g. 7 (days), "1w", "2d", "6h" */
7
+ cooldown?: number | string; /** Pin dependencies to semver ranges */
8
+ pin?: Record<string, string>; /** File or directory paths to use */
9
+ files?: Array<string>; /** Which modes to enable */
10
+ modes?: Array<string>; /** Update versions and write dependency files */
11
+ update?: boolean; /** Include indirect Go dependencies */
12
+ indirect?: boolean; /** Output a JSON object */
13
+ json?: boolean; /** Print verbose output to stderr */
14
+ verbose?: boolean; /** Exit with code 2 when updates are available */
15
+ errorOnOutdated?: boolean; /** Exit with code 0 when updates are available and 2 when not */
16
+ errorOnUnchanged?: boolean; /** Force color output */
17
+ color?: boolean; /** Disable color output */
18
+ noColor?: boolean; /** Disable HTTP cache */
19
+ noCache?: boolean; /** Network request timeout in ms */
20
+ timeout?: number; /** Maximum number of parallel HTTP sockets */
21
+ sockets?: number; /** Prefer greatest over latest version */
22
+ greatest?: boolean | Array<string | RegExp>; /** Consider prerelease versions */
23
+ prerelease?: boolean | Array<string | RegExp>; /** Only use release versions, may downgrade */
24
+ release?: boolean | Array<string | RegExp>; /** Consider only up to semver-patch */
25
+ patch?: boolean | Array<string | RegExp>; /** Consider only up to semver-minor */
26
+ minor?: boolean | Array<string | RegExp>; /** Allow version downgrades when using latest version */
27
+ allowDowngrade?: boolean | Array<string | RegExp>;
28
+ };
29
+ //#endregion
30
+ //#region modes/shared.d.ts
31
+ type Dep = {
32
+ old: string;
33
+ new: string;
34
+ oldPrint?: string;
35
+ newPrint?: string;
36
+ oldOrig?: string;
37
+ info?: string;
38
+ age?: string;
39
+ date?: string;
40
+ };
41
+ type Deps = {
42
+ [name: string]: Dep;
43
+ };
44
+ type DepsByMode = {
45
+ [mode: string]: Deps;
46
+ };
47
+ type Output = {
48
+ results: {
49
+ [mode: string]: {
50
+ [type: string]: Deps;
51
+ };
52
+ };
53
+ message?: string;
54
+ };
55
+ //#endregion
56
+ //#region api.d.ts
57
+ type UpdatesOptions = Config & {
58
+ /** Override GitHub/Gitea API URL (for testing) */forgeapi?: string; /** Override PyPI API URL (for testing) */
59
+ pypiapi?: string; /** Override JSR API URL (for testing) */
60
+ jsrapi?: string; /** Override Go proxy URL (for testing) */
61
+ goproxy?: string; /** Override crates.io API URL (for testing) */
62
+ cargoapi?: string; /** Override Docker Hub API URL (for testing) */
63
+ dockerapi?: string;
64
+ };
65
+ declare function updates(opts?: UpdatesOptions): Promise<Output>;
66
+ //#endregion
67
+ export { type Config, type Dep, type Deps, type DepsByMode, type Output, UpdatesOptions, updates };
package/dist/api.js ADDED
@@ -0,0 +1 @@
1
+ import{t as e}from"./shared.js";export{e as updates};
package/dist/index.js CHANGED
@@ -1,8 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{cwd as e,env as t,exit as n,platform as r,stderr as i,stdout as a,versions as o}from"node:process";import{basename as s,dirname as c,join as l,resolve as u}from"node:path";import{pathToFileURL as d}from"node:url";import{accessSync as f,globSync as p,lstatSync as m,mkdirSync as h,readFileSync as g,readdirSync as _,statSync as v,truncateSync as y,writeFileSync as b}from"node:fs";import{parseArgs as x,promisify as S,stripVTControlCharacters as ee,styleText as te}from"node:util";import ne from"node:dns";import{createHash as re}from"node:crypto";import{homedir as ie}from"node:os";import{execFile as ae}from"node:child_process";function oe(e){let t={},n=t,r=e.split(/\r?\n/);for(let e=0;e<r.length;e++){let i=r[e].replace(/#.*$/,``).trim();if(!i)continue;let a=/^\[([^\]]+)\]$/.exec(i);if(a){n=t;for(let e of T(a[1]))(!(e in n)||typeof n[e]!=`object`||Array.isArray(n[e]))&&(n[e]={}),n=n[e];continue}let o=ue(i);if(o<0)continue;let s=i.slice(0,o).trim(),c=i.slice(o+1).trim(),l=T(s),u=n;for(let e=0;e<l.length-1;e++)(!(l[e]in u)||typeof u[l[e]]!=`object`||Array.isArray(u[l[e]]))&&(u[l[e]]={}),u=u[l[e]];let d=l[l.length-1];if(c.startsWith(`[`)&&!c.includes(`]`)){let t=[];C(c.slice(1),t);for(let n=e+1;n<r.length;n++){let i=r[n].replace(/#.*$/,``).trim();if(i){if(i.includes(`]`)){C(i.replace(/\].*$/,``),t),e=n;break}C(i,t)}}u[d]=t}else u[d]=w(c)}return t}function C(e,t){let n=e.trim();if(!n)return;let r=/"""([\s\S]*?)"""|'''([\s\S]*?)'''|"((?:[^"\\]|\\.)*)"|'([^']*)'|([^,\s\]]+)/g,i;for(;i=r.exec(n);){let e=i[1]??i[2]??(i[3]===void 0?void 0:E(i[3]))??i[4]??i[5];e!==void 0&&e!==``&&t.push(se(e))}}function w(e){if(e.startsWith(`[`)){let t=[];return C(e.slice(1,e.lastIndexOf(`]`)),t),t}return e.startsWith(`{`)?ce(e):e.startsWith(`"""`)?E(e.slice(3,e.lastIndexOf(`"""`))):e.startsWith(`'''`)?e.slice(3,e.lastIndexOf(`'''`)):e.startsWith(`"`)?E(e.slice(1,e.lastIndexOf(`"`))):e.startsWith(`'`)?e.slice(1,e.lastIndexOf(`'`)):se(e)}function se(e){return e===`true`?!0:e===`false`?!1:/^[+-]?\d+$/.test(e)||/^[+-]?\d+\.\d+$/.test(e)?Number(e):e}function ce(e){let t={},n=e.slice(1,e.lastIndexOf(`}`)).trim();if(!n)return t;for(let e of le(n)){let n=e.indexOf(`=`);if(n<0)continue;let r=e.slice(0,n).trim().replace(/^["']|["']$/g,``);t[r]=w(e.slice(n+1).trim())}return t}function le(e){let t=[],n=0,r=null,i=0;for(let a=0;a<e.length;a++){let o=e[a];if(r){if(o===`\\`&&r===`"`){a++;continue}o===r&&(r=null)}else o===`"`||o===`'`?r=o:o===`[`||o===`{`?n++:o===`]`||o===`}`?n--:o===`,`&&n===0&&(t.push(e.slice(i,a)),i=a+1)}return i<e.length&&t.push(e.slice(i)),t}function T(e){let t=[],n=``,r=null;for(let i of e)if(r){if(i===r){r=null;continue}n+=i}else i===`"`||i===`'`?r=i:i===`.`?(t.push(n.trim()),n=``):n+=i;return n.trim()&&t.push(n.trim()),t}function ue(e){let t=null;for(let n=0;n<e.length;n++){let r=e[n];if(t){if(r===`\\`&&t===`"`){n++;continue}r===t&&(t=null)}else if(r===`"`||r===`'`)t=r;else if(r===`=`)return n}return-1}function E(e){return e.replace(/\\(["\\bfnrt]|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/g,(e,t)=>{switch(t[0]){case`"`:return`"`;case`\\`:return`\\`;case`b`:return`\b`;case`f`:return`\f`;case`n`:return`
3
- `;case`r`:return`\r`;case`t`:return` `;case`u`:case`U`:return String.fromCodePoint(Number.parseInt(t.slice(1),16));default:return t}})}const D=/^v?(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*))?(?:\+[a-zA-Z0-9._-]+)?$/,O=new Map;function k(e){if(typeof e!=`string`)return null;let t=O.get(e);if(t!==void 0)return t;let n=D.exec(e.trim());if(!n)return O.set(e,null),null;let r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=n[4]?n[4].split(`.`).map(e=>/^\d+$/.test(e)?Number(e):e):[],s={major:r,minor:i,patch:a,prerelease:o,version:`${r}.${i}.${a}${o.length?`-${o.join(`.`)}`:``}`};return O.set(e,s),s}function de(e,t){let n=typeof e==`number`,r=typeof t==`number`;return n&&r?e-t:n?-1:r?1:e<t?-1:e>t?1:0}function fe(e,t){return e.major-t.major||e.minor-t.minor||e.patch-t.patch}function A(e,t){let n=fe(e,t);if(n!==0)return n;if(!e.prerelease.length&&!t.prerelease.length)return 0;if(e.prerelease.length&&!t.prerelease.length)return-1;if(!e.prerelease.length&&t.prerelease.length)return 1;let r=Math.max(e.prerelease.length,t.prerelease.length);for(let n=0;n<r;n++){if(e.prerelease[n]===void 0)return-1;if(t.prerelease[n]===void 0)return 1;let r=de(e.prerelease[n],t.prerelease[n]);if(r!==0)return r}return 0}function j(e){return k(e)?.version??null}function pe(e){return k(e)}const me=new Map,he=/(?:^|[^.\d])(\d+)(?:\.(\d+))?(?:\.(\d+))?/;function ge(e){if(typeof e!=`string`)return null;let t=me.get(e);if(t!==void 0)return t;let n=he.exec(e);if(!n)return me.set(e,null),null;let r={version:`${n[1]||`0`}.${n[2]||`0`}.${n[3]||`0`}`};return me.set(e,r),r}function M(e,t){let n=k(e),r=k(t);if(!n||!r||n.version===r.version)return null;let i=A(n,r),a=i>0?n:r,o=i>0?r:n,s=a.prerelease.length>0;if(o.prerelease.length>0&&!s){if(!o.patch&&!o.minor)return`major`;if(fe(o,a)===0)return o.minor&&!o.patch?`minor`:`patch`}let c=s?`pre`:``;return n.major===r.major?n.minor===r.minor?n.patch===r.patch?`prerelease`:`${c}patch`:`${c}minor`:`${c}major`}function _e(e,t){let n=k(e),r=k(t);return!n||!r?!1:A(n,r)>0}function ve(e,t){let n=k(e),r=k(t);return!n||!r?!1:A(n,r)>=0}function ye(e,t){let n=k(e),r=k(t);return!n||!r?!1:A(n,r)<0}function be(e,t){let n=k(e),r=k(t);return!n||!r?!0:A(n,r)!==0}function xe(e){let t=/^(>=|<=|>|<|=)?\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)?)$/.exec(e.trim());if(!t)return null;let n=t[2],r=k(`${n}.${t[3]??`0`}.${t[4]??`0`}${t[5]||``}`);return r?{op:t[1]||`=`,semver:r}:null}function Se(e,t){let n=A(e,t.semver);switch(t.op){case`>=`:return n>=0;case`<=`:return n<=0;case`>`:return n>0;case`<`:return n<0;case`=`:return n===0;default:return n===0}}function N(e,t,n){return`${e}.${t}.${n}-0`}function Ce(e){return e.replace(/~\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t);if(n===void 0)return`>=${a}.0.0 <${N(a+1,0,0)}`;let o=Number(n);return`>=${a}.${o}.${r===void 0?0:Number(r)}${i||``} <${N(a,o+1,0)}`})}function we(e){return e.replace(/\^\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t),o=i||``;if(n===void 0)return`>=${a}.0.0 <${N(a+1,0,0)}`;let s=Number(n);if(r===void 0)return a===0?`>=${a}.${s}.0 <${N(a,s+1,0)}`:`>=${a}.${s}.0 <${N(a+1,0,0)}`;let c=Number(r);return a===0?s===0?`>=${a}.${s}.${c}${o} <${N(a,s,c+1)}`:`>=${a}.${s}.${c}${o} <${N(a,s+1,0)}`:`>=${a}.${s}.${c}${o} <${N(a+1,0,0)}`})}function Te(e){return e.replace(/v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)\s+-\s+v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i,a,o,s,c)=>{let l=Number(t),u=n===void 0?0:Number(n),d=r===void 0?0:Number(r),f=i||``,p=Number(a),m;return m=s===void 0?o===void 0?`<${N(p+1,0,0)}`:`<${N(p,Number(o)+1,0)}`:`<=${p}.${Number(o)}.${Number(s)}${c||``}`,`>=${l}.${u}.${d}${f} ${m}`})}function Ee(e){return/^\s*[*xX]\s*$/.test(e)?`>=0.0.0`:(e=e.replace(/v?(\d+)\.[xX*](?:\.[xX*])?/g,(e,t)=>{let n=Number(t);return`>=${n}.0.0 <${N(n+1,0,0)}`}),e=e.replace(/v?(\d+)\.(\d+)\.[xX*]/g,(e,t,n)=>{let r=Number(t),i=Number(n);return`>=${r}.${i}.0 <${N(r,i+1,0)}`}),e=e.replace(/(^|[\s|])(\d+)\.(\d+)(?=\s|$)/g,(t,n,r,i,a)=>{let o=e.substring(0,a).trimEnd();if(/[<>=]$/.test(o))return t;let s=Number(r),c=Number(i);return`${n}>=${s}.${c}.0 <${N(s,c+1,0)}`}),e=e.replace(/(^|[\s|])(\d+)(?=\s|$)/g,(t,n,r,i)=>{let a=e.substring(0,i).trimEnd();if(/[<>=]$/.test(a))return t;let o=Number(r);return`${n}>=${o}.0.0 <${N(o+1,0,0)}`}),e)}const De=new Map;function Oe(e){let t=De.get(e);if(t!==void 0)return t;let n=e.split(`||`).map(e=>e.trim()),r=[];for(let t of n){if(!t){r.push([]);continue}t=Te(t),t=we(t),t=Ce(t),t=Ee(t),t=t.replace(/(^|[\s])v?(\d+\.\d+\.\d+(?:-[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)?)\b/g,(e,t)=>/[<>=]/.test(t)?e:`${t}=${e.trim()}`),t=t.replace(/(>=|<=|>|<|=)\s+/g,`$1`);let n=t.split(/\s+/).filter(Boolean),i=[];for(let t of n){let n=xe(t);if(!n)return De.set(e,null),null;i.push(n)}if(i.length===0)return De.set(e,null),null;r.push(i)}let i=r.length?r:null;return De.set(e,i),i}function ke(e,t){for(let n of t)if(!Se(e,n))return!1;if(e.prerelease.length>0){for(let n of t)if(n.semver.prerelease.length>0&&n.semver.major===e.major&&n.semver.minor===e.minor&&n.semver.patch===e.patch)return!0;return!1}return!0}function Ae(e,t){let n=k(e);if(!n)return!1;let r=Oe(t);if(!r)return!1;for(let e of r)if(e.length===0||ke(n,e))return!0;return!1}function je(e){if(typeof e!=`string`)return null;try{return Oe(e)?e:null}catch{return null}}const Me=[[1e3,6e4,`sec`],[6e4,36e5,`min`],[36e5,864e5,`hour`],[864e5,6048e5,`day`],[6048e5,2628e6,`week`],[2628e6,31536e6,`month`],[31536e6,1/0,`year`]],Ne={"1 day ago":`yesterday`,"1 week ago":`last week`,"1 month ago":`last month`,"1 year ago":`last year`,"in 1 day":`tomorrow`,"in 1 week":`next week`,"in 1 month":`next month`,"in 1 year":`next year`},Pe={sec:`second`,min:`minute`};function Fe(e){return e instanceof Date?e.getTime():typeof e==`string`?Date.parse(e):e}function Ie(e,{now:t,noAffix:n=!1,times:r=Me,nowThreshold:i=2e3,nowString:a=`now`,unknownString:o=``,aliases:s=!1,aliasesMap:c=Ne,longUnits:l=!1}={}){let u=Fe(e),d=t===void 0?Date.now():Fe(t);if(u!==u)return o||String(e);let f=d-u,p=f<0;if(p&&(f=-f),f<i)return a;let m=0,h=``;for(let e=0,t=r.length;e<t;e++){let t=r[e];if(!(f>=t[1])){m=f/t[0]|0,h=(l&&Pe[t[2]]||t[2])+(m>1?`s`:``);break}}let g=`${m} ${h}`,_;return _=n?g:p?`in ${g}`:`${g} ago`,s?c[_]??_:_}function Le(e,t,n){if(e===t)return e;let r=0;for(;r<e.length&&r<t.length&&e[r]===t[r];)r++;if(r>0&&e[r-1]!==`.`&&e[r-1]!==`-`){let t=r-1;for(;t>=0&&e[t]!==`.`&&e[t]!==`-`;)t--;if(t>=0)r=t+1;else{let t=0;for(;t<r&&!/\d/.test(e[t]);)t++;r=t}}let i=e.substring(r);return i?e.substring(0,r)+n(i):e}function Re(e){let t=[];for(let n of e){let[e,r]=n.replaceAll(/\s+/g,``).split(/[<>=~]+/);e&&/^[0-9.a-z]+$/.test(r)&&t.push({name:e,version:r})}return t}const ze=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`resolutions`,`packageManager`],Be=[`node`,`deno`,`bun`],Ve=[`project.dependencies`,`project.optional-dependencies`,`dependency-groups.dev`,`dependency-groups.lint`,`dependency-groups.test`],He=[`deps`,`indirect`,`replace`,`tool`],Ue=[`dependencies`,`dev-dependencies`,`build-dependencies`,`workspace.dependencies`];function P(e,t){for(let n of t instanceof Set?t:[])if(n.test(e))return!0;return!1}function We(e,t){return t.split(`.`).reduce((e,t)=>e?.[t]??null,e)}function Ge(e){return e.split(`,`).filter(Boolean)}function Ke(e,t,n){return!e||!t?!0:(n-Date.parse(e))/(24*3600*1e3)>=t}function qe(){let e=new Date;return[e.getFullYear(),`-`,String(e.getMonth()+1).padStart(2,`0`),`-`,String(e.getDate()).padStart(2,`0`),` `,String(e.getHours()).padStart(2,`0`),`:`,String(e.getMinutes()).padStart(2,`0`),`:`,String(e.getSeconds()).padStart(2,`0`),`.`,String(e.getMilliseconds()).padStart(3,`0`)].join(``)}function Je(e,t,n=` `){let r=``,i=Array(e[0].length).fill(0);for(let n of e)for(let[e,r]of n.entries()){let n=t(r);n>i[e]&&(i[e]=n)}for(let[a,o]of e.entries()){for(let[e,a]of o.entries()){e>0&&(r+=n);let s=` `.repeat(i[e]-t(a));r+=a+(e===o.length-1?``:s)}a<e.length-1&&(r+=`
4
- `)}return r}const Ye={y:365,m:30,w:7,d:1,h:1/24,s:1/86400};function Xe(e){let t=/^(\d+(?:\.\d+)?)\s*([a-z])$/i.exec(e);if(t){let[,e,n]=t,r=Ye[n.toLowerCase()];if(r)return Number(e)*r}let n=Number(e);if(!Number.isFinite(n))throw Error(`Invalid cooldown value: ${e}`);return n}async function Ze(e,t,{concurrency:n=1/0}={}){let r=Array.from(e);if(!Number.isFinite(n))return Promise.all(r.map(t));let i=Array(r.length),a=0;return await Promise.all(Array.from({length:Math.min(n,r.length)},async()=>{for(;a<r.length;){let e=a++;i[e]=await t(r[e])}})),i}function Qe(){let e=new Map,t=new Map,n=ne.lookup;ne.lookup=function(r,...i){let a={},o;typeof i[0]==`function`?o=i[0]:(a=typeof i[0]==`number`?{family:i[0]}:i[0]||{},o=i[1]);let s=e.get(r);if(s){a.all?o(null,s):o(null,s[0].address,s[0].family);return}if(t.has(r)){t.get(r).push({options:a,callback:o});return}t.set(r,[{options:a,callback:o}]),n.call(ne,r,{all:!0},(n,i)=>{let a=t.get(r);t.delete(r),!n&&i?.length&&e.set(r,i);for(let{options:e,callback:t}of a)n?t(n):e.all?t(null,i):t(null,i[0].address,i[0].family)})}}const $e=`17.13.5`,F=e=>e.replace(/^v/,``),I=e=>e.replace(/[|\\{}()[\]^$+*?.-]/g,`\\$&`),L=e=>e.endsWith(`/`)?e.substring(0,e.length-1):e;function et(e,t){return{headers:{"user-agent":`updates/${$e}`,"accept-encoding":`gzip, deflate, br`,...t&&{Authorization:`${e} ${t}`}}}}async function tt(e,t,n,r,i,a,o){n&&r&&i&&r(`${i(`fetch`)} ${e}`);try{let i=await fetch(e,t);return n&&r&&a&&o&&r(`${i.ok?a(i.status):o(i.status)} ${e}`),i}catch(t){throw Error(`Failed to fetch ${e}${t?.message?`: ${t.message}`:``}`)}}function R(e){let t=pe(e);return t?!!t.prerelease.length:!1}function nt(e){return/[0-9]+\.[0-9]+\.[0-9]+-.+/.test(e)}function rt(e,t,{useRel:n,allowDowngrade:r,name:i,matchesAny:a}){let o=z(e),s=z(t);if(!o||!s)return!0;let c=nt(e)||R(e),l=R(t);return c&&!l?_e(s,o)||n:!l&&ye(s,o)?r===!0||a(i,r):!0}function z(e){try{return ge(e)?.version??``}catch{return``}}function it(e,t,{range:n,semvers:r,usePre:i,useRel:a,useGreatest:o,pinnedRange:s}){let c=z(n);if(!c)return c;i=nt(n)||i,i&&(r.add(`prerelease`),r.has(`patch`)&&r.add(`prepatch`),r.has(`minor`)&&r.add(`preminor`),r.has(`major`)&&r.add(`premajor`));let l=0,u=c;for(let n of t){let t=pe(n);if(!t?.version||t.prerelease.length&&(!i||a))continue;let c=t.version;if(s&&!Ae(c,s))continue;let d=M(u,c);if(!(!d||!r.has(d)))if(o||!(`time`in e))(ve(z(c),u)||s&&!Ae(u,s))&&(u=c);else{let t=Date.parse(e.time[n]);t>=0&&t>l&&(u=c,l=t)}}return u||null}function at(e,{mode:t,range:n,useGreatest:r,useRel:i,usePre:a,semvers:o,pinnedRange:s},{allowDowngrade:c,matchesAny:l,isGoPseudoVersion:u}){if(n===`*`||n.includes(`||`))return null;let d=[];if(t===`pypi`)d=Object.keys(e.releases).filter(e=>j(e));else if(t===`npm`||t===`cargo`)d=Object.keys(e.versions).filter(e=>j(e));else if(t===`go`){let t=z(n);if(!t)return null;let r=a||nt(n),s=e=>R(e)&&(!r||i),d={useRel:i,allowDowngrade:c,name:e.name,matchesAny:l},f=e.old||n,p=z(e.new);if(p&&!u(e.new)&&!s(e.new)){let n=M(t,p);if(n&&o.has(n)&&rt(f,e.new,d))return e.new}let m=z(e.sameMajorNew);if(m&&!u(e.sameMajorNew)&&!s(e.sameMajorNew)){let n=M(t,m);if(n&&o.has(n)&&rt(f,e.sameMajorNew,d))return e.Time=e.sameMajorTime,delete e.newPath,e.sameMajorNew}return null}let f=it(e,d,{range:n,semvers:o,usePre:a,useRel:i,useGreatest:r,pinnedRange:s});if(!f)return null;if(r)return f;{let r=``,u=``;t===`pypi`?(u=e.info.version,r=z(e.info.version)):r=e[`dist-tags`].latest;let d=z(n),p=nt(n),m=R(f),h=R(r),g={useRel:i,allowDowngrade:c,name:e.name,matchesAny:l};if(!i&&a||p&&m)return f;if(p&&!m)return rt(n,f,g)?f:null;let _=M(d,r);return _&&_!==`prerelease`&&!o.has(_.replace(/^pre/,``))||i&&R(r)?f:ye(r,d)&&!h?rt(n,r,g)?r:null:!p&&h&&!a||s&&!Ae(r,s)?f:u||r}}const ot=new Map;if(t.UPDATES_FORGE_TOKENS)for(let e of t.UPDATES_FORGE_TOKENS.split(`,`)){let t=e.indexOf(`:`);t>0&&ot.set(e.substring(0,t),e.substring(t+1))}function st(e){try{let t=ot.get(new URL(e).hostname);if(t)return t}catch{}return t.UPDATES_GITHUB_API_TOKEN||t.GITHUB_API_TOKEN||t.GH_TOKEN||t.GITHUB_TOKEN||t.HOMEBREW_GITHUB_API_TOKEN}function ct(e,t){let n={signal:AbortSignal.timeout(t.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}},r=st(e);return r&&(n.headers={...n.headers,Authorization:`Bearer ${r}`}),t.doFetch(e,n)}function lt(e,t,n){let r=F(t);if(!j(r))return null;if(n){let n=t,i=F(t);for(let t of e){let e=F(t);j(e)&&(!n||_e(e,i))&&(n=t,i=e)}if(be(r,i))return n}else{let t=e.at(-1);if(!t)return null;let n=F(t);if(!j(n))return null;if(be(r,n))return t}return null}function ut(e){return e=e.replace(`git@`,``).replace(/.+?\/\//,`https://`).replace(/\.git$/,``),/^[a-z]+:[a-z0-9-]\/[a-z0-9-]$/.test(e)?e.replace(/^(.+?):/,(e,t)=>`https://${t}.com/`):/^[a-z0-9-]\/[a-z0-9-]$/.test(e)?`https://github.com/${e}`:e}const dt=/^[0-9a-f]{7,}$/i;function ft(e){return e.map(e=>({name:e.name,commitSha:e.commit?.sha||``}))}async function pt(e,t,n,r){try{let i=await ct(`${e}/repos/${t}/${n}/tags?per_page=100`,r);if(!i?.ok)return[];let a=ft(await i.json()),o=i.headers.get(`link`)||``,s=/<([^>]+)>;\s*rel="last"/.exec(o);if(s){let i=Number(new URL(s[1]).searchParams.get(`page`)),o=await Promise.all(Array.from({length:i-1},(i,a)=>ct(`${e}/repos/${t}/${n}/tags?per_page=100&page=${a+2}`,r)));for(let e of o)e?.ok&&a.push(...ft(await e.json()))}return a}catch{return[]}}function mt(e,t,n,r){throw e?.status&&e?.statusText?Error(`Received ${e.status} ${e.statusText} from ${t}`):Error(`Unable to fetch ${n} from ${r}`)}function ht(e,t,n=``){let r=t.startsWith(`v`),i=F(e),a=F(t).split(`.`).length,o=i.split(`.`),s;return s=a===1?o[0]:a===2?`${o[0]}.${o[1]||`0`}`:i,`${r?`v`:``}${s}${n}`}function gt(e){return e.startsWith(`https://bitbucket.org`)?`src/HEAD`:`tree/HEAD`}function _t({repository:e,homepage:t,info:n},r,i){n&&(e=n.project_urls.repository||n.project_urls.Repository||n.project_urls.repo||n.project_urls.Repo||n.project_urls.source||n.project_urls.Source||n.project_urls[`source code`]||n.project_urls[`Source code`]||n.project_urls[`Source Code`]||n.project_urls.homepage||n.project_urls.Homepage||`https://pypi.org/project/${i}/`);let a=``;return r===`https://npm.pkg.github.com`?`https://github.com/${i.replace(/^@/,``)}`:(e&&(a=ut(typeof e==`string`?e:e.url),a&&typeof e!=`string`&&e.directory&&(a=`${a}/${gt(a)}/${e.directory}`)),a||t||``)}function vt(e){if(/^\s*\{/.test(e))return JSON.parse(e);let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(!e||e.startsWith(`#`)||e.startsWith(`;`))continue;let r=e.indexOf(`=`);if(r===-1)continue;let i=e.slice(r+1).trim();i.length>=2&&(i.startsWith(`"`)&&i.endsWith(`"`)||i.startsWith(`'`)&&i.endsWith(`'`))&&(i=i.slice(1,-1)),t[e.slice(0,r).trim()]=i}return t}function yt(e){try{return vt(g(e,`utf-8`))}catch{return}}function bt(t){let n=e();for(;;){let e=l(n,t);try{return v(e),e}catch{}let r=c(n);if(r===n)break;n=r}}function xt(e){let n={},r=e.toLowerCase();for(let[i,a]of Object.entries(t))if(i.toLowerCase().startsWith(r)){let t=i.substring(e.length).split(`__`).filter(Boolean);if(t.length===0)continue;let r=n;for(let e=0;e<t.length;e++){let n=t[e];if(e===t.length-1)r[n]=a;else if(r[n]===void 0&&(r[n]={}),typeof r[n]==`object`)r=r[n];else break}}return n}function St(e,n={}){let i=r===`win32`,a=i?t.USERPROFILE:t.HOME,o=[{...n}],s=[];function c(e){if(!e||s.includes(e))return;let t=yt(e);t&&(o.push(t),s.push(e))}i||(c(l(`/etc`,e,`config`)),c(l(`/etc`,`${e}rc`))),a&&(c(l(a,`.config`,e,`config`)),c(l(a,`.config`,e)),c(l(a,`.${e}`,`config`)),c(l(a,`.${e}rc`))),c(bt(`.${e}rc`));let u=xt(`${e}_`);return u.config&&c(u.config),Object.assign({},...o,u,s.length?{configs:s,config:s[s.length-1]}:void 0)}const Ct=l(r===`win32`?t.LOCALAPPDATA||l(ie(),`AppData`,`Local`):t.XDG_CACHE_HOME||l(ie(),`.cache`),`updates`);let wt=!1;function Tt(e){return re(`sha256`).update(e).digest(`hex`).substring(0,16)}function Et(e){try{let t=g(l(Ct,`${Tt(e)}.cache`),`utf8`),n=t.indexOf(`
5
- `);if(n===-1)return null;let r=t.substring(0,n),i=t.substring(n+1);return r&&i?{etag:r,body:i}:null}catch{return null}}function Dt(e,t,n){try{wt||=(h(Ct,{recursive:!0}),!0),b(l(Ct,`${Tt(e)}.cache`),`${t}\n${n}`)}catch{}}const Ot=/^.*?:\/\/(.*?@)?(github\.com[:/])/i,kt=/^([^/]+)\/([^/]+)\/(?:.*\/)?([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i,At=/[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g,jt=/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g,Mt=`https://registry.npmjs.org`;let B=null;const Nt=new Map;function Pt(){return B||St(`npm`,{registry:Mt})}function Ft(e){return e.replace(/^\$\{?([^}]*)\}?$/,(e,n)=>t[n]||``)}function It(e,t){let n=t[`${e}:_authToken`]||t[`${e}/:_authToken`];if(n)return{token:Ft(n),type:`Bearer`};let r=t[`${e}:username`]||t[`${e}/:username`],i=t[`${e}:_password`]||t[`${e}/:_password`];if(r&&i){let e=Buffer.from(Ft(i),`base64`).toString(`utf8`);return{token:Buffer.from(`${r}:${e}`).toString(`base64`),type:`Basic`,username:r,password:e}}let a=t[`${e}:_auth`]||t[`${e}/:_auth`];if(a)return{token:Ft(a),type:`Basic`}}function V(e,t){let n=new URL(e.startsWith(`//`)?`http:${e}`:e),r;for(;r!==`/`&&n.pathname!==r;){r=n.pathname||`/`;let e=It(`//${n.host}${r.replace(/\/$/,``)}`,t);if(e)return e;let i=r.endsWith(`/`)?r:`${r}/`;n.pathname=new URL(`..`,new URL(i,`http://x`)).pathname}let i=t._auth;if(i)return{token:Ft(i),type:`Basic`}}function Lt(e,t){let n=t[`${e}:registry`]||t.registry;return n.endsWith(`/`)?n:`${n}/`}function Rt(e,t){B||=Pt();let n=e.startsWith(`@`)?(/@[a-z0-9][\w.-]+/.exec(e)||[``])[0]:``,r=`${n}:${t}`,i=Nt.get(r);if(i)return i;let a;if(!e.startsWith(`@`))a={auth:V(t,B),registry:t};else{let e=L(Lt(n,B));if(e!==t)try{let n=V(e,B);a=n?.token?{auth:n,registry:e}:{auth:V(t,B),registry:t}}catch{a={auth:V(t,B),registry:t}}else a={auth:V(t,B),registry:t}}return Nt.set(r,a),a}function zt(e,t,n){B||=Pt();let r=L((typeof n.registry==`string`?n.registry:!1)||t.registry||B.registry||Mt);return{...Rt(e,r),originalRegistry:r}}function Bt(e,t,n){let r=`${e}/${t.replace(/\//g,`%2f`)}`;return n?`${r}/${n}`:r}const Vt=new Map,Ht=new Map,Ut=new Map;async function Wt(e,t,n,r,i){let{auth:a,registry:o}=zt(e,n,r),c=Bt(o,t===`resolutions`?s(e):e),l=Vt.get(c);if(!l){let t=et(a?.type,a?.token);t.headers={...t.headers,accept:`application/vnd.npm.install-v1+json`};let n=i.noCache?null:Et(c);n&&(t.headers[`if-none-match`]=n.etag),l=i.doFetch(c,{signal:AbortSignal.timeout(i.fetchTimeout),...t}).then(async t=>{if(t?.status===304&&n)return JSON.parse(n.body);if(t?.ok){let e=await t.text(),n=t.headers.get(`etag`);return n&&!i.noCache&&Dt(c,n,e),JSON.parse(e)}mt(t,c,e,o)}).catch(e=>{throw Vt.delete(c),e}),Vt.set(c,l)}return[await l,t,o,e]}async function Gt(e,t,n,r,i){let{auth:a,registry:o}=zt(e,n,r),s=Bt(o,e,t),c=Ht.get(s);if(c)return c;let l=(async()=>{try{let n=et(a?.type,a?.token),r=await i.doFetch(s,{signal:AbortSignal.timeout(i.fetchTimeout),...n});if(!r?.ok)return{};let c=await r.json(),l=``,u=c?._npmOperationalInternal?.tmp;if(u){let e=/(\d{13})/.exec(u);e&&(l=new Date(Number(e[1])).toISOString())}if(!l){let r=Bt(o,e),a=Ut.get(r);a||(a=i.doFetch(r,{signal:AbortSignal.timeout(i.fetchTimeout),...n}).then(e=>e?.ok?e.json():null).catch(()=>(Ut.delete(r),null)),Ut.set(r,a)),l=(await a)?.time?.[t]||``}return{repository:c.repository,homepage:c.homepage,date:l}}catch{return{}}})();return Ht.set(s,l),l}function H(e){return e.startsWith(`npm:@jsr/`)||e.startsWith(`jsr:`)}function Kt(e){return e.startsWith(`link:`)||e.startsWith(`file:`)}function qt(e,t){if(e.startsWith(`npm:@jsr/`)){let t=/^npm:@jsr\/([^_]+)__([^@]+)@(.+)$/.exec(e);if(t)return{scope:t[1],name:t[2],version:t[3]}}else if(e.startsWith(`jsr:@`)){let t=/^jsr:@([^/]+)\/([^@]+)@(.+)$/.exec(e);if(t)return{scope:t[1],name:t[2],version:t[3]}}else if(e.startsWith(`jsr:`)){let n=e.substring(4);if(t?.startsWith(`@`)){let e=/^@([^/]+)\/(.+)$/.exec(t);if(e)return{scope:e[1],name:e[2],version:n}}}return{scope:null,name:null,version:``}}async function Jt(e,t,n){let r=/^@([^/]+)\/(.+)$/.exec(e);if(!r)throw Error(`Invalid JSR package name: ${e}`);let[,i,a]=r,o=`${n.jsrApiUrl}/@${i}/${a}/meta.json`,s=await n.doFetch(o,{signal:AbortSignal.timeout(n.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}});if(s?.ok){let r=await s.json(),i={},a={};for(let[e,t]of Object.entries(r.versions))i[e]={version:e,time:t.createdAt},a[e]=t.createdAt;return[{name:e,"dist-tags":{latest:r.latest},versions:i,time:a},t,n.jsrApiUrl,e]}mt(s,o,e,`JSR`)}function Yt(e,t){let n=e;for(let[e,{old:r,oldOrig:i}]of Object.entries(t)){let[a,o]=e.split(`\0`),s=i||r;if(a===`packageManager`){let r=RegExp(`"${I(a)}": *"${o}@${I(s)}"`,`g`);n=n.replace(r,`"${a}": "${o}@${t[e].new}"`)}else{let r=RegExp(`"${I(o)}": *"${I(s)}"`,`g`);n=n.replace(r,`"${o}": "${t[e].new}"`)}}return n}function Xt(e,t,n){let r=e.replace(jt,t);if(n&&n!==e&&/^[\^~]/.test(r)){let e=n.substring(1).split(`.`),t=r.substring(1).split(`.`);e.length!==t.length&&(r=`${r[0]}${t.slice(0,e.length).join(`.`)}`)}if(n&&n!==e&&r.startsWith(`>=`)){let e=/^>=\s/.test(n)?`>= `:`>=`,t=n.replace(/^>=\s*/,``),i=r.replace(/^>=\s*/,``),a=t.split(`.`),o=i.split(`.`);a.length!==o.length&&(r=`${e}${o.slice(0,a.length).join(`.`)}`)}return r}function Zt(e){let t=e.match(At);return t?.length===1?e.replace(At,z(t[0])):e}async function Qt(e,t,n){try{let r=await ct(`${n.forgeApiUrl}/repos/${e}/${t}/commits`,n);if(!r?.ok)return{hash:``,commit:{}};let{sha:i,commit:a}=(await r.json())[0];return{hash:i,commit:a}}catch{return{hash:``,commit:{}}}}async function $t(e,t,n){return(await pt(n.forgeApiUrl,e,t,n)).map(e=>e.name)}async function en(e,t,n,r){let i=t.old.replace(Ot,``),[a,o,s,c]=kt.exec(i)||[];if(!o||!s||!c)return null;if(dt.test(c)){let{hash:n,commit:i}=await Qt(o,s,r);if(!n)return null;let a=i?.committer?.date??i?.author?.date,l=n.substring(0,c.length);if(c!==l)return{key:e,newRange:t.old.replace(c,l),user:o,repo:s,oldRef:c,newRef:l,newDate:a}}else{let t=lt(await $t(o,s,r),c,n);if(t)return{key:e,newRange:t,user:o,repo:s,oldRef:c,newRef:t}}return null}async function tn(e,t,n){let r=`${n.pypiApiUrl}/pypi/${e}/json`,i=await n.doFetch(r,{signal:AbortSignal.timeout(n.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}});if(i?.ok)return[await i.json(),t,null,e];mt(i,r,e,n.pypiApiUrl)}function nn(e,t){let n=e;for(let[e,{old:r,oldOrig:i}]of Object.entries(t)){let[a,o]=e.split(`\0`),s=i||r;n=n.replace(RegExp(`("${I(o)} *[<>=~]+ *)${I(s)}(")`,`g`),(n,r,i)=>`${r}${t[e].new}${i}`)}return n}const rn=S(ae);function an(){let e=t.GOPROXY||`https://proxy.golang.org,direct`;for(let t of e.split(/[,|]/)){let e=t.trim();if(e&&e!==`direct`&&e!==`off`)return e.endsWith(`/`)?e.substring(0,e.length-1):e}return`https://proxy.golang.org`}function on(){return(t.GONOPROXY||t.GOPRIVATE||``).split(`,`).map(e=>e.trim()).filter(Boolean)}function sn(e,t){return t.some(t=>e===t||e.startsWith(`${t}/`))}function cn(e){return e.replace(/[A-Z]/g,e=>`!${e.toLowerCase()}`)}function ln(e){let t=/\/v(\d+)$/.exec(e);return t?Number.parseInt(t[1]):1}function un(e,t){return t<=1?e.replace(/\/v\d+$/,``):`${e.replace(/\/v\d+$/,``)}/v${t}`}function dn(e,t,n){return t===`indirect`||e.startsWith(`golang.org/x/`)||fn(n)}function fn(e){return/\d{14}-[0-9a-f]{12}$/.test(e)}function pn(e,t,n){return[{name:e,old:t,new:t},n,null,e]}async function mn(e,t,n){if(!t)return null;let r=t,i=e+1,a=1,o=null;for(;o===null;){let t=i+a;if(t>e+100){o=e+101;break}let s=await n(t);s?(r=s,i=t,a*=2):o=t}if(o-i>1){let e=await Promise.all(Array.from({length:o-i-1},(e,t)=>n(i+1+t)));for(let t=e.length-1;t>=0;t--)if(e[t]){r=e[t];break}}return r}function hn(e,t,n,r,i,a){let o=r?.Version??i,s=r?.Time??a,c=r?.path??e;return[{name:e,old:n,new:F(o),Time:s,...c===e?{}:{newPath:c},sameMajorNew:F(i),sameMajorTime:a},t,null,e]}function gn(e){let t={},n={},r={},i={},a=new Set,o=[],s=e.split(/\r?\n/),c=!1,l=!1,u=!1;for(let e of s){let i=e.trim();if(/^require\s*\(/.test(i)){c=!0;continue}if(/^replace\s*\(/.test(i)){l=!0;continue}if(/^tool\s*\(/.test(i)){u=!0;continue}if(i===`)`){c=!1,l=!1,u=!1;continue}if(u){i&&!i.startsWith(`//`)&&o.push(i);continue}let s=/^tool\s+(\S+)/.exec(i);if(s){o.push(s[1]);continue}let d=i.includes(`// indirect`);if(l||/^replace\s+/.test(i)){let e=l?/^(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(i):/^replace\s+(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(i);if(e){let[,t,n,i]=e;!n.startsWith(`./`)&&!n.startsWith(`/`)&&!n.startsWith(`../`)&&(r[n]=i,a.add(t))}continue}let f=c?/^(\S+)\s+(v\S+)/.exec(i):/^require\s+(\S+)\s+(v\S+)/.exec(i);f&&((d?n:t)[f[1]]=f[2])}for(let e of a)delete t[e],delete n[e];if(o.length){let e=[...Object.keys(n),...Object.keys(t)];for(let r of o){let a=``;for(let t of e)(r===t||r.startsWith(`${t}/`))&&t.length>a.length&&(a=t);let o=a?n[a]?n:t[a]?t:null:null;o&&(i[a]=o[a],delete o[a])}}return{deps:t,indirect:n,replace:r,tool:i}}async function _n(e,n,r,i,a){let o=ln(e),s=async(e,n)=>{try{let{stdout:r}=await rn(`go`,[`list`,`-m`,`-json`,`${e}@latest`],{timeout:n,cwd:i,env:t}),a=JSON.parse(r);return{Version:a.Version,Time:a.Time||``,path:e}}catch{return null}},c=dn(e,n,r),[l,u]=await Promise.all([s(e,a.fetchTimeout),c?null:s(un(e,o+1),a.goProbeTimeout)]);return l?hn(e,n,r,await mn(o,u,t=>s(un(e,t),a.goProbeTimeout)),l.Version,l.Time):pn(e,r,n)}async function vn(e,t,n,r,i,a){if(sn(e,a))return _n(e,t,n,r,i);let o=cn(e),s=ln(e),c=async t=>{let n=un(e,t);return i.doFetch(`${i.goProxyUrl}/${cn(n)}/@latest`,{signal:AbortSignal.timeout(i.goProbeTimeout)}).then(async e=>e.ok?{...await e.json(),path:n}:null).catch(()=>null)},l=dn(e,t,n),[u,d]=await Promise.all([i.doFetch(`${i.goProxyUrl}/${o}/@latest`,{signal:AbortSignal.timeout(i.fetchTimeout)}),l?null:c(s+1)]);if(!u.ok)return pn(e,n,t);let f,p;try{let e=await u.json();f=e.Version,p=e.Time}catch{return pn(e,n,t)}return hn(e,t,n,await mn(s,d,c),f,p)}function yn(e,t){let n=I(t);return e=e.replace(RegExp(`^replace\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(RegExp(`^\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(/^replace\s*\(\s*\)\s*\n/gm,``),e}function bn(e,t){let n=e,r={};for(let[e,{old:i,oldOrig:a}]of Object.entries(t)){let[o,s]=e.split(`\0`),c=a||i,l=t[e].new;if(o===`replace`){n=n.replace(RegExp(`(=>\\s+${I(s)}\\s+)v${I(c)}`,`g`),`$1v${l}`);continue}if(o===`indirect`){n=n.replace(RegExp(`(${I(s)}) +v${I(c)}`,`g`),`$1 v${l}`);continue}let u=ln(s),d=Number.parseInt(l.split(`.`)[0]);if(u!==d&&d>1){let e=un(s,d);n=n.replace(RegExp(`${I(s)} +v${I(c)}`,`g`),`${e} v${l}`),o===`tool`&&(n=n.replace(RegExp(`(^\\s+|^tool\\s+)${I(s)}(/\\S+)?\\s*$`,`gm`),`$1${e}$2`)),r[s]=e}else n=n.replace(RegExp(`(${I(s)}) +v${I(c)}`,`g`),`$1 v${l}`);o!==`tool`&&(n=yn(n,s))}return[n,r]}function xn(e,t,n){if(!Object.keys(t).length)return;let r=p(`**/*.go`,{cwd:e});for(let i of r){let r=l(e,i),a=g(r,`utf8`),o=!1;for(let[e,n]of Object.entries(t)){let t=RegExp(`"${I(e)}(/|")`,`g`),r=a.replace(t,`"${n}$1`);r!==a&&(a=r,o=!0)}o&&n(r,a)}}function Sn(e){let t=`https://${Cn(e)}`,n=new URL(t),r=n.pathname.split(`/`);if(r.length>3){let[e,i,a,...o]=r;return n.pathname=`/${i}/${a}/${gt(t)}/${o.join(`/`)}`,n.toString()}else return t}function Cn(e){return/\/v[0-9]$/.test(e)?c(e):e}function wn(e){return e.replace(/(\d{7})\d{7}-[0-9a-f]{12}$/,`$1`)}const Tn=/^\s*(?:-\s*)?uses:\s*['"]?([^'"#\s]+)['"]?/gm;function En(e){if(e.startsWith(`docker://`)||e.startsWith(`./`))return null;let t=/^https?:\/\/([^/]+)\/(.+)$/.exec(e),n=t?.[1]??null,r=t?.[2]??e,i=r.indexOf(`@`);if(i===-1)return null;let a=r.substring(0,i),o=r.substring(i+1);if(!o)return null;let s=a.split(`/`);if(s.length<2)return null;let c=n?`${n}/${a}`:a;return{host:n,owner:s[0],repo:s[1],ref:o,name:c,isHash:dt.test(o)}}function Dn(e,t){return e?e===`github.com`?`https://api.github.com`:`https://${e}/api/v1`:t}async function On(e,t,n,r,i){try{let a=await ct(`${e}/repos/${t}/${n}/git/commits/${r}`,i);if(!a?.ok)return``;let o=await a.json();return o?.committer?.date||o?.author?.date||``}catch{return``}}function kn(e,t){return ht(pe(F(e))?.version??F(e),t)}function An(e,t){let n=e;for(let{name:e,oldRef:r,newRef:i}of t){let t=RegExp(`(uses:\\s*['"]?)${I(e)}@${I(r)}`,`g`);n=n.replace(t,`$1${e}@${i}`)}return n}function jn(e){let t=e.replace(/\\/g,`/`);return/\.github\/workflows\/[^/]+\.(ya?ml)$/.test(t)}function Mn(e){try{return _(e).filter(e=>/\.(ya?ml)$/.test(e)).map(t=>u(l(e,t)))}catch{return[]}}const Nn=/^(v?\d+(?:\.\d+){0,2})(-.+)?$/,Pn=/^\s*FROM\s+(?:--platform=\S+\s+)?(\S+)/gm,Fn=/^\s*image:\s*['"]?([^\s'"#]+)['"]?/gm,In=/^\s*container:\s*['"]?([^\s'"#{}]+:[^\s'"#{}:]+)['"]?\s*$/gm,Ln=/^\s*(?:-\s*)?uses:\s*['"]?docker:\/\/([^'"#\s]+)['"]?/gm;function Rn(e){let t=e.split(`/`);return t.length===1?{registry:null,namespace:`library`,repo:t[0]}:t.length===2&&!t[0].includes(`.`)&&!t[0].includes(`:`)?{registry:null,namespace:t[0],repo:t[1]}:{registry:t[0],namespace:t.slice(1,-1).join(`/`)||t[1],repo:t[t.length-1]}}function zn(e){if(e=e.replace(/^docker:\/\//,``),e.includes(`@`))return null;let t=e.lastIndexOf(`:`),n,r;if(t===-1||e.lastIndexOf(`/`)>t||(n=e.substring(0,t),r=e.substring(t+1),!r||!Nn.test(r)))return null;let{registry:i,namespace:a,repo:o}=Rn(n);return{registry:i,namespace:a,repo:o,tag:r,fullImage:n}}function Bn(e){let t=Nn.exec(e);return t?{version:t[1],suffix:t[2]||``}:null}function Vn(e,t){let n=Bn(t);return n?ht(e,n.version,n.suffix):t}function Hn(e,t){let n=[];for(let r of e.matchAll(t)){let e=zn(r[1]);e&&n.push({ref:e,match:r[1]})}return n}async function Un(e,t,n){let r={},i=`${n.dockerApiUrl}/v2/repositories/${e}/${t}/tags`,a=e=>`${i}?page_size=100&ordering=last_updated&page=${e}`,o=e=>{for(let t of e.results||[])r[t.name]=t.tag_last_pushed||t.last_updated||``},[s,c]=await Promise.all([n.doFetch(a(1),{signal:AbortSignal.timeout(n.fetchTimeout)}).then(e=>e?.ok?e.json():null).catch(()=>null),n.doFetch(a(2),{signal:AbortSignal.timeout(n.fetchTimeout)}).then(e=>e?.ok?e.json():null).catch(()=>null)]);if(!s)return r;o(s);let l=Math.min(Math.ceil((s.count||0)/100),10);if(l>=2&&c&&o(c),l>2){let e=await Promise.all(Array.from({length:l-2},(e,t)=>n.doFetch(a(t+3),{signal:AbortSignal.timeout(n.fetchTimeout)}).then(e=>e?.ok?e.json():null).catch(()=>null)));for(let t of e)t&&o(t)}return r}async function Wn(e,t,n){let{registry:r,namespace:i,repo:a}=Rn(e);if(r)throw Error(`Non-Docker-Hub registries are not yet supported: ${r}`);return[{tags:await Un(i,a,n),name:e},t,null,e]}function Gn(e,t,n){let r=Bn(t);if(!r)return null;let i=ge(F(r.version))?.version;if(!i)return null;let a=i,o=``,s=``;for(let[t,i]of Object.entries(e)){let e=Bn(t);if(!e||e.suffix!==r.suffix)continue;let c=ge(F(e.version))?.version;if(!c)continue;let l=M(a,c);!l||!n.has(l)||ve(c,a)&&(a=c,o=t,s=i)}if(!o||a===i)return null;let c=Vn(a,t);return c===t?null:{newTag:c,date:s}}function Kn(e,t,n){let r=e;for(let[e,i]of Object.entries(t)){let[t,a]=e.split(`\0`),o=i.oldOrig||i.old;for(let e of n)r=r.replace(e(I(a),I(o)),`$1${a}:${i.new}`)}return r}function qn(e,t){return Kn(e,t,[(e,t)=>RegExp(`(FROM\\s+(?:--platform=\\S+\\s+)?)${e}:${t}`,`g`)])}function Jn(e,t){return Kn(e,t,[(e,t)=>RegExp(`(image:\\s*['"]?)${e}:${t}`,`g`)])}function Yn(e,t){return Kn(e,t,[(e,t)=>RegExp(`((?:container|image):\\s*['"]?)${e}:${t}`,`g`),(e,t)=>RegExp(`(uses:\\s*['"]?docker://)${e}:${t}`,`g`)])}const Xn=[`Dockerfile`,`docker-compose.yml`,`docker-compose.yaml`];function Zn(e){return/^docker-.+\.ya?ml$/.test(e)}function Qn(e){return/^Dockerfile(\..+)?$/.test(e)}function $n(e){return Qn(e)||Zn(e)}function er(e){return Qn(e)?Pn:Fn}function tr(e){return e.registry?``:e.namespace===`library`?`https://hub.docker.com/_/${e.repo}`:`https://hub.docker.com/r/${e.namespace}/${e.repo}`}async function nr(e,t,n){let r=`${L(n.cratesIoUrl)}/api/v1/crates/${encodeURIComponent(e)}/versions?per_page=100`,i=await n.doFetch(r,{signal:AbortSignal.timeout(n.fetchTimeout),...et()});i?.ok||mt(i,r,e,n.cratesIoUrl);let a;try{a=await i.json()}catch{throw Error(`Invalid JSON from ${r}`)}let o=(a.versions||[]).filter(e=>!e.yanked),s={},c={};for(let e of o)e.num&&(s[e.num]={},c[e.num]=e.created_at||``);let l=o[0]?.num??``;return[{name:e,versions:s,time:c,"dist-tags":{latest:l}},t,null,e]}const rr=Ue.map(e=>I(e)).join(`|`);function ir(e,t){let n=e;for(let[e,r]of Object.entries(t)){let[t,i]=e.split(`\0`),a=r.oldOrig||r.old,o=r.new,s=I(i),c=I(a);n=n.replace(RegExp(`^(\\s*${s}\\s*=\\s*["'])${c}(["'].*)$`,`gm`),`$1${o}$2`),n=n.replace(RegExp(`(\\s*${s}\\s*=\\s*\\{\\s*version\\s*=\\s*["'])${c}(["'])`,`g`),`$1${o}$2`),n=n.replace(RegExp(`(\\[(?:${rr})\\.${s}\\][^\\[]*?version\\s*=\\s*["'])${c}(["'])`,`g`),`$1${o}$2`)}return n}const ar={"package.json":`npm`,"pyproject.toml":`pypi`,"go.mod":`go`,"Cargo.toml":`cargo`},or={"allow-downgrade":{short:`d`,type:`string`,multiple:!0},"error-on-outdated":{short:`E`,type:`boolean`},"error-on-unchanged":{short:`U`,type:`boolean`},exclude:{short:`e`,type:`string`,multiple:!0},file:{short:`f`,type:`string`,multiple:!0},forgeapi:{type:`string`},goproxy:{type:`string`},cargoapi:{type:`string`},dockerapi:{type:`string`},greatest:{short:`g`,type:`string`,multiple:!0},help:{short:`h`,type:`boolean`},include:{short:`i`,type:`string`,multiple:!0},indirect:{short:`I`,type:`boolean`},json:{short:`j`,type:`boolean`},jsrapi:{type:`string`},cooldown:{short:`C`,type:`string`},minor:{short:`m`,type:`string`,multiple:!0},modes:{short:`M`,type:`string`,multiple:!0},color:{short:`c`,type:`boolean`},"no-cache":{short:`x`,type:`boolean`},"no-color":{short:`n`,type:`boolean`},patch:{short:`P`,type:`string`,multiple:!0},pin:{short:`l`,type:`string`,multiple:!0},prerelease:{short:`p`,type:`string`,multiple:!0},pypiapi:{type:`string`},registry:{short:`r`,type:`string`},release:{short:`R`,type:`string`,multiple:!0},sockets:{short:`s`,type:`string`},timeout:{short:`T`,type:`string`},types:{short:`t`,type:`string`,multiple:!0},update:{short:`u`,type:`boolean`},verbose:{short:`V`,type:`boolean`},version:{short:`v`,type:`boolean`}};function U(e){return Array.isArray(e)&&e.every(e=>e===!0)?!0:Array.isArray(e)?new Set(e.flatMap(e=>typeof e==`string`?Ge(e):``).filter(Boolean)):typeof e==`string`?new Set([e]):typeof e==`boolean`?e:!1}function sr(e){for(let[t,{short:n}]of Object.entries(or))if(t===e||n===e)return t;return``}const W=x({strict:!1,allowPositionals:!0,tokens:!0,options:or}),G=W.values;for(let[e,t]of W.tokens.entries())if(t.kind===`option`&&t.value?.startsWith(`-`)){let n=sr(t.value.substring(1)),r=W.tokens[e+1];G[t.name]=[!0],G[n]||(G[n]=[]),r?.kind===`positional`&&r.value?G[n].push(r.value):G[n].push(!0)}const K=W.values,cr=W.positionals,lr=K.color===!0||K[`no-color`]!==!0&&a.isTTY,[ur,dr,q]=[`magenta`,`red`,`green`].map(e=>lr?t=>te(e,String(t)):String),J=Q(U(K.greatest)),fr=Q(U(K.prerelease)),pr=Q(U(K.release)),mr=Q(U(K.patch)),hr=Q(U(K.minor)),gr=Q(U(K[`allow-downgrade`])),_r=U(K.modes)||new Set([`npm`,`pypi`,`go`,`cargo`,`actions`,`docker`]),vr=typeof K.forgeapi==`string`?L(K.forgeapi):`https://api.github.com`,yr=typeof K.pypiapi==`string`?L(K.pypiapi):`https://pypi.org`,br=typeof K.jsrapi==`string`?L(K.jsrapi):`https://jsr.io`,xr=typeof K.goproxy==`string`?L(K.goproxy):an(),Sr=typeof K.cargoapi==`string`?L(K.cargoapi):`https://crates.io`,Cr=typeof K.dockerapi==`string`?L(K.dockerapi):`https://hub.docker.com`,wr=on();function Tr(e){let t={};if(Array.isArray(e)){for(let n of e)if(typeof n==`string`){let[e,r]=n.split(`=`,2);e&&r&&je(r)&&(t[e]=r)}}else if(typeof e==`string`){let[n,r]=e.split(`=`,2);n&&r&&je(r)&&(t[n]=r)}return t}function Er(e,t){let n=l(t,e);try{return f(n),n}catch{}let r=c(t);return r===t?null:Er(e,r)}function Dr(e){try{return g(e,`utf8`)}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}}function Y(e,t){t&&(e.date=t,e.age=Ie(t,{noAffix:!0}))}function Or(e,t,n){let r=Xe(String(t));for(let[t,{date:i}]of Object.entries(e))Ke(i,r,n)||delete e[t]}function kr(e){let t=0;for(let n of Object.keys(e))t+=Object.keys(e[n]).length;return t}function Ar(e){console.error(`${qe()} ${e}`)}const jr=typeof K.timeout==`string`?Number(K.timeout):0,X={fetchTimeout:jr||5e3,goProbeTimeout:jr?jr/2:2500,forgeApiUrl:vr,pypiApiUrl:yr,jsrApiUrl:br,goProxyUrl:xr,cratesIoUrl:Sr,dockerApiUrl:Cr,doFetch:(e,t)=>tt(e,t,!!K.verbose,Ar,ur,q,dr),verbose:!!K.verbose,noCache:!!K[`no-cache`]};async function Mr(e){console.info(K.json?JSON.stringify({message:e}):e),await Nr()}async function Nr(e,t){if(e){let t=e.message??String(e);K.json?console.info(JSON.stringify({error:t})):console.info(dr(t))}r===`win32`&&Number(o?.node?.split(`.`)[0])>=23&&await new Promise(e=>setTimeout(e,50)),n(t||e?1:0)}function Pr(e={}){for(let t of Object.keys(e))for(let n of Object.values(e[t]))typeof n.oldPrint==`string`&&(n.old=n.oldPrint),typeof n.newPrint==`string`&&(n.new=n.newPrint),typeof n.oldOrig==`string`&&!H(n.oldOrig)&&(n.old=t===`go`?wn(n.oldOrig):n.oldOrig),t===`go`&&(n.new=wn(n.new)),t===`actions`&&(n.old=F(n.old),n.new=F(n.new)),delete n.oldPrint,delete n.newPrint,delete n.oldOrig,delete n.date;let t=kr(e);if(K.json){let t={results:{}};for(let n of Object.keys(e))for(let[r,i]of Object.entries(e[n])){let[e,a]=r.split(`\0`);t.results[n]||(t.results[n]={}),t.results[n][e]||(t.results[n][e]={}),t.results[n][e][a]=i}console.info(JSON.stringify(t))}else t&&console.info(Ir(e));return K[`error-on-outdated`]?t?2:0:K[`error-on-unchanged`]?t?0:2:0}function Z(e,t){r===`win32`&&y(e,0),b(e,t,r===`win32`?{flag:`r+`}:void 0)}const Fr=e=>ee(e).length;function Ir(e){let t=Object.keys(e).filter(t=>Object.keys(e[t]).length>0),n=t.length>1,r=[n?[`NAME`,`MODE`,`OLD`,`NEW`,`AGE`,`INFO`]:[`NAME`,`OLD`,`NEW`,`AGE`,`INFO`]],i=new Set;for(let a of t)for(let[t,o]of Object.entries(e[a])){let[e,s]=t.split(`\0`),c=`${a}|${s}`;if(i.has(c))continue;i.add(c);let l=[];l.push(a===`go`?Cn(s):s),n&&l.push(a),l.push(Le(o.old,o.new,dr)),l.push(Le(o.new,o.old,q)),l.push(o.age||``),l.push(o.info||``),r.push(l)}return Je(r,Fr)}function Lr(e,t){return RegExp(`^${I(e).replaceAll(`\\*`,`.*`)}$`,t?`i`:``)}function Rr(e,t,n){return t&&typeof e==`string`?/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):Lr(e,n):e instanceof RegExp?e:Lr(e,n)}function Q(e){if(e instanceof Set){let t=new Set;for(let n of e)t.add(Rr(n,!0,!1));return t}return e}function zr(e,t){let n=new Set;for(let t of e||[])n.add(Rr(t,!0,!0));for(let e of t||[])n.add(Rr(e,!1,!0));return n}function Br(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).flatMap(e=>Ge(e)):[]}function Vr(e){return mr===!0||P(e,mr)?new Set([`patch`]):hr===!0||P(e,hr)?new Set([`patch`,`minor`]):new Set([`patch`,`minor`,`major`])}function Hr(e){return{useGreatest:typeof J==`boolean`?J:P(e,J),usePre:typeof fr==`boolean`?fr:P(e,fr),useRel:typeof pr==`boolean`?pr:P(e,pr),semvers:Vr(e)}}function Ur(t){return t.replace(`${e()}/`,``).replace(`${e()}\\`,``)}function $(e,t,n,r,i){if(i===`engines`&&Be.includes(e)||t===`pypi`&&e===`python`)return!1;if(!n.size&&!r.size)return!0;let a=t===`go`?e.replace(/\/v\d+$/,``):e;for(let t of r)if(t.test(e)||t.test(a))return!1;for(let t of n)if(t.test(e)||t.test(a))return!0;return!n.size}function Wr(t){let n=new Set;if(t)for(let e of t){let t;try{t=m(e)}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}if(t?.isFile())n.add(u(e));else if(t?.isDirectory()){for(let t of Object.keys(ar)){let r=l(e,t),i=null;try{i=m(r)}catch{}i?.isFile()&&n.add(u(r))}try{for(let t of _(e))if($n(t)){let r=l(e,t);try{m(r).isFile()&&n.add(u(r))}catch{}}}catch{}let t=u(e).replace(/\\/g,`/`),r;r=t.endsWith(`.github/workflows`)?t:t.endsWith(`.github`)?l(t,`workflows`):l(t,`.github`,`workflows`);for(let e of Mn(r))n.add(e)}else throw Error(`${e} is neither a file nor directory`)}else{for(let t of Object.keys(ar)){let r=Er(t,e());r&&n.add(u(r))}for(let t of Xn){let r=Er(t,e());r&&n.add(u(r))}try{for(let t of _(e()))if($n(t)&&!Xn.includes(t)){let r=l(e(),t);try{m(r).isFile()&&n.add(u(r))}catch{}}}catch{}let t=Er(l(`.github`,`workflows`),e());if(t)for(let e of Mn(t))n.add(e)}return n}async function Gr(e){let t=[];for(let e of[`js`,`ts`,`mjs`,`mts`])t.push(`updates.config.${e}`);let n={};try{({default:n}=await Promise.any(t.map(async t=>{let n=l(e,...t.split(`/`)),r=d(n);try{f(n)}catch{throw Error(`File not found: ${t}`)}try{return await import(r.href)}catch(e){throw Error(`Unable to parse config file ${t}: ${e.message}`)}})))}catch(e){if(e instanceof AggregateError){let t=e.errors.filter(e=>e.message.startsWith(`Unable to parse`));if(t.length>0)throw t[0]}}return n}async function Kr(){for(let e of[a,i])e?._handle?.setBlocking?.(!0);Qe();let e=typeof K.sockets==`string`&&Number(K.sockets)||25,{help:t,version:n,file:r,types:o,update:l,indirect:d,include:f,exclude:p,pin:m,cooldown:h}=K;t&&(a.write(`usage: updates [options] [files...]
2
+ import{a as e,c as t,d as n,f as r,i,l as a,n as o,o as s,r as c,s as l,t as u,u as d}from"./shared.js";import{cwd as f,exit as p,platform as m,stderr as h,stdout as g,versions as _}from"node:process";import{parseArgs as v,stripVTControlCharacters as y,styleText as b}from"node:util";const x=v({strict:!1,allowPositionals:!0,tokens:!0,options:e}),S=x.values;for(let[e,t]of x.tokens.entries())if(t.kind===`option`&&t.value?.startsWith(`-`)){let n=c(t.value.substring(1)),r=x.tokens[e+1];S[t.name]=[!0],S[n]||(S[n]=[]),r?.kind===`positional`&&r.value?S[n].push(r.value):S[n].push(!0)}const C=x.values,w=x.positionals;function T(e){return/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):e}function E(e){let t=l(e);if(t!==!1)return t===!0?!0:Array.from(t).map(T)}let D=String,O=String;async function k(e,t){if(e){let t=e.message??String(e);C.json?console.info(JSON.stringify({error:t})):console.info(D(t))}m===`win32`&&Number(_?.node?.split(`.`)[0])>=23&&await new Promise(e=>setTimeout(e,50)),p(t??(e?1:0))}async function A(){for(let e of[g,h])e?._handle?.setBlocking?.(!0);C.help&&(g.write(`usage: updates [options] [files...]
6
3
 
7
4
  Options:
8
5
  -u, --update Update versions and write dependency file
@@ -20,7 +17,7 @@ import{cwd as e,env as t,exit as n,platform as r,stderr as i,stdout as a,version
20
17
  -m, --minor [<dep,...>] Consider only up to semver-minor
21
18
  -d, --allow-downgrade [<dep,...>] Allow version downgrades when using latest version
22
19
  -S, --sockets <num> Maximum number of parallel HTTP sockets opened. Default: 25
23
- -T, --timeout <ms> Network request timeout in ms (go probes use half). Default: 5000
20
+ -T, --timeout <ms> Network request timeout in ms (go probes use half). Default: ${a}
24
21
  -r, --registry <url> Override npm registry URL
25
22
  -I, --indirect Include indirect Go dependencies
26
23
  -E, --error-on-outdated Exit with code 2 when updates are available and 0 when not
@@ -46,4 +43,4 @@ import{cwd as e,env as t,exit as n,platform as r,stderr as i,stdout as a,version
46
43
  $ updates -f .github
47
44
  $ updates -f Dockerfile
48
45
  $ updates -f docker-compose.yml
49
- `),await Nr()),n&&(console.info($e),await Nr());let _={},v={},y={},b={},x=Date.now(),S=0,ee=U(r),te=ee instanceof Set?ee:cr.length?new Set:!1;if(te instanceof Set)for(let e of cr)te.add(e);let ne=Wr(te),re={},ie={},ae=Br(f),C=Br(p),w=Tr(m),se=zr(ae,[]),ce=zr(C,[]),le=[],T=[],ue={};function E(e,t,n){_.docker||={};for(let r of n)for(let{ref:n}of Hn(e,r)){if(!$(n.fullImage,`docker`,se,ce,`docker`))continue;let e=`${t}${n.fullImage}`;if(_.docker[e])continue;let r=Bn(n.tag);r&&(_.docker[e]={old:r.version,oldOrig:n.tag},T.push({key:e,fullImage:n.fullImage,ref:n}))}}for(let e of ne){if(jn(e)){let t=_r.has(`actions`),n=_r.has(`docker`);if(!t&&!n)continue;let r=Dr(e),i=Ur(e);if(re[i]={absPath:e,content:r},t){_.actions||={};let e=Array.from(r.matchAll(Tn),e=>En(e[1])).filter(e=>e!==null);for(let t of e){if(!$(t.name,`actions`,se,ce,`actions`))continue;let e=`${i}${t.name}`;_.actions[e]||(_.actions[e]={old:t.ref},le.push({...t,key:e,apiUrl:Dn(t.host,vr)}))}}n&&(ie[i]={absPath:e,content:r,fileType:`workflow`},E(r,i,[Fn,In,Ln]));continue}let t=s(e);if($n(t)){if(!_r.has(`docker`))continue;let n=Dr(e),r=Ur(e);ie[r]={absPath:e,content:n,fileType:Qn(t)?`dockerfile`:`compose`},E(n,r,[er(t)]);continue}let n=ar[t];if(!_r.has(n))continue;b[n]=e,_[n]||(_[n]={});let r=c(u(e)),i=await Gr(r),a=zr(ae,i?.include??[]),l=zr(C,i?.exclude??[]),f={...i?.pin,...w},p=[];Array.isArray(o)?p=o.filter(e=>typeof e==`string`):`types`in i&&Array.isArray(i.types)?p=i.types:n===`npm`?p=ze:n===`pypi`?p=Array.from(Ve):n===`go`?p=d?Array.from(He):He.filter(e=>e!==`indirect`):n===`cargo`&&(p=Array.from(Ue));let m={};y[n]=Dr(e);try{if(n===`npm`)m=JSON.parse(y[n]);else if(n===`pypi`||n===`cargo`)m=oe(y[n]);else if(n===`go`){let e=gn(y[n]);m.deps=e.deps,m.indirect=e.indirect,m.replace=e.replace,m.tool=e.tool}}catch(t){throw Error(`Error parsing ${e}: ${t.message}`)}for(let e of p){let t;if(t=n===`npm`||n===`go`?m[e]||{}:We(m,e)||{},Array.isArray(t)&&n===`pypi`)for(let{name:r,version:i}of Re(t))$(r,n,a,l,e)&&(_[n][`${e}${r}`]={old:Zt(i),oldOrig:i});else if(typeof t==`string`){let[r,i]=t.split(`@`);$(r,n,a,l,e)&&(_[n][`${e}${r}`]={old:Zt(i),oldOrig:i})}else for(let[r,i]of Object.entries(t))if(n===`cargo`&&typeof i==`object`&&i&&`version`in i&&!(`git`in i)&&!(`path`in i)&&$(r,n,a,l,e)){let t=String(i.version);je(t)&&(_[n][`${e}${r}`]={old:Zt(t),oldOrig:t})}else if(n===`npm`&&H(i)&&$(r,n,a,l,e)){let t=qt(i,r);_[n][`${e}${r}`]={old:t.version,oldOrig:i}}else n!==`go`&&je(i)&&$(r,n,a,l,e)?_[n][`${e}${r}`]={old:Zt(i),oldOrig:i}:n===`npm`&&Kt(i)&&$(r,n,a,l,e)?_[n][`${e}${r}`]={old:`0.0.0`,oldOrig:i}:n===`npm`&&!H(i)&&$(r,n,a,l,e)?v[`${e}${r}`]={old:i}:n===`go`&&$(r,n,a,l,e)&&(_[n][`${e}${r}`]={old:wn(i),oldOrig:F(i)})}S+=Object.keys(_[n]).length+Object.keys(v).length,ue[n]={config:i,projectDir:r,pin:f}}if(_.actions&&(S+=Object.keys(_.actions).length),_.docker&&(S+=Object.keys(_.docker).length),S===0)return Mr(`No dependencies found, nothing to do.`);let D=[];for(let t of Object.keys(ue)){if(!_[t]||!Object.keys(_[t]).length&&!Object.keys(v).length)continue;let{config:n,projectDir:r,pin:i}=ue[t];D.push((async()=>{let a=new Map;await Ze(Object.keys(_[t]),async e=>{let[o,s]=e.split(`\0`),c=null;if(t===`npm`){let{oldOrig:r}=_[t][e];if(r&&H(r))c=await Jt(s,o,X);else if(r&&Kt(r))try{c=await Wt(s,o,n,K,X)}catch{delete _[t][e];return}else c=await Wt(s,o,n,K,X)}else c=t===`go`?await vn(s,o,_[t][e].oldOrig||_[t][e].old,r,X,wr):t===`cargo`?await nr(s,o,X):await tn(s,o,X);if(!c)return;let[l,,u]=c;if(l?.error)throw Error(l.error);let{useGreatest:d,usePre:f,useRel:p,semvers:m}=Hr(l.name),h=_[t][e].old,g=_[t][e].oldOrig,v=i[s],y=at(l,{usePre:f,useRel:p,useGreatest:d,semvers:m,range:h,mode:t,pinnedRange:v},{allowDowngrade:gr,matchesAny:P,isGoPseudoVersion:fn}),b=``;if([`go`,`pypi`,`cargo`].includes(t)&&y)b=y;else if(y)if(g&&Kt(g))b=String(Pt()[`save-exact`])===`true`?y:`^${y}`;else if(g&&H(g))if(g.startsWith(`npm:@jsr/`)){let e=/^(npm:@jsr\/[^@]+@)(.+)$/.exec(g);e&&(b=`${e[1]}${y}`)}else if(g.startsWith(`jsr:@`)){let e=/^(jsr:@[^@]+@)(.+)$/.exec(g);e&&(b=`${e[1]}${y}`)}else g.startsWith(`jsr:`)&&(b=`jsr:${y}`);else b=Xt(h,y,g);if(!y||y===h||g&&g===b){delete _[t][e];return}let x=``;if(t===`pypi`&&l.releases?.[y]?.[0]?.upload_time_iso_8601?x=l.releases[y][0].upload_time_iso_8601:t===`go`&&l.Time?x=l.Time:t===`cargo`&&l.time?.[y]&&(x=l.time[y]),_[t][e].new=b,g&&H(g)&&(_[t][e].newPrint=y),t===`npm`)a.set(e,{name:s,promise:Gt(l.name,y,n,K,X)});else if(t===`pypi`)_[t][e].info=_t(l,u,l.info.name);else if(t===`go`){let n=l.newPath||s;_[t][e].info=Sn(n)}else t===`cargo`&&(_[t][e].info=`https://crates.io/crates/${s}`);x&&Y(_[t][e],x)},{concurrency:e});for(let[e,{name:n,promise:r}]of a){let i=await r;_[t][e]&&(_[t][e].info=_t({repository:i.repository,homepage:i.homepage},null,n),i.date&&Y(_[t][e],i.date))}if(Object.keys(v).length){let n=(await Ze(Object.entries(v),([e,t])=>{let n=e.split(`\0`)[1];return en(e,t,typeof J==`boolean`?J:P(n,J),X)},{concurrency:e})).filter(e=>e!==null);for(let e of n){let{key:n,newRange:r,user:i,repo:a,oldRef:o,newRef:s,newDate:c}=e;_[t][n]={old:v[n].old,new:r,oldPrint:dt.test(o)?o.substring(0,7):o,newPrint:dt.test(s)?s.substring(0,7):s,info:`https://github.com/${i}/${a}`},c&&Y(_[t][n],c)}}let o=h??n.cooldown;o&&Or(_[t],String(o),x)})())}if(le.length&&D.push((async()=>{let t=new Map;for(let e of le){let n=`${e.apiUrl}/${e.owner}/${e.repo}`;t.has(n)||t.set(n,{apiUrl:e.apiUrl,owner:e.owner,repo:e.repo,infos:[]}),t.get(n).infos.push(e)}await Ze(t.values(),async({apiUrl:e,owner:t,repo:n,infos:r})=>{let i=await pt(e,t,n,X),a=i.map(e=>e.name),o=a.map(e=>F(e)).filter(e=>j(e)),s=new Map;for(let e of i)e.commitSha&&s.set(e.commitSha,e.name);let c=new Map;async function l(r){if(c.has(r))return c.get(r);let i=await On(e,t,n,r,X);return c.set(r,i),i}let u=[];for(let e of r){let r=_.actions[e.key],c=`https://${e.host||`github.com`}/${t}/${n}`;if(e.isHash){let{usePre:t,useRel:n}=Hr(e.name),l=it({},o,{range:`0.0.0`,semvers:new Set([`patch`,`minor`,`major`]),usePre:t,useRel:n,useGreatest:!0,pinnedRange:w[e.name]});if(!l){delete _.actions[e.key];continue}let d=a.find(e=>F(e)===l);if(!d){delete _.actions[e.key];continue}let f=i.find(e=>e.name===d)?.commitSha;if(!f||f===e.ref||f.startsWith(e.ref)||e.ref.startsWith(f)){delete _.actions[e.key];continue}let p=s.get(e.ref)||Array.from(s.entries()).find(([t])=>t.startsWith(e.ref))?.[1];r.old=e.ref,r.new=f.substring(0,e.ref.length),r.oldPrint=p||e.ref.substring(0,7),r.newPrint=d,r.info=c,u.push({key:e.key,commitSha:f})}else{let t=z(F(e.ref));if(!t){delete _.actions[e.key];continue}let{useGreatest:n,usePre:s,useRel:l,semvers:d}=Hr(e.name),f=it({},o,{range:t,semvers:d,usePre:s,useRel:l,useGreatest:n||!0,pinnedRange:w[e.name]});if(!f||f===t){delete _.actions[e.key];continue}let p=a.find(e=>F(e)===f);if(!p){delete _.actions[e.key];continue}let m=kn(p,e.ref);if(m===e.ref){delete _.actions[e.key];continue}r.new=a.includes(m)?m:p,r.info=c;let h=i.find(e=>e.name===p);h?.commitSha&&u.push({key:e.key,commitSha:h.commitSha})}}let d=await Promise.all(u.map(({commitSha:e})=>l(e)));for(let[e,{key:t}]of u.entries()){let n=_.actions[t];n&&d[e]&&Y(n,d[e])}},{concurrency:e}),h&&Or(_.actions,String(h),x),Object.keys(_.actions).length||delete _.actions})()),T.length&&D.push((async()=>{let t=new Map;for(let e of T)t.has(e.fullImage)||t.set(e.fullImage,[]),t.get(e.fullImage).push(e);await Ze(t.entries(),async([e,t])=>{let n;try{let[t]=await Wn(e,`docker`,X);n=t}catch{for(let e of t)delete _.docker[e.key];return}for(let e of t){let t=_.docker[e.key],r=t.oldOrig||t.old,{semvers:i}=Hr(e.fullImage),a=Gn(n.tags,r,i);if(!a){delete _.docker[e.key];continue}t.new=a.newTag,t.info=tr(e.ref),Y(t,a.date)}},{concurrency:e}),h&&Or(_.docker,String(h),x),Object.keys(_.docker).length||delete _.docker})()),await Promise.all(D),!kr(_))return Mr(`All dependencies are up to date.`);let O=new Map;if(_.actions)for(let[e,t]of Object.entries(_.actions)){let[n,r]=e.split(`\0`);O.has(n)||O.set(n,[]),O.get(n).push({name:r,oldRef:t.old,newRef:t.new})}let k=new Map;if(_.docker)for(let[e,t]of Object.entries(_.docker)){let[n]=e.split(`\0`);k.has(n)||k.set(n,{}),k.get(n)[e]=t}let de=Pr(_);if(l){for(let e of Object.keys(_))if(Object.keys(_[e]).length){if(e===`actions`){for(let[e,t]of O){let{absPath:n,content:r}=re[e]||{};if(n){try{Z(n,An(r,t))}catch(e){throw Error(`Error writing ${s(n)}: ${e.message}`)}console.info(q(`✨ ${e} updated`))}}continue}if(e===`docker`){for(let[e,t]of k){let n=ie[e];if(!n)continue;let{absPath:r,fileType:i}=n,a;try{a=g(r,`utf8`)}catch{continue}try{Z(r,(i===`dockerfile`?qn:i===`compose`?Jn:Yn)(a,t))}catch(e){throw Error(`Error writing ${s(r)}: ${e.message}`)}console.info(q(`✨ ${e} updated`))}continue}try{let t=y[e];if(e===`go`){let[n,r]=bn(t,_[e]);Z(b[e],n),xn(c(u(b[e])),r,Z)}else if(e===`cargo`)Z(b[e],ir(t,_[e]));else{let n=e===`npm`?Yt:nn;Z(b[e],n(t,_[e]))}}catch(t){throw Error(`Error writing ${s(b[e])}: ${t.message}`)}console.info(q(`✨ ${s(b[e])} updated`))}}await Nr(void 0,de)}try{await Kr()}catch(e){await Nr(e)}export{};
46
+ `),await k()),C.version&&(console.info(d),await k());let e=await i(f()),n=C[`no-color`]===!0?!1:C.color===!0?!0:e.noColor===!0?!1:e.color===!0?!0:g.isTTY,[,r,o]=[`magenta`,`red`,`green`].map(e=>n?t=>b(e,String(t)):String);D=r,O=o;let c={...e};C.json&&(c.json=!0),C.verbose&&(c.verbose=!0),C[`no-cache`]&&(c.noCache=!0),C.update&&(c.update=!0),C.indirect&&(c.indirect=!0),C[`error-on-outdated`]&&(c.errorOnOutdated=!0),C[`error-on-unchanged`]&&(c.errorOnUnchanged=!0),typeof C.timeout==`string`&&(c.timeout=Number(C.timeout)||void 0),typeof C.sockets==`string`&&(c.sockets=Number(C.sockets)||void 0),typeof C.registry==`string`&&(c.registry=C.registry),typeof C.cooldown==`string`&&(c.cooldown=Number(C.cooldown)||C.cooldown);let p=s(C.include).map(T),m=s(C.exclude).map(T);p.length&&(c.include=p),m.length&&(c.exclude=m);let _=Array.isArray(C.types)?C.types.filter(e=>typeof e==`string`):[];_.length&&(c.types=_);let v=t(C.pin);Object.keys(v).length&&(c.pin=v);let y=l(C.modes);y instanceof Set&&(c.modes=Array.from(y));for(let[e,t]of[[`greatest`,`greatest`],[`prerelease`,`prerelease`],[`release`,`release`],[`patch`,`patch`],[`minor`,`minor`],[`allow-downgrade`,`allowDowngrade`]]){let n=E(C[e]);n!==void 0&&(c[t]=n)}let x=l(C.file),S=[];x instanceof Set&&S.push(...x);for(let e of w)S.push(e);S.length&&(c.files=S),typeof C.forgeapi==`string`&&(c.forgeapi=C.forgeapi),typeof C.pypiapi==`string`&&(c.pypiapi=C.pypiapi),typeof C.jsrapi==`string`&&(c.jsrapi=C.jsrapi),typeof C.goproxy==`string`&&(c.goproxy=C.goproxy),typeof C.cargoapi==`string`&&(c.cargoapi=C.cargoapi),typeof C.dockerapi==`string`&&(c.dockerapi=C.dockerapi);let A=await u(c),j=Object.keys(A.results).length>0;if(A.message)console.info(c.json?JSON.stringify({message:A.message}):A.message);else if(j&&(c.json?console.info(JSON.stringify({results:A.results})):console.info(M(A)),c.update)){for(let e of Object.keys(A.results))for(let t of Object.keys(A.results[e]))if(Object.keys(A.results[e][t]).length){console.info(O(`✨ ${e} updated`));break}}c.errorOnOutdated?await k(void 0,j?2:0):c.errorOnUnchanged?await k(void 0,j?0:2):await k()}const j=e=>y(e).length;function M(e){let t=Object.keys(e.results),i=t.length>1,a=[i?[`NAME`,`MODE`,`OLD`,`NEW`,`AGE`,`INFO`]:[`NAME`,`OLD`,`NEW`,`AGE`,`INFO`]],s=new Set;for(let r of t)for(let t of Object.keys(e.results[r]))for(let[c,l]of Object.entries(e.results[r][t])){let e=`${r}|${c}`;if(s.has(e))continue;s.add(e);let t=[];t.push(r===`go`?o(c):c),i&&t.push(r),t.push(n(l.old,l.new,D)),t.push(n(l.new,l.old,O)),t.push(l.age||``),t.push(l.info||``),a.push(t)}return r(a,j)}try{await A()}catch(e){await k(e)}export{};
package/dist/shared.js ADDED
@@ -0,0 +1,4 @@
1
+ import{cwd as e,env as t,platform as n,stderr as r}from"node:process";import{promisify as i,styleText as a}from"node:util";import{basename as o,dirname as s,join as c,resolve as l}from"node:path";import{accessSync as u,globSync as d,lstatSync as f,mkdirSync as p,readFileSync as m,readdirSync as h,statSync as g,truncateSync as _,writeFileSync as ee}from"node:fs";import v from"node:dns";import{pathToFileURL as y}from"node:url";import{createHash as b}from"node:crypto";import{homedir as te}from"node:os";import{execFile as x}from"node:child_process";function ne(e){let t={},n=t,r=e.split(/\r?\n/);for(let e=0;e<r.length;e++){let i=r[e].replace(/#.*$/,``).trim();if(!i)continue;let a=/^\[([^\]]+)\]$/.exec(i);if(a){n=t;for(let e of ae(a[1]))(!(e in n)||typeof n[e]!=`object`||Array.isArray(n[e]))&&(n[e]={}),n=n[e];continue}let o=oe(i);if(o<0)continue;let s=i.slice(0,o).trim(),c=i.slice(o+1).trim(),l=ae(s),u=n;for(let e=0;e<l.length-1;e++)(!(l[e]in u)||typeof u[l[e]]!=`object`||Array.isArray(u[l[e]]))&&(u[l[e]]={}),u=u[l[e]];let d=l[l.length-1];if(c.startsWith(`[`)&&!c.includes(`]`)){let t=[];S(c.slice(1),t);for(let n=e+1;n<r.length;n++){let i=r[n].replace(/#.*$/,``).trim();if(i){if(i.includes(`]`)){S(i.replace(/\].*$/,``),t),e=n;break}S(i,t)}}u[d]=t}else u[d]=C(c)}return t}function S(e,t){let n=e.trim();if(!n)return;let r=/"""([\s\S]*?)"""|'''([\s\S]*?)'''|"((?:[^"\\]|\\.)*)"|'([^']*)'|([^,\s\]]+)/g,i;for(;i=r.exec(n);){let e=i[1]??i[2]??(i[3]===void 0?void 0:se(i[3]))??i[4]??i[5];e!==void 0&&e!==``&&t.push(w(e))}}function C(e){if(e.startsWith(`[`)){let t=[];return S(e.slice(1,e.lastIndexOf(`]`)),t),t}return e.startsWith(`{`)?re(e):e.startsWith(`"""`)?se(e.slice(3,e.lastIndexOf(`"""`))):e.startsWith(`'''`)?e.slice(3,e.lastIndexOf(`'''`)):e.startsWith(`"`)?se(e.slice(1,e.lastIndexOf(`"`))):e.startsWith(`'`)?e.slice(1,e.lastIndexOf(`'`)):w(e)}function w(e){return e===`true`?!0:e===`false`?!1:/^[+-]?\d+(\.\d+)?$/.test(e)?Number(e):e}function re(e){let t={},n=e.slice(1,e.lastIndexOf(`}`)).trim();if(!n)return t;for(let e of ie(n)){let n=e.indexOf(`=`);if(n<0)continue;let r=e.slice(0,n).trim().replace(/^["']|["']$/g,``);t[r]=C(e.slice(n+1).trim())}return t}function ie(e){let t=[],n=0,r=null,i=0;for(let a=0;a<e.length;a++){let o=e[a];if(r){if(o===`\\`&&r===`"`){a++;continue}o===r&&(r=null)}else o===`"`||o===`'`?r=o:o===`[`||o===`{`?n++:o===`]`||o===`}`?n--:o===`,`&&n===0&&(t.push(e.slice(i,a)),i=a+1)}return i<e.length&&t.push(e.slice(i)),t}function ae(e){let t=[],n=``,r=null;for(let i of e)if(r){if(i===r){r=null;continue}n+=i}else i===`"`||i===`'`?r=i:i===`.`?(t.push(n.trim()),n=``):n+=i;return n.trim()&&t.push(n.trim()),t}function oe(e){let t=null;for(let n=0;n<e.length;n++){let r=e[n];if(t){if(r===`\\`&&t===`"`){n++;continue}r===t&&(t=null)}else if(r===`"`||r===`'`)t=r;else if(r===`=`)return n}return-1}function se(e){return e.replace(/\\(["\\bfnrt]|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/g,(e,t)=>{switch(t[0]){case`"`:return`"`;case`\\`:return`\\`;case`b`:return`\b`;case`f`:return`\f`;case`n`:return`
2
+ `;case`r`:return`\r`;case`t`:return` `;case`u`:case`U`:return String.fromCodePoint(Number.parseInt(t.slice(1),16));default:return t}})}const T=/^v?(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*))?(?:\+[a-zA-Z0-9._-]+)?$/,E=new Map;function D(e){if(typeof e!=`string`)return null;let t=E.get(e);if(t!==void 0)return t;let n=T.exec(e.trim());if(!n)return E.set(e,null),null;let r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=n[4]?n[4].split(`.`).map(e=>/^\d+$/.test(e)?Number(e):e):[],s={major:r,minor:i,patch:a,prerelease:o,version:`${r}.${i}.${a}${o.length?`-${o.join(`.`)}`:``}`};return E.set(e,s),s}function ce(e,t){let n=typeof e==`number`,r=typeof t==`number`;return n&&r?e-t:n?-1:r?1:e<t?-1:e>t?1:0}function O(e,t){return e.major-t.major||e.minor-t.minor||e.patch-t.patch}function k(e,t){let n=O(e,t);if(n!==0)return n;if(!e.prerelease.length&&!t.prerelease.length)return 0;if(e.prerelease.length&&!t.prerelease.length)return-1;if(!e.prerelease.length&&t.prerelease.length)return 1;let r=Math.max(e.prerelease.length,t.prerelease.length);for(let n=0;n<r;n++){if(e.prerelease[n]===void 0)return-1;if(t.prerelease[n]===void 0)return 1;let r=ce(e.prerelease[n],t.prerelease[n]);if(r!==0)return r}return 0}function A(e){return D(e)?.version??null}function j(e){return D(e)}const M=new Map,le=/(?:^|[^.\d])(\d+)(?:\.(\d+))?(?:\.(\d+))?/;function N(e){if(typeof e!=`string`)return null;let t=M.get(e);if(t!==void 0)return t;let n=le.exec(e);if(!n)return M.set(e,null),null;let r={version:`${n[1]||`0`}.${n[2]||`0`}.${n[3]||`0`}`};return M.set(e,r),r}function P(e,t){let n=D(e),r=D(t);if(!n||!r||n.version===r.version)return null;let i=k(n,r),a=i>0?n:r,o=i>0?r:n,s=a.prerelease.length>0;if(o.prerelease.length>0&&!s){if(!o.patch&&!o.minor)return`major`;if(O(o,a)===0)return o.minor&&!o.patch?`minor`:`patch`}let c=s?`pre`:``;return n.major===r.major?n.minor===r.minor?n.patch===r.patch?`prerelease`:`${c}patch`:`${c}minor`:`${c}major`}function F(e,t){let n=D(e),r=D(t);return n&&r?k(n,r):null}function I(e,t){return(F(e,t)??-1)>0}function L(e,t){return(F(e,t)??-1)>=0}function R(e,t){return(F(e,t)??1)<0}function z(e,t){return(F(e,t)??1)!==0}function ue(e){let t=/^(>=|<=|>|<|=)?\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)?)$/.exec(e.trim());if(!t)return null;let n=t[2],r=D(`${n}.${t[3]??`0`}.${t[4]??`0`}${t[5]||``}`);return r?{op:t[1]||`=`,semver:r}:null}function B(e,t){let n=k(e,t.semver);switch(t.op){case`>=`:return n>=0;case`<=`:return n<=0;case`>`:return n>0;case`<`:return n<0;case`=`:return n===0;default:return n===0}}function V(e,t,n){return`${e}.${t}.${n}-0`}function de(e){return e.replace(/~\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t);if(n===void 0)return`>=${a}.0.0 <${V(a+1,0,0)}`;let o=Number(n);return`>=${a}.${o}.${r===void 0?0:Number(r)}${i||``} <${V(a,o+1,0)}`})}function fe(e){return e.replace(/\^\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t),o=i||``;if(n===void 0)return`>=${a}.0.0 <${V(a+1,0,0)}`;let s=Number(n);if(r===void 0)return a===0?`>=${a}.${s}.0 <${V(a,s+1,0)}`:`>=${a}.${s}.0 <${V(a+1,0,0)}`;let c=Number(r);return a===0?s===0?`>=${a}.${s}.${c}${o} <${V(a,s,c+1)}`:`>=${a}.${s}.${c}${o} <${V(a,s+1,0)}`:`>=${a}.${s}.${c}${o} <${V(a+1,0,0)}`})}function pe(e){return e.replace(/v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)\s+-\s+v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i,a,o,s,c)=>{let l=Number(t),u=n===void 0?0:Number(n),d=r===void 0?0:Number(r),f=i||``,p=Number(a),m;return m=s===void 0?o===void 0?`<${V(p+1,0,0)}`:`<${V(p,Number(o)+1,0)}`:`<=${p}.${Number(o)}.${Number(s)}${c||``}`,`>=${l}.${u}.${d}${f} ${m}`})}function me(e){return/^\s*[*xX]\s*$/.test(e)?`>=0.0.0`:(e=e.replace(/v?(\d+)\.[xX*](?:\.[xX*])?/g,(e,t)=>{let n=Number(t);return`>=${n}.0.0 <${V(n+1,0,0)}`}),e=e.replace(/v?(\d+)\.(\d+)\.[xX*]/g,(e,t,n)=>{let r=Number(t),i=Number(n);return`>=${r}.${i}.0 <${V(r,i+1,0)}`}),e=e.replace(/(^|[\s|])(\d+)\.(\d+)(?=\s|$)/g,(t,n,r,i,a)=>{let o=e.substring(0,a).trimEnd();if(/[<>=]$/.test(o))return t;let s=Number(r),c=Number(i);return`${n}>=${s}.${c}.0 <${V(s,c+1,0)}`}),e=e.replace(/(^|[\s|])(\d+)(?=\s|$)/g,(t,n,r,i)=>{let a=e.substring(0,i).trimEnd();if(/[<>=]$/.test(a))return t;let o=Number(r);return`${n}>=${o}.0.0 <${V(o+1,0,0)}`}),e)}const he=new Map;function ge(e){let t=he.get(e);if(t!==void 0)return t;let n=e.split(`||`).map(e=>e.trim()),r=[];for(let t of n){if(!t){r.push([]);continue}t=pe(t),t=fe(t),t=de(t),t=me(t),t=t.replace(/(^|[\s])v?(\d+\.\d+\.\d+(?:-[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)?)\b/g,(e,t)=>/[<>=]/.test(t)?e:`${t}=${e.trim()}`),t=t.replace(/(>=|<=|>|<|=)\s+/g,`$1`);let n=t.split(/\s+/).filter(Boolean),i=[];for(let t of n){let n=ue(t);if(!n)return he.set(e,null),null;i.push(n)}if(i.length===0)return he.set(e,null),null;r.push(i)}let i=r.length?r:null;return he.set(e,i),i}function _e(e,t){for(let n of t)if(!B(e,n))return!1;if(e.prerelease.length>0){for(let n of t)if(n.semver.prerelease.length>0&&n.semver.major===e.major&&n.semver.minor===e.minor&&n.semver.patch===e.patch)return!0;return!1}return!0}function ve(e,t){let n=D(e);if(!n)return!1;let r=ge(t);if(!r)return!1;for(let e of r)if(e.length===0||_e(n,e))return!0;return!1}function ye(e){if(typeof e!=`string`)return null;try{return ge(e)?e:null}catch{return null}}const be=[[1e3,6e4,`sec`],[6e4,36e5,`min`],[36e5,864e5,`hour`],[864e5,6048e5,`day`],[6048e5,2628e6,`week`],[2628e6,31536e6,`month`],[31536e6,1/0,`year`]],xe={"1 day ago":`yesterday`,"1 week ago":`last week`,"1 month ago":`last month`,"1 year ago":`last year`,"in 1 day":`tomorrow`,"in 1 week":`next week`,"in 1 month":`next month`,"in 1 year":`next year`},Se={sec:`second`,min:`minute`};function Ce(e){return e instanceof Date?e.getTime():typeof e==`string`?Date.parse(e):e}function we(e,{now:t,noAffix:n=!1,times:r=be,nowThreshold:i=2e3,nowString:a=`now`,unknownString:o=``,aliases:s=!1,aliasesMap:c=xe,longUnits:l=!1}={}){let u=Ce(e),d=t===void 0?Date.now():Ce(t);if(u!==u)return o||String(e);let f=d-u,p=f<0;if(p&&(f=-f),f<i)return a;let m=0,h=``;for(let e=0,t=r.length;e<t;e++){let t=r[e];if(!(f>=t[1])){m=f/t[0]|0,h=(l&&Se[t[2]]||t[2])+(m>1?`s`:``);break}}let g=`${m} ${h}`,_;return _=n?g:p?`in ${g}`:`${g} ago`,s?c[_]??_:_}function Te(e,t,n){if(e===t)return e;let r=0;for(;r<e.length&&r<t.length&&e[r]===t[r];)r++;if(r>0&&e[r-1]!==`.`&&e[r-1]!==`-`){let t=r-1;for(;t>=0&&e[t]!==`.`&&e[t]!==`-`;)t--;if(t>=0)r=t+1;else{let t=0;for(;t<r&&!/\d/.test(e[t]);)t++;r=t}}let i=e.substring(r);return i?e.substring(0,r)+n(i):e}function Ee(e){let t=[];for(let n of e){let[e,r]=n.replaceAll(/\s+/g,``).split(/[<>=~]+/);e&&/^[0-9.a-z]+$/.test(r)&&t.push({name:e,version:r})}return t}const De=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`resolutions`,`packageManager`],Oe=[`node`,`deno`,`bun`],ke=[`project.dependencies`,`project.optional-dependencies`,`dependency-groups.dev`,`dependency-groups.lint`,`dependency-groups.test`],Ae=[`deps`,`indirect`,`replace`,`tool`],je=[`dependencies`,`dev-dependencies`,`build-dependencies`,`workspace.dependencies`];function H(e,t){for(let n of t instanceof Set?t:[])if(n.test(e))return!0;return!1}function Me(e,t){return t.split(`.`).reduce((e,t)=>e?.[t]??null,e)}function Ne(e){return e.split(`,`).filter(Boolean)}function Pe(e,t,n){return!e||!t?!0:(n-Date.parse(e))/(24*3600*1e3)>=t}function Fe(){let e=new Date;return[e.getFullYear(),`-`,String(e.getMonth()+1).padStart(2,`0`),`-`,String(e.getDate()).padStart(2,`0`),` `,String(e.getHours()).padStart(2,`0`),`:`,String(e.getMinutes()).padStart(2,`0`),`:`,String(e.getSeconds()).padStart(2,`0`),`.`,String(e.getMilliseconds()).padStart(3,`0`)].join(``)}function Ie(e,t,n=` `){let r=``,i=Array(e[0].length).fill(0);for(let n of e)for(let[e,r]of n.entries()){let n=t(r);n>i[e]&&(i[e]=n)}for(let[a,o]of e.entries()){for(let[e,a]of o.entries()){e>0&&(r+=n);let s=` `.repeat(i[e]-t(a));r+=a+(e===o.length-1?``:s)}a<e.length-1&&(r+=`
3
+ `)}return r}const Le={y:365,m:30,w:7,d:1,h:1/24,s:1/86400};function Re(e){let t=/^(\d+(?:\.\d+)?)\s*([a-z])$/i.exec(e);if(t){let[,e,n]=t,r=Le[n.toLowerCase()];if(r)return Number(e)*r}let n=Number(e);if(!Number.isFinite(n))throw Error(`Invalid cooldown value: ${e}`);return n}async function ze(e,t,{concurrency:n=1/0}={}){let r=Array.from(e);if(!Number.isFinite(n))return Promise.all(r.map(t));let i=Array(r.length),a=0;return await Promise.all(Array.from({length:Math.min(n,r.length)},async()=>{for(;a<r.length;){let e=a++;i[e]=await t(r[e])}})),i}const U=e=>e.replace(/[|\\{}()[\]^$+*?.-]/g,`\\$&`);function Be(){let e=new Map,t=new Map,n=v.lookup;v.lookup=function(r,...i){let a={},o;typeof i[0]==`function`?o=i[0]:(a=typeof i[0]==`number`?{family:i[0]}:i[0]||{},o=i[1]);let s=e.get(r);if(s){a.all?o(null,s):o(null,s[0].address,s[0].family);return}if(t.has(r)){t.get(r).push({options:a,callback:o});return}t.set(r,[{options:a,callback:o}]),n.call(v,r,{all:!0},(n,i)=>{let a=t.get(r);t.delete(r),!n&&i?.length&&e.set(r,i);for(let{options:e,callback:t}of a)n?t(n):e.all?t(null,i):t(null,i[0].address,i[0].family)})}}const Ve=`17.14.1`,He=5e3,W=e=>e.replace(/^v/,``),G=e=>e.endsWith(`/`)?e.slice(0,-1):e;function Ue(e,t){return{headers:{"user-agent":`updates/${Ve}`,"accept-encoding":`gzip, deflate, br`,...t&&{Authorization:`${e} ${t}`}}}}async function We(e,t){try{return await fetch(e,t)}catch(t){throw Error(`Failed to fetch ${e}${t?.message?`: ${t.message}`:``}`)}}function K(e){return(j(e)?.prerelease.length??0)>0}function Ge(e){return/[0-9]+\.[0-9]+\.[0-9]+-.+/.test(e)}function Ke(e,t,{useRel:n,allowDowngrade:r,name:i,matchesAny:a}){let o=q(e),s=q(t);if(!o||!s)return!0;let c=Ge(e)||K(e),l=K(t);return c&&!l?I(s,o)||n:!l&&R(s,o)?r===!0||a(i,r):!0}function q(e){try{return N(e)?.version??``}catch{return``}}function qe(e,t,{range:n,semvers:r,usePre:i,useRel:a,useGreatest:o,pinnedRange:s}){let c=q(n);if(!c)return c;i=Ge(n)||i,i&&(r.add(`prerelease`),r.has(`patch`)&&r.add(`prepatch`),r.has(`minor`)&&r.add(`preminor`),r.has(`major`)&&r.add(`premajor`));let l=0,u=c;for(let n of t){let t=j(n);if(!t?.version||t.prerelease.length&&(!i||a))continue;let c=t.version;if(s&&!ve(c,s))continue;let d=P(u,c);if(!(!d||!r.has(d)))if(o||!(`time`in e))(L(q(c),u)||s&&!ve(u,s))&&(u=c);else{let t=Date.parse(e.time[n]);t>=0&&t>l&&(u=c,l=t)}}return u||null}function Je(e,{mode:t,range:n,useGreatest:r,useRel:i,usePre:a,semvers:o,pinnedRange:s},{allowDowngrade:c,matchesAny:l,isGoPseudoVersion:u}){if(n===`*`||n.includes(`||`))return null;let d=[];if(t===`pypi`)d=Object.keys(e.releases).filter(e=>A(e));else if(t===`npm`||t===`cargo`)d=Object.keys(e.versions).filter(e=>A(e));else if(t===`go`){let t=q(n);if(!t)return null;let r=a||Ge(n),s=e=>K(e)&&(!r||i),d={useRel:i,allowDowngrade:c,name:e.name,matchesAny:l},f=e.old||n,p=q(e.new);if(p&&!u(e.new)&&!s(e.new)){let n=P(t,p);if(n&&o.has(n)&&Ke(f,e.new,d))return e.new}let m=q(e.sameMajorNew);if(m&&!u(e.sameMajorNew)&&!s(e.sameMajorNew)){let n=P(t,m);if(n&&o.has(n)&&Ke(f,e.sameMajorNew,d))return e.Time=e.sameMajorTime,delete e.newPath,e.sameMajorNew}return null}let f=qe(e,d,{range:n,semvers:o,usePre:a,useRel:i,useGreatest:r,pinnedRange:s});if(!f)return null;if(r)return f;{let r=``,u=``;t===`pypi`?(u=e.info.version,r=q(e.info.version)):r=e[`dist-tags`].latest;let d=q(n),p=Ge(n),m=K(f),h=K(r),g={useRel:i,allowDowngrade:c,name:e.name,matchesAny:l};if(!i&&a||p&&m)return f;if(p&&!m)return Ke(n,f,g)?f:null;let _=P(d,r);return _&&_!==`prerelease`&&!o.has(_.replace(/^pre/,``))||i&&K(r)?f:R(r,d)&&!h?Ke(n,r,g)?r:null:!p&&h&&!a||s&&!ve(r,s)?f:u||r}}const Ye=new Map;if(t.UPDATES_FORGE_TOKENS)for(let e of t.UPDATES_FORGE_TOKENS.split(`,`)){let t=e.indexOf(`:`);t>0&&Ye.set(e.substring(0,t),e.substring(t+1))}function Xe(e){try{let t=Ye.get(new URL(e).hostname);if(t)return t}catch{}return t.UPDATES_GITHUB_API_TOKEN||t.GITHUB_API_TOKEN||t.GH_TOKEN||t.GITHUB_TOKEN||t.HOMEBREW_GITHUB_API_TOKEN}function Ze(e,t){let n={signal:AbortSignal.timeout(t.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}},r=Xe(e);return r&&(n.headers={...n.headers,Authorization:`Bearer ${r}`}),t.doFetch(e,n)}function Qe(e,t,n){let r=W(t);if(!A(r))return null;if(n){let n=t,i=W(t);for(let t of e){let e=W(t);A(e)&&(!n||I(e,i))&&(n=t,i=e)}if(z(r,i))return n}else{let t=e.at(-1);if(!t)return null;let n=W(t);if(!A(n))return null;if(z(r,n))return t}return null}function $e(e){return e=e.replace(`git@`,``).replace(/.+?\/\//,`https://`).replace(/\.git$/,``),/^[a-z]+:[a-z0-9-]\/[a-z0-9-]$/.test(e)?e.replace(/^(.+?):/,(e,t)=>`https://${t}.com/`):/^[a-z0-9-]\/[a-z0-9-]$/.test(e)?`https://github.com/${e}`:e}const et=/^[0-9a-f]{7,}$/i;function tt(e){return e.map(e=>({name:e.name,commitSha:e.commit?.sha||``}))}async function nt(e,t,n,r){try{let i=await Ze(`${e}/repos/${t}/${n}/tags?per_page=100`,r);if(!i?.ok)return[];let a=tt(await i.json()),o=i.headers.get(`link`)||``,s=/<([^>]+)>;\s*rel="last"/.exec(o);if(s){let i=Number(new URL(s[1]).searchParams.get(`page`)),o=await Promise.all(Array.from({length:i-1},(i,a)=>Ze(`${e}/repos/${t}/${n}/tags?per_page=100&page=${a+2}`,r)));for(let e of o)e?.ok&&a.push(...tt(await e.json()))}return a}catch{return[]}}function rt(e,t,n,r){throw e?.status&&e?.statusText?Error(`Received ${e.status} ${e.statusText} from ${t}`):Error(`Unable to fetch ${n} from ${r}`)}function it(e,t,n=``){let r=t.startsWith(`v`),i=W(e),a=W(t).split(`.`).length,o=i.split(`.`),s;return s=a===1?o[0]:a===2?`${o[0]}.${o[1]||`0`}`:i,`${r?`v`:``}${s}${n}`}function at(e){return e.startsWith(`https://bitbucket.org`)?`src/HEAD`:`tree/HEAD`}function ot({repository:e,homepage:t,info:n},r,i){if(n){let t=n.project_urls;for(let n of[`repository`,`Repository`,`repo`,`Repo`,`source`,`Source`,`source code`,`Source code`,`Source Code`,`homepage`,`Homepage`])if(t[n]){e=t[n];break}e??=`https://pypi.org/project/${i}/`}let a=``;return r===`https://npm.pkg.github.com`?`https://github.com/${i.replace(/^@/,``)}`:(e&&(a=$e(typeof e==`string`?e:e.url),a&&typeof e!=`string`&&e.directory&&(a=`${a}/${at(a)}/${e.directory}`)),a||t||``)}const st={"allow-downgrade":{short:`d`,type:`string`,multiple:!0},"error-on-outdated":{short:`E`,type:`boolean`},"error-on-unchanged":{short:`U`,type:`boolean`},exclude:{short:`e`,type:`string`,multiple:!0},file:{short:`f`,type:`string`,multiple:!0},forgeapi:{type:`string`},goproxy:{type:`string`},cargoapi:{type:`string`},dockerapi:{type:`string`},greatest:{short:`g`,type:`string`,multiple:!0},help:{short:`h`,type:`boolean`},include:{short:`i`,type:`string`,multiple:!0},indirect:{short:`I`,type:`boolean`},json:{short:`j`,type:`boolean`},jsrapi:{type:`string`},cooldown:{short:`C`,type:`string`},minor:{short:`m`,type:`string`,multiple:!0},modes:{short:`M`,type:`string`,multiple:!0},color:{short:`c`,type:`boolean`},"no-cache":{short:`x`,type:`boolean`},"no-color":{short:`n`,type:`boolean`},patch:{short:`P`,type:`string`,multiple:!0},pin:{short:`l`,type:`string`,multiple:!0},prerelease:{short:`p`,type:`string`,multiple:!0},pypiapi:{type:`string`},registry:{short:`r`,type:`string`},release:{short:`R`,type:`string`,multiple:!0},sockets:{short:`s`,type:`string`},timeout:{short:`T`,type:`string`},types:{short:`t`,type:`string`,multiple:!0},update:{short:`u`,type:`boolean`},verbose:{short:`V`,type:`boolean`},version:{short:`v`,type:`boolean`}};function ct(e,t){return RegExp(`^${U(e).replaceAll(`\\*`,`.*`)}$`,t?`i`:``)}function lt(e,t,n){return t&&typeof e==`string`?/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):ct(e,n):e instanceof RegExp?e:ct(e,n)}function ut(e){return Array.isArray(e)&&e.every(e=>e===!0)?!0:Array.isArray(e)?new Set(e.flatMap(e=>typeof e==`string`?Ne(e):``).filter(Boolean)):typeof e==`string`?new Set([e]):typeof e==`boolean`?e:!1}function dt(e){for(let[t,{short:n}]of Object.entries(st))if(t===e||n===e)return t;return``}function ft(e){return new Set(e.map(e=>lt(e,!1,!0)))}function pt(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).flatMap(e=>Ne(e)):[]}function mt(e){let t={};if(Array.isArray(e)){for(let n of e)if(typeof n==`string`){let[e,r]=n.split(`=`,2);e&&r&&ye(r)&&(t[e]=r)}}else if(typeof e==`string`){let[n,r]=e.split(`=`,2);n&&r&&ye(r)&&(t[n]=r)}return t}function J(e){if(typeof e==`boolean`)return e;if(!Array.isArray(e)||!e.length)return!1;let t=new Set;for(let n of e)t.add(lt(n,!1,!1));return t}async function ht(e){let t=[];for(let e of[`js`,`ts`,`mjs`,`mts`])t.push(`updates.config.${e}`);let n={};try{({default:n}=await Promise.any(t.map(async t=>{let n=c(e,...t.split(`/`)),r=y(n);try{u(n)}catch{throw Error(`File not found: ${t}`)}try{return await import(r.href)}catch(e){throw Error(`Unable to parse config file ${t}: ${e.message}`)}})))}catch(e){if(e instanceof AggregateError){let t=e.errors.filter(e=>e.message.startsWith(`Unable to parse`));if(t.length>0)throw t[0]}}return n}function gt(e){if(/^\s*\{/.test(e))return JSON.parse(e);let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(!e||e.startsWith(`#`)||e.startsWith(`;`))continue;let r=e.indexOf(`=`);if(r===-1)continue;let i=e.slice(r+1).trim();i.length>=2&&(i.startsWith(`"`)&&i.endsWith(`"`)||i.startsWith(`'`)&&i.endsWith(`'`))&&(i=i.slice(1,-1)),t[e.slice(0,r).trim()]=i}return t}function _t(e){try{return gt(m(e,`utf-8`))}catch{return}}function vt(t){let n=e();for(;;){let e=c(n,t);try{return g(e),e}catch{}let r=s(n);if(r===n)break;n=r}}function yt(e){let n={},r=e.toLowerCase();for(let[i,a]of Object.entries(t))if(i.toLowerCase().startsWith(r)){let t=i.substring(e.length).split(`__`).filter(Boolean);if(t.length===0)continue;let r=n;for(let e=0;e<t.length;e++){let n=t[e];if(e===t.length-1)r[n]=a;else if(r[n]===void 0&&(r[n]={}),typeof r[n]==`object`)r=r[n];else break}}return n}function bt(e,r={}){let i=n===`win32`,a=i?t.USERPROFILE:t.HOME,o=[{...r}],s=[];function l(e){if(!e||s.includes(e))return;let t=_t(e);t&&(o.push(t),s.push(e))}i||(l(c(`/etc`,e,`config`)),l(c(`/etc`,`${e}rc`))),a&&(l(c(a,`.config`,e,`config`)),l(c(a,`.config`,e)),l(c(a,`.${e}`,`config`)),l(c(a,`.${e}rc`))),l(vt(`.${e}rc`));let u=yt(`${e}_`);return u.config&&l(u.config),Object.assign({},...o,u,s.length?{configs:s,config:s[s.length-1]}:void 0)}const xt=c(n===`win32`?t.LOCALAPPDATA||c(te(),`AppData`,`Local`):t.XDG_CACHE_HOME||c(te(),`.cache`),`updates`);let St=!1;function Ct(e){return b(`sha256`).update(e).digest(`hex`).substring(0,16)}function wt(e){try{let t=m(c(xt,`${Ct(e)}.cache`),`utf8`),n=t.indexOf(`
4
+ `);if(n===-1)return null;let r=t.substring(0,n),i=t.substring(n+1);return r&&i?{etag:r,body:i}:null}catch{return null}}function Tt(e,t,n){try{St||=(p(xt,{recursive:!0}),!0),ee(c(xt,`${Ct(e)}.cache`),`${t}\n${n}`)}catch{}}const Et=/^.*?:\/\/(.*?@)?(github\.com[:/])/i,Dt=/^([^/]+)\/([^/]+)\/(?:.*\/)?([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i,Ot=/[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g,kt=/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g,At=`https://registry.npmjs.org`;let Y=null;const jt=new Map;function Mt(){return Y||bt(`npm`,{registry:At})}function Nt(e){return e.replace(/^\$\{?([^}]*)\}?$/,(e,n)=>t[n]||``)}function Pt(e,t){let n=n=>t[`${e}:${n}`]||t[`${e}/:${n}`],r=n(`_authToken`);if(r)return{token:Nt(r),type:`Bearer`};let i=n(`username`),a=n(`_password`);if(i&&a){let e=Buffer.from(Nt(a),`base64`).toString(`utf8`);return{token:Buffer.from(`${i}:${e}`).toString(`base64`),type:`Basic`,username:i,password:e}}let o=n(`_auth`);if(o)return{token:Nt(o),type:`Basic`}}function X(e,t){let n=new URL(e.startsWith(`//`)?`http:${e}`:e),r;for(;r!==`/`&&n.pathname!==r;){r=n.pathname||`/`;let e=Pt(`//${n.host}${r.replace(/\/$/,``)}`,t);if(e)return e;let i=r.endsWith(`/`)?r:`${r}/`;n.pathname=new URL(`..`,new URL(i,`http://x`)).pathname}let i=t._auth;if(i)return{token:Nt(i),type:`Basic`}}function Ft(e,t){let n=t[`${e}:registry`]||t.registry;return n.endsWith(`/`)?n:`${n}/`}function It(e,t){Y||=Mt();let n=e.startsWith(`@`)?(/@[a-z0-9][\w.-]+/.exec(e)||[``])[0]:``,r=`${n}:${t}`,i=jt.get(r);if(i)return i;let a;if(!e.startsWith(`@`))a={auth:X(t,Y),registry:t};else{let e=G(Ft(n,Y));if(e!==t)try{let n=X(e,Y);a=n?.token?{auth:n,registry:e}:{auth:X(t,Y),registry:t}}catch{a={auth:X(t,Y),registry:t}}else a={auth:X(t,Y),registry:t}}return jt.set(r,a),a}function Lt(e,t,n){Y||=Mt();let r=G((typeof n.registry==`string`?n.registry:!1)||t.registry||Y.registry||At);return{...It(e,r),originalRegistry:r}}function Rt(e,t,n){let r=`${e}/${t.replace(/\//g,`%2f`)}`;return n?`${r}/${n}`:r}const zt=new Map,Bt=new Map,Vt=new Map;async function Ht(e,t,n,r,i){let{auth:a,registry:s}=Lt(e,n,r),c=Rt(s,t===`resolutions`?o(e):e),l=zt.get(c);if(!l){let t=Ue(a?.type,a?.token);t.headers={...t.headers,accept:`application/vnd.npm.install-v1+json`};let n=i.noCache?null:wt(c);n&&(t.headers[`if-none-match`]=n.etag),l=i.doFetch(c,{signal:AbortSignal.timeout(i.fetchTimeout),...t}).then(async t=>{if(t?.status===304&&n)return JSON.parse(n.body);if(t?.ok){let e=await t.text(),n=t.headers.get(`etag`);return n&&!i.noCache&&Tt(c,n,e),JSON.parse(e)}rt(t,c,e,s)}).catch(e=>{throw zt.delete(c),e}),zt.set(c,l)}return[await l,t,s,e]}async function Ut(e,t,n,r,i){let{auth:a,registry:o}=Lt(e,n,r),s=Rt(o,e,t),c=Bt.get(s);if(c)return c;let l=(async()=>{try{let n=Ue(a?.type,a?.token),r=await i.doFetch(s,{signal:AbortSignal.timeout(i.fetchTimeout),...n});if(!r?.ok)return{};let c=await r.json(),l=``,u=c?._npmOperationalInternal?.tmp;if(u){let e=/(\d{13})/.exec(u);e&&(l=new Date(Number(e[1])).toISOString())}if(!l){let r=Rt(o,e),a=Vt.get(r);a||(a=i.doFetch(r,{signal:AbortSignal.timeout(i.fetchTimeout),...n}).then(e=>e?.ok?e.json():null).catch(()=>(Vt.delete(r),null)),Vt.set(r,a)),l=(await a)?.time?.[t]||``}return{repository:c.repository,homepage:c.homepage,date:l}}catch{return{}}})();return Bt.set(s,l),l}function Z(e){return e.startsWith(`npm:@jsr/`)||e.startsWith(`jsr:`)}function Wt(e){return e.startsWith(`link:`)||e.startsWith(`file:`)}function Gt(e,t){if(e.startsWith(`npm:@jsr/`)){let t=/^npm:@jsr\/([^_]+)__([^@]+)@(.+)$/.exec(e);if(t)return{scope:t[1],name:t[2],version:t[3]}}else if(e.startsWith(`jsr:@`)){let t=/^jsr:@([^/]+)\/([^@]+)@(.+)$/.exec(e);if(t)return{scope:t[1],name:t[2],version:t[3]}}else if(e.startsWith(`jsr:`)){let n=e.substring(4);if(t?.startsWith(`@`)){let e=/^@([^/]+)\/(.+)$/.exec(t);if(e)return{scope:e[1],name:e[2],version:n}}}return{scope:null,name:null,version:``}}async function Kt(e,t,n){let r=/^@([^/]+)\/(.+)$/.exec(e);if(!r)throw Error(`Invalid JSR package name: ${e}`);let[,i,a]=r,o=`${n.jsrApiUrl}/@${i}/${a}/meta.json`,s=await n.doFetch(o,{signal:AbortSignal.timeout(n.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}});if(s?.ok){let r=await s.json(),i={},a={};for(let[e,t]of Object.entries(r.versions))i[e]={version:e,time:t.createdAt},a[e]=t.createdAt;return[{name:e,"dist-tags":{latest:r.latest},versions:i,time:a},t,n.jsrApiUrl,e]}rt(s,o,e,`JSR`)}function qt(e,t){let n=e;for(let[e,{old:r,oldOrig:i}]of Object.entries(t)){let[a,o]=e.split(`\0`),s=i||r;if(a===`packageManager`){let r=RegExp(`"${U(a)}": *"${o}@${U(s)}"`,`g`);n=n.replace(r,`"${a}": "${o}@${t[e].new}"`)}else{let r=RegExp(`"${U(o)}": *"${U(s)}"`,`g`);n=n.replace(r,`"${o}": "${t[e].new}"`)}}return n}function Jt(e,t,n){let r=e.replace(kt,t);if(n&&n!==e&&/^[\^~]/.test(r)){let e=n.substring(1).split(`.`),t=r.substring(1).split(`.`);e.length!==t.length&&(r=`${r[0]}${t.slice(0,e.length).join(`.`)}`)}if(n&&n!==e&&r.startsWith(`>=`)){let e=/^>=\s/.test(n)?`>= `:`>=`,t=n.replace(/^>=\s*/,``),i=r.replace(/^>=\s*/,``),a=t.split(`.`),o=i.split(`.`);a.length!==o.length&&(r=`${e}${o.slice(0,a.length).join(`.`)}`)}return r}function Yt(e){let t=e.match(Ot);return t?.length===1?e.replace(Ot,q(t[0])):e}async function Xt(e,t,n){try{let r=await Ze(`${n.forgeApiUrl}/repos/${e}/${t}/commits`,n);if(!r?.ok)return{hash:``,commit:{}};let{sha:i,commit:a}=(await r.json())[0];return{hash:i,commit:a}}catch{return{hash:``,commit:{}}}}async function Zt(e,t,n){return(await nt(n.forgeApiUrl,e,t,n)).map(e=>e.name)}async function Qt(e,t,n,r){let i=t.old.replace(Et,``),[a,o,s,c]=Dt.exec(i)||[];if(!o||!s||!c)return null;if(et.test(c)){let{hash:n,commit:i}=await Xt(o,s,r);if(!n)return null;let a=i?.committer?.date??i?.author?.date,l=n.substring(0,c.length);if(c!==l)return{key:e,newRange:t.old.replace(c,l),user:o,repo:s,oldRef:c,newRef:l,newDate:a}}else{let t=Qe(await Zt(o,s,r),c,n);if(t)return{key:e,newRange:t,user:o,repo:s,oldRef:c,newRef:t}}return null}async function $t(e,t,n){let r=`${n.pypiApiUrl}/pypi/${e}/json`,i=await n.doFetch(r,{signal:AbortSignal.timeout(n.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}});if(i?.ok)return[await i.json(),t,null,e];rt(i,r,e,n.pypiApiUrl)}function en(e,t){let n=e;for(let[e,{old:r,oldOrig:i}]of Object.entries(t)){let[a,o]=e.split(`\0`),s=i||r;n=n.replace(RegExp(`("${U(o)} *[<>=~]+ *)${U(s)}(")`,`g`),(n,r,i)=>`${r}${t[e].new}${i}`)}return n}const tn=i(x);function nn(){let e=t.GOPROXY||`https://proxy.golang.org,direct`;for(let t of e.split(/[,|]/)){let e=t.trim();if(e&&e!==`direct`&&e!==`off`)return G(e)}return`https://proxy.golang.org`}function rn(){return(t.GONOPROXY||t.GOPRIVATE||``).split(`,`).map(e=>e.trim()).filter(Boolean)}function an(e,t){return t.some(t=>e===t||e.startsWith(`${t}/`))}function on(e){return e.replace(/[A-Z]/g,e=>`!${e.toLowerCase()}`)}function sn(e){let t=/\/v(\d+)$/.exec(e);return t?Number.parseInt(t[1]):1}function cn(e,t){return t<=1?e.replace(/\/v\d+$/,``):`${e.replace(/\/v\d+$/,``)}/v${t}`}function ln(e,t,n){return t===`indirect`||e.startsWith(`golang.org/x/`)||un(n)}function un(e){return/\d{14}-[0-9a-f]{12}$/.test(e)}function dn(e,t,n){return[{name:e,old:t,new:t},n,null,e]}async function fn(e,t,n){if(!t)return null;let r=t,i=e+1,a=1,o=null;for(;o===null;){let t=i+a;if(t>e+100){o=e+101;break}let s=await n(t);s?(r=s,i=t,a*=2):o=t}if(o-i>1){let e=await Promise.all(Array.from({length:o-i-1},(e,t)=>n(i+1+t)));for(let t=e.length-1;t>=0;t--)if(e[t]){r=e[t];break}}return r}function pn(e,t,n,r,i,a){let o=r?.Version??i,s=r?.Time??a,c=r?.path??e;return[{name:e,old:n,new:W(o),Time:s,...c===e?{}:{newPath:c},sameMajorNew:W(i),sameMajorTime:a},t,null,e]}function mn(e){let t={},n={},r={},i={},a=new Set,o=[],s=e.split(/\r?\n/),c=!1,l=!1,u=!1;for(let e of s){let i=e.trim();if(/^require\s*\(/.test(i)){c=!0;continue}if(/^replace\s*\(/.test(i)){l=!0;continue}if(/^tool\s*\(/.test(i)){u=!0;continue}if(i===`)`){c=!1,l=!1,u=!1;continue}if(u){i&&!i.startsWith(`//`)&&o.push(i);continue}let s=/^tool\s+(\S+)/.exec(i);if(s){o.push(s[1]);continue}let d=i.includes(`// indirect`);if(l||/^replace\s+/.test(i)){let e=l?/^(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(i):/^replace\s+(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(i);if(e){let[,t,n,i]=e;!n.startsWith(`./`)&&!n.startsWith(`/`)&&!n.startsWith(`../`)&&(r[n]=i,a.add(t))}continue}let f=c?/^(\S+)\s+(v\S+)/.exec(i):/^require\s+(\S+)\s+(v\S+)/.exec(i);f&&((d?n:t)[f[1]]=f[2])}for(let e of a)delete t[e],delete n[e];if(o.length){let e=[...Object.keys(n),...Object.keys(t)];for(let r of o){let a=``;for(let t of e)(r===t||r.startsWith(`${t}/`))&&t.length>a.length&&(a=t);let o=a?n[a]?n:t[a]?t:null:null;o&&(i[a]=o[a],delete o[a])}}return{deps:t,indirect:n,replace:r,tool:i}}async function hn(e,n,r,i,a){let o=sn(e),s=async(e,n)=>{try{let{stdout:r}=await tn(`go`,[`list`,`-m`,`-json`,`${e}@latest`],{timeout:n,cwd:i,env:t}),a=JSON.parse(r);return{Version:a.Version,Time:a.Time||``,path:e}}catch{return null}},c=ln(e,n,r),[l,u]=await Promise.all([s(e,a.fetchTimeout),c?null:s(cn(e,o+1),a.goProbeTimeout)]);return l?pn(e,n,r,await fn(o,u,t=>s(cn(e,t),a.goProbeTimeout)),l.Version,l.Time):dn(e,r,n)}async function gn(e,t,n,r,i,a){if(an(e,a))return hn(e,t,n,r,i);let o=on(e),s=sn(e),c=async t=>{let n=cn(e,t);return i.doFetch(`${i.goProxyUrl}/${on(n)}/@latest`,{signal:AbortSignal.timeout(i.goProbeTimeout)}).then(async e=>e.ok?{...await e.json(),path:n}:null).catch(()=>null)},l=ln(e,t,n),[u,d]=await Promise.all([i.doFetch(`${i.goProxyUrl}/${o}/@latest`,{signal:AbortSignal.timeout(i.fetchTimeout)}),l?null:c(s+1)]);if(!u.ok)return dn(e,n,t);let f,p;try{let e=await u.json();f=e.Version,p=e.Time}catch{return dn(e,n,t)}return pn(e,t,n,await fn(s,d,c),f,p)}function _n(e,t){let n=U(t);return e=e.replace(RegExp(`^replace\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(RegExp(`^\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(/^replace\s*\(\s*\)\s*\n/gm,``),e}function vn(e,t){let n=e,r={};for(let[e,{old:i,oldOrig:a}]of Object.entries(t)){let[o,s]=e.split(`\0`),c=a||i,l=t[e].new;if(o===`replace`){n=n.replace(RegExp(`(=>\\s+${U(s)}\\s+)v${U(c)}`,`g`),`$1v${l}`);continue}if(o===`indirect`){n=n.replace(RegExp(`(${U(s)}) +v${U(c)}`,`g`),`$1 v${l}`);continue}let u=sn(s),d=Number.parseInt(l.split(`.`)[0]);if(u!==d&&d>1){let e=cn(s,d);n=n.replace(RegExp(`${U(s)} +v${U(c)}`,`g`),`${e} v${l}`),o===`tool`&&(n=n.replace(RegExp(`(^\\s+|^tool\\s+)${U(s)}(/\\S+)?\\s*$`,`gm`),`$1${e}$2`)),r[s]=e}else n=n.replace(RegExp(`(${U(s)}) +v${U(c)}`,`g`),`$1 v${l}`);o!==`tool`&&(n=_n(n,s))}return[n,r]}function yn(e,t,n){if(!Object.keys(t).length)return;let r=d(`**/*.go`,{cwd:e});for(let i of r){let r=c(e,i),a=m(r,`utf8`),o=!1;for(let[e,n]of Object.entries(t)){let t=RegExp(`"${U(e)}(/|")`,`g`),r=a.replace(t,`"${n}$1`);r!==a&&(a=r,o=!0)}o&&n(r,a)}}function bn(e){let t=`https://${xn(e)}`,n=new URL(t),r=n.pathname.split(`/`);if(r.length>3){let[e,i,a,...o]=r;return n.pathname=`/${i}/${a}/${at(t)}/${o.join(`/`)}`,n.toString()}else return t}function xn(e){return/\/v[0-9]$/.test(e)?s(e):e}function Sn(e){return e.replace(/(\d{7})\d{7}-[0-9a-f]{12}$/,`$1`)}const Cn=/^\s*(?:-\s*)?uses:\s*['"]?([^'"#\s]+)['"]?/gm;function wn(e){if(e.startsWith(`docker://`)||e.startsWith(`./`))return null;let t=/^https?:\/\/([^/]+)\/(.+)$/.exec(e),n=t?.[1]??null,r=t?.[2]??e,i=r.indexOf(`@`);if(i===-1)return null;let a=r.substring(0,i),o=r.substring(i+1);if(!o)return null;let s=a.split(`/`);if(s.length<2)return null;let c=n?`${n}/${a}`:a;return{host:n,owner:s[0],repo:s[1],ref:o,name:c,isHash:et.test(o)}}function Tn(e,t){return e?e===`github.com`?`https://api.github.com`:`https://${e}/api/v1`:t}async function En(e,t,n,r,i){try{let a=await Ze(`${e}/repos/${t}/${n}/git/commits/${r}`,i);if(!a?.ok)return``;let o=await a.json();return o?.committer?.date||o?.author?.date||``}catch{return``}}function Dn(e,t){return it(j(W(e))?.version??W(e),t)}function On(e,t){let n=e;for(let{name:e,oldRef:r,newRef:i}of t){let t=RegExp(`(uses:\\s*['"]?)${U(e)}@${U(r)}`,`g`);n=n.replace(t,`$1${e}@${i}`)}return n}function kn(e){let t=e.replace(/\\/g,`/`);return/\.github\/workflows\/[^/]+\.(ya?ml)$/.test(t)}function An(e){try{return h(e).filter(e=>/\.(ya?ml)$/.test(e)).map(t=>l(c(e,t)))}catch{return[]}}const jn=/^(v?\d+(?:\.\d+){0,2})(-.+)?$/,Mn=/^\s*FROM\s+(?:--platform=\S+\s+)?(\S+)/gm,Nn=/^\s*image:\s*['"]?([^\s'"#]+)['"]?/gm,Pn=/^\s*container:\s*['"]?([^\s'"#{}]+:[^\s'"#{}:]+)['"]?\s*$/gm,Fn=/^\s*(?:-\s*)?uses:\s*['"]?docker:\/\/([^'"#\s]+)['"]?/gm;function In(e){let t=e.split(`/`);return t.length===1?{registry:null,namespace:`library`,repo:t[0]}:t.length===2&&!t[0].includes(`.`)&&!t[0].includes(`:`)?{registry:null,namespace:t[0],repo:t[1]}:{registry:t[0],namespace:t.slice(1,-1).join(`/`)||t[1],repo:t[t.length-1]}}function Ln(e){if(e=e.replace(/^docker:\/\//,``),e.includes(`@`))return null;let t=e.lastIndexOf(`:`),n,r;if(t===-1||e.lastIndexOf(`/`)>t||(n=e.substring(0,t),r=e.substring(t+1),!r||!jn.test(r)))return null;let{registry:i,namespace:a,repo:o}=In(n);return{registry:i,namespace:a,repo:o,tag:r,fullImage:n}}function Rn(e){let t=jn.exec(e);return t?{version:t[1],suffix:t[2]||``}:null}function zn(e,t){let n=Rn(t);return n?it(e,n.version,n.suffix):t}function Bn(e,t){let n=[];for(let r of e.matchAll(t)){let e=Ln(r[1]);e&&n.push({ref:e,match:r[1]})}return n}async function Vn(e,t,n){let r={},i=`${n.dockerApiUrl}/v2/repositories/${e}/${t}/tags`,a=e=>`${i}?page_size=100&ordering=last_updated&page=${e}`,o=e=>{for(let t of e.results||[])r[t.name]=t.tag_last_pushed||t.last_updated||``},[s,c]=await Promise.all([n.doFetch(a(1),{signal:AbortSignal.timeout(n.fetchTimeout)}).then(e=>e?.ok?e.json():null).catch(()=>null),n.doFetch(a(2),{signal:AbortSignal.timeout(n.fetchTimeout)}).then(e=>e?.ok?e.json():null).catch(()=>null)]);if(!s)return r;o(s);let l=Math.min(Math.ceil((s.count||0)/100),10);if(l>=2&&c&&o(c),l>2){let e=await Promise.all(Array.from({length:l-2},(e,t)=>n.doFetch(a(t+3),{signal:AbortSignal.timeout(n.fetchTimeout)}).then(e=>e?.ok?e.json():null).catch(()=>null)));for(let t of e)t&&o(t)}return r}async function Hn(e,t,n){let{registry:r,namespace:i,repo:a}=In(e);if(r)throw Error(`Non-Docker-Hub registries are not yet supported: ${r}`);return[{tags:await Vn(i,a,n),name:e},t,null,e]}function Un(e,t,n){let r=Rn(t);if(!r)return null;let i=N(W(r.version))?.version;if(!i)return null;let a=i,o=``,s=``;for(let[t,i]of Object.entries(e)){let e=Rn(t);if(!e||e.suffix!==r.suffix)continue;let c=N(W(e.version))?.version;if(!c)continue;let l=P(a,c);!l||!n.has(l)||L(c,a)&&(a=c,o=t,s=i)}if(!o||a===i)return null;let c=zn(a,t);return c===t?null:{newTag:c,date:s}}function Wn(e,t,n){let r=e;for(let[e,i]of Object.entries(t)){let[t,a]=e.split(`\0`),o=i.oldOrig||i.old;for(let e of n)r=r.replace(e(U(a),U(o)),`$1${a}:${i.new}`)}return r}function Gn(e,t){return Wn(e,t,[(e,t)=>RegExp(`(FROM\\s+(?:--platform=\\S+\\s+)?)${e}:${t}`,`g`)])}function Kn(e,t){return Wn(e,t,[(e,t)=>RegExp(`(image:\\s*['"]?)${e}:${t}`,`g`)])}function qn(e,t){return Wn(e,t,[(e,t)=>RegExp(`((?:container|image):\\s*['"]?)${e}:${t}`,`g`),(e,t)=>RegExp(`(uses:\\s*['"]?docker://)${e}:${t}`,`g`)])}const Jn=[`Dockerfile`,`docker-compose.yml`,`docker-compose.yaml`];function Yn(e){return/^docker-.+\.ya?ml$/.test(e)}function Xn(e){return/^Dockerfile(\..+)?$/.test(e)}function Zn(e){return Xn(e)||Yn(e)}function Qn(e){return Xn(e)?Mn:Nn}function $n(e){return e.registry?``:e.namespace===`library`?`https://hub.docker.com/_/${e.repo}`:`https://hub.docker.com/r/${e.namespace}/${e.repo}`}async function er(e,t,n){let r=`${G(n.cratesIoUrl)}/api/v1/crates/${encodeURIComponent(e)}/versions?per_page=100`,i=await n.doFetch(r,{signal:AbortSignal.timeout(n.fetchTimeout),...Ue()});i?.ok||rt(i,r,e,n.cratesIoUrl);let a;try{a=await i.json()}catch{throw Error(`Invalid JSON from ${r}`)}let o=(a.versions||[]).filter(e=>!e.yanked),s={},c={};for(let e of o)e.num&&(s[e.num]={},c[e.num]=e.created_at||``);let l=o[0]?.num??``;return[{name:e,versions:s,time:c,"dist-tags":{latest:l}},t,null,e]}function tr(e){let t=new Map;for(let n of e.split(`[[package]]`)){let e=/\bname\s*=\s*"([^"]+)"/.exec(n),r=/\bversion\s*=\s*"([^"]+)"/.exec(n);if(!e||!r)continue;let i=e[1],a=r[1];if(!A(a))continue;let o=t.get(i)||[];o.push(a),t.set(i,o)}return t}const nr=/^\d/;function rr(e,t,n){let r=e.get(t);if(!r)return;let i=nr.test(n)?`^${n}`:n,a;for(let e of r)ve(e,i)&&(!a||I(e,a))&&(a=e);return a}const ir=je.map(e=>U(e)).join(`|`);function ar(e,t){let n=e;for(let[e,r]of Object.entries(t)){let[,t]=e.split(`\0`),i=r.oldOrig||r.old,a=r.new,o=U(t),s=U(i);n=n.replace(RegExp(`^(\\s*${o}\\s*=\\s*["'])${s}(["'].*)$`,`gm`),`$1${a}$2`),n=n.replace(RegExp(`(\\s*${o}\\s*=\\s*\\{\\s*version\\s*=\\s*["'])${s}(["'])`,`g`),`$1${a}$2`),n=n.replace(RegExp(`(\\[(?:${ir})\\.${o}\\][^\\[]*?version\\s*=\\s*["'])${s}(["'])`,`g`),`$1${a}$2`)}return n}const or={"package.json":`npm`,"pyproject.toml":`pypi`,"go.mod":`go`,"Cargo.toml":`cargo`},sr=new Set([`npm`,`pypi`,`go`,`cargo`,`actions`,`docker`]);function cr(e,t){let n=c(t,e);try{return u(n),n}catch{}let r=s(t);return r===t?null:cr(e,r)}function lr(e){try{return m(e,`utf8`)}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}}function ur(e,t){t&&(e.date=t,e.age=we(t,{noAffix:!0}))}function dr(e,t,n){let r=Re(String(t));for(let[t,{date:i}]of Object.entries(e))Pe(i,r,n)||delete e[t]}function fr(e){let t=0;for(let n of Object.keys(e))t+=Object.keys(e[n]).length;return t}function pr(e){console.error(`${Fe()} ${e}`)}function mr(t){return t.replace(`${e()}/`,``).replace(`${e()}\\`,``)}function Q(e,t,n,r,i){if(i===`engines`&&Oe.includes(e)||t===`pypi`&&e===`python`)return!1;if(!n.size&&!r.size)return!0;let a=t===`go`?e.replace(/\/v\d+$/,``):e;for(let t of r)if(t.test(e)||t.test(a))return!1;for(let t of n)if(t.test(e)||t.test(a))return!0;return!n.size}function hr(t){let n=new Set;if(t)for(let e of t){let t;try{t=f(e)}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}if(t?.isFile())n.add(l(e));else if(t?.isDirectory()){for(let t of Object.keys(or)){let r=c(e,t),i=null;try{i=f(r)}catch{}i?.isFile()&&n.add(l(r))}try{for(let t of h(e))if(Zn(t)){let r=c(e,t);try{f(r).isFile()&&n.add(l(r))}catch{}}}catch{}let t=l(e).replace(/\\/g,`/`),r;r=t.endsWith(`.github/workflows`)?t:t.endsWith(`.github`)?c(t,`workflows`):c(t,`.github`,`workflows`);for(let e of An(r))n.add(e)}else throw Error(`${e} is neither a file nor directory`)}else{for(let t of Object.keys(or)){let r=cr(t,e());r&&n.add(l(r))}for(let t of Jn){let r=cr(t,e());r&&n.add(l(r))}try{for(let t of h(e()))if(Zn(t)&&!Jn.includes(t)){let r=c(e(),t);try{f(r).isFile()&&n.add(l(r))}catch{}}}catch{}let t=cr(c(`.github`,`workflows`),e());if(t)for(let e of An(t))n.add(e)}return n}function $(e,t){n===`win32`&&_(e,0),ee(e,t,n===`win32`?{flag:`r+`}:void 0)}function gr(e){for(let t of Object.keys(e))for(let n of Object.values(e[t]))typeof n.oldPrint==`string`&&(n.old=n.oldPrint),typeof n.newPrint==`string`&&(n.new=n.newPrint),typeof n.oldOrig==`string`&&!Z(n.oldOrig)&&(n.old=t===`go`?Sn(n.oldOrig):n.oldOrig),t===`go`&&(n.new=Sn(n.new)),t===`actions`&&(n.old=W(n.old),n.new=W(n.new)),delete n.oldPrint,delete n.newPrint,delete n.oldOrig,delete n.date;let t={results:{}};for(let n of Object.keys(e))for(let[r,i]of Object.entries(e[n])){let[e,a]=r.split(`\0`);t.results[n]||(t.results[n]={}),t.results[n][e]||(t.results[n][e]={}),t.results[n][e][a]=i}return t}let _r=!1;async function vr(t={}){_r||=(Be(),!0);let n={...t},i=n.sockets??25,c=n.timeout??0,u=typeof t.forgeapi==`string`?G(t.forgeapi):`https://api.github.com`,d=typeof t.pypiapi==`string`?G(t.pypiapi):`https://pypi.org`,f=typeof t.jsrapi==`string`?G(t.jsrapi):`https://jsr.io`,p=typeof t.goproxy==`string`?G(t.goproxy):nn(),h=typeof t.cargoapi==`string`?G(t.cargoapi):`https://crates.io`,g=typeof t.dockerapi==`string`?G(t.dockerapi):`https://hub.docker.com`,_=rn(),ee=n.color===!0||n.noColor!==!0&&r.isTTY,v=e=>ee?t=>a(e,String(t)):String,y=v(`magenta`),b=v(`green`),te=v(`red`),x={fetchTimeout:c||5e3,goProbeTimeout:c?c/2:2500,forgeApiUrl:u,pypiApiUrl:d,jsrApiUrl:f,goProxyUrl:p,cratesIoUrl:h,dockerApiUrl:g,doFetch:async(e,t)=>{n.verbose&&pr(`${y(t?.method||`GET`)} ${e}`);let r=await We(e,t);return n.verbose&&pr(`${r.ok?b(r.status):te(r.status)} ${e}`),r},noCache:!!n.noCache},S=J(n.greatest),C=J(n.prerelease),w=J(n.release),re=J(n.patch),ie=J(n.minor),ae=J(n.allowDowngrade),oe=n.modes?.length?new Set(n.modes):sr;function se(e){return re===!0||H(e,re)?new Set([`patch`]):ie===!0||H(e,ie)?new Set([`patch`,`minor`]):new Set([`patch`,`minor`,`major`])}function T(e){return{useGreatest:typeof S==`boolean`?S:H(e,S),usePre:typeof C==`boolean`?C:H(e,C),useRel:typeof w==`boolean`?w:H(e,w),semvers:se(e)}}let E=ft(n.include??[]),D=ft(n.exclude??[]),ce=n.pin??{},O={},k={},j={},M={},le=Date.now(),N=0,P=hr(n.files?.length?new Set(n.files):!1),F={},I={},L=[],R=[],z={};function ue(e,t,n){O.docker||={};for(let r of n)for(let{ref:n}of Bn(e,r)){if(!Q(n.fullImage,`docker`,E,D,`docker`))continue;let e=`${t}${n.fullImage}`;if(O.docker[e])continue;let r=Rn(n.tag);r&&(O.docker[e]={old:r.version,oldOrig:n.tag},R.push({key:e,fullImage:n.fullImage,ref:n}))}}for(let t of P){if(kn(t)){let e=oe.has(`actions`),n=oe.has(`docker`);if(!e&&!n)continue;let r=lr(t),i=mr(t);if(F[i]={absPath:t,content:r},e){O.actions||={};let e=Array.from(r.matchAll(Cn),e=>wn(e[1])).filter(e=>e!==null);for(let t of e){if(!Q(t.name,`actions`,E,D,`actions`))continue;let e=`${i}${t.name}`;O.actions[e]||(O.actions[e]={old:t.ref},L.push({...t,key:e,apiUrl:Tn(t.host,u)}))}}n&&(I[i]={absPath:t,content:r,fileType:`workflow`},ue(r,i,[Nn,Pn,Fn]));continue}let r=o(t);if(Zn(r)){if(!oe.has(`docker`))continue;let e=lr(t),n=mr(t);I[n]={absPath:t,content:e,fileType:Xn(r)?`dockerfile`:`compose`},ue(e,n,[Qn(r)]);continue}let i=or[r];if(!oe.has(i))continue;M[i]=t,O[i]||(O[i]={});let a=s(l(t)),c=a===e()?n:await ht(a),d=c!==n&&c?.include?ft([...n.include??[],...c.include]):E,f=c!==n&&c?.exclude?ft([...n.exclude??[],...c.exclude]):D,p={...c?.pin,...ce},m=[];n.types?.length?m=n.types:c?.types?.length?m=c.types:i===`npm`?m=De:i===`pypi`?m=Array.from(ke):i===`go`?m=n.indirect?Array.from(Ae):Ae.filter(e=>e!==`indirect`):i===`cargo`&&(m=Array.from(je));let h={};j[i]=lr(t);try{if(i===`npm`)h=JSON.parse(j[i]);else if(i===`pypi`||i===`cargo`)h=ne(j[i]);else if(i===`go`){let e=mn(j[i]);h.deps=e.deps,h.indirect=e.indirect,h.replace=e.replace,h.tool=e.tool}}catch(e){throw Error(`Error parsing ${t}: ${e.message}`)}let g=new Map;if(i===`cargo`){let e=cr(`Cargo.lock`,s(t));e&&(g=tr(lr(e)))}for(let e of m){let t;if(t=i===`npm`||i===`go`?h[e]||{}:Me(h,e)||{},Array.isArray(t)&&i===`pypi`)for(let{name:n,version:r}of Ee(t))Q(n,i,d,f,e)&&(O[i][`${e}${n}`]={old:Yt(r),oldOrig:r});else if(typeof t==`string`){let[n,r]=t.split(`@`);Q(n,i,d,f,e)&&(O[i][`${e}${n}`]={old:Yt(r),oldOrig:r})}else for(let[n,r]of Object.entries(t))if(i===`cargo`&&typeof r==`object`&&r&&`version`in r&&!(`git`in r)&&!(`path`in r)&&Q(n,i,d,f,e)){let t=String(r.version);if(ye(t)){let r=rr(g,n,t);O[i][`${e}${n}`]={old:r??Yt(t),oldOrig:t}}}else if(i===`npm`&&Z(r)&&Q(n,i,d,f,e)){let t=Gt(r,n);O[i][`${e}${n}`]={old:t.version,oldOrig:r}}else if(i!==`go`&&ye(r)&&Q(n,i,d,f,e)){let t=i===`cargo`?rr(g,n,r):void 0;O[i][`${e}${n}`]={old:t??Yt(r),oldOrig:r}}else i===`npm`&&Wt(r)&&Q(n,i,d,f,e)?O[i][`${e}${n}`]={old:`0.0.0`,oldOrig:r}:i===`npm`&&!Z(r)&&Q(n,i,d,f,e)?k[`${e}${n}`]={old:r}:i===`go`&&Q(n,i,d,f,e)&&(O[i][`${e}${n}`]={old:Sn(r),oldOrig:W(r)})}N+=Object.keys(O[i]).length+Object.keys(k).length,z[i]={modeConfig:c,projectDir:a,pin:p}}if(O.actions&&(N+=Object.keys(O.actions).length),O.docker&&(N+=Object.keys(O.docker).length),N===0)return{results:{},message:`No dependencies found, nothing to do.`};let B=[],V={registry:n.registry};for(let e of Object.keys(z)){if(!O[e]||!Object.keys(O[e]).length&&!Object.keys(k).length)continue;let{modeConfig:t,projectDir:r,pin:a}=z[e];B.push((async()=>{let o=new Map;await ze(Object.keys(O[e]),async n=>{let[i,s]=n.split(`\0`),c=null;if(e===`npm`){let{oldOrig:r}=O[e][n];if(r&&Z(r))c=await Kt(s,i,x);else if(r&&Wt(r))try{c=await Ht(s,i,t,V,x)}catch{delete O[e][n];return}else c=await Ht(s,i,t,V,x)}else c=e===`go`?await gn(s,i,O[e][n].oldOrig||O[e][n].old,r,x,_):e===`cargo`?await er(s,i,x):await $t(s,i,x);if(!c)return;let[l,,u]=c;if(l?.error)throw Error(l.error);let{useGreatest:d,usePre:f,useRel:p,semvers:m}=T(l.name),h=O[e][n].old,g=O[e][n].oldOrig,ee=a[s],v=Je(l,{usePre:f,useRel:p,useGreatest:d,semvers:m,range:h,mode:e,pinnedRange:ee},{allowDowngrade:ae,matchesAny:H,isGoPseudoVersion:un}),y=``;if([`go`,`pypi`,`cargo`].includes(e)&&v)y=v;else if(v)if(g&&Wt(g))y=String(Mt()[`save-exact`])===`true`?v:`^${v}`;else if(g&&Z(g))if(g.startsWith(`npm:@jsr/`)){let e=/^(npm:@jsr\/[^@]+@)(.+)$/.exec(g);e&&(y=`${e[1]}${v}`)}else if(g.startsWith(`jsr:@`)){let e=/^(jsr:@[^@]+@)(.+)$/.exec(g);e&&(y=`${e[1]}${v}`)}else g.startsWith(`jsr:`)&&(y=`jsr:${v}`);else y=Jt(h,v,g);if(!v||v===h||g&&g===y){delete O[e][n];return}let b=``;e===`pypi`&&l.releases?.[v]?.[0]?.upload_time_iso_8601?b=l.releases[v][0].upload_time_iso_8601:e===`go`&&l.Time?b=l.Time:e===`cargo`&&l.time?.[v]&&(b=l.time[v]),O[e][n].new=y,g&&Z(g)&&(O[e][n].newPrint=v),e===`npm`?o.set(n,{name:s,promise:Ut(l.name,v,t,V,x)}):e===`pypi`?O[e][n].info=ot(l,u,l.info.name):e===`go`?O[e][n].info=bn(l.newPath||s):e===`cargo`&&(O[e][n].info=`https://crates.io/crates/${s}`),b&&ur(O[e][n],b)},{concurrency:i});for(let[t,{name:n,promise:r}]of o){let i=await r;O[e][t]&&(O[e][t].info=ot({repository:i.repository,homepage:i.homepage},null,n),i.date&&ur(O[e][t],i.date))}if(Object.keys(k).length){let t=(await ze(Object.entries(k),([e,t])=>{let n=e.split(`\0`)[1];return Qt(e,t,typeof S==`boolean`?S:H(n,S),x)},{concurrency:i})).filter(e=>e!==null);for(let n of t){let{key:t,newRange:r,user:i,repo:a,oldRef:o,newRef:s,newDate:c}=n;O[e][t]={old:k[t].old,new:r,oldPrint:et.test(o)?o.substring(0,7):o,newPrint:et.test(s)?s.substring(0,7):s,info:`https://github.com/${i}/${a}`},c&&ur(O[e][t],c)}}let s=n.cooldown??t.cooldown;s&&dr(O[e],String(s),le)})())}if(L.length&&B.push((async()=>{let e=new Map;for(let t of L){let n=`${t.apiUrl}/${t.owner}/${t.repo}`;e.has(n)||e.set(n,{apiUrl:t.apiUrl,owner:t.owner,repo:t.repo,infos:[]}),e.get(n).infos.push(t)}await ze(e.values(),async({apiUrl:e,owner:t,repo:n,infos:r})=>{let i=await nt(e,t,n,x),a=i.map(e=>e.name),o=a.map(e=>W(e)).filter(e=>A(e)),s=new Map;for(let e of i)e.commitSha&&s.set(e.commitSha,e.name);let c=new Map;async function l(r){if(c.has(r))return c.get(r);let i=await En(e,t,n,r,x);return c.set(r,i),i}let u=[];for(let e of r){let r=O.actions[e.key],c=`https://${e.host||`github.com`}/${t}/${n}`;if(e.isHash){let{usePre:t,useRel:n}=T(e.name),l=qe({},o,{range:`0.0.0`,semvers:new Set([`patch`,`minor`,`major`]),usePre:t,useRel:n,useGreatest:!0,pinnedRange:ce[e.name]});if(!l){delete O.actions[e.key];continue}let d=a.find(e=>W(e)===l);if(!d){delete O.actions[e.key];continue}let f=i.find(e=>e.name===d)?.commitSha;if(!f||f===e.ref||f.startsWith(e.ref)||e.ref.startsWith(f)){delete O.actions[e.key];continue}let p=s.get(e.ref)||Array.from(s.entries()).find(([t])=>t.startsWith(e.ref))?.[1];r.old=e.ref,r.new=f.substring(0,e.ref.length),r.oldPrint=p||e.ref.substring(0,7),r.newPrint=d,r.info=c,u.push({key:e.key,commitSha:f})}else{let t=q(W(e.ref));if(!t){delete O.actions[e.key];continue}let{useGreatest:n,usePre:s,useRel:l,semvers:d}=T(e.name),f=qe({},o,{range:t,semvers:d,usePre:s,useRel:l,useGreatest:n||!0,pinnedRange:ce[e.name]});if(!f||f===t){delete O.actions[e.key];continue}let p=a.find(e=>W(e)===f);if(!p){delete O.actions[e.key];continue}let m=Dn(p,e.ref);if(m===e.ref){delete O.actions[e.key];continue}r.new=a.includes(m)?m:p,r.info=c;let h=i.find(e=>e.name===p);h?.commitSha&&u.push({key:e.key,commitSha:h.commitSha})}}let d=await Promise.all(u.map(({commitSha:e})=>l(e)));for(let[e,{key:t}]of u.entries()){let n=O.actions[t];n&&d[e]&&ur(n,d[e])}},{concurrency:i}),n.cooldown&&dr(O.actions,String(n.cooldown),le),Object.keys(O.actions).length||delete O.actions})()),R.length&&B.push((async()=>{let e=new Map;for(let t of R)e.has(t.fullImage)||e.set(t.fullImage,[]),e.get(t.fullImage).push(t);await ze(e.entries(),async([e,t])=>{let n;try{let[t]=await Hn(e,`docker`,x);n=t}catch{for(let e of t)delete O.docker[e.key];return}for(let e of t){let t=O.docker[e.key],r=t.oldOrig||t.old,{semvers:i}=T(e.fullImage),a=Un(n.tags,r,i);if(!a){delete O.docker[e.key];continue}t.new=a.newTag,t.info=$n(e.ref),ur(t,a.date)}},{concurrency:i}),n.cooldown&&dr(O.docker,String(n.cooldown),le),Object.keys(O.docker).length||delete O.docker})()),await Promise.all(B),!fr(O))return{results:{},message:`All dependencies are up to date.`};if(n.update){let e=new Map;if(O.actions)for(let[t,n]of Object.entries(O.actions)){let[r,i]=t.split(`\0`);e.has(r)||e.set(r,[]),e.get(r).push({name:i,oldRef:n.old,newRef:n.new})}let t=new Map;if(O.docker)for(let[e,n]of Object.entries(O.docker)){let[r]=e.split(`\0`);t.has(r)||t.set(r,{}),t.get(r)[e]=n}let n=gr(O);for(let n of Object.keys(O)){if(!Object.keys(O[n]).length)continue;if(n===`actions`){for(let[t,n]of e){let{absPath:e,content:r}=F[t]||{};e&&$(e,On(r,n))}continue}if(n===`docker`){for(let[e,n]of t){let t=I[e];if(!t)continue;let{absPath:r,fileType:i}=t,a;try{a=m(r,`utf8`)}catch{continue}$(r,(i===`dockerfile`?Gn:i===`compose`?Kn:qn)(a,n))}continue}let r=j[n];if(n===`go`){let[e,t]=vn(r,O[n]);$(M[n],e),yn(s(l(M[n])),t,$)}else if(n===`cargo`)$(M[n],ar(r,O[n]));else{let e=n===`npm`?qt:en;$(M[n],e(r,O[n]))}}return n}return gr(O)}export{st as a,mt as c,Te as d,Ie as f,ht as i,He as l,xn as n,pt as o,dt as r,ut as s,vr as t,Ve as u};
package/package.json CHANGED
@@ -1,12 +1,17 @@
1
1
  {
2
2
  "name": "updates",
3
- "version": "17.13.5",
3
+ "version": "17.14.1",
4
4
  "description": "CLI dependency update tool for npm, uv, cargo, go and actions",
5
5
  "author": "silverwind",
6
6
  "repository": "silverwind/updates",
7
7
  "license": "BSD-2-Clause",
8
8
  "bin": "dist/index.js",
9
- "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/api.js",
12
+ "types": "./dist/api.d.ts"
13
+ }
14
+ },
10
15
  "type": "module",
11
16
  "sideEffects": false,
12
17
  "files": [
@@ -16,19 +21,19 @@
16
21
  "node": ">=22"
17
22
  },
18
23
  "devDependencies": {
19
- "@types/node": "25.5.0",
20
- "@typescript/native-preview": "7.0.0-dev.20260401.1",
21
- "@vitest/coverage-v8": "4.1.2",
22
- "eslint": "10.1.0",
23
- "eslint-config-silverwind": "130.1.0",
24
+ "@types/node": "25.6.0",
25
+ "@typescript/native-preview": "7.0.0-dev.20260410.1",
26
+ "@vitest/coverage-v8": "4.1.4",
27
+ "eslint": "10.2.0",
28
+ "eslint-config-silverwind": "131.0.4",
24
29
  "timerel": "5.8.6",
25
30
  "tsdown": "0.21.7",
26
31
  "tsdown-config-silverwind": "2.0.5",
27
- "typescript": "5.9.3",
32
+ "typescript": "6.0.2",
28
33
  "typescript-config-silverwind": "17.0.0",
29
- "updates-config-silverwind": "2.0.1",
30
- "versions": "14.2.6",
31
- "vitest": "4.1.2",
32
- "vitest-config-silverwind": "11.1.3"
34
+ "updates-config-silverwind": "2.1.0",
35
+ "versions": "14.2.7",
36
+ "vitest": "4.1.4",
37
+ "vitest-config-silverwind": "11.1.4"
33
38
  }
34
39
  }
package/dist/index.d.ts DELETED
@@ -1,34 +0,0 @@
1
- //#region modes/shared.d.ts
2
- type Config = {
3
- /** Array of dependencies to include */include?: Array<string | RegExp>; /** Array of dependencies to exclude */
4
- exclude?: Array<string | RegExp>; /** Array of package types to use */
5
- types?: Array<string>; /** URL to npm registry */
6
- registry?: string; /** Minimum dependency age in days */
7
- cooldown?: number; /** Pin dependencies to semver ranges */
8
- pin?: Record<string, string>;
9
- };
10
- type Dep = {
11
- old: string;
12
- new: string;
13
- oldPrint?: string;
14
- newPrint?: string;
15
- oldOrig?: string;
16
- info?: string;
17
- age?: string;
18
- date?: string;
19
- };
20
- type Deps = {
21
- [name: string]: Dep;
22
- };
23
- type DepsByMode = {
24
- [mode: string]: Deps;
25
- };
26
- type Output = {
27
- results: {
28
- [mode: string]: {
29
- [type: string]: Deps;
30
- };
31
- };
32
- };
33
- //#endregion
34
- export { type Config, type Dep, type Deps, type DepsByMode, type Output };