updates 17.16.12 → 17.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -87,10 +87,30 @@ export default {
87
87
  - `patch` *boolean | Array\<string | RegExp>*: Consider only up to semver-patch
88
88
  - `minor` *boolean | Array\<string | RegExp>*: Consider only up to semver-minor
89
89
  - `allowDowngrade` *boolean | Array\<string | RegExp>*: Allow version downgrades
90
+ - `overrides` *Array\<Override>*: Per-package option overrides matched by name (see [Overrides](#overrides))
90
91
  - `inherit` *object*: Opt-in to inheriting select fields from other tools' configs (see [Renovate config](#renovate-config))
91
92
 
92
93
  CLI arguments have precedence over options in the config file. `include`, `exclude`, and `pin` options are merged.
93
94
 
95
+ ### Overrides
96
+
97
+ `overrides` applies options to a subset of dependencies, matched by name. Each override has `include` and/or `exclude` patterns (glob or `RegExp`, omit `include` to match all) plus any of these options: `cooldown`, `greatest`, `prerelease`, `release`, `patch`, `minor`, `allowDowngrade`. A matching override takes precedence over the corresponding top-level option, and when several overrides match the same dependency, the last one wins.
98
+
99
+ ```ts
100
+ import type {Config} from "updates";
101
+
102
+ export default {
103
+ cooldown: "7d",
104
+ overrides: [
105
+ {include: ["@myorg/*"], cooldown: 0}, // no cooldown for your own scope
106
+ {include: [/^@aws-sdk/], cooldown: "14d"}, // longer cooldown for a noisy publisher
107
+ {exclude: ["typescript"], greatest: true}, // greatest for everything but typescript
108
+ ],
109
+ } satisfies Config;
110
+ ```
111
+
112
+ A `cooldown` of `0` in an override disables a global cooldown for the matched dependencies. `patch` takes precedence over `minor`, so an override that sets `minor` has no effect while `patch` is enabled for that dependency. `pin` is not an override option since it is already per-package via [`pin`](#config-options).
113
+
94
114
  ### Renovate config
95
115
 
96
116
  If a [Renovate](https://docs.renovatebot.com/) config is found, `ignoreDeps` and simple `packageRules` are inherited as `exclude`/`pin`. `minimumReleaseAge` is *not* inherited as `cooldown` by default — opt in via:
package/dist/api.d.ts CHANGED
@@ -24,13 +24,26 @@ type Config = {
24
24
  release?: boolean | Array<string | RegExp>; /** Consider only up to semver-patch */
25
25
  patch?: boolean | Array<string | RegExp>; /** Consider only up to semver-minor */
26
26
  minor?: boolean | Array<string | RegExp>; /** Allow version downgrades when using latest version */
27
- allowDowngrade?: boolean | Array<string | RegExp>; /** Opt-in to inheriting select fields from other tools' configs */
27
+ allowDowngrade?: boolean | Array<string | RegExp>; /** Per-package option overrides, matched by name; last matching override wins */
28
+ overrides?: Array<Override>; /** Opt-in to inheriting select fields from other tools' configs */
28
29
  inherit?: {
29
30
  renovate?: {
30
31
  /** Inherit minimumReleaseAge as cooldown. Off by default. */cooldown?: boolean;
31
32
  };
32
33
  };
33
34
  };
35
+ /** Options applied to dependencies whose name matches an override's patterns. */
36
+ type Override = {
37
+ /** Name patterns this override applies to (glob or RegExp). Omit to match all. */include?: Array<string | RegExp>; /** Name patterns excluded from this override */
38
+ exclude?: Array<string | RegExp>; /** Minimum dependency age, e.g. 7 (days), "1w", "2d", "6h"; 0 disables a global cooldown */
39
+ cooldown?: number | string; /** Prefer greatest over latest version */
40
+ greatest?: boolean; /** Consider prerelease versions */
41
+ prerelease?: boolean; /** Only use release versions, may downgrade */
42
+ release?: boolean; /** Consider only up to semver-patch */
43
+ patch?: boolean; /** Consider only up to semver-minor */
44
+ minor?: boolean; /** Allow version downgrades when using latest version */
45
+ allowDowngrade?: boolean;
46
+ };
34
47
  //#endregion
35
48
  //#region modes/shared.d.ts
36
49
  type Dep = {
@@ -69,4 +82,4 @@ type UpdatesOptions = Config & {
69
82
  };
70
83
  declare function updates(opts?: UpdatesOptions): Promise<Output>;
71
84
  //#endregion
72
- export { type Config, type Dep, type Deps, type DepsByMode, type Output, UpdatesOptions, updates };
85
+ export { type Config, type Dep, type Deps, type DepsByMode, type Output, type Override, UpdatesOptions, updates };
package/dist/shared.js CHANGED
@@ -1,6 +1,5 @@
1
- import{cwd as e,env as t,platform as n,stderr as r}from"node:process";import{styleText as i}from"node:util";import{basename as a,dirname as o,join as s,relative as c,resolve as l}from"node:path";import{accessSync as u,existsSync as d,globSync as f,lstatSync as p,readFileSync as m,readdirSync as h,statSync as g,truncateSync as _,writeFileSync as v}from"node:fs";import{access as y,mkdir as b,readFile as x,writeFile as S}from"node:fs/promises";import{createHash as C}from"node:crypto";import{homedir as w}from"node:os";import{pathToFileURL as T}from"node:url";function ee(e){let t={},n=t,r=e.split(/\r?\n/);for(let e=0;e<r.length;e++){let i=r[e],a=ae(i).trim();if(!a)continue;let o=/^\[\[([^\]]+)\]\]$/.exec(a);if(o){let e=t,r=D(o[1]);for(let t=0;t<r.length-1;t++){let n=e[r[t]];Array.isArray(n)?e=n[n.length-1]:((!n||typeof n!=`object`)&&(e[r[t]]={}),e=e[r[t]])}let i=r[r.length-1];Array.isArray(e[i])||(e[i]=[]);let a={};e[i].push(a),n=a;continue}let s=/^\[([^[\]]+)\]$/.exec(a);if(s){n=t;for(let e of D(s[1]))(!(e in n)||typeof n[e]!=`object`||Array.isArray(n[e]))&&(n[e]={}),n=n[e];continue}let c=ce(a);if(c<0)continue;let l=a.slice(0,c).trim(),u=a.slice(c+1).trim(),d=D(l),f=n;for(let e=0;e<d.length-1;e++)(!(d[e]in f)||typeof f[d[e]]!=`object`||Array.isArray(f[d[e]]))&&(f[d[e]]={}),f=f[d[e]];let p=d[d.length-1];if(u.startsWith(`[`)&&oe(u,`]`)<0){let t=[];E(u.slice(1),t);for(let n=e+1;n<r.length;n++){let i=ae(r[n]).trim();if(!i)continue;let a=oe(i,`]`);if(a>=0){E(i.slice(0,a),t),e=n;break}E(i,t)}f[p]=t}else f[p]=te(u)}return t}function E(e,t){let n=e.trim();if(n)for(let e of ie(n)){let n=e.trim();n&&t.push(te(n))}}function te(e){if(e.startsWith(`[`)){let t=[],n=se(e,`]`);return E(e.slice(1,n<0?e.length:n),t),t}return e.startsWith(`{`)?re(e):e.startsWith(`"""`)?le(e.slice(3,e.lastIndexOf(`"""`))):e.startsWith(`'''`)?e.slice(3,e.lastIndexOf(`'''`)):e.startsWith(`"`)?le(e.slice(1,e.lastIndexOf(`"`))):e.startsWith(`'`)?e.slice(1,e.lastIndexOf(`'`)):ne(e)}function ne(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]=te(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 D(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 ae(e){let t=oe(e,`#`);return t<0?e:e.slice(0,t)}function oe(e,t){let n=null;for(let r=0;r<e.length;r++){let i=e[r];if(n){if(i===`\\`&&n===`"`){r++;continue}i===n&&(n=null)}else if(i===`"`||i===`'`)n=i;else if(i===t)return r}return-1}function se(e,t){let n=-1,r=null;for(let i=0;i<e.length;i++){let a=e[i];if(r){if(a===`\\`&&r===`"`){i++;continue}a===r&&(r=null)}else a===`"`||a===`'`?r=a:a===t&&(n=i)}return n}function ce(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 le(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 ue=/^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=ue.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 A(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)}function j(e,t){return e.major-t.major||e.minor-t.minor||e.patch-t.patch}function M(e,t){let n=j(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=A(e.prerelease[n],t.prerelease[n]);if(r!==0)return r}return 0}function N(e){return k(e)?.version??null}function P(e){return k(e)}const de=new Map,fe=/(?:^|[^.\d])(\d+)(?:\.(\d+))?(?:\.(\d+))?/;function F(e){if(typeof e!=`string`)return null;let t=de.get(e);if(t!==void 0)return t;let n=fe.exec(e);if(!n)return de.set(e,null),null;let r={version:`${n[1]||`0`}.${n[2]||`0`}.${n[3]||`0`}`};return de.set(e,r),r}function I(e,t){let n=k(e),r=k(t);if(!n||!r||n.version===r.version)return null;let i=M(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(j(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 pe(e,t){let n=k(e),r=k(t);return n&&r?M(n,r):null}function L(e,t){return(pe(e,t)??-1)>0}function me(e,t){return(pe(e,t)??-1)>=0}function R(e,t){return(pe(e,t)??1)<0}function he(e,t){return(pe(e,t)??1)!==0}function z(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 ge(e,t){let n=M(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 B(e,t,n){return`${e}.${t}.${n}-0`}function _e(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 <${B(a+1,0,0)}`;let o=Number(n);return`>=${a}.${o}.${r===void 0?0:Number(r)}${i||``} <${B(a,o+1,0)}`})}function ve(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 <${B(a+1,0,0)}`;let s=Number(n);if(r===void 0)return a===0?`>=${a}.${s}.0 <${B(a,s+1,0)}`:`>=${a}.${s}.0 <${B(a+1,0,0)}`;let c=Number(r);return a===0?s===0?`>=${a}.${s}.${c}${o} <${B(a,s,c+1)}`:`>=${a}.${s}.${c}${o} <${B(a,s+1,0)}`:`>=${a}.${s}.${c}${o} <${B(a+1,0,0)}`})}function ye(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?`<${B(p+1,0,0)}`:`<${B(p,Number(o)+1,0)}`:`<=${p}.${Number(o)}.${Number(s)}${c||``}`,`>=${l}.${u}.${d}${f} ${m}`})}function be(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 <${B(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 <${B(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 <${B(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 <${B(o+1,0,0)}`}),e)}const V=new Map;function H(e){let t=V.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=ye(t),t=ve(t),t=_e(t),t=be(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=z(t);if(!n)return V.set(e,null),null;i.push(n)}if(i.length===0)return V.set(e,null),null;r.push(i)}let i=r.length?r:null;return V.set(e,i),i}function xe(e,t){for(let n of t)if(!ge(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 U(e,t){let n=k(e);if(!n)return!1;let r=H(t);if(!r)return!1;for(let e of r)if(e.length===0||xe(n,e))return!0;return!1}function Se(e){return typeof e==`string`&&H(e)?e:null}const Ce=[[1e3,6e4,`sec`],[6e4,36e5,`min`],[36e5,864e5,`hour`],[864e5,6048e5,`day`],[6048e5,2628e6,`week`],[2628e6,31536e6,`month`],[31536e6,1/0,`year`]],we={"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`},Te={sec:`second`,min:`minute`};function Ee(e){return e instanceof Date?e.getTime():typeof e==`string`?Date.parse(e):e}function De(e,{now:t,noAffix:n=!1,times:r=Ce,nowThreshold:i=2e3,nowString:a=`now`,unknownString:o=``,aliases:s=!1,aliasesMap:c=we,longUnits:l=!1}={}){let u=Ee(e),d=t===void 0?Date.now():Ee(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&&Te[t[2]]||t[2])+(m>1?`s`:``);break}}let g=`${m} ${h}`,_;return _=n?g:p?`in ${g}`:`${g} ago`,s?c[_]??_:_}function Oe(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;){let n=e.charCodeAt(t);if(n>=48&&n<=57)break;t++}r=t}}let i=e.substring(r);return i?e.substring(0,r)+n(i):e}function ke(e){let t=[];for(let n of e){let[e,r]=n.replaceAll(/\s+/g,``).split(/[<>=~]+/),i=e?.replace(/\[.*?\]$/,``);i&&typeof r==`string`&&/^[0-9.a-z]+$/.test(r)&&t.push({name:i,version:r})}return t}const Ae=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`resolutions`,`packageManager`],je=[`node`,`deno`,`bun`],Me=[`project.dependencies`,`project.optional-dependencies`,`dependency-groups.dev`,`dependency-groups.lint`,`dependency-groups.test`],Ne=[`deps`,`indirect`,`replace`,`tool`],Pe=[`dependencies`,`dev-dependencies`,`build-dependencies`,`workspace.dependencies`];function Fe(e,t){if(!(t instanceof Set))return!1;for(let n of t)if(n.test(e))return!0;return!1}function Ie(e,t){return t.split(`.`).reduce((e,t)=>e?.[t]??null,e)}function Le(e){return e.split(`,`).filter(Boolean)}function Re(){let e=new Date,t=String(e.getMonth()+1).padStart(2,`0`),n=String(e.getDate()).padStart(2,`0`),r=String(e.getHours()).padStart(2,`0`),i=String(e.getMinutes()).padStart(2,`0`),a=String(e.getSeconds()).padStart(2,`0`),o=String(e.getMilliseconds()).padStart(3,`0`);return`${e.getFullYear()}-${t}-${n} ${r}:${i}:${a}.${o}`}function ze(e,t,n=` `){let r=Array(e[0].length).fill(0),i=Array(e.length);for(let n=0;n<e.length;n++){let a=e[n],o=Array(a.length);for(let e=0;e<a.length;e++){let n=t(a[e]);o[e]=n,n>r[e]&&(r[e]=n)}i[n]=o}let a=``;for(let t=0;t<e.length;t++){let o=e[t],s=o.length-1;for(let e=0;e<=s;e++)if(e>0&&(a+=n),a+=o[e],e!==s){let n=r[e]-i[t][e];n>0&&(a+=` `.repeat(n))}t<e.length-1&&(a+=`
3
- `)}return a}const Be={y:365,m:30,w:7,d:1,h:1/24,s:1/86400};function Ve(e){let t=/^(\d+(?:\.\d+)?)\s*([a-z])$/i.exec(e);if(t){let[,e,n]=t,r=Be[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 W(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 G=e=>e.replace(/[|\\{}()[\]^$+*?.-]/g,`\\$&`);async function He(e,t){let n=e;for(;;){let e=await t(n);if(e)return e;let r=o(n);if(r===n)return null;n=r}}function Ue(e){let t=new Map;return n=>{let r=t.get(n);return r||(r=e(n),t.set(n,r)),r}}const We=s(n===`win32`?t.LOCALAPPDATA||s(w(),`AppData`,`Local`):t.XDG_CACHE_HOME||s(w(),`.cache`),`updates`);let Ge=null;function Ke(e){return C(`sha256`).update(e).digest(`hex`).substring(0,16)}async function qe(e){try{let t=await x(s(We,`${Ke(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}}async function Je(e,t,n){try{await(Ge??=b(We,{recursive:!0})),await S(s(We,`${Ke(e)}.cache`),`${t}\n${n}`)}catch{}}var Ye=`17.16.12`;function K(e,t,n){if(!t||!n||!e)return!0;let r=Date.parse(e);return Number.isNaN(r)?!0:(n-r)/(24*3600*1e3)>=t}const Xe=Ye,Ze=5e3,q=e=>e[0]===`v`?e.substring(1):e,Qe=e=>e.endsWith(`/`)?e.slice(0,-1):e;function $e(e,t){return{headers:{"user-agent":`updates/${Xe}`,"accept-encoding":`gzip, deflate, br`,...t&&{Authorization:`${e} ${t}`}}}}async function et(e,t){try{return await fetch(e,t)}catch(t){throw Error(`Failed to fetch ${e}${t?.message?`: ${t.message}`:``}`)}}async function tt(e){return typeof e.text==`function`?e.text():JSON.stringify(await e.json())}async function nt(e,t,n={}){let r=t.noCache?null:await qe(e),i=n.headers,a=r?{...i,"if-none-match":r.etag}:i,o=await t.doFetch(e,{...n,headers:a,signal:AbortSignal.timeout(t.fetchTimeout)});if(!o)return{res:void 0};if(o.status===304&&r)return{body:r.body,res:o};if(!o.ok)return{res:o};let s=await tt(o),c=o.headers?.get?.(`etag`);return c&&!t.noCache&&await Je(e,c,s),{body:s,res:o}}async function rt(e,t,n={}){if(!t.noCache){let t=await qe(e);if(t)return{body:t.body}}let r=await t.doFetch(e,{...n,signal:AbortSignal.timeout(t.fetchTimeout)});if(!r)return{res:void 0};if(!r.ok)return{res:r};let i=await tt(r);return t.noCache||await Je(e,`immutable`,i),{body:i,res:r}}function it(e){return(P(e)?.prerelease.length??0)>0}function at(e){return/[0-9]+\.[0-9]+\.[0-9]+-.+/.test(e)}function ot(e,t,{useRel:n,allowDowngrade:r,name:i,matchesAny:a}){let o=J(e),s=J(t);if(!o||!s)return!0;let c=at(e)||it(e),l=it(t);return c&&!l?L(s,o)||n:!l&&R(s,o)?r===!0||a(i,r):!0}function J(e){return F(e)?.version??``}function st(e,t,{range:n,semvers:r,usePre:i,useRel:a,useGreatest:o,pinnedRange:s,cooldownDays:c,now:l,getVersionDate:u}){let d=J(n);if(!d)return d;i=at(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 f=u??(t=>e?.time?.[t]),p=0,m=d;for(let n of t){let t=P(n);if(!t?.version||t.prerelease.length&&(!i||a))continue;let u=t.version;if(s&&!U(u,s)||!K(f(n),c,l))continue;let d=I(m,u);if(!(!d||!r.has(d)))if(o||!(`time`in e))(me(`${t.major}.${t.minor}.${t.patch}`,m)||s&&!U(m,s))&&(m=u);else{let t=Date.parse(e.time[n]);t>=0&&t>p&&(m=u,p=t)}}return m||null}function ct(e,{mode:t,range:n,useGreatest:r,useRel:i,usePre:a,semvers:o,pinnedRange:s,cooldownDays:c,now:l},{allowDowngrade:u,matchesAny:d,isGoPseudoVersion:f}){if(n===`*`||n.includes(`||`))return null;let p=[],m;if(t===`pypi`)p=Object.keys(e.releases).filter(e=>N(e)),m=t=>e.releases?.[t]?.[0]?.upload_time_iso_8601;else if(t===`npm`||t===`cargo`)p=Object.keys(e.versions).filter(e=>N(e)),m=t=>e.time?.[t];else if(t===`go`){let t=J(n);if(!t)return null;let r=a||at(n),p=e=>it(e)&&(!r||i),m={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d},h=e.old||n,g=J(e.new);if(g&&!f(e.new)&&!p(e.new)){let n=I(t,g);if(n&&o.has(n)&&ot(h,e.new,m)&&K(e.Time,c,l)&&(!s||U(g,s)))return e.new}let _=J(e.sameMajorNew);if(_&&!f(e.sameMajorNew)&&!p(e.sameMajorNew)){let n=I(t,_);if(n&&o.has(n)&&ot(h,e.sameMajorNew,m)&&K(e.sameMajorTime,c,l)&&(!s||U(_,s)))return e.Time=e.sameMajorTime,delete e.newPath,e.sameMajorNew}if(c&&l&&e.olderEligible&&!p(e.olderEligible.version)){let n=J(e.olderEligible.version);if(n){let r=I(t,n);if(r&&o.has(r)&&ot(h,e.olderEligible.version,m)&&(!s||U(n,s)))return e.Time=e.olderEligible.time,delete e.newPath,e.olderEligible.version}}return null}let h=st(e,p,{range:n,semvers:o,usePre:a,useRel:i,useGreatest:r,pinnedRange:s,cooldownDays:c,now:l,getVersionDate:m});if(!h)return null;if(r)return h;{let r=``,f=``;t===`pypi`?(f=e.info.version,r=J(e.info.version)):r=e[`dist-tags`].latest;let p=J(n),m=at(n),g=it(h),_=it(r),v={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d};if(!i&&a||m&&g)return h;if(m&&!g)return ot(n,h,v)?h:null;let y=I(p,r);return y&&y!==`prerelease`&&!o.has(y.replace(/^pre/,``))||i&&it(r)?h:R(r,p)&&!_?ot(n,r,v)?r:null:!m&&_&&!a||s&&!U(r,s)||c&&l&&!K(t===`pypi`?e.releases?.[f||r]?.[0]?.upload_time_iso_8601:e.time?.[r],c,l)?h:f||r}}const lt=new Map;if(t.UPDATES_FORGE_TOKENS)for(let e of t.UPDATES_FORGE_TOKENS.split(`,`)){let t=e.indexOf(`:`);t>0&&lt.set(e.substring(0,t),e.substring(t+1))}const ut=Array.from(new Set([`UPDATES_GITHUB_API_TOKEN`,`GITHUB_API_TOKEN`,`GH_TOKEN`,`GITHUB_TOKEN`,`HOMEBREW_GITHUB_API_TOKEN`].map(e=>t[e]).filter(Boolean)));let dt;function ft(){return ut.length?Promise.resolve(ut):dt??=(async()=>{try{let[{execFile:e},{promisify:t}]=await Promise.all([import(`node:child_process`),import(`node:util`)]),{stdout:n}=await t(e)(`gh`,[`auth`,`token`],{encoding:`utf8`,timeout:5e3}),r=n.trim();return r?[r]:ut}catch{return ut}})()}const pt=new Map;async function mt(e){try{let t=lt.get(new URL(e).hostname);if(t)return[t]}catch{}return ft()}async function ht(e,t,n){let r;try{r=new URL(e).hostname}catch{r=``}let i=await(r?mt(e):ft()),a=AbortSignal.timeout(t.fetchTimeout),o=e=>{let t=$e(`Bearer`,e);return n&&(t.headers={...t.headers,...n}),t.signal=a,t};if(!i.length)return t.doFetch(e,o());let s=r?pt.get(r):void 0;if(s)return t.doFetch(e,o(s));for(let n of i){let i=await t.doFetch(e,o(n));if(i.status!==401&&i.status!==403)return r&&pt.set(r,n),i}return t.doFetch(e,o())}function gt(e,t,n){let r=q(t);if(!N(r))return null;if(n){let n=t,i=q(t);for(let t of e){let e=q(t);N(e)&&(!n||L(e,i))&&(n=t,i=e)}if(he(r,i))return n}else{let t=e.at(-1);if(!t)return null;let n=q(t);if(!N(n))return null;if(he(r,n))return t}return null}function _t(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 vt=/^[0-9a-f]{7,}$/i;function yt(e){return e.map(e=>({name:e.name,commitSha:e.commit?.sha||``}))}async function bt(e,t){let n=t.noCache?null:await qe(e),r=await ht(e,t,n?{"if-none-match":n.etag}:void 0);if(r?.status===304&&n)try{let e=JSON.parse(n.body);return{tags:e.tags||[],link:e.link||``}}catch{return null}if(!r?.ok)return null;let i=yt(await r.json()),a=r.headers.get(`link`)||``,o=r.headers.get(`etag`);return o&&!t.noCache&&await Je(e,o,JSON.stringify({link:a,tags:i})),{tags:i,link:a}}async function xt(e,t,n,r){let i=r=>`${e}/repos/${t}/${n}/tags?per_page=100&page=${r}`;try{let e=await bt(i(1),r);if(!e)return[];let t=e.tags,n=/<([^>]+)>;\s*rel="last"/.exec(e.link);if(!n)return t;let a=Number(new URL(n[1]).searchParams.get(`page`));if(a<2)return t;let o=await Promise.all(Array.from({length:a-1},(e,t)=>bt(i(t+2),r)));for(let e of o)e&&t.push(...e.tags);return t}catch{return[]}}function St(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 Ct(e,t,n=``){let r=t.startsWith(`v`),i=q(e),a=q(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 wt(e){return e.startsWith(`https://bitbucket.org`)?`src/HEAD`:`tree/HEAD`}function Tt({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=_t(typeof e==`string`?e:e.url),a&&typeof e!=`string`&&e.directory&&(a=`${a}/${wt(a)}/${e.directory}`)),a||t||``)}const Et={"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 Dt(e,t){return RegExp(`^${G(e).replaceAll(`\\*`,`.*`)}$`,t?`i`:``)}function Ot(e,t,n){return t&&typeof e==`string`?/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):Dt(e,n):e instanceof RegExp?e:Dt(e,n)}function kt(e){return Array.isArray(e)&&e.every(e=>e===!0)?!0:Array.isArray(e)?new Set(e.flatMap(e=>typeof e==`string`?Le(e):``).filter(Boolean)):typeof e==`string`?new Set([e]):typeof e==`boolean`?e:!1}function At(e){for(let[t,{short:n}]of Object.entries(Et))if(t===e||n===e)return t;return``}function jt(e){return new Set(e.map(e=>Ot(e,!1,!0)))}function Mt(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).flatMap(e=>Le(e)):[]}function Nt(e){let t={},n=Array.isArray(e)?e:[e];for(let e of n){if(typeof e!=`string`)continue;let[n,r]=e.split(`=`,2);n&&r&&Se(r)&&(t[n]=r)}return t}function Pt(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(Ot(n,!1,!1));return t}async function Ft(e){let t=await Promise.all([`js`,`ts`,`mjs`,`mts`].map(async t=>{let n=`updates.config.${t}`,r=s(e,n);try{await y(r)}catch{return null}try{return{configDir:e,filename:n,default:(await import(T(r).href)).default??{}}}catch(e){return Error(`Unable to parse config file ${n}: ${e?.message??e}`)}}));for(let e of t)if(e&&!(e instanceof Error))return e;for(let e of t)if(e instanceof Error)throw e;return null}const It=Ue(e=>He(e,Ft));async function Lt(e){let t=await It(e),n=t?.default??{},{loadRenovateConfig:r}=await import(`./renovate.js`);return{...await r(t?.configDir??e,n.inherit?.renovate),...n}}function Rt(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 zt(e){try{return Rt(m(e,`utf-8`))}catch{return}}function Bt(t){let n=e();for(;;){let e=s(n,t);try{return g(e),e}catch{}let r=o(n);if(r===n)break;n=r}}function Vt(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 Ht(e,r={}){let i=n===`win32`,a=i?t.USERPROFILE:t.HOME,o=[{...r}],c=[];function l(e){if(!e||c.includes(e))return;let t=zt(e);t&&(o.push(t),c.push(e))}i||(l(s(`/etc`,e,`config`)),l(s(`/etc`,`${e}rc`))),a&&(l(s(a,`.config`,e,`config`)),l(s(a,`.config`,e)),l(s(a,`.${e}`,`config`)),l(s(a,`.${e}rc`))),l(Bt(`.${e}rc`));let u=Vt(`${e}_`);return u.config&&l(u.config),Object.assign({},...o,u,c.length?{configs:c,config:c[c.length-1]}:void 0)}const Ut=/^.*?:\/\/(.*?@)?(github\.com[:/])/i,Wt=/^([^/]+)\/([^/]+)\/(?:.*\/)?([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i,Gt=/[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g,Kt=/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g,qt=`https://registry.npmjs.org`;let Y=null;const Jt=new Map;function Yt(){return Y??=Ht(`npm`,{registry:qt})}function Xt(e){return e.replace(/^\$\{?([^}]*)\}?$/,(e,n)=>t[n]||``)}function Zt(e,t){let n=n=>t[`${e}:${n}`]||t[`${e}/:${n}`],r=n(`_authToken`);if(r)return{token:Xt(r),type:`Bearer`};let i=n(`username`),a=n(`_password`);if(i&&a){let e=Buffer.from(Xt(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:Xt(o),type:`Basic`}}function Qt(e,t){let n=new URL(e.startsWith(`//`)?`http:${e}`:e),r;for(;r!==`/`&&n.pathname!==r;){r=n.pathname||`/`;let e=Zt(`//${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:Xt(i),type:`Basic`}}function $t(e,t){let n=t[`${e}:registry`]||t.registry;return n.endsWith(`/`)?n:`${n}/`}function en(e,t){Y||=Yt();let n=e.startsWith(`@`)?(/@[a-z0-9][\w.-]+/.exec(e)||[``])[0]:``,r=`${n}:${t}`,i=Jt.get(r);if(i)return i;let a=()=>({auth:Qt(t,Y),registry:t}),o;if(!e.startsWith(`@`))o=a();else{let e=Qe($t(n,Y));if(e!==t)try{let t=Qt(e,Y);o=t?.token?{auth:t,registry:e}:a()}catch{o=a()}else o=a()}return Jt.set(r,o),o}function tn(e,t,n){Y||=Yt();let r=Qe((typeof n.registry==`string`?n.registry:!1)||t.registry||Y.registry||qt);return{...en(e,r),originalRegistry:r}}function nn(e,t,n){let r=`${e}/${t.replace(/\//g,`%2f`)}`;return n?`${r}/${n}`:r}const rn=new Map,an=new Map,on=new Map;async function sn(e,t,n,r,i){let{auth:o,registry:s}=tn(e,n,r),c=nn(s,t===`resolutions`?a(e):e),l=rn.get(c);if(!l){let t=$e(o?.type,o?.token),n={...t.headers,accept:`application/vnd.npm.install-v1+json`};t.headers=n,l=(async()=>{let r=i.noCache?null:await qe(c);r&&(n[`if-none-match`]=r.etag);let a=await i.doFetch(c,{signal:AbortSignal.timeout(i.fetchTimeout),...t});if(a?.status===304&&r)return JSON.parse(r.body);if(a?.ok){let e=await a.text(),t=a.headers.get(`etag`);return t&&!i.noCache&&await Je(c,t,e),JSON.parse(e)}St(a,c,e,s)})().catch(e=>{throw rn.delete(c),e}),rn.set(c,l)}return[await l,t,s,e]}async function cn(e,t,n,r,i){let{auth:a,registry:o}=tn(e,n,r),s=nn(o,e,t),c=an.get(s);if(c)return c;let l=(async()=>{try{let n=$e(a?.type,a?.token),r=await rt(s,i,n);if(!(`body`in r))return{};let c=JSON.parse(r.body),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=nn(o,e),a=on.get(r);a||(a=i.doFetch(r,{...n,signal:AbortSignal.timeout(i.fetchTimeout)}).then(e=>e?.ok?e.json():null).catch(()=>(on.delete(r),null)),on.set(r,a)),l=(await a)?.time?.[t]||``}return{repository:c.repository,homepage:c.homepage,date:l}}catch{return{}}})();return an.set(s,l),l}function ln(e){return e.startsWith(`npm:@jsr/`)||e.startsWith(`jsr:`)}function un(e){return e.startsWith(`link:`)||e.startsWith(`file:`)}function dn(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 fn(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 nt(o,n,{headers:{"accept-encoding":`gzip, deflate, br`}});if(`body`in s){let r=JSON.parse(s.body),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]}St(s.res,o,e,`JSR`)}function pn(e,t){let n=new Map;for(let[e,{old:r,oldOrig:i,new:a}]of Object.entries(t)){let[t,o]=e.split(`\0`),s=i||r;t===`packageManager`?n.set(`${t}\0${o}@${s}`,`"${t}": "${o}@${a}"`):n.set(`${o}\0${s}`,`"${o}": "${a}"`)}return n.size?e.replace(/"((?:[^"\\]|\\.)*)": *"((?:[^"\\]|\\.)*)"/g,(e,t,r)=>n.get(`${t}\0${r}`)??e):e}function mn(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 X(e){let t=e.match(Gt);return t?.length===1?e.replace(Gt,J(t[0])):e}async function hn(e,t,n){let r=`${n.forgeApiUrl}/repos/${e}/${t}/commits`;try{let e=n.noCache?null:await qe(r),t=await ht(r,n,e?{"if-none-match":e.etag}:void 0);if(t?.status===304&&e){let{sha:t,commit:n}=JSON.parse(e.body)[0];return{hash:t,commit:n}}if(!t?.ok)return{hash:``,commit:{}};let i=await t.text(),a=t.headers.get(`etag`);a&&!n.noCache&&await Je(r,a,i);let{sha:o,commit:s}=JSON.parse(i)[0];return{hash:o,commit:s}}catch{return{hash:``,commit:{}}}}async function gn(e,t,n){return(await xt(n.forgeApiUrl,e,t,n)).map(e=>e.name)}async function _n(e,t,n,r){let i=t.old.replace(Ut,``),[,a,o,s]=Wt.exec(i)||[];if(!a||!o||!s)return null;if(vt.test(s)){let{hash:n,commit:i}=await hn(a,o,r);if(!n)return null;let c=i?.committer?.date??i?.author?.date,l=n.substring(0,s.length);if(s!==l)return{key:e,newRange:t.old.replace(s,l),user:a,repo:o,oldRef:s,newRef:l,newDate:c}}else{let t=gt(await gn(a,o,r),s,n);if(t)return{key:e,newRange:t,user:a,repo:o,oldRef:s,newRef:t}}return null}async function vn(e,t,n){let r=`${n.pypiApiUrl}/pypi/${e}/json`,i=await nt(r,n,{headers:{"accept-encoding":`gzip, deflate, br`}});if(`body`in i)return[JSON.parse(i.body),t,null,e];St(i.res,r,e,n.pypiApiUrl)}function yn(e,t){let n=e;for(let[e,{old:r,oldOrig:i}]of Object.entries(t)){let a=e.split(`\0`)[1],o=i||r;n=n.replace(RegExp(`("${G(a)} *[<>=~]+ *)${G(o)}(")`,`g`),(n,r,i)=>`${r}${t[e].new}${i}`)}return n}let bn;async function xn(){let[{execFile:e},{promisify:t}]=await Promise.all([import(`node:child_process`),import(`node:util`)]);return t(e)}function Sn(){return bn??=xn()}function Cn(){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 Qe(e)}return`https://proxy.golang.org`}function wn(){return(t.GONOPROXY||t.GOPRIVATE||``).split(`,`).map(e=>e.trim()).filter(Boolean)}function Tn(e,t){return t.some(t=>e===t||e.startsWith(`${t}/`))}function En(e){return e.replace(/[A-Z]/g,e=>`!${e.toLowerCase()}`)}const Dn=/\/v(\d+)$/;function On(e){let t=Dn.exec(e);return t?Number.parseInt(t[1]):1}function kn(e,t){let n=e.replace(Dn,``);return t<=1?n:`${n}/v${t}`}function An(e,t){let n=t?/^(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(e):/^replace\s+(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(e);if(!n)return null;let[,r,i,a]=n;return i.startsWith(`./`)||i.startsWith(`/`)||i.startsWith(`../`)?null:{origModule:r,targetModule:i,targetVersion:a}}function jn(e,t,n){return t===`indirect`||e.startsWith(`golang.org/x/`)||Mn(n)}function Mn(e){return/\d{14}-[0-9a-f]{12}$/.test(e)}function Nn(e,t,n){return[{name:e,old:t,new:t},n,null,e]}async function Pn(e,t,n){if(!t)return null;let r=t,i=e+101,a=e+2,o=7;for(;a<=i;){let e=Math.min(a+o-1,i),t=await Promise.all(Array.from({length:e-a+1},(e,t)=>n(a+t))),s=t.indexOf(null),c=s===-1?t:t.slice(0,s);if(c.length&&(r=c.at(-1)),s!==-1)break;a=e+1,o*=2}return r}function Fn(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:q(o),Time:s,...c===e?{}:{newPath:c},sameMajorNew:q(i),sameMajorTime:a},t,null,e]}function In(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=An(i,l);e&&(r[e.targetModule]=e.targetVersion,a.add(e.origModule));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 Ln(e,n,r,i,a){let o=On(e),s=async(e,n)=>{try{let{stdout:r}=await(await Sn())(`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=jn(e,n,r),[l,u]=await Promise.all([s(e,a.fetchTimeout),c?null:s(kn(e,o+1),a.goProbeTimeout)]);return l?Fn(e,n,r,await Pn(o,u,t=>s(kn(e,t),a.goProbeTimeout)),l.Version,l.Time):Nn(e,r,n)}async function Rn(e,t,n,r,i,a){if(Tn(e,a))return Ln(e,t,n,r,i);let o=En(e),s=On(e),c=async t=>{let n=kn(e,t);return i.doFetch(`${i.goProxyUrl}/${En(n)}/@latest`,{signal:AbortSignal.timeout(i.goProbeTimeout),headers:{"accept-encoding":`gzip, deflate, br`}}).then(async e=>e.ok?{...await e.json(),path:n}:null).catch(()=>null)},l=jn(e,t,n),[u,d]=await Promise.all([i.doFetch(`${i.goProxyUrl}/${o}/@latest`,{signal:AbortSignal.timeout(i.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}}),l?null:c(s+1)]);if(!u.ok)return Nn(e,n,t);let f,p;try{let e=await u.json();f=e.Version,p=e.Time}catch{return Nn(e,n,t)}return Fn(e,t,n,await Pn(s,d,c),f,p)}function zn(e,t){let n=G(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+${G(s)}\\s+)v${G(c)}`,`g`),`$1v${l}`);continue}if(o===`indirect`){n=n.replace(RegExp(`(${G(s)}) +v${G(c)}`,`g`),`$1 v${l}`);continue}let u=On(s),d=Number.parseInt(l.split(`.`)[0]);if(u!==d&&d>1){let e=kn(s,d);n=n.replace(RegExp(`${G(s)} +v${G(c)}`,`g`),`${e} v${l}`),o===`tool`&&(n=n.replace(RegExp(`(^\\s+|^tool\\s+)${G(s)}(/\\S+)?\\s*$`,`gm`),`$1${e}$2`)),r[s]=e}else n=n.replace(RegExp(`(${G(s)}) +v${G(c)}`,`g`),`$1 v${l}`);o!==`tool`&&(n=zn(n,s))}return[n,r]}function Vn(e,t,n){let r=Object.entries(t);if(!r.length)return;let i=new Map(r),a=r.map(([e])=>e).sort((e,t)=>t.length-e.length),o=RegExp(`"(${a.map(G).join(`|`)})(/|")`,`g`),c=f(`**/*.go`,{cwd:e});for(let t of c){let r=s(e,t),a=m(r,`utf8`),c=a.replace(o,(e,t,n)=>`"${i.get(t)}${n}`);c!==a&&n(r,c)}}function Hn(e){let t=[],n={},r=e.split(/\r?\n/),i=!1,a=!1;for(let e of r){let r=e.trim();if(/^use\s*\(/.test(r)){i=!0;continue}if(/^replace\s*\(/.test(r)){a=!0;continue}if(r===`)`){i=!1,a=!1;continue}if(i){let e=/^(\S+)/.exec(r);e&&!r.startsWith(`//`)&&t.push(e[1]);continue}let o=/^use\s+(\S+)/.exec(r);if(o){t.push(o[1]);continue}if(a||/^replace\s+/.test(r)){let e=An(r,a);e&&(n[e.targetModule]=e.targetVersion);continue}}return{use:t,replace:n}}function Un(e){let t=`https://${Wn(e)}`,n=new URL(t),r=n.pathname.split(`/`);if(r.length>3){let[,e,i,...a]=r;return n.pathname=`/${e}/${i}/${wt(t)}/${a.join(`/`)}`,n.toString()}else return t}function Wn(e){return Dn.test(e)?o(e):e}function Gn(e){return e.replace(/(\d{7})\d{7}-[0-9a-f]{12}$/,`$1`)}const Kn=/^\s*(?:-\s*)?uses:\s*['"]?([^'"#\s]+)['"]?/gm;function qn(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:vt.test(o)}}function Jn(e,t){return e?e===`github.com`?`https://api.github.com`:`https://${e}/api/v1`:t}async function Yn(e,t,n,r,i){let a=`${e}/repos/${t}/${n}/git/commits/${r}`;if(!i.noCache){let e=await qe(a);if(e)return e.body}try{let e=await ht(a,i);if(!e?.ok)return``;let t=await e.json(),n=t?.committer?.date||t?.author?.date||``;return n&&!i.noCache&&await Je(a,`immutable`,n),n}catch{return``}}function Xn(e,t){return Ct(P(q(e))?.version??q(e),t)}function Zn(e,t){let n=e;for(let{name:e,oldRef:r,newRef:i}of t){let t=RegExp(`(uses:\\s*['"]?)${G(e)}@${G(r)}`,`g`);n=n.replace(t,`$1${e}@${i}`)}return n}const Qn=[`.github`,`.gitea`,`.forgejo`];function $n(e){return RegExp(`(?:${Qn.map(G).join(`|`)})\\/(?:workflows\\/[^/]+|(?:[^/]+\\/)*action)\\.ya?ml$`).test(e.replace(/\\/g,`/`))}function er(e){let t=new Set;try{for(let n of h(s(e,`workflows`)))/\.ya?ml$/.test(n)&&t.add(l(s(e,`workflows`,n)))}catch{}try{for(let n of h(e,{recursive:!0,withFileTypes:!0}))!n.isFile()||!/^action\.ya?ml$/.test(n.name)||t.add(l(s(n.parentPath,n.name)))}catch{}return Array.from(t)}const tr=/^(v?\d+(?:\.\d+){0,2})(-.+)?$/,nr=/^\s*FROM\s+(?:--platform=\S+\s+)?(\S+)/gm,rr=/^\s*image:\s*['"]?([^\s'"#]+)['"]?/gm,ir=/^\s*container:\s*['"]?([^\s'"#{}]+:[^\s'"#{}:]+)['"]?\s*$/gm,ar=/^\s*(?:-\s*)?uses:\s*['"]?docker:\/\/([^'"#\s]+)['"]?/gm;function or(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(`/`),repo:t[t.length-1]}}function sr(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||!tr.test(r)))return null;let{registry:i,namespace:a,repo:o}=or(n);return{registry:i,namespace:a,repo:o,tag:r,fullImage:n}}function cr(e){let t=tr.exec(e);return t?{version:t[1],suffix:t[2]||``}:null}function lr(e,t){let n=cr(t);return n?Ct(e,n.version,n.suffix):t}function ur(e,t){let n=[];for(let r of e.matchAll(t)){let e=sr(r[1]);e&&n.push({ref:e,match:r[1]})}return n}async function dr(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={headers:{"accept-encoding":`gzip, deflate, br`}},s=async e=>{try{let t=await nt(a(e),n,o);return`body`in t?JSON.parse(t.body):null}catch{return null}},c=await s(1);if(!c)return r;for(let e of c.results||[])r[e.name]=e.tag_last_pushed||e.last_updated||``;let l=Math.min(Math.ceil((c.count||0)/100),10);if(l<2)return r;let u=await Promise.all(Array.from({length:l-1},(e,t)=>s(t+2)));for(let e of u)if(e)for(let t of e.results||[])r[t.name]=t.tag_last_pushed||t.last_updated||``;return r}async function fr(e,t,n){let{registry:r,namespace:i,repo:a}=or(e);if(r)throw Error(`Non-Docker-Hub registries are not yet supported: ${r}`);return[{tags:await dr(i,a,n),name:e},t,null,e]}function pr(e,t,n,r,i,a){let o=cr(t);if(!o)return null;let s=F(q(o.version))?.version;if(!s)return null;let c=s,l=``,u=``;for(let[t,s]of Object.entries(e)){let e=cr(t);if(!e||e.suffix!==o.suffix)continue;let d=F(q(e.version))?.version;if(!d||a&&!U(d,a)||!K(s,r,i))continue;let f=I(c,d);!f||!n.has(f)||me(d,c)&&(c=d,l=t,u=s)}if(!l||c===s)return null;let d=lr(c,t);return d===t?null:{newTag:d,date:u}}function mr(e,t,n){let r=e;for(let[e,i]of Object.entries(t)){let t=e.split(`\0`)[1],a=i.oldOrig||i.old;for(let e of n)r=r.replace(e(G(t),G(a)),`$1${t}:${i.new}`)}return r}function hr(e,t){return mr(e,t,[(e,t)=>RegExp(`(FROM\\s+(?:--platform=\\S+\\s+)?)${e}:${t}`,`g`)])}function gr(e,t){return mr(e,t,[(e,t)=>RegExp(`(image:\\s*['"]?)${e}:${t}`,`g`)])}function _r(e,t){return mr(e,t,[(e,t)=>RegExp(`((?:container|image):\\s*['"]?)${e}:${t}`,`g`),(e,t)=>RegExp(`(uses:\\s*['"]?docker://)${e}:${t}`,`g`)])}const vr=[`Dockerfile`,`docker-compose.yml`,`docker-compose.yaml`];function yr(e){return/^docker-.+\.ya?ml$/.test(e)}function br(e){return/^Dockerfile(\..+)?$/.test(e)}function xr(e){return br(e)||yr(e)}function Sr(e){return br(e)?nr:rr}function Cr(e){return e.registry?``:e.namespace===`library`?`https://hub.docker.com/_/${e.repo}`:`https://hub.docker.com/r/${e.namespace}/${e.repo}`}const wr=new Map;async function Tr(e,t,n){let r=`${Qe(n.cratesIoUrl)}/api/v1/crates/${encodeURIComponent(e)}/versions?per_page=100`,i=n.noCache?void 0:wr.get(r);return i||(i=nt(r,n,$e()).then(t=>{`body`in t||St(t.res,r,e,n.cratesIoUrl);let i;try{i=JSON.parse(t.body)}catch{throw Error(`Invalid JSON from ${r}`)}let a=(i.versions||[]).filter(e=>!e.yanked),o={},s={};for(let e of a)e.num&&(o[e.num]={},s[e.num]=e.created_at||``);return{name:e,versions:o,time:s,"dist-tags":{latest:a[0]?.num??``}}}).catch(e=>{throw wr.delete(r),e}),wr.set(r,i)),[await i,t,null,e]}function Er(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(!N(a))continue;let o=t.get(i);o||t.set(i,o=[]),o.push(a)}return t}const Dr=/^\d/;function Or(e,t){return Dr.test(e)?mn(X(`^${e}`),t,`^${e}`).replace(/^\^/,``):mn(X(e),t,e)}function kr(e,t,n){let r=e.get(t);if(!r)return;let i=Dr.test(n)?`^${n}`:n,a;for(let e of r)U(e,i)&&(!a||L(e,a))&&(a=e);return a}const Ar=Pe.map(G).join(`|`);function jr(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=G(t),s=G(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(`(\\[(?:${Ar})\\.${o}\\][^\\[]*?version\\s*=\\s*["'])${s}(["'])`,`g`),`$1${a}$2`)}return n}function Mr(e){return e.split(`|`)[0]}function Nr(e,t){let n=t===`.`?``:`|${t}`,r={};for(let[t,i]of Object.entries(e)){let[e,a]=t.split(`\0`),o=Mr(e);e===`${o}${n}`&&(r[`${o}${a}`]=i)}return r}const Pr=/[*?{[]/;async function Fr(e,t,n,r=32){let i=new Set,a=[];for(let r of e){let e=Pr.test(r)?f(r,{cwd:t}).map(e=>l(s(t,e))):[l(s(t,r))];for(let r of e){let e=s(r,n);if(i.has(e))continue;i.add(e);let o=c(t,r);a.push({absPath:e,memberPath:`./${o.replace(/\\/g,`/`)}`})}}return(await W(a,async({absPath:e,memberPath:t})=>{try{return{absPath:e,content:await x(e,`utf8`),memberPath:t}}catch{return null}},{concurrency:r})).filter(e=>e!==null)}function Ir(e){let t=[],n=e.split(`
5
- `),r=!1;for(let e of n){if(/^packages\s*:/.test(e)){r=!0;continue}if(r){if(/^\S/.test(e))break;let n=/^\s+-\s+['"]?([^'"#\s]+)['"]?/.exec(e);n&&t.push(n[1])}}return t}const Lr={"pnpm-workspace.yaml":`npm`,"package.json":`npm`,"pyproject.toml":`pypi`,"go.work":`go`,"go.mod":`go`,"Cargo.toml":`cargo`},Rr=new Set([`npm`,`pypi`,`go`,`cargo`,`actions`,`docker`]),zr=(e,t)=>typeof e==`string`?Qe(e):typeof t==`function`?t():t;function Br(e,t){let n=new Map,r=new Set(e),i=t;for(;r.size;){for(let e of r){let t=s(i,e);try{u(t),n.set(e,t),r.delete(e)}catch{}}let e=o(i);if(e===i)break;i=e}return n}async function Vr(e,t){let n=await W(e,async e=>{try{return[e,await x(e,`utf8`)]}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}},{concurrency:t});return new Map(n)}function Z(e,t){t&&(e.date=t,e.age=De(t,{noAffix:!0}))}function Hr(e){let t=0;for(let n of Object.keys(e))t+=Object.keys(e[n]).length;return t}function Ur(e){console.error(`${Re()} ${e}`)}function Q(e,t,n,r,i){if(i===`engines`&&je.includes(e)||t===`pypi`&&e===`python`)return!1;if(!n.size&&!r.size)return!0;let a=t===`go`?Wn(e):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=p(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(Lr)){let r=s(e,t),i=null;try{i=p(r)}catch{}i?.isFile()&&n.add(l(r))}try{for(let t of h(e,{withFileTypes:!0}))t.isFile()&&xr(t.name)&&n.add(l(s(e,t.name)))}catch{}let t=l(e).replace(/\\/g,`/`),r=Qn.some(e=>t.endsWith(`${e}/workflows`)),i=!r&&Qn.some(e=>t.endsWith(e)),a;a=r?[o(t)]:i?[t]:Qn.map(e=>s(t,e));for(let e of a)for(let t of er(e))n.add(t)}else throw Error(`${e} is neither a file nor directory`)}else{let t=new Set(Qn),r=[...Object.keys(Lr),...vr,...Qn];for(let[i,a]of Br(r,e()))if(t.has(i))for(let e of er(a))n.add(e);else n.add(l(a));try{for(let t of h(e(),{withFileTypes:!0}))t.isFile()&&xr(t.name)&&!vr.includes(t.name)&&n.add(l(s(e(),t.name)))}catch{}}for(let e of n)a(e)===`go.work`&&n.delete(s(o(e),`go.mod`));for(let e of n)a(e)===`pnpm-workspace.yaml`&&n.delete(s(o(e),`package.json`));return n}function $(e,t){n===`win32`&&_(e,0),v(e,t,n===`win32`?{flag:`r+`}:void 0)}function Gr(e){let t={results:{}};for(let n of Object.keys(e))for(let[r,i]of Object.entries(e[n])){typeof i.oldPrint==`string`&&(i.old=i.oldPrint),typeof i.newPrint==`string`&&(i.new=i.newPrint),typeof i.oldOrig==`string`&&!ln(i.oldOrig)&&(i.old=n===`go`?Gn(i.oldOrig):i.oldOrig),n===`go`&&(i.new=Gn(i.new)),n===`actions`&&(i.old=q(i.old),i.new=q(i.new)),delete i.oldPrint,delete i.newPrint,delete i.oldOrig,delete i.date;let[e,a]=r.split(`\0`),o=t.results[n]??={};(o[e]??={})[a]=i}return t}let Kr=!1;async function qr(t={}){if(!Kr){let{enableDnsCache:e}=await import(`./dns.js`);e(),Kr=!0}let n={...t},c=n.sockets??25,u=n.timeout??0,d=zr(t.forgeapi,`https://api.github.com`),f=zr(t.pypiapi,`https://pypi.org`),p=zr(t.jsrapi,`https://jsr.io`),m=zr(t.goproxy,Cn),h=zr(t.cargoapi,`https://crates.io`),g=zr(t.dockerapi,`https://hub.docker.com`),_=wn(),v=n.color===!0||n.noColor!==!0&&r.isTTY,y=e=>v?t=>i(e,String(t)):String,b=y(`magenta`),S=y(`green`),C=y(`red`),w={fetchTimeout:u||5e3,goProbeTimeout:u?u/2:2500,forgeApiUrl:d,pypiApiUrl:f,jsrApiUrl:p,goProxyUrl:m,cratesIoUrl:h,dockerApiUrl:g,doFetch:async(e,t)=>{n.verbose&&Ur(`${b(t?.method||`GET`)} ${e}`);let r=await et(e,t);return n.verbose&&Ur(`${r.ok?S(r.status):C(r.status)} ${e}`),r},noCache:!!n.noCache},T=Pt(n.greatest),E=Pt(n.prerelease),te=Pt(n.release),ne=Pt(n.patch),re=Pt(n.minor),ie=Pt(n.allowDowngrade),D=n.modes?.length?new Set(n.modes):Rr;D.has(`actions`)&&ft();function ae(e){return ne===!0||Fe(e,ne)?new Set([`patch`]):re===!0||Fe(e,re)?new Set([`patch`,`minor`]):new Set([`patch`,`minor`,`major`])}let oe=new Map;function se(e){let t=oe.get(e);return t||(t={useGreatest:typeof T==`boolean`?T:Fe(e,T),usePre:typeof E==`boolean`?E:Fe(e,E),useRel:typeof te==`boolean`?te:Fe(e,te),semvers:ae(e)},oe.set(e,t)),t}let ce=jt(n.include??[]),le=jt(n.exclude??[]),ue=n.pin??{},O={},k={},A={},j={},M=Date.now(),P=n.cooldown?Ve(String(n.cooldown)):0,de=e(),fe=e=>e.replace(`${de}/`,``).replace(`${de}\\`,``),F=0,I=(e,t,n,r,i,a)=>{O[e][`${t}${n}${r}`]={old:i,oldOrig:a}},pe=Wr(n.files?.length?new Set(n.files):!1),L=await Vr(Array.from(pe).filter(e=>{if($n(e))return D.has(`actions`)||D.has(`docker`);let t=a(e);if(xr(t))return D.has(`docker`);let n=Lr[t];return!!n&&D.has(n)}),c),me={},R={},he=[],z=null,ge=[],B=!1,_e=[],ve=!1,ye=[],be=[],V={};async function H(e){let t=await Lt(e);return{modeConfig:t,modeInclude:t.include?.length?jt([...n.include??[],...t.include]):ce,modeExclude:t.exclude?.length?jt([...n.exclude??[],...t.exclude]):le,pin:{...t.pin,...ue}}}function xe(e,t){return n.types?.length?n.types:t?.types?.length?t.types:e===`npm`?Ae:e===`pypi`?Me:e===`go`?n.indirect?Ne:Ne.filter(e=>e!==`indirect`):e===`cargo`?Pe:[]}function U(e,t,n,r){O.docker??={};for(let i of n)for(let{ref:n}of ur(e,i)){if(!Q(n.fullImage,`docker`,r.include,r.exclude,`docker`))continue;let e=`${t}${n.fullImage}`;if(O.docker[e])continue;let i=cr(n.tag);i&&(O.docker[e]={old:i.version,oldOrig:n.tag},be.push({key:e,fullImage:n.fullImage,ref:n,filePin:r.pin}))}}async function Ce(e){let t=await Lt(e);return{include:t.include?.length?jt([...n.include??[],...t.include]):ce,exclude:t.exclude?.length?jt([...n.exclude??[],...t.exclude]):le,pin:t.pin??{}}}for(let e of pe){if($n(e)){let t=D.has(`actions`),n=D.has(`docker`);if(!t&&!n)continue;let r=L.get(e),i=fe(e),a=await Ce(o(e));if(me[i]={absPath:e,content:r},t){O.actions??={};let e=Array.from(r.matchAll(Kn),e=>qn(e[1])).filter(e=>e!==null);for(let t of e){if(!Q(t.name,`actions`,a.include,a.exclude,`actions`))continue;let e=`${i}${t.name}`;O.actions[e]||(O.actions[e]={old:t.ref},ye.push({...t,key:e,apiUrl:Jn(t.host,d),filePin:a.pin}))}}n&&(R[i]={absPath:e,content:r,fileType:`workflow`},U(r,i,[rr,ir,ar],a));continue}let t=a(e);if(xr(t)){if(!D.has(`docker`))continue;let n=L.get(e),r=fe(e),i=br(t)?`dockerfile`:`compose`,a=await Ce(o(e));R[r]={absPath:e,content:n,fileType:i},U(n,r,[Sr(t)],a);continue}let n=Lr[t];if(!D.has(n))continue;if(t===`go.work`){O[n]??={};let t=o(l(e)),r=L.get(e);z={file:e,content:r};let i=Hn(r),[a,u]=await Promise.all([H(t),W(i.use,async e=>{let n=l(s(t,e,`go.mod`));try{return{usePath:e,modPath:n,content:await x(n,`utf8`)}}catch{return null}},{concurrency:c})]),{modeConfig:d,modeInclude:f,modeExclude:p,pin:m}=a,h=xe(n,d);j[n]=e,V[n]={modeConfig:d,projectDir:t,pin:m};for(let e of u){if(!e)continue;let{usePath:t,modPath:r,content:i}=e,a=In(i),s=o(r);he.push({absPath:r,content:i,projectDir:s,usePath:t});let c=t===`.`?``:`|${t}`;for(let e of h){let t=a[e]||{};for(let[r,i]of Object.entries(t))Q(r,n,f,p,e)&&I(n,e,c,r,Gn(i),q(i))}}for(let[e,t]of Object.entries(i.replace))Q(e,n,f,p,`replace`)&&I(n,`replace`,``,e,Gn(t),q(t));F+=Object.keys(O[n]).length;continue}if(t===`go.mod`&&z||t===`package.json`&&ve)continue;if(t===`Cargo.toml`){O[n]??={};let t=L.get(e),r=ee(t),i=o(l(e));j[n]=e;let a=Br([`Cargo.lock`],i).get(`Cargo.lock`),s=r.workspace?.members,u=Array.isArray(s)&&s.length,[d,f,p]=await Promise.all([H(i),a?x(a,`utf8`):Promise.resolve(null),u?Fr(s,i,`Cargo.toml`,c):Promise.resolve([])]),{modeConfig:m,modeInclude:h,modeExclude:g,pin:_}=d,v=xe(n,m);V[n]={modeConfig:m,projectDir:i,pin:_};let y=f?Er(f):new Map,b=(e,t)=>{for(let r of v){let i=Ie(e,r)||{};if(!(typeof i!=`object`||Array.isArray(i))){for(let[e,a]of Object.entries(i))if(Q(e,n,h,g,r))if(typeof a==`object`&&a&&`version`in a&&!(`git`in a)&&!(`path`in a)){let i=String(a.version);Se(i)&&I(n,r,t,e,kr(y,e,i)??X(i),i)}else typeof a==`string`&&Se(a)&&I(n,r,t,e,kr(y,e,a)??X(a),a)}}};if(u){B=!0,b(r,``),ge.push({absPath:l(e),content:t,memberPath:`.`});for(let e of p){ge.push(e);try{b(ee(e.content),`|${e.memberPath}`)}catch(t){throw Error(`Error parsing ${e.absPath}: ${t.message}`)}}}else A[n]=t,b(r,``);F+=Object.keys(O[n]).length;continue}if(t===`pnpm-workspace.yaml`){O[n]??={};let t=o(l(e)),r=L.get(e);ve=!0;let i=Ir(r),a=s(t,`package.json`),[u,d,f]=await Promise.all([H(t),x(a,`utf8`).catch(()=>null),Fr(i,t,`package.json`,c)]),{modeConfig:p,modeInclude:m,modeExclude:h,pin:g}=u,_=xe(n,p);j[n]=e,V[n]={modeConfig:p,projectDir:t,pin:g};let v=(e,t)=>{for(let r of _){let i=e[r]||{};if(typeof i==`string`){let[e,a]=i.split(`@`);Q(e,n,m,h,r)&&I(n,r,t,e,X(a),a)}else if(typeof i==`object`&&!Array.isArray(i))for(let[e,a]of Object.entries(i))Q(e,n,m,h,r)&&(ln(a)?I(n,r,t,e,dn(a,e).version,a):Se(a)?I(n,r,t,e,X(a),a):un(a)?I(n,r,t,e,`0.0.0`,a):k[`${r}${t}${e}`]={old:a})}};if(d!==null){let e;try{e=JSON.parse(d)}catch(e){throw Error(`Error parsing ${a}: ${e.message}`)}_e.push({absPath:l(a),content:d,memberPath:`.`}),v(e,``)}for(let e of f){let t;try{t=JSON.parse(e.content)}catch(t){throw Error(`Error parsing ${e.absPath}: ${t.message}`)}_e.push(e),v(t,`|${e.memberPath}`)}F+=Object.keys(O[n]).length+Object.keys(k).length;continue}j[n]=e,O[n]??={};let r=o(l(e)),{modeConfig:i,modeInclude:u,modeExclude:f,pin:p}=await H(r),m=xe(n,i),h={};A[n]=L.get(e);try{if(n===`npm`)h=JSON.parse(A[n]);else if(n===`pypi`)h=ee(A[n]);else if(n===`go`){let e=In(A[n]);h.deps=e.deps,h.indirect=e.indirect,h.replace=e.replace,h.tool=e.tool}}catch(t){throw Error(`Error parsing ${e}: ${t.message}`)}for(let e of m){let t;if(t=n===`npm`||n===`go`?h[e]||{}:Ie(h,e)||{},Array.isArray(t)&&n===`pypi`)for(let{name:r,version:i}of ke(t))Q(r,n,u,f,e)&&I(n,e,``,r,X(i),i);else if(typeof t==`string`){let[r,i]=t.split(`@`);Q(r,n,u,f,e)&&I(n,e,``,r,X(i),i)}else for(let[r,i]of Object.entries(t))Q(r,n,u,f,e)&&(n===`npm`&&ln(i)?I(n,e,``,r,dn(i,r).version,i):n!==`go`&&Se(i)?I(n,e,``,r,X(i),i):n===`npm`&&un(i)?I(n,e,``,r,`0.0.0`,i):n===`npm`?k[`${e}${r}`]={old:i}:n===`go`&&I(n,e,``,r,Gn(i),q(i)))}F+=Object.keys(O[n]).length+Object.keys(k).length,V[n]={modeConfig:i,projectDir:r,pin:p}}if(O.actions&&(F+=Object.keys(O.actions).length),O.docker&&(F+=Object.keys(O.docker).length),F===0)return{results:{},message:`No dependencies found, nothing to do.`};let we=[],Te={registry:n.registry};for(let e of Object.keys(V)){let t=!!O[e]&&Object.keys(O[e]).length>0,r=e===`npm`&&Object.keys(k).length>0;if(!t&&!r)continue;let{modeConfig:i,projectDir:a,pin:o}=V[e];we.push((async()=>{let t=new Map,r=n.cooldown??i.cooldown,s=r?Ve(String(r)):0,l=e=>{if(s)for(let[t,{date:n}]of Object.entries(e))n&&!K(n,s,M)&&delete e[t]};if(await W(Object.keys(O[e]),async n=>{let[r,c]=n.split(`\0`),l=Mr(r),u=O[e][n],d=null;if(e===`npm`){let{oldOrig:t}=u;if(t&&ln(t))d=await fn(c,l,w);else if(t&&un(t))try{d=await sn(c,l,i,Te,w)}catch{delete O[e][n];return}else d=await sn(c,l,i,Te,w)}else d=e===`go`?await Rn(c,l,u.oldOrig||u.old,a,w,_):e===`cargo`?await Tr(c,l,w):await vn(c,l,w);if(!d)return;let[f,,p]=d;if(f?.error)throw Error(f.error);let{useGreatest:m,usePre:h,useRel:g,semvers:v}=se(f.name),y=u.old,b=u.oldOrig,x=o[c],S=ct(f,{usePre:h,useRel:g,useGreatest:m,semvers:v,range:y,mode:e,pinnedRange:x,cooldownDays:s||void 0,now:s?M:void 0},{allowDowngrade:ie,matchesAny:Fe,isGoPseudoVersion:Mn}),C=``;if([`go`,`pypi`].includes(e)&&S)C=S;else if(e===`cargo`&&S&&b)C=Or(b,S);else if(S)if(b&&un(b))C=String(Yt()[`save-exact`])===`true`?S:`^${S}`;else if(b&&ln(b)){let e=/^(npm:@jsr\/[^@]+@|jsr:@[^@]+@)(.+)$/.exec(b);e?C=`${e[1]}${S}`:b.startsWith(`jsr:`)&&(C=`jsr:${S}`)}else C=mn(y,S,b);if(!S||S===y||b&&b===C){delete O[e][n];return}let T=``;e===`pypi`&&f.releases?.[S]?.[0]?.upload_time_iso_8601?T=f.releases[S][0].upload_time_iso_8601:e===`go`&&f.Time?T=f.Time:e===`cargo`&&f.time?.[S]&&(T=f.time[S]),u.new=C,b&&ln(b)&&(u.newPrint=S),e===`npm`?t.set(n,{name:c,promise:cn(f.name,S,i,Te,w)}):e===`pypi`?u.info=Tt(f,p,f.info.name):e===`go`?u.info=Un(f.newPath||c):e===`cargo`&&(u.info=`https://crates.io/crates/${c}`),T&&Z(u,T)},{concurrency:c}),await Promise.all(Array.from(t,async([t,{name:n,promise:r}])=>{let i=await r,a=O[e][t];a&&(a.info=Tt({repository:i.repository,homepage:i.homepage},null,n),i.date&&Z(a,i.date))})),e===`npm`&&Object.keys(k).length){let t=(await W(Object.entries(k),([e,t])=>{let n=e.split(`\0`)[1];return _n(e,t,se(n).useGreatest,w)},{concurrency:c})).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:vt.test(o)?o.substring(0,7):o,newPrint:vt.test(s)?s.substring(0,7):s,info:`https://github.com/${i}/${a}`},c&&Z(O[e][t],c)}}l(O[e])})())}if(ye.length&&we.push((async()=>{let e=new Map;for(let t of ye){let n=`${t.apiUrl}/${t.owner}/${t.repo}`,r=e.get(n);r||e.set(n,r={apiUrl:t.apiUrl,owner:t.owner,repo:t.repo,infos:[]}),r.infos.push(t)}await W(e.values(),async({apiUrl:e,owner:t,repo:n,infos:r})=>{let i=await xt(e,t,n,w),a=[],o=new Map,s=new Map,l=new Map;for(let e of i){s.set(e.name,e);let t=q(e.name);N(t)&&(a.push(t),o.has(t)||o.set(t,e.name)),e.commitSha&&l.set(e.commitSha,e.name)}let u=new Map;async function d(r){if(u.has(r))return u.get(r);let i=await Yn(e,t,n,r,w);return u.set(r,i),i}async function f(e){let t=new Set;for(let n=0;n<20;n++){let n=st({},t.size?a.filter(e=>!t.has(e)):a,e);if(!n||n===e.range)return null;let r=o.get(n);if(!r){t.add(n);continue}let i=s.get(r)?.commitSha||``;if(!P)return{version:n,tag:r,commitSha:i,date:``};let c=i?await d(i):``;if(K(c,P,M))return{version:n,tag:r,commitSha:i,date:c};t.add(n)}return null}await W(r,async({key:e,host:r,ref:i,name:a,isHash:o,filePin:c})=>{let u=O.actions[e],p=`https://${r||`github.com`}/${t}/${n}`,m=ue[a]??c[a];if(o){let{usePre:t,useRel:n}=se(a),r=await f({range:`0.0.0`,semvers:new Set([`patch`,`minor`,`major`]),usePre:t,useRel:n,useGreatest:!0,pinnedRange:m});if(!r){delete O.actions[e];return}let{tag:o,commitSha:s,date:c}=r;if(!s||s===i||s.startsWith(i)||i.startsWith(s)){delete O.actions[e];return}let d=l.get(i);if(!d){for(let[e,t]of l)if(e.startsWith(i)){d=t;break}}u.old=i,u.new=s.substring(0,i.length),u.oldPrint=d||i.substring(0,7),u.newPrint=o,u.info=p,c&&Z(u,c)}else{let t=J(q(i));if(!t){delete O.actions[e];return}let{usePre:n,useRel:r,semvers:o}=se(a),c=await f({range:t,semvers:o,usePre:n,useRel:r,useGreatest:!0,pinnedRange:m});if(!c){delete O.actions[e];return}let{tag:l,commitSha:h,date:g}=c,_=Xn(l,i);if(_===i){delete O.actions[e];return}if(u.new=s.has(_)?_:l,u.info=p,h&&g)Z(u,g);else if(h){let e=await d(h);e&&Z(u,e)}}},{concurrency:c})},{concurrency:c}),Object.keys(O.actions).length||delete O.actions})()),be.length&&we.push((async()=>{let e=new Map;for(let t of be){let n=e.get(t.fullImage);n||e.set(t.fullImage,n=[]),n.push(t)}await W(e.entries(),async([e,t])=>{let n;try{let[t]=await fr(e,`docker`,w);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}=se(e.fullImage),a=ue[e.fullImage]??e.filePin[e.fullImage],o=pr(n.tags,r,i,P||void 0,P?M:void 0,a);if(!o){delete O.docker[e.key];continue}t.new=o.newTag,t.info=Cr(e.ref),Z(t,o.date)}},{concurrency:c}),Object.keys(O.docker).length||delete O.docker})()),await Promise.all(we),!Hr(O))return{results:{},message:`All dependencies are up to date.`};if(n.update){let e=(e,t,n)=>{for(let r of t){let t=Nr(O[e],r.memberPath);Object.keys(t).length&&$(r.absPath,n(r.content,t))}},t=new Map;if(O.actions)for(let[e,n]of Object.entries(O.actions)){let[r,i]=e.split(`\0`),a=t.get(r);a||t.set(r,a=[]),a.push({name:i,oldRef:n.old,newRef:n.new})}let n=new Map;if(O.docker)for(let[e,t]of Object.entries(O.docker)){let[r]=e.split(`\0`),i=n.get(r);i||n.set(r,i={}),i[e]=t}let r=Gr(O);for(let r of Object.keys(O)){if(!Object.keys(O[r]).length)continue;if(r===`actions`){for(let[e,n]of t){let{absPath:t,content:r}=me[e]||{};if(!t)continue;let i=Zn(r,n);$(t,i),R[e]&&(R[e].content=i)}continue}if(r===`docker`){for(let[e,t]of n){let n=R[e];if(!n)continue;let{absPath:r,content:i,fileType:a}=n;$(r,(a===`dockerfile`?hr:a===`compose`?gr:_r)(i,t))}continue}let i=A[r];if(r===`go`&&z){for(let e of he){let t=Nr(O[r],e.usePath);if(!Object.keys(t).length)continue;let[n,i]=Bn(e.content,t);n!==e.content&&$(e.absPath,n),Vn(e.projectDir,i,$)}let e={};for(let[t,n]of Object.entries(O[r]))t.split(`\0`)[0]===`replace`&&(e[t]=n);if(Object.keys(e).length){let[t]=Bn(z.content,e);t!==z.content&&$(z.file,t)}}else if(r===`go`){let[e,t]=Bn(i,O[r]);$(j[r],e),Vn(o(l(j[r])),t,$)}else if(r===`cargo`&&B)e(r,ge,jr);else if(r===`cargo`)$(j[r],jr(i,O[r]));else if(r===`npm`&&ve)e(r,_e,pn);else{let e=r===`npm`?pn:yn;$(j[r],e(i,O[r]))}}return r}return Gr(O)}function Jr(e,t){if(t.some(e=>e===`-h`||e===`--help`||e===`-v`||e===`--version`))return[];let n=(...t)=>t.some(t=>d(s(e,t))),r=new Set;return n(`package.json`,`pnpm-workspace.yaml`)&&(r.add(`https://registry.npmjs.org/`),r.add(`https://jsr.io/`),r.add(`https://api.github.com/`)),n(`pyproject.toml`)&&r.add(`https://pypi.org/`),n(`Cargo.toml`)&&r.add(`https://crates.io/`),n(`go.mod`,`go.work`)&&r.add(`https://proxy.golang.org/`),n(...vr)&&r.add(`https://hub.docker.com/`),n(`.github/workflows`)&&(r.add(`https://api.github.com/`),r.add(`https://hub.docker.com/`)),Array.from(r)}function Yr(e){let t=``,n=0,r=e.length;for(;n<r;){let i=e[n];if(i===`"`){for(t+=i,n++;n<r;){let i=e[n];if(t+=i,n++,i===`\\`&&n<r){t+=e[n],n++;continue}if(i===`"`)break}continue}if(i===`/`&&n+1<r&&e[n+1]===`/`){for(n+=2;n<r&&e[n]!==`
6
- `;)n++;continue}if(i===`/`&&n+1<r&&e[n+1]===`*`){for(n+=2;n<r&&(e[n]!==`*`||e[n+1]!==`/`);)n++;n+=2;continue}t+=i,n++}return t=t.replace(/,(\s*[}\]])/g,`$1`),JSON.parse(t)}export{Se as _,At as a,Mt as c,Ze as d,Xe as f,He as g,ze as h,Wn as i,kt as l,Ue as m,Jr as n,Lt as o,Oe as p,qr as r,Et as s,Yr as t,Nt as u};
1
+ import{cwd as e,env as t,platform as n,stderr as r}from"node:process";import{styleText as i}from"node:util";import{basename as a,dirname as o,join as s,relative as c,resolve as l}from"node:path";import{accessSync as u,existsSync as d,globSync as f,lstatSync as p,readFileSync as m,readdirSync as h,statSync as g,truncateSync as _,writeFileSync as v}from"node:fs";import{access as y,mkdir as b,readFile as x,writeFile as S}from"node:fs/promises";import{createHash as ee}from"node:crypto";import{homedir as C}from"node:os";import{pathToFileURL as te}from"node:url";function w(e){let t={},n=t,r=e.split(/\r?\n/);for(let e=0;e<r.length;e++){let i=r[e],a=ae(i).trim();if(!a)continue;let o=/^\[\[([^\]]+)\]\]$/.exec(a);if(o){let e=t,r=D(o[1]);for(let t=0;t<r.length-1;t++){let n=e[r[t]];Array.isArray(n)?e=n[n.length-1]:((!n||typeof n!=`object`)&&(e[r[t]]={}),e=e[r[t]])}let i=r[r.length-1];Array.isArray(e[i])||(e[i]=[]);let a={};e[i].push(a),n=a;continue}let s=/^\[([^[\]]+)\]$/.exec(a);if(s){n=t;for(let e of D(s[1]))(!(e in n)||typeof n[e]!=`object`||Array.isArray(n[e]))&&(n[e]={}),n=n[e];continue}let c=ce(a);if(c<0)continue;let l=a.slice(0,c).trim(),u=a.slice(c+1).trim(),d=D(l),f=n;for(let e=0;e<d.length-1;e++)(!(d[e]in f)||typeof f[d[e]]!=`object`||Array.isArray(f[d[e]]))&&(f[d[e]]={}),f=f[d[e]];let p=d[d.length-1];if(u.startsWith(`[`)&&oe(u,`]`)<0){let t=[];T(u.slice(1),t);for(let n=e+1;n<r.length;n++){let i=ae(r[n]).trim();if(!i)continue;let a=oe(i,`]`);if(a>=0){T(i.slice(0,a),t),e=n;break}T(i,t)}f[p]=t}else f[p]=E(u)}return t}function T(e,t){let n=e.trim();if(n)for(let e of ie(n)){let n=e.trim();n&&t.push(E(n))}}function E(e){if(e.startsWith(`[`)){let t=[],n=se(e,`]`);return T(e.slice(1,n<0?e.length:n),t),t}return e.startsWith(`{`)?re(e):e.startsWith(`"""`)?O(e.slice(3,e.lastIndexOf(`"""`))):e.startsWith(`'''`)?e.slice(3,e.lastIndexOf(`'''`)):e.startsWith(`"`)?O(e.slice(1,e.lastIndexOf(`"`))):e.startsWith(`'`)?e.slice(1,e.lastIndexOf(`'`)):ne(e)}function ne(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]=E(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 D(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 ae(e){let t=oe(e,`#`);return t<0?e:e.slice(0,t)}function oe(e,t){let n=null;for(let r=0;r<e.length;r++){let i=e[r];if(n){if(i===`\\`&&n===`"`){r++;continue}i===n&&(n=null)}else if(i===`"`||i===`'`)n=i;else if(i===t)return r}return-1}function se(e,t){let n=-1,r=null;for(let i=0;i<e.length;i++){let a=e[i];if(r){if(a===`\\`&&r===`"`){i++;continue}a===r&&(r=null)}else a===`"`||a===`'`?r=a:a===t&&(n=i)}return n}function ce(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 O(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 le=/^v?(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*))?(?:\+[a-zA-Z0-9._-]+)?$/,ue=new Map;function k(e){if(typeof e!=`string`)return null;let t=ue.get(e);if(t!==void 0)return t;let n=le.exec(e.trim());if(!n)return ue.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 ue.set(e,s),s}function A(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)}function j(e,t){return e.major-t.major||e.minor-t.minor||e.patch-t.patch}function M(e,t){let n=j(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=A(e.prerelease[n],t.prerelease[n]);if(r!==0)return r}return 0}function de(e){return k(e)?.version??null}function N(e){return k(e)}const P=new Map,fe=/(?:^|[^.\d])(\d+)(?:\.(\d+))?(?:\.(\d+))?/;function pe(e){if(typeof e!=`string`)return null;let t=P.get(e);if(t!==void 0)return t;let n=fe.exec(e);if(!n)return P.set(e,null),null;let r={version:`${n[1]||`0`}.${n[2]||`0`}.${n[3]||`0`}`};return P.set(e,r),r}function F(e,t){let n=k(e),r=k(t);return!n||!r?null:I(n,r)}function I(e,t){if(e.version===t.version)return null;let n=M(e,t),r=n>0?e:t,i=n>0?t:e,a=r.prerelease.length>0;if(i.prerelease.length>0&&!a){if(!i.patch&&!i.minor)return`major`;if(j(i,r)===0)return i.minor&&!i.patch?`minor`:`patch`}let o=a?`pre`:``;return e.major===t.major?e.minor===t.minor?e.patch===t.patch?`prerelease`:`${o}patch`:`${o}minor`:`${o}major`}function L(e,t){let n=k(e),r=k(t);return n&&r?M(n,r):null}function me(e,t){return(L(e,t)??-1)>0}function R(e,t){return(L(e,t)??-1)>=0}function he(e,t){return(L(e,t)??1)<0}function ge(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 _e(e,t){let n=M(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 z(e,t,n){return`${e}.${t}.${n}-0`}function ve(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 <${z(a+1,0,0)}`;let o=Number(n);return`>=${a}.${o}.${r===void 0?0:Number(r)}${i||``} <${z(a,o+1,0)}`})}function ye(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 <${z(a+1,0,0)}`;let s=Number(n);if(r===void 0)return a===0?`>=${a}.${s}.0 <${z(a,s+1,0)}`:`>=${a}.${s}.0 <${z(a+1,0,0)}`;let c=Number(r);return a===0?s===0?`>=${a}.${s}.${c}${o} <${z(a,s,c+1)}`:`>=${a}.${s}.${c}${o} <${z(a,s+1,0)}`:`>=${a}.${s}.${c}${o} <${z(a+1,0,0)}`})}function be(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?`<${z(p+1,0,0)}`:`<${z(p,Number(o)+1,0)}`:`<=${p}.${Number(o)}.${Number(s)}${c||``}`,`>=${l}.${u}.${d}${f} ${m}`})}function xe(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 <${z(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 <${z(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 <${z(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 <${z(o+1,0,0)}`}),e)}const B=new Map;function Se(e){let t=B.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=be(t),t=ye(t),t=ve(t),t=xe(t),t=t.replace(/(>=|<=|>|<|=)\s+/g,`$1`),t=t.replace(/(^|[\s])v?(\d+\.\d+\.\d+(?:-[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)?)\b/g,(e,t,n)=>`${t}=${n}`);let n=t.split(/\s+/).filter(Boolean),i=[];for(let t of n){let n=ge(t);if(!n)return B.set(e,null),null;i.push(n)}if(i.length===0)return B.set(e,null),null;r.push(i)}let i=r.length?r:null;return B.set(e,i),i}function V(e,t){for(let n of t)if(!_e(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 H(e,t){let n=k(e);if(!n)return!1;let r=Se(t);if(!r)return!1;for(let e of r)if(e.length===0||V(n,e))return!0;return!1}function Ce(e){return typeof e==`string`&&Se(e)?e:null}const we=[[1e3,6e4,`sec`],[6e4,36e5,`min`],[36e5,864e5,`hour`],[864e5,6048e5,`day`],[6048e5,2628e6,`week`],[2628e6,31536e6,`month`],[31536e6,1/0,`year`]],Te={"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`},Ee={sec:`second`,min:`minute`};function De(e){return e instanceof Date?e.getTime():typeof e==`string`?Date.parse(e):e}function Oe(e,{now:t,noAffix:n=!1,times:r=we,nowThreshold:i=2e3,nowString:a=`now`,unknownString:o=``,aliases:s=!1,aliasesMap:c=Te,longUnits:l=!1}={}){let u=De(e),d=t===void 0?Date.now():De(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&&Ee[t[2]]||t[2])+(m>1?`s`:``);break}}let g=`${m} ${h}`,_;return _=n?g:p?`in ${g}`:`${g} ago`,s?c[_]??_:_}function ke(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;){let n=e.charCodeAt(t);if(n>=48&&n<=57)break;t++}r=t}}let i=e.substring(r);return i?e.substring(0,r)+n(i):e}function Ae(e){let t=[];for(let n of e){let e=/^([^<>=~!]+)(?:==|>=?|<=?|~=)([0-9.a-z]+)$/.exec(n.replaceAll(/\s+/g,``));if(!e)continue;let r=e[1].replace(/\[.*?\]$/,``);r&&t.push({name:r,version:e[2]})}return t}const je=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`resolutions`,`packageManager`],Me=[`node`,`deno`,`bun`],Ne=[`project.dependencies`,`project.optional-dependencies`,`dependency-groups.dev`,`dependency-groups.lint`,`dependency-groups.test`],Pe=[`deps`,`indirect`,`replace`,`tool`],Fe=[`dependencies`,`dev-dependencies`,`build-dependencies`,`workspace.dependencies`];function U(e,t){if(!(t instanceof Set))return!1;for(let n of t)if(n.test(e))return!0;return!1}function Ie(e,t){return t.split(`.`).reduce((e,t)=>e?.[t]??null,e)}function Le(e){return e.split(`,`).filter(Boolean)}function Re(){let e=new Date,t=String(e.getMonth()+1).padStart(2,`0`),n=String(e.getDate()).padStart(2,`0`),r=String(e.getHours()).padStart(2,`0`),i=String(e.getMinutes()).padStart(2,`0`),a=String(e.getSeconds()).padStart(2,`0`),o=String(e.getMilliseconds()).padStart(3,`0`);return`${e.getFullYear()}-${t}-${n} ${r}:${i}:${a}.${o}`}function ze(e,t,n=` `){let r=Array(e[0].length).fill(0),i=Array(e.length);for(let n=0;n<e.length;n++){let a=e[n],o=Array(a.length);for(let e=0;e<a.length;e++){let n=t(a[e]);o[e]=n,n>r[e]&&(r[e]=n)}i[n]=o}let a=``;for(let t=0;t<e.length;t++){let o=e[t],s=o.length-1;for(let e=0;e<=s;e++)if(e>0&&(a+=n),a+=o[e],e!==s){let n=r[e]-i[t][e];n>0&&(a+=` `.repeat(n))}t<e.length-1&&(a+=`
3
+ `)}return a}const Be={y:365,m:30,w:7,d:1,h:1/24,s:1/86400};function Ve(e){let t=/^(\d+(?:\.\d+)?)\s*([a-z])$/i.exec(e);if(t){let[,e,n]=t,r=Be[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 W(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 G=e=>e.replace(/[|\\{}()[\]^$+*?.-]/g,`\\$&`);async function He(e,t){let n=e;for(;;){let e=await t(n);if(e)return e;let r=o(n);if(r===n)return null;n=r}}function Ue(e){let t=new Map;return n=>{let r=t.get(n);return r||(r=e(n),t.set(n,r)),r}}const We=s(n===`win32`?t.LOCALAPPDATA||s(C(),`AppData`,`Local`):t.XDG_CACHE_HOME||s(C(),`.cache`),`updates`);let Ge=null;const Ke=new Map;function qe(e){let t=Ke.get(e);return t===void 0&&(t=ee(`sha256`).update(e).digest(`hex`).substring(0,16),Ke.set(e,t)),t}async function Je(e){try{let t=await x(s(We,`${qe(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}}async function Ye(e,t,n){try{await(Ge??=b(We,{recursive:!0})),await S(s(We,`${qe(e)}.cache`),`${t}\n${n}`)}catch{}}var Xe=`17.17.0`;function K(e,t,n){if(!t||!n||!e)return!0;let r=Date.parse(e);return Number.isNaN(r)?!0:(n-r)/(24*3600*1e3)>=t}const Ze=Xe,Qe=5e3,q=e=>e[0]===`v`?e.substring(1):e,$e=e=>e.endsWith(`/`)?e.slice(0,-1):e;function et(e,t){return{headers:{"user-agent":`updates/${Ze}`,"accept-encoding":`gzip, deflate, br`,...t&&{Authorization:`${e} ${t}`}}}}async function tt(e,t){try{return await fetch(e,t)}catch(t){throw Error(`Failed to fetch ${e}${t?.message?`: ${t.message}`:``}`)}}async function nt(e){return typeof e.text==`function`?e.text():JSON.stringify(await e.json())}async function rt(e,t,n={}){let r=t.noCache?null:await Je(e),i=n.headers,a=r?{...i,"if-none-match":r.etag}:i,o=await t.doFetch(e,{...n,headers:a,signal:AbortSignal.timeout(t.fetchTimeout)});if(!o)return{res:void 0};if(o.status===304&&r)return{body:r.body,res:o};if(!o.ok)return{res:o};let s=await nt(o),c=o.headers?.get?.(`etag`);return c&&!t.noCache&&await Ye(e,c,s),{body:s,res:o}}async function it(e,t,n={}){if(!t.noCache){let t=await Je(e);if(t)return{body:t.body}}let r=await t.doFetch(e,{...n,signal:AbortSignal.timeout(t.fetchTimeout)});if(!r)return{res:void 0};if(!r.ok)return{res:r};let i=await nt(r);return t.noCache||await Ye(e,`immutable`,i),{body:i,res:r}}function at(e){return(N(e)?.prerelease.length??0)>0}function ot(e){return/[0-9]+\.[0-9]+\.[0-9]+-.+/.test(e)}const st=new WeakMap;function ct(e){let t=st.get(e);if(t)return t;let n=new Set(e);return n.add(`prerelease`),e.has(`patch`)&&n.add(`prepatch`),e.has(`minor`)&&n.add(`preminor`),e.has(`major`)&&n.add(`premajor`),st.set(e,n),n}function lt(e,t,{useRel:n,allowDowngrade:r,name:i,matchesAny:a}){let o=J(e),s=J(t);if(!o||!s)return!0;let c=ot(e)||at(e),l=at(t);return c&&!l?me(s,o)||n:!l&&he(s,o)?r===!0||a(i,r):!0}function J(e){return pe(e)?.version??``}function ut(e,t,{range:n,semvers:r,usePre:i,useRel:a,useGreatest:o,pinnedRange:s,cooldownDays:c,now:l,getVersionDate:u}){let d=J(n);if(!d)return d;let f=ot(n)||i,p=f?ct(r):r,m=e?.time,h=!!m,g=o||!h,_=!!(c&&l),v=0,y=d,b=N(d);for(let e of t){let t=N(e);if(!t?.version||t.prerelease.length&&(!f||a))continue;let n=t.version;if(s&&!H(n,s))continue;let r;if(_&&(r=u?u(e):h?m[e]:void 0,!K(r,c,l)))continue;let i=I(b,t);if(!(!i||!p.has(i)))if(g)(j(t,b)>=0||s&&!H(y,s))&&(y=n,b=t);else{let i=Date.parse(r??m[e]);i>=0&&i>v&&(y=n,b=t,v=i)}}return y||null}function dt(e,{mode:t,range:n,useGreatest:r,useRel:i,usePre:a,semvers:o,pinnedRange:s,cooldownDays:c,now:l},{allowDowngrade:u,matchesAny:d,isGoPseudoVersion:f}){if(n===`*`||n.includes(`||`)||/\d\s/.test(n))return null;let p=[],m;if(t===`pypi`){let t=e.releases;p=[];for(let e of Object.keys(t))de(e)&&p.push(e);m=e=>t?.[e]?.[0]?.upload_time_iso_8601}else if(t===`npm`||t===`cargo`){p=[];for(let t of Object.keys(e.versions))de(t)&&p.push(t)}else if(t===`go`){let t=J(n);if(!t)return null;let r=a||ot(n),p=e=>at(e)&&(!r||i),m={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d},h=e.old||n,g=J(e.new);if(g&&!f(e.new)&&!p(e.new)){let n=F(t,g);if(n&&o.has(n)&&lt(h,e.new,m)&&K(e.Time,c,l)&&(!s||H(g,s)))return e.new}let _=J(e.sameMajorNew);if(_&&!f(e.sameMajorNew)&&!p(e.sameMajorNew)){let n=F(t,_);if(n&&o.has(n)&&lt(h,e.sameMajorNew,m)&&K(e.sameMajorTime,c,l)&&(!s||H(_,s)))return e.Time=e.sameMajorTime,delete e.newPath,e.sameMajorNew}if(c&&l&&e.olderEligible&&!p(e.olderEligible.version)){let n=J(e.olderEligible.version);if(n){let r=F(t,n);if(r&&o.has(r)&&lt(h,e.olderEligible.version,m)&&(!s||H(n,s)))return e.Time=e.olderEligible.time,delete e.newPath,e.olderEligible.version}}return null}let h=ut(e,p,{range:n,semvers:o,usePre:a,useRel:i,useGreatest:r,pinnedRange:s,cooldownDays:c,now:l,getVersionDate:m});if(!h)return null;if(r)return h;{let r=``,f=``;t===`pypi`?(f=e.info.version,r=J(e.info.version)):r=e[`dist-tags`].latest;let p=J(n),m=ot(n),g=at(h),_=at(r),v={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d};if(!i&&a||m&&g)return h;if(m&&!g)return lt(n,h,v)?h:null;let y=F(p,r);return y&&y!==`prerelease`&&!o.has(y.replace(/^pre/,``))||i&&at(r)?h:he(r,p)&&!_?lt(n,r,v)?r:null:!m&&_&&!a||s&&!H(r,s)||c&&l&&!K(t===`pypi`?e.releases?.[f||r]?.[0]?.upload_time_iso_8601:e.time?.[r],c,l)?h:f||r}}const ft=new Map;if(t.UPDATES_FORGE_TOKENS)for(let e of t.UPDATES_FORGE_TOKENS.split(`,`)){let t=e.indexOf(`:`);t>0&&ft.set(e.substring(0,t),e.substring(t+1))}const pt=Array.from(new Set([`UPDATES_GITHUB_API_TOKEN`,`GITHUB_API_TOKEN`,`GH_TOKEN`,`GITHUB_TOKEN`,`HOMEBREW_GITHUB_API_TOKEN`].map(e=>t[e]).filter(Boolean)));let mt;function ht(){return pt.length?Promise.resolve(pt):mt??=(async()=>{try{let[{execFile:e},{promisify:t}]=await Promise.all([import(`node:child_process`),import(`node:util`)]),{stdout:n}=await t(e)(`gh`,[`auth`,`token`],{encoding:`utf8`,timeout:5e3}),r=n.trim();return r?[r]:pt}catch{return pt}})()}const gt=new Map;async function _t(e){try{let t=ft.get(new URL(e).hostname);if(t)return[t]}catch{}return ht()}async function vt(e,t,n){let r;try{r=new URL(e).hostname}catch{r=``}let i=await(r?_t(e):ht()),a=AbortSignal.timeout(t.fetchTimeout),o=e=>{let t=et(`Bearer`,e);return n&&(t.headers={...t.headers,...n}),t.signal=a,t};if(!i.length)return t.doFetch(e,o());let s=r?gt.get(r):void 0;if(s)return t.doFetch(e,o(s));for(let n of i){let i=await t.doFetch(e,o(n));if(i.status!==401&&i.status!==403)return r&&gt.set(r,n),i}return t.doFetch(e,o())}function yt(e,t){let n=q(t);if(!de(n))return null;let r=``,i=``;for(let t of e){let e=q(t);de(e)&&(!r||me(e,i))&&(r=t,i=e)}return r&&me(i,n)?r:null}function bt(e){let t=e.replace(`git@`,``).replace(/.+?\/\//,`https://`).replace(/\.git$/,``);return/^[a-z]+:[a-z0-9-]+\/[a-z0-9-]+$/.test(t)?t.replace(/^(.+?):/,(e,t)=>`https://${t}.com/`):/^[a-z0-9-]+\/[a-z0-9-]+$/.test(t)?`https://github.com/${t}`:t}const xt=/^[0-9a-f]{7,}$/i;function St(e){return e.map(e=>({name:e.name,commitSha:e.commit?.sha||``}))}async function Ct(e,t){let n=t.noCache?null:await Je(e),r=await vt(e,t,n?{"if-none-match":n.etag}:void 0);if(r?.status===304&&n)try{let e=JSON.parse(n.body);return{tags:e.tags||[],link:e.link||``}}catch{return null}if(!r?.ok)return null;let i=St(await r.json()),a=r.headers.get(`link`)||``,o=r.headers.get(`etag`);return o&&!t.noCache&&await Ye(e,o,JSON.stringify({link:a,tags:i})),{tags:i,link:a}}async function wt(e,t,n,r){let i=r=>`${e}/repos/${t}/${n}/tags?per_page=100&page=${r}`;try{let e=await Ct(i(1),r);if(!e)return[];let t=e.tags,n=/<([^>]+)>;\s*rel="last"/.exec(e.link);if(!n)return t;let a=Math.min(Number(new URL(n[1]).searchParams.get(`page`)),10);if(a<2)return t;let o=await Promise.all(Array.from({length:a-1},(e,t)=>Ct(i(t+2),r)));for(let e of o)e&&t.push(...e.tags);return t}catch{return[]}}function Tt(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 Et(e,t,n=``){let r=t.startsWith(`v`),i=q(e),a=q(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 Dt(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=bt(typeof e==`string`?e:e.url),a&&typeof e!=`string`&&e.directory&&(a=`${a}/${Dt(a)}/${e.directory}`)),a||t||``)}const kt={"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 At(e,t){return RegExp(`^${G(e).replaceAll(`\\*`,`.*`)}$`,t?`i`:``)}function jt(e,t,n){return t&&typeof e==`string`?/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):At(e,n):e instanceof RegExp?e:At(e,n)}function Mt(e){return Array.isArray(e)&&e.every(e=>e===!0)?!0:Array.isArray(e)?new Set(e.flatMap(e=>typeof e==`string`?Le(e):``).filter(Boolean)):typeof e==`string`?new Set([e]):typeof e==`boolean`?e:!1}function Nt(e){for(let[t,{short:n}]of Object.entries(kt))if(t===e||n===e)return t;return``}function Y(e){return new Set(e.map(e=>jt(e,!1,!0)))}function Pt(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).flatMap(e=>Le(e)):[]}function Ft(e){let t={},n=Array.isArray(e)?e:[e];for(let e of n){if(typeof e!=`string`)continue;let[n,r]=e.split(`=`,2);n&&r&&Ce(r)&&(t[n]=r)}return t}function It(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(jt(n,!1,!1));return t}async function Lt(e){let t=await Promise.all([`js`,`ts`,`mjs`,`mts`].map(async t=>{let n=`updates.config.${t}`,r=s(e,n);try{await y(r)}catch{return null}try{return{configDir:e,filename:n,default:(await import(te(r).href)).default??{}}}catch(e){return Error(`Unable to parse config file ${n}: ${e?.message??e}`)}}));for(let e of t)if(e&&!(e instanceof Error))return e;for(let e of t)if(e instanceof Error)throw e;return null}const Rt=Ue(e=>He(e,Lt));async function zt(e){let t=await Rt(e),n=t?.default??{},{loadRenovateConfig:r}=await import(`./renovate.js`);return{...await r(t?.configDir??e,n.inherit?.renovate),...n}}function Bt(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 Vt(e){try{return Bt(m(e,`utf-8`))}catch{return}}function Ht(t){let n=e();for(;;){let e=s(n,t);try{return g(e),e}catch{}let r=o(n);if(r===n)break;n=r}}function Ut(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 Wt(e,r={}){let i=n===`win32`,a=i?t.USERPROFILE:t.HOME,o=[{...r}],c=[];function l(e){if(!e||c.includes(e))return;let t=Vt(e);t&&(o.push(t),c.push(e))}i||(l(s(`/etc`,e,`config`)),l(s(`/etc`,`${e}rc`))),a&&(l(s(a,`.config`,e,`config`)),l(s(a,`.config`,e)),l(s(a,`.${e}`,`config`)),l(s(a,`.${e}rc`))),l(Ht(`.${e}rc`));let u=Ut(`${e}_`);return u.config&&l(u.config),Object.assign({},...o,u,c.length?{configs:c,config:c[c.length-1]}:void 0)}const Gt=/^.*?:\/\/(.*?@)?(github\.com[:/])/i,Kt=/^([^/]+)\/([^/]+)\/(?:.*\/)?([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i,qt=/[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g,Jt=/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g,Yt=`https://registry.npmjs.org`;let X=null;const Xt=new Map;function Zt(){return X??=Wt(`npm`,{registry:Yt})}function Qt(e){return e.replace(/^\$\{?([^}]*)\}?$/,(e,n)=>t[n]||``)}function $t(e,t){let n=n=>t[`${e}:${n}`]||t[`${e}/:${n}`],r=n(`_authToken`);if(r)return{token:Qt(r),type:`Bearer`};let i=n(`username`),a=n(`_password`);if(i&&a){let e=Buffer.from(Qt(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:Qt(o),type:`Basic`}}function en(e,t){let n=new URL(e.startsWith(`//`)?`http:${e}`:e),r;for(;r!==`/`&&n.pathname!==r;){r=n.pathname||`/`;let e=$t(`//${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:Qt(i),type:`Basic`}}function tn(e,t){let n=t[`${e}:registry`]||t.registry;return n.endsWith(`/`)?n:`${n}/`}function nn(e,t){X||=Zt();let n=e.startsWith(`@`)?(/@[a-z0-9][\w.-]+/.exec(e)||[``])[0]:``,r=`${n}:${t}`,i=Xt.get(r);if(i)return i;let a=()=>({auth:en(t,X),registry:t}),o;if(!e.startsWith(`@`))o=a();else{let e=$e(tn(n,X));if(e!==t)try{let t=en(e,X);o=t?.token?{auth:t,registry:e}:a()}catch{o=a()}else o=a()}return Xt.set(r,o),o}function rn(e,t,n){X||=Zt();let r=$e((typeof n.registry==`string`?n.registry:!1)||t.registry||X.registry||Yt);return{...nn(e,r),originalRegistry:r}}function an(e,t,n){let r=`${e}/${t.replace(/\//g,`%2f`)}`;return n?`${r}/${n}`:r}const on=new Map,sn=new Map,cn=new Map;async function ln(e,t,n,r,i){let{auth:o,registry:s}=rn(e,n,r),c=an(s,t===`resolutions`?a(e):e),l=on.get(c);if(!l){let t=et(o?.type,o?.token),n={...t.headers,accept:`application/vnd.npm.install-v1+json`};t.headers=n,l=(async()=>{let r=i.noCache?null:await Je(c);r&&(n[`if-none-match`]=r.etag);let a=await i.doFetch(c,{signal:AbortSignal.timeout(i.fetchTimeout),...t});if(a?.status===304&&r)return JSON.parse(r.body);if(a?.ok){let e=await a.text(),t=a.headers.get(`etag`);return t&&!i.noCache&&await Ye(c,t,e),JSON.parse(e)}Tt(a,c,e,s)})().catch(e=>{throw on.delete(c),e}),on.set(c,l)}return[await l,t,s,e]}async function un(e,t,n,r,i){let{auth:a,registry:o}=rn(e,n,r),s=an(o,e,t),c=sn.get(s);if(c)return c;let l=(async()=>{try{let n=et(a?.type,a?.token),r=await it(s,i,n);if(!(`body`in r))return{};let c=JSON.parse(r.body),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=an(o,e),a=cn.get(r);a||(a=i.doFetch(r,{...n,signal:AbortSignal.timeout(i.fetchTimeout)}).then(e=>e?.ok?e.json():null).catch(()=>(cn.delete(r),null)),cn.set(r,a)),l=(await a)?.time?.[t]||``}return{repository:c.repository,homepage:c.homepage,date:l}}catch{return{}}})();return sn.set(s,l),l}function dn(e){return e.startsWith(`npm:@jsr/`)||e.startsWith(`jsr:`)}function fn(e){return e.startsWith(`link:`)||e.startsWith(`file:`)}function pn(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 mn(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 rt(o,n,{headers:{"accept-encoding":`gzip, deflate, br`}});if(`body`in s){let r=JSON.parse(s.body),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]}Tt(s.res,o,e,`JSR`)}function hn(e,t){let n=new Map;for(let[e,{old:r,oldOrig:i,new:a}]of Object.entries(t)){let[t,o]=e.split(`\0`),s=i||r;t===`packageManager`?n.set(`${t}\0${o}@${s}`,`"${t}": "${o}@${a}"`):n.set(`${o}\0${s}`,`"${o}": "${a}"`)}return n.size?e.replace(/"((?:[^"\\]|\\.)*)": *"((?:[^"\\]|\\.)*)"/g,(e,t,r)=>n.get(`${t}\0${r}`)??e):e}function gn(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 Z(e){if(/[xX*]/.test(e))return e;let t=e.match(qt);return t?.length===1?e.replace(qt,J(t[0])):e}async function _n(e,t,n){let r=`${n.forgeApiUrl}/repos/${e}/${t}/commits`;try{let e=n.noCache?null:await Je(r),t=await vt(r,n,e?{"if-none-match":e.etag}:void 0);if(t?.status===304&&e){let{sha:t,commit:n}=JSON.parse(e.body)[0];return{hash:t,commit:n}}if(!t?.ok)return{hash:``,commit:{}};let i=await t.text(),a=t.headers.get(`etag`);a&&!n.noCache&&await Ye(r,a,i);let{sha:o,commit:s}=JSON.parse(i)[0];return{hash:o,commit:s}}catch{return{hash:``,commit:{}}}}async function vn(e,t,n){return(await wt(n.forgeApiUrl,e,t,n)).map(e=>e.name)}async function yn(e,t,n){let r=t.old.replace(Gt,``),[,i,a,o]=Kt.exec(r)||[];if(!i||!a||!o)return null;if(xt.test(o)){let{hash:r,commit:s}=await _n(i,a,n);if(!r)return null;let c=s?.committer?.date??s?.author?.date,l=r.substring(0,o.length);if(o!==l)return{key:e,newRange:t.old.replace(o,l),user:i,repo:a,oldRef:o,newRef:l,newDate:c}}else{let t=yt(await vn(i,a,n),o);if(t)return{key:e,newRange:t,user:i,repo:a,oldRef:o,newRef:t}}return null}async function bn(e,t,n){let r=`${n.pypiApiUrl}/pypi/${e}/json`,i=await rt(r,n,{headers:{"accept-encoding":`gzip, deflate, br`}});if(`body`in i)return[JSON.parse(i.body),t,null,e];Tt(i.res,r,e,n.pypiApiUrl)}function xn(e,t){let n=e;for(let[e,{old:r,oldOrig:i}]of Object.entries(t)){let a=e.split(`\0`)[1],o=i||r;n=n.replace(RegExp(`("${G(a)}(?:\\[[^\\]]+\\])? *[<>=~]+ *)${G(o)}(")`,`g`),(n,r,i)=>`${r}${t[e].new}${i}`)}return n}let Sn;async function Cn(){let[{execFile:e},{promisify:t}]=await Promise.all([import(`node:child_process`),import(`node:util`)]);return t(e)}function wn(){return Sn??=Cn()}function Tn(){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(e)}return`https://proxy.golang.org`}function En(){return(t.GONOPROXY||t.GOPRIVATE||``).split(`,`).map(e=>e.trim()).filter(Boolean)}function Dn(e,t){return t.some(t=>e===t||e.startsWith(`${t}/`))}function On(e){return e.replace(/[A-Z]/g,e=>`!${e.toLowerCase()}`)}const kn=/\/v(\d+)$/;function An(e){let t=kn.exec(e);return t?Number.parseInt(t[1]):1}function jn(e,t){let n=e.replace(kn,``);return t<=1?n:`${n}/v${t}`}function Mn(e,t){let n=t?/^(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(e):/^replace\s+(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(e);if(!n)return null;let[,r,i,a]=n;return i.startsWith(`./`)||i.startsWith(`/`)||i.startsWith(`../`)?null:{origModule:r,targetModule:i,targetVersion:a}}function Nn(e,t,n){return t===`indirect`||e.startsWith(`golang.org/x/`)||Pn(n)}function Pn(e){return/\d{14}-[0-9a-f]{12}$/.test(e)}function Fn(e,t,n){return[{name:e,old:t,new:t},n,null,e]}async function In(e,t,n){if(!t)return null;let r=t,i=e+101,a=e+2,o=7;for(;a<=i;){let e=Math.min(a+o-1,i),t=await Promise.all(Array.from({length:e-a+1},(e,t)=>n(a+t))),s=t.indexOf(null),c=s===-1?t:t.slice(0,s);if(c.length&&(r=c.at(-1)),s!==-1)break;a=e+1,o*=2}return r}function Ln(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:q(o),Time:s,...c===e?{}:{newPath:c},sameMajorNew:q(i),sameMajorTime:a},t,null,e]}function Rn(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=Mn(i,l);e&&(r[e.targetModule]=e.targetVersion,a.add(e.origModule));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 zn(e,n,r,i,a){let o=An(e),s=async(e,n)=>{try{let{stdout:r}=await(await wn())(`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=Nn(e,n,r),[l,u]=await Promise.all([s(e,a.fetchTimeout),c?null:s(jn(e,o+1),a.goProbeTimeout)]);return l?Ln(e,n,r,await In(o,u,t=>s(jn(e,t),a.goProbeTimeout)),l.Version,l.Time):Fn(e,r,n)}async function Bn(e,t,n,r,i,a){if(Dn(e,a))return zn(e,t,n,r,i);let o=On(e),s=An(e),c=async t=>{let n=jn(e,t);return i.doFetch(`${i.goProxyUrl}/${On(n)}/@latest`,{signal:AbortSignal.timeout(i.goProbeTimeout),headers:{"accept-encoding":`gzip, deflate, br`}}).then(async e=>e.ok?{...await e.json(),path:n}:null).catch(()=>null)},l=Nn(e,t,n),[u,d]=await Promise.all([i.doFetch(`${i.goProxyUrl}/${o}/@latest`,{signal:AbortSignal.timeout(i.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}}),l?null:c(s+1)]);if(!u.ok)return Fn(e,n,t);let f,p;try{let e=await u.json();f=e.Version,p=e.Time}catch{return Fn(e,n,t)}return Ln(e,t,n,await In(s,d,c),f,p)}function Vn(e,t){let n=G(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 Hn(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+${G(s)}\\s+)v${G(c)}`,`g`),`$1v${l}`);continue}if(o===`indirect`){n=n.replace(RegExp(`(${G(s)}) +v${G(c)}`,`g`),`$1 v${l}`);continue}let u=An(s),d=Number.parseInt(l.split(`.`)[0]);if(u!==d&&d>1){let e=jn(s,d);n=n.replace(RegExp(`${G(s)} +v${G(c)}`,`g`),`${e} v${l}`),o===`tool`&&(n=n.replace(RegExp(`(^\\s+|^tool\\s+)${G(s)}(/\\S+)?\\s*$`,`gm`),`$1${e}$2`)),r[s]=e}else n=n.replace(RegExp(`(${G(s)}) +v${G(c)}`,`g`),`$1 v${l}`);o!==`tool`&&(n=Vn(n,s))}return[n,r]}function Un(e,t,n){let r=Object.entries(t);if(!r.length)return;let i=new Map(r),a=r.map(([e])=>e).sort((e,t)=>t.length-e.length),o=RegExp(`"(${a.map(G).join(`|`)})(/|")`,`g`),c=f(`**/*.go`,{cwd:e});for(let t of c){let r=s(e,t),a=m(r,`utf8`),c=a.replace(o,(e,t,n)=>`"${i.get(t)}${n}`);c!==a&&n(r,c)}}function Wn(e){let t=[],n={},r=e.split(/\r?\n/),i=!1,a=!1;for(let e of r){let r=e.trim();if(/^use\s*\(/.test(r)){i=!0;continue}if(/^replace\s*\(/.test(r)){a=!0;continue}if(r===`)`){i=!1,a=!1;continue}if(i){let e=/^(\S+)/.exec(r);e&&!r.startsWith(`//`)&&t.push(e[1]);continue}let o=/^use\s+(\S+)/.exec(r);if(o){t.push(o[1]);continue}if(a||/^replace\s+/.test(r)){let e=Mn(r,a);e&&(n[e.targetModule]=e.targetVersion);continue}}return{use:t,replace:n}}function Gn(e){let t=`https://${Kn(e)}`,n=new URL(t),r=n.pathname.split(`/`);if(r.length>3){let[,e,i,...a]=r;return n.pathname=`/${e}/${i}/${Dt(t)}/${a.join(`/`)}`,n.toString()}else return t}function Kn(e){return kn.test(e)?o(e):e}function qn(e){return e.replace(/(\d{7})\d{7}-[0-9a-f]{12}$/,`$1`)}const Jn=/^\s*(?:-\s*)?uses:\s*['"]?([^'"#\s]+)['"]?/gm;function Yn(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:xt.test(o)}}function Xn(e,t){return e?e===`github.com`?`https://api.github.com`:`https://${e}/api/v1`:t}async function Zn(e,t,n,r,i){let a=`${e}/repos/${t}/${n}/git/commits/${r}`;if(!i.noCache){let e=await Je(a);if(e)return e.body}try{let e=await vt(a,i);if(!e?.ok)return``;let t=await e.json(),n=t?.committer?.date||t?.author?.date||``;return n&&!i.noCache&&await Ye(a,`immutable`,n),n}catch{return``}}function Qn(e,t){return Et(N(q(e))?.version??q(e),t)}function $n(e,t){let n=e;for(let{name:e,oldRef:r,newRef:i}of t){let t=RegExp(`(uses:\\s*['"]?)${G(e)}@${G(r)}(?![\\w.-])`,`g`);n=n.replace(t,`$1${e}@${i}`)}return n}const er=[`.github`,`.gitea`,`.forgejo`],tr=RegExp(`(?:${er.map(G).join(`|`)})\\/(?:workflows\\/[^/]+|(?:[^/]+\\/)*action)\\.ya?ml$`);function nr(e){return tr.test(e.replace(/\\/g,`/`))}function rr(e){let t=new Set;try{for(let n of h(s(e,`workflows`)))/\.ya?ml$/.test(n)&&t.add(l(s(e,`workflows`,n)))}catch{}try{for(let n of h(e,{recursive:!0,withFileTypes:!0}))!n.isFile()||!/^action\.ya?ml$/.test(n.name)||t.add(l(s(n.parentPath,n.name)))}catch{}return Array.from(t)}const ir=/^(v?\d+(?:\.\d+){0,2})(-.+)?$/,ar=/^\s*FROM\s+(?:--platform=\S+\s+)?(\S+)/gm,or=/^\s*image:\s*['"]?([^\s'"#]+)['"]?/gm,sr=/^\s*container:\s*['"]?([^\s'"#{}]+:[^\s'"#{}:]+)['"]?\s*$/gm,cr=/^\s*(?:-\s*)?uses:\s*['"]?docker:\/\/([^'"#\s]+)['"]?/gm;function lr(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(`/`),repo:t[t.length-1]}}function ur(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||!ir.test(r)))return null;let{registry:i,namespace:a,repo:o}=lr(n);return{registry:i,namespace:a,repo:o,tag:r,fullImage:n}}function dr(e){let t=ir.exec(e);return t?{version:t[1],suffix:t[2]||``}:null}function fr(e,t){let n=dr(t);return n?Et(e,n.version,n.suffix):t}function pr(e,t){let n=[];for(let r of e.matchAll(t)){let e=ur(r[1]);e&&n.push({ref:e,match:r[1]})}return n}async function mr(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={headers:{"accept-encoding":`gzip, deflate, br`}},s=async e=>{try{let t=await rt(a(e),n,o);return`body`in t?JSON.parse(t.body):null}catch{return null}},c=await s(1);if(!c)return r;for(let e of c.results||[])r[e.name]=e.tag_last_pushed||e.last_updated||``;let l=Math.min(Math.ceil((c.count||0)/100),10);if(l<2)return r;let u=await Promise.all(Array.from({length:l-1},(e,t)=>s(t+2)));for(let e of u)if(e)for(let t of e.results||[])r[t.name]=t.tag_last_pushed||t.last_updated||``;return r}async function hr(e,t,n){let{registry:r,namespace:i,repo:a}=lr(e);if(r)throw Error(`Non-Docker-Hub registries are not yet supported: ${r}`);return[{tags:await mr(i,a,n),name:e},t,null,e]}function gr(e,t,n,r,i,a){let o=dr(t);if(!o)return null;let s=pe(q(o.version))?.version;if(!s)return null;let c=s,l=``,u=``;for(let[t,s]of Object.entries(e)){let e=dr(t);if(!e||e.suffix!==o.suffix)continue;let d=pe(q(e.version))?.version;if(!d||a&&!H(d,a)||!K(s,r,i))continue;let f=F(c,d);!f||!n.has(f)||R(d,c)&&(c=d,l=t,u=s)}if(!l||c===s)return null;let d=fr(c,t);return d===t?null:{newTag:d,date:u}}function _r(e,t,n){let r=e;for(let[e,i]of Object.entries(t)){let t=e.split(`\0`)[1],a=i.oldOrig||i.old;for(let e of n)r=r.replace(e(G(t),G(a)),`$1${t}:${i.new}`)}return r}function vr(e,t){return _r(e,t,[(e,t)=>RegExp(`(FROM\\s+(?:--platform=\\S+\\s+)?)${e}:${t}`,`g`)])}function yr(e,t){return _r(e,t,[(e,t)=>RegExp(`(image:\\s*['"]?)${e}:${t}`,`g`)])}function br(e,t){return _r(e,t,[(e,t)=>RegExp(`((?:container|image):\\s*['"]?)${e}:${t}`,`g`),(e,t)=>RegExp(`(uses:\\s*['"]?docker://)${e}:${t}`,`g`)])}const xr=[`Dockerfile`,`docker-compose.yml`,`docker-compose.yaml`];function Sr(e){return/^docker-.+\.ya?ml$/.test(e)}function Cr(e){return/^Dockerfile(\..+)?$/.test(e)}function wr(e){return Cr(e)||Sr(e)}function Tr(e){return Cr(e)?ar:or}function Er(e){return e.registry?``:e.namespace===`library`?`https://hub.docker.com/_/${e.repo}`:`https://hub.docker.com/r/${e.namespace}/${e.repo}`}const Dr=new Map;async function Or(e,t,n){let r=`${$e(n.cratesIoUrl)}/api/v1/crates/${encodeURIComponent(e)}/versions?per_page=100`,i=n.noCache?void 0:Dr.get(r);return i||(i=rt(r,n,et()).then(t=>{`body`in t||Tt(t.res,r,e,n.cratesIoUrl);let i;try{i=JSON.parse(t.body)}catch{throw Error(`Invalid JSON from ${r}`)}let a=(i.versions||[]).filter(e=>!e.yanked),o={},s={};for(let e of a)e.num&&(o[e.num]={},s[e.num]=e.created_at||``);return{name:e,versions:o,time:s,"dist-tags":{latest:a[0]?.num??``}}}).catch(e=>{throw Dr.delete(r),e}),Dr.set(r,i)),[await i,t,null,e]}function kr(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(!de(a))continue;let o=t.get(i);o||t.set(i,o=[]),o.push(a)}return t}const Ar=/^\d/;function jr(e,t){return Ar.test(e)?gn(Z(`^${e}`),t,`^${e}`).replace(/^\^/,``):gn(Z(e),t,e)}function Mr(e,t,n){let r=e.get(t);if(!r)return;let i=Ar.test(n)?`^${n}`:n,a;for(let e of r)H(e,i)&&(!a||me(e,a))&&(a=e);return a}const Nr=Fe.map(G).join(`|`);function Pr(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=G(t),s=G(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(`(\\[(?:${Nr})\\.${o}\\][^\\[]*?version\\s*=\\s*["'])${s}(["'])`,`g`),`$1${a}$2`)}return n}function Fr(e){return e.split(`|`)[0]}function Ir(e,t){let n=t===`.`?``:`|${t}`,r={};for(let[t,i]of Object.entries(e)){let[e,a]=t.split(`\0`),o=Fr(e);e===`${o}${n}`&&(r[`${o}${a}`]=i)}return r}const Lr=/[*?{[]/;async function Rr(e,t,n,r=32){let i=new Set,a=[];for(let r of e){let e=Lr.test(r)?f(r,{cwd:t}).map(e=>l(s(t,e))):[l(s(t,r))];for(let r of e){let e=s(r,n);if(i.has(e))continue;i.add(e);let o=c(t,r);a.push({absPath:e,memberPath:`./${o.replace(/\\/g,`/`)}`})}}return(await W(a,async({absPath:e,memberPath:t})=>{try{return{absPath:e,content:await x(e,`utf8`),memberPath:t}}catch{return null}},{concurrency:r})).filter(e=>e!==null)}function zr(e){let t=[],n=e.split(/\r?\n/),r=!1;for(let e of n){if(/^packages\s*:/.test(e)){r=!0;continue}if(r){if(/^\S/.test(e))break;let n=/^\s+-\s+['"]?([^'"#\s]+)['"]?/.exec(e);n&&t.push(n[1])}}return t}const Br={"pnpm-workspace.yaml":`npm`,"package.json":`npm`,"pyproject.toml":`pypi`,"go.work":`go`,"go.mod":`go`,"Cargo.toml":`cargo`},Vr=new Set([`npm`,`pypi`,`go`,`cargo`,`actions`,`docker`]),Hr=(e,t)=>typeof e==`string`?$e(e):typeof t==`function`?t():t;function Ur(e,t){let n=new Map,r=new Set(e),i=t;for(;r.size;){for(let e of r){let t=s(i,e);try{u(t),n.set(e,t),r.delete(e)}catch{}}let e=o(i);if(e===i)break;i=e}return n}async function Wr(e,t){let n=await W(e,async e=>{try{return[e,await x(e,`utf8`)]}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}},{concurrency:t});return new Map(n)}function Gr(e,t){t&&(e.date=t,e.age=Oe(t,{noAffix:!0}))}function Kr(e){let t=0;for(let n of Object.keys(e))t+=Object.keys(e[n]).length;return t}function qr(e){console.error(`${Re()} ${e}`)}function Q(e,t,n,r,i){if(i===`engines`&&Me.includes(e)||t===`pypi`&&e===`python`)return!1;if(!n.size&&!r.size)return!0;let a=t===`go`?Kn(e):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 Jr(t){let n=new Set;if(t)for(let e of t){let t;try{t=p(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(Br)){let r=s(e,t),i=null;try{i=p(r)}catch{}i?.isFile()&&n.add(l(r))}try{for(let t of h(e,{withFileTypes:!0}))t.isFile()&&wr(t.name)&&n.add(l(s(e,t.name)))}catch{}let t=l(e).replace(/\\/g,`/`),r=er.some(e=>t.endsWith(`${e}/workflows`)),i=!r&&er.some(e=>t.endsWith(e)),a;a=r?[o(t)]:i?[t]:er.map(e=>s(t,e));for(let e of a)for(let t of rr(e))n.add(t)}else throw Error(`${e} is neither a file nor directory`)}else{let t=new Set(er),r=[...Object.keys(Br),...xr,...er];for(let[i,a]of Ur(r,e()))if(t.has(i))for(let e of rr(a))n.add(e);else n.add(l(a));try{for(let t of h(e(),{withFileTypes:!0}))t.isFile()&&wr(t.name)&&!xr.includes(t.name)&&n.add(l(s(e(),t.name)))}catch{}}for(let e of n)a(e)===`go.work`&&n.delete(s(o(e),`go.mod`));for(let e of n)a(e)===`pnpm-workspace.yaml`&&n.delete(s(o(e),`package.json`));return n}function $(e,t){n===`win32`&&_(e,0),v(e,t,n===`win32`?{flag:`r+`}:void 0)}function Yr(e){let t={results:{}};for(let n of Object.keys(e))for(let[r,i]of Object.entries(e[n])){typeof i.oldPrint==`string`&&(i.old=i.oldPrint),typeof i.newPrint==`string`&&(i.new=i.newPrint),typeof i.oldOrig==`string`&&!dn(i.oldOrig)&&(i.old=n===`go`?qn(i.oldOrig):i.oldOrig),n===`go`&&(i.new=qn(i.new)),n===`actions`&&(i.old=q(i.old),i.new=q(i.new)),delete i.oldPrint,delete i.newPrint,delete i.oldOrig,delete i.date;let[e,a]=r.split(`\0`),o=t.results[n]??={};(o[e]??={})[a]=i}return t}let Xr=!1;async function Zr(t={}){if(!Xr){let{enableDnsCache:e}=await import(`./dns.js`);e(),Xr=!0}let n={...t},c=n.sockets??25,u=n.timeout??0,d=Hr(t.forgeapi,`https://api.github.com`),f=Hr(t.pypiapi,`https://pypi.org`),p=Hr(t.jsrapi,`https://jsr.io`),m=Hr(t.goproxy,Tn),h=Hr(t.cargoapi,`https://crates.io`),g=Hr(t.dockerapi,`https://hub.docker.com`),_=En(),v=n.color===!0||n.noColor!==!0&&r.isTTY,y=e=>v?t=>i(e,String(t)):String,b=y(`magenta`),S=y(`green`),ee=y(`red`),C={fetchTimeout:u||5e3,goProbeTimeout:u?u/2:2500,forgeApiUrl:d,pypiApiUrl:f,jsrApiUrl:p,goProxyUrl:m,cratesIoUrl:h,dockerApiUrl:g,doFetch:async(e,t)=>{n.verbose&&qr(`${b(t?.method||`GET`)} ${e}`);let r=await tt(e,t);return n.verbose&&qr(`${r.ok?S(r.status):ee(r.status)} ${e}`),r},noCache:!!n.noCache},te=It(n.greatest),T=It(n.prerelease),E=It(n.release),ne=It(n.patch),re=It(n.minor),ie=It(n.allowDowngrade),D=n.modes?.length?new Set(n.modes):Vr,ae=(n.overrides??[]).map(e=>({include:e.include?.length?Y(e.include):void 0,exclude:e.exclude?.length?Y(e.exclude):void 0,greatest:e.greatest,prerelease:e.prerelease,release:e.release,patch:e.patch,minor:e.minor,allowDowngrade:e.allowDowngrade,cooldownDays:e.cooldown===void 0?void 0:Ve(String(e.cooldown))})),oe=(e,t)=>!(e.include&&!U(t,e.include)||e.exclude&&U(t,e.exclude)),se=ae.some(e=>!!e.cooldownDays);D.has(`actions`)&&ht();let ce=new Map;function O(e){let t=ce.get(e);if(!t){let n=typeof te==`boolean`?te:U(e,te),r=typeof T==`boolean`?T:U(e,T),i=typeof E==`boolean`?E:U(e,E),a=typeof ne==`boolean`?ne:U(e,ne),o=typeof re==`boolean`?re:U(e,re),s=typeof ie==`boolean`?ie:U(e,ie),c;for(let t of ae)oe(t,e)&&(t.greatest!==void 0&&(n=t.greatest),t.prerelease!==void 0&&(r=t.prerelease),t.release!==void 0&&(i=t.release),t.patch!==void 0&&(a=t.patch),t.minor!==void 0&&(o=t.minor),t.allowDowngrade!==void 0&&(s=t.allowDowngrade),t.cooldownDays!==void 0&&(c=t.cooldownDays));let l=new Set(a?[`patch`]:o?[`patch`,`minor`]:[`patch`,`minor`,`major`]);t={useGreatest:n,usePre:r,useRel:i,semvers:l,allowDowngrade:s,cooldownOverride:c},ce.set(e,t)}return t}let le=Y(n.include??[]),ue=Y(n.exclude??[]),k=n.pin??{},A={},j={},M={},N={},P=Date.now(),fe=n.cooldown?Ve(String(n.cooldown)):0,pe=e(),F=e=>e.replace(`${pe}/`,``).replace(`${pe}\\`,``),I=0,L=(e,t,n,r,i,a)=>{A[e][`${t}${n}${r}`]={old:i,oldOrig:a}},me=Jr(n.files?.length?new Set(n.files):!1),R=await Wr(Array.from(me).filter(e=>{if(nr(e))return D.has(`actions`)||D.has(`docker`);let t=a(e);if(wr(t))return D.has(`docker`);let n=Br[t];return!!n&&D.has(n)}),c),he={},ge={},_e=[],z=null,ve=[],ye=!1,be=[],xe=!1,B=[],Se=[],V={};async function H(e){let t=await zt(e);return{modeConfig:t,modeInclude:t.include?.length?Y([...n.include??[],...t.include]):le,modeExclude:t.exclude?.length?Y([...n.exclude??[],...t.exclude]):ue,pin:{...t.pin,...k}}}function we(e,t){return n.types?.length?n.types:t?.types?.length?t.types:e===`npm`?je:e===`pypi`?Ne:e===`go`?n.indirect?Pe:Pe.filter(e=>e!==`indirect`):e===`cargo`?Fe:[]}function Te(e,t,n,r){A.docker??={};for(let i of n)for(let{ref:n}of pr(e,i)){if(!Q(n.fullImage,`docker`,r.include,r.exclude,`docker`))continue;let e=`${t}${n.fullImage}`;if(A.docker[e])continue;let i=dr(n.tag);i&&(A.docker[e]={old:i.version,oldOrig:n.tag},Se.push({key:e,fullImage:n.fullImage,ref:n,filePin:r.pin}))}}async function Ee(e){let t=await zt(e);return{include:t.include?.length?Y([...n.include??[],...t.include]):le,exclude:t.exclude?.length?Y([...n.exclude??[],...t.exclude]):ue,pin:t.pin??{}}}for(let e of me){if(nr(e)){let t=D.has(`actions`),n=D.has(`docker`);if(!t&&!n)continue;let r=R.get(e),i=F(e),a=await Ee(o(e));if(he[i]={absPath:e,content:r},t){A.actions??={};let e=Array.from(r.matchAll(Jn),e=>Yn(e[1])).filter(e=>e!==null);for(let t of e){if(!Q(t.name,`actions`,a.include,a.exclude,`actions`))continue;let e=`${i}${t.name}`;A.actions[e]||(A.actions[e]={old:t.ref},B.push({...t,key:e,apiUrl:Xn(t.host,d),filePin:a.pin}))}}n&&(ge[i]={absPath:e,content:r,fileType:`workflow`},Te(r,i,[or,sr,cr],a));continue}let t=a(e);if(wr(t)){if(!D.has(`docker`))continue;let n=R.get(e),r=F(e),i=Cr(t)?`dockerfile`:`compose`,a=await Ee(o(e));ge[r]={absPath:e,content:n,fileType:i},Te(n,r,[Tr(t)],a);continue}let n=Br[t];if(!D.has(n))continue;if(t===`go.work`){A[n]??={};let t=o(l(e)),r=R.get(e);z={file:e,content:r};let i=Wn(r),[a,u]=await Promise.all([H(t),W(i.use,async e=>{let n=l(s(t,e,`go.mod`));try{return{usePath:e,modPath:n,content:await x(n,`utf8`)}}catch{return null}},{concurrency:c})]),{modeConfig:d,modeInclude:f,modeExclude:p,pin:m}=a,h=we(n,d);N[n]=e,V[n]={modeConfig:d,projectDir:t,pin:m};for(let e of u){if(!e)continue;let{usePath:t,modPath:r,content:i}=e,a=Rn(i),s=o(r);_e.push({absPath:r,content:i,projectDir:s,usePath:t});let c=t===`.`?``:`|${t}`;for(let e of h){let t=a[e]||{};for(let[r,i]of Object.entries(t))Q(r,n,f,p,e)&&L(n,e,c,r,qn(i),q(i))}}for(let[e,t]of Object.entries(i.replace))Q(e,n,f,p,`replace`)&&L(n,`replace`,``,e,qn(t),q(t));I+=Object.keys(A[n]).length;continue}if(t===`go.mod`&&z||t===`package.json`&&xe)continue;if(t===`Cargo.toml`){A[n]??={};let t=R.get(e),r=w(t),i=o(l(e));N[n]=e;let a=Ur([`Cargo.lock`],i).get(`Cargo.lock`),s=r.workspace?.members,u=Array.isArray(s)&&s.length,[d,f,p]=await Promise.all([H(i),a?x(a,`utf8`):Promise.resolve(null),u?Rr(s,i,`Cargo.toml`,c):Promise.resolve([])]),{modeConfig:m,modeInclude:h,modeExclude:g,pin:_}=d,v=we(n,m);V[n]={modeConfig:m,projectDir:i,pin:_};let y=f?kr(f):new Map,b=(e,t)=>{for(let r of v){let i=Ie(e,r)||{};if(!(typeof i!=`object`||Array.isArray(i))){for(let[e,a]of Object.entries(i))if(Q(e,n,h,g,r))if(typeof a==`object`&&a&&`version`in a&&!(`git`in a)&&!(`path`in a)){let i=String(a.version);Ce(i)&&L(n,r,t,e,Mr(y,e,i)??Z(i),i)}else typeof a==`string`&&Ce(a)&&L(n,r,t,e,Mr(y,e,a)??Z(a),a)}}};if(u){ye=!0,b(r,``),ve.push({absPath:l(e),content:t,memberPath:`.`});for(let e of p){ve.push(e);try{b(w(e.content),`|${e.memberPath}`)}catch(t){throw Error(`Error parsing ${e.absPath}: ${t.message}`)}}}else M[n]=t,b(r,``);I+=Object.keys(A[n]).length;continue}if(t===`pnpm-workspace.yaml`){A[n]??={};let t=o(l(e)),r=R.get(e);xe=!0;let i=zr(r),a=s(t,`package.json`),[u,d,f]=await Promise.all([H(t),x(a,`utf8`).catch(()=>null),Rr(i,t,`package.json`,c)]),{modeConfig:p,modeInclude:m,modeExclude:h,pin:g}=u,_=we(n,p);N[n]=e,V[n]={modeConfig:p,projectDir:t,pin:g};let v=(e,t)=>{for(let r of _){let i=e[r]||{};if(typeof i==`string`){let[e,a]=i.split(`@`);Q(e,n,m,h,r)&&L(n,r,t,e,Z(a),a)}else if(typeof i==`object`&&!Array.isArray(i))for(let[e,a]of Object.entries(i))Q(e,n,m,h,r)&&(dn(a)?L(n,r,t,e,pn(a,e).version,a):Ce(a)?L(n,r,t,e,Z(a),a):fn(a)?L(n,r,t,e,`0.0.0`,a):j[`${r}${t}${e}`]={old:a})}};if(d!==null){let e;try{e=JSON.parse(d)}catch(e){throw Error(`Error parsing ${a}: ${e.message}`)}be.push({absPath:l(a),content:d,memberPath:`.`}),v(e,``)}for(let e of f){let t;try{t=JSON.parse(e.content)}catch(t){throw Error(`Error parsing ${e.absPath}: ${t.message}`)}be.push(e),v(t,`|${e.memberPath}`)}I+=Object.keys(A[n]).length+Object.keys(j).length;continue}N[n]=e,A[n]??={};let r=o(l(e)),{modeConfig:i,modeInclude:u,modeExclude:f,pin:p}=await H(r),m=we(n,i),h={};M[n]=R.get(e);try{if(n===`npm`)h=JSON.parse(M[n]);else if(n===`pypi`)h=w(M[n]);else if(n===`go`){let e=Rn(M[n]);h.deps=e.deps,h.indirect=e.indirect,h.replace=e.replace,h.tool=e.tool}}catch(t){throw Error(`Error parsing ${e}: ${t.message}`)}for(let e of m){let t;if(t=n===`npm`||n===`go`?h[e]||{}:Ie(h,e)||{},Array.isArray(t)&&n===`pypi`)for(let{name:r,version:i}of Ae(t))Q(r,n,u,f,e)&&L(n,e,``,r,Z(i),i);else if(typeof t==`string`){let[r,i]=t.split(`@`);Q(r,n,u,f,e)&&L(n,e,``,r,Z(i),i)}else for(let[r,i]of Object.entries(t))Q(r,n,u,f,e)&&(n===`npm`&&dn(i)?L(n,e,``,r,pn(i,r).version,i):n!==`go`&&Ce(i)?L(n,e,``,r,Z(i),i):n===`npm`&&fn(i)?L(n,e,``,r,`0.0.0`,i):n===`npm`?j[`${e}${r}`]={old:i}:n===`go`&&L(n,e,``,r,qn(i),q(i)))}I+=Object.keys(A[n]).length+Object.keys(j).length,V[n]={modeConfig:i,projectDir:r,pin:p}}if(A.actions&&(I+=Object.keys(A.actions).length),A.docker&&(I+=Object.keys(A.docker).length),I===0)return{results:{},message:`No dependencies found, nothing to do.`};let De=[],Oe={registry:n.registry};for(let e of Object.keys(V)){let t=!!A[e]&&Object.keys(A[e]).length>0,r=e===`npm`&&Object.keys(j).length>0;if(!t&&!r)continue;let{modeConfig:i,projectDir:a,pin:o}=V[e],s=n.cooldown??i.cooldown,l=s?Ve(String(s)):0;De.push((async()=>{let t=new Map,n=e=>{if(!(!l&&!se))for(let[t,{date:n}]of Object.entries(e)){if(!n)continue;let[,r]=t.split(`\0`),i=O(r).cooldownOverride??l;i&&!K(n,i,P)&&delete e[t]}};if(await W(Object.keys(A[e]),async n=>{let[r,s]=n.split(`\0`),c=Fr(r),u=A[e][n],d=null;if(e===`npm`){let{oldOrig:t}=u;if(t&&dn(t))d=await mn(s,c,C);else if(t&&fn(t))try{d=await ln(s,c,i,Oe,C)}catch{delete A[e][n];return}else d=await ln(s,c,i,Oe,C)}else d=e===`go`?await Bn(s,c,u.oldOrig||u.old,a,C,_):e===`cargo`?await Or(s,c,C):await bn(s,c,C);if(!d)return;let[f,,p]=d;if(f?.error)throw Error(f.error);let{useGreatest:m,usePre:h,useRel:g,semvers:v,allowDowngrade:y,cooldownOverride:b}=O(f.name),x=u.old,S=u.oldOrig,ee=o[s],te=b??l,w=dt(f,{usePre:h,useRel:g,useGreatest:m,semvers:v,range:x,mode:e,pinnedRange:ee,cooldownDays:te||void 0,now:te?P:void 0},{allowDowngrade:y,matchesAny:U,isGoPseudoVersion:Pn}),T=``;if([`go`,`pypi`].includes(e)&&w)T=w;else if(e===`cargo`&&w&&S)T=jr(S,w);else if(w)if(S&&fn(S))T=String(Zt()[`save-exact`])===`true`?w:`^${w}`;else if(S&&dn(S)){let e=/^(npm:@jsr\/[^@]+@|jsr:@[^@]+@)(.+)$/.exec(S);e?T=`${e[1]}${w}`:S.startsWith(`jsr:`)&&(T=`jsr:${w}`)}else T=gn(x,w,S);if(!w||w===x||S&&S===T){delete A[e][n];return}let E=``;e===`pypi`&&f.releases?.[w]?.[0]?.upload_time_iso_8601?E=f.releases[w][0].upload_time_iso_8601:e===`go`&&f.Time?E=f.Time:e===`cargo`&&f.time?.[w]&&(E=f.time[w]),u.new=T,S&&dn(S)&&(u.newPrint=w),e===`npm`?t.set(n,{name:s,promise:un(f.name,w,i,Oe,C)}):e===`pypi`?u.info=Ot(f,p,f.info.name):e===`go`?u.info=Gn(f.newPath||s):e===`cargo`&&(u.info=`https://crates.io/crates/${s}`),E&&Gr(u,E)},{concurrency:c}),await Promise.all(Array.from(t,async([t,{name:n,promise:r}])=>{let i=await r,a=A[e][t];a&&(a.info=Ot({repository:i.repository,homepage:i.homepage},null,n),i.date&&Gr(a,i.date))})),e===`npm`&&Object.keys(j).length){let t=(await W(Object.entries(j),([e,t])=>yn(e,t,C),{concurrency:c})).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;A[e][t]={old:j[t].old,new:r,oldPrint:xt.test(o)?o.substring(0,7):o,newPrint:xt.test(s)?s.substring(0,7):s,info:`https://github.com/${i}/${a}`},c&&Gr(A[e][t],c)}}n(A[e])})())}if(B.length&&De.push((async()=>{let e=new Map;for(let t of B){let n=`${t.apiUrl}/${t.owner}/${t.repo}`,r=e.get(n);r||e.set(n,r={apiUrl:t.apiUrl,owner:t.owner,repo:t.repo,infos:[]}),r.infos.push(t)}await W(e.values(),async({apiUrl:e,owner:t,repo:n,infos:r})=>{let i=await wt(e,t,n,C),a=[],o=new Map,s=new Map,l=new Map;for(let e of i){s.set(e.name,e);let t=q(e.name);de(t)&&(a.push(t),o.has(t)||o.set(t,e.name)),e.commitSha&&l.set(e.commitSha,e.name)}let u=new Map;async function d(r){if(u.has(r))return u.get(r);let i=await Zn(e,t,n,r,C);return u.set(r,i),i}async function f(e){let t=new Set;for(let n=0;n<20;n++){let n=ut({},t.size?a.filter(e=>!t.has(e)):a,e);if(!n||n===e.range)return null;let r=o.get(n);if(!r){t.add(n);continue}let i=s.get(r)?.commitSha||``;if(!e.cooldownDays)return{version:n,tag:r,commitSha:i,date:``};let c=i?await d(i):``;if(K(c,e.cooldownDays,e.now))return{version:n,tag:r,commitSha:i,date:c};t.add(n)}return null}await W(r,async({key:e,host:r,ref:i,name:a,isHash:o,filePin:c})=>{let u=A.actions[e],p=`https://${r||`github.com`}/${t}/${n}`,m=k[a]??c[a];if(o){let{usePre:t,useRel:n,cooldownOverride:r}=O(a),o=r??fe,s=await f({range:`0.0.0`,semvers:new Set([`patch`,`minor`,`major`]),usePre:t,useRel:n,useGreatest:!0,pinnedRange:m,cooldownDays:o||void 0,now:o?P:void 0});if(!s){delete A.actions[e];return}let{tag:c,commitSha:d,date:h}=s;if(!d||d===i||d.startsWith(i)||i.startsWith(d)){delete A.actions[e];return}let g=l.get(i);if(!g){for(let[e,t]of l)if(e.startsWith(i)){g=t;break}}u.old=i,u.new=d.substring(0,i.length),u.oldPrint=g||i.substring(0,7),u.newPrint=c,u.info=p,h&&Gr(u,h)}else{let t=J(q(i));if(!t){delete A.actions[e];return}let{usePre:n,useRel:r,semvers:o,cooldownOverride:c}=O(a),l=c??fe,h=await f({range:t,semvers:o,usePre:n,useRel:r,useGreatest:!0,pinnedRange:m,cooldownDays:l||void 0,now:l?P:void 0});if(!h){delete A.actions[e];return}let{tag:g,commitSha:_,date:v}=h,y=Qn(g,i);if(y===i){delete A.actions[e];return}if(u.new=s.has(y)?y:g,u.info=p,_&&v)Gr(u,v);else if(_){let e=await d(_);e&&Gr(u,e)}}},{concurrency:c})},{concurrency:c}),Object.keys(A.actions).length||delete A.actions})()),Se.length&&De.push((async()=>{let e=new Map;for(let t of Se){let n=e.get(t.fullImage);n||e.set(t.fullImage,n=[]),n.push(t)}await W(e.entries(),async([e,t])=>{let n;try{let[t]=await hr(e,`docker`,C);n=t}catch{for(let e of t)delete A.docker[e.key];return}for(let e of t){let t=A.docker[e.key],r=t.oldOrig||t.old,{semvers:i,cooldownOverride:a}=O(e.fullImage),o=k[e.fullImage]??e.filePin[e.fullImage],s=a??fe,c=gr(n.tags,r,i,s||void 0,s?P:void 0,o);if(!c){delete A.docker[e.key];continue}t.new=c.newTag,t.info=Er(e.ref),Gr(t,c.date)}},{concurrency:c}),Object.keys(A.docker).length||delete A.docker})()),await Promise.all(De),!Kr(A))return{results:{},message:`All dependencies are up to date.`};if(n.update){let e=(e,t,n)=>{for(let r of t){let t=Ir(A[e],r.memberPath);Object.keys(t).length&&$(r.absPath,n(r.content,t))}},t=new Map;if(A.actions)for(let[e,n]of Object.entries(A.actions)){let[r,i]=e.split(`\0`),a=t.get(r);a||t.set(r,a=[]),a.push({name:i,oldRef:n.old,newRef:n.new})}let n=new Map;if(A.docker)for(let[e,t]of Object.entries(A.docker)){let[r]=e.split(`\0`),i=n.get(r);i||n.set(r,i={}),i[e]=t}for(let r of Object.keys(A)){if(!Object.keys(A[r]).length)continue;if(r===`actions`){for(let[e,n]of t){let{absPath:t,content:r}=he[e]||{};if(!t)continue;let i=$n(r,n);$(t,i),ge[e]&&(ge[e].content=i)}continue}if(r===`docker`){for(let[e,t]of n){let n=ge[e];if(!n)continue;let{absPath:r,content:i,fileType:a}=n;$(r,(a===`dockerfile`?vr:a===`compose`?yr:br)(i,t))}continue}let i=M[r];if(r===`go`&&z){for(let e of _e){let t=Ir(A[r],e.usePath);if(!Object.keys(t).length)continue;let[n,i]=Hn(e.content,t);n!==e.content&&$(e.absPath,n),Un(e.projectDir,i,$)}let e={};for(let[t,n]of Object.entries(A[r]))t.split(`\0`)[0]===`replace`&&(e[t]=n);if(Object.keys(e).length){let[t]=Hn(z.content,e);t!==z.content&&$(z.file,t)}}else if(r===`go`){let[e,t]=Hn(i,A[r]);$(N[r],e),Un(o(l(N[r])),t,$)}else if(r===`cargo`&&ye)e(r,ve,Pr);else if(r===`cargo`)$(N[r],Pr(i,A[r]));else if(r===`npm`&&xe)e(r,be,hn);else{let e=r===`npm`?hn:xn;$(N[r],e(i,A[r]))}}}return Yr(A)}function Qr(e,t){if(t.some(e=>e===`-h`||e===`--help`||e===`-v`||e===`--version`))return[];let n=(...t)=>t.some(t=>d(s(e,t))),r=new Set;return n(`package.json`,`pnpm-workspace.yaml`)&&(r.add(`https://registry.npmjs.org/`),r.add(`https://jsr.io/`),r.add(`https://api.github.com/`)),n(`pyproject.toml`)&&r.add(`https://pypi.org/`),n(`Cargo.toml`)&&r.add(`https://crates.io/`),n(`go.mod`,`go.work`)&&r.add(`https://proxy.golang.org/`),n(...xr)&&r.add(`https://hub.docker.com/`),n(`.github/workflows`)&&(r.add(`https://api.github.com/`),r.add(`https://hub.docker.com/`)),Array.from(r)}function $r(e){let t=``,n=0,r=e.length;for(;n<r;){let i=e[n];if(i===`"`){for(t+=i,n++;n<r;){let i=e[n];if(t+=i,n++,i===`\\`&&n<r){t+=e[n],n++;continue}if(i===`"`)break}continue}if(i===`/`&&n+1<r&&e[n+1]===`/`){for(n+=2;n<r&&e[n]!==`
5
+ `;)n++;continue}if(i===`/`&&n+1<r&&e[n+1]===`*`){for(n+=2;n<r&&(e[n]!==`*`||e[n+1]!==`/`);)n++;n+=2;continue}t+=i,n++}return t=t.replace(/,(\s*[}\]])/g,`$1`),JSON.parse(t)}export{Ce as _,Nt as a,Pt as c,Qe as d,Ze as f,He as g,ze as h,Kn as i,Mt as l,Ue as m,Qr as n,zt as o,ke as p,Zr as r,kt as s,$r as t,Ft as u};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "updates",
3
- "version": "17.16.12",
3
+ "version": "17.17.0",
4
4
  "description": "CLI dependency update tool for npm, uv, cargo, go and actions",
5
5
  "author": "silverwind",
6
6
  "repository": "silverwind/updates",
@@ -38,11 +38,11 @@
38
38
  "bun": "*"
39
39
  },
40
40
  "devDependencies": {
41
- "@types/node": "25.7.0",
42
- "@typescript/native-preview": "7.0.0-dev.20260512.1",
43
- "@vitest/coverage-v8": "4.1.6",
44
- "eslint": "10.3.0",
45
- "eslint-config-silverwind": "133.0.1",
41
+ "@types/node": "25.9.1",
42
+ "@typescript/native-preview": "7.0.0-dev.20260519.1",
43
+ "@vitest/coverage-v8": "4.1.7",
44
+ "eslint": "10.4.0",
45
+ "eslint-config-silverwind": "133.0.3",
46
46
  "jest-extended": "7.0.0",
47
47
  "timerel": "5.8.7",
48
48
  "tsdown": "0.22.0",
@@ -50,8 +50,8 @@
50
50
  "typescript": "6.0.3",
51
51
  "typescript-config-silverwind": "18.0.0",
52
52
  "updates-config-silverwind": "3.0.2",
53
- "versions": "15.0.3",
54
- "vitest": "4.1.6",
53
+ "versions": "15.0.4",
54
+ "vitest": "4.1.7",
55
55
  "vitest-config-silverwind": "11.3.5"
56
56
  }
57
57
  }