updates 17.16.13 → 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 +20 -0
- package/dist/api.d.ts +15 -2
- package/dist/shared.js +5 -5
- package/package.json +8 -8
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>; /**
|
|
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,5 +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
|
|
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
|
|
3
|
-
`)}return a}const
|
|
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 Qe(e,t,n){try{await(Je??=b(qe,{recursive:!0})),await S(s(qe,`${Xe(e)}.cache`),`${t}\n${n}`)}catch{}}var $e=`17.16.13`;function W(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 et=$e,tt=5e3,G=e=>e[0]===`v`?e.substring(1):e,nt=e=>e.endsWith(`/`)?e.slice(0,-1):e;function rt(e,t){return{headers:{"user-agent":`updates/${et}`,"accept-encoding":`gzip, deflate, br`,...t&&{Authorization:`${e} ${t}`}}}}async function it(e,t){try{return await fetch(e,t)}catch(t){throw Error(`Failed to fetch ${e}${t?.message?`: ${t.message}`:``}`)}}async function at(e){return typeof e.text==`function`?e.text():JSON.stringify(await e.json())}async function ot(e,t,n={}){let r=t.noCache?null:await Ze(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 at(o),c=o.headers?.get?.(`etag`);return c&&!t.noCache&&await Qe(e,c,s),{body:s,res:o}}async function st(e,t,n={}){if(!t.noCache){let t=await Ze(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 at(r);return t.noCache||await Qe(e,`immutable`,i),{body:i,res:r}}function ct(e){return(N(e)?.prerelease.length??0)>0}function lt(e){return/[0-9]+\.[0-9]+\.[0-9]+-.+/.test(e)}const ut=new WeakMap;function dt(e){let t=ut.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`),ut.set(e,n),n}function ft(e,t,{useRel:n,allowDowngrade:r,name:i,matchesAny:a}){let o=K(e),s=K(t);if(!o||!s)return!0;let c=lt(e)||ct(e),l=ct(t);return c&&!l?he(s,o)||n:!l&&_e(s,o)?r===!0||a(i,r):!0}function K(e){return P(e)?.version??``}function pt(e,t,{range:n,semvers:r,usePre:i,useRel:a,useGreatest:o,pinnedRange:s,cooldownDays:c,now:l,getVersionDate:u}){let d=K(n);if(!d)return d;let f=lt(n)||i,p=f?dt(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&&!V(n,s))continue;let r;if(_&&(r=u?u(e):h?m[e]:void 0,!W(r,c,l)))continue;let i=me(b,t);if(!(!i||!p.has(i)))if(g)(j(t,b)>=0||s&&!V(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 mt(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=K(n);if(!t)return null;let r=a||lt(n),p=e=>ct(e)&&(!r||i),m={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d},h=e.old||n,g=K(e.new);if(g&&!f(e.new)&&!p(e.new)){let n=F(t,g);if(n&&o.has(n)&&ft(h,e.new,m)&&W(e.Time,c,l)&&(!s||V(g,s)))return e.new}let _=K(e.sameMajorNew);if(_&&!f(e.sameMajorNew)&&!p(e.sameMajorNew)){let n=F(t,_);if(n&&o.has(n)&&ft(h,e.sameMajorNew,m)&&W(e.sameMajorTime,c,l)&&(!s||V(_,s)))return e.Time=e.sameMajorTime,delete e.newPath,e.sameMajorNew}if(c&&l&&e.olderEligible&&!p(e.olderEligible.version)){let n=K(e.olderEligible.version);if(n){let r=F(t,n);if(r&&o.has(r)&&ft(h,e.olderEligible.version,m)&&(!s||V(n,s)))return e.Time=e.olderEligible.time,delete e.newPath,e.olderEligible.version}}return null}let h=pt(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=K(e.info.version)):r=e[`dist-tags`].latest;let p=K(n),m=lt(n),g=ct(h),_=ct(r),v={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d};if(!i&&a||m&&g)return h;if(m&&!g)return ft(n,h,v)?h:null;let y=F(p,r);return y&&y!==`prerelease`&&!o.has(y.replace(/^pre/,``))||i&&ct(r)?h:_e(r,p)&&!_?ft(n,r,v)?r:null:!m&&_&&!a||s&&!V(r,s)||c&&l&&!W(t===`pypi`?e.releases?.[f||r]?.[0]?.upload_time_iso_8601:e.time?.[r],c,l)?h:f||r}}const ht=new Map;if(t.UPDATES_FORGE_TOKENS)for(let e of t.UPDATES_FORGE_TOKENS.split(`,`)){let t=e.indexOf(`:`);t>0&&ht.set(e.substring(0,t),e.substring(t+1))}const gt=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 _t;function vt(){return gt.length?Promise.resolve(gt):_t??=(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]:gt}catch{return gt}})()}const yt=new Map;async function bt(e){try{let t=ht.get(new URL(e).hostname);if(t)return[t]}catch{}return vt()}async function xt(e,t,n){let r;try{r=new URL(e).hostname}catch{r=``}let i=await(r?bt(e):vt()),a=AbortSignal.timeout(t.fetchTimeout),o=e=>{let t=rt(`Bearer`,e);return n&&(t.headers={...t.headers,...n}),t.signal=a,t};if(!i.length)return t.doFetch(e,o());let s=r?yt.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&&yt.set(r,n),i}return t.doFetch(e,o())}function St(e,t){let n=G(t);if(!de(n))return null;let r=``,i=n;for(let t of e){let e=G(t);de(e)&&(!r||he(e,i))&&(r=t,i=e)}return r&&L(n,i)?r:null}function Ct(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 wt=/^[0-9a-f]{7,}$/i;function Tt(e){return e.map(e=>({name:e.name,commitSha:e.commit?.sha||``}))}async function Et(e,t){let n=t.noCache?null:await Ze(e),r=await xt(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=Tt(await r.json()),a=r.headers.get(`link`)||``,o=r.headers.get(`etag`);return o&&!t.noCache&&await Qe(e,o,JSON.stringify({link:a,tags:i})),{tags:i,link:a}}async function Dt(e,t,n,r){let i=r=>`${e}/repos/${t}/${n}/tags?per_page=100&page=${r}`;try{let e=await Et(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)=>Et(i(t+2),r)));for(let e of o)e&&t.push(...e.tags);return t}catch{return[]}}function Ot(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 kt(e,t,n=``){let r=t.startsWith(`v`),i=G(e),a=G(t).split(`.`).length,o=i.split(`.`),s;return s=a===1?o[0]:a===2?`${o[0]}.${o[1]||`0`}`:i,`${r?`v`:``}${s}${n}`}function At(e){return e.startsWith(`https://bitbucket.org`)?`src/HEAD`:`tree/HEAD`}function jt({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=Ct(typeof e==`string`?e:e.url),a&&typeof e!=`string`&&e.directory&&(a=`${a}/${At(a)}/${e.directory}`)),a||t||``)}const Mt={"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 Nt(e,t){return RegExp(`^${U(e).replaceAll(`\\*`,`.*`)}$`,t?`i`:``)}function Pt(e,t,n){return t&&typeof e==`string`?/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):Nt(e,n):e instanceof RegExp?e:Nt(e,n)}function Ft(e){return Array.isArray(e)&&e.every(e=>e===!0)?!0:Array.isArray(e)?new Set(e.flatMap(e=>typeof e==`string`?Be(e):``).filter(Boolean)):typeof e==`string`?new Set([e]):typeof e==`boolean`?e:!1}function It(e){for(let[t,{short:n}]of Object.entries(Mt))if(t===e||n===e)return t;return``}function q(e){return new Set(e.map(e=>Pt(e,!1,!0)))}function Lt(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).flatMap(e=>Be(e)):[]}function Rt(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&&Te(r)&&(t[n]=r)}return t}function zt(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(Pt(n,!1,!1));return t}async function Bt(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 Vt=Ke(e=>Ge(e,Bt));async function Ht(e){let t=await Vt(e),n=t?.default??{},{loadRenovateConfig:r}=await import(`./renovate.js`);return{...await r(t?.configDir??e,n.inherit?.renovate),...n}}function Ut(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 Wt(e){try{return Ut(m(e,`utf-8`))}catch{return}}function Gt(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 Kt(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 qt(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=Wt(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(Gt(`.${e}rc`));let u=Kt(`${e}_`);return u.config&&l(u.config),Object.assign({},...o,u,c.length?{configs:c,config:c[c.length-1]}:void 0)}const Jt=/^.*?:\/\/(.*?@)?(github\.com[:/])/i,Yt=/^([^/]+)\/([^/]+)\/(?:.*\/)?([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i,Xt=/[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g,Zt=/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g,Qt=`https://registry.npmjs.org`;let J=null;const $t=new Map;function en(){return J??=qt(`npm`,{registry:Qt})}function tn(e){return e.replace(/^\$\{?([^}]*)\}?$/,(e,n)=>t[n]||``)}function nn(e,t){let n=n=>t[`${e}:${n}`]||t[`${e}/:${n}`],r=n(`_authToken`);if(r)return{token:tn(r),type:`Bearer`};let i=n(`username`),a=n(`_password`);if(i&&a){let e=Buffer.from(tn(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:tn(o),type:`Basic`}}function rn(e,t){let n=new URL(e.startsWith(`//`)?`http:${e}`:e),r;for(;r!==`/`&&n.pathname!==r;){r=n.pathname||`/`;let e=nn(`//${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:tn(i),type:`Basic`}}function an(e,t){let n=t[`${e}:registry`]||t.registry;return n.endsWith(`/`)?n:`${n}/`}function on(e,t){J||=en();let n=e.startsWith(`@`)?(/@[a-z0-9][\w.-]+/.exec(e)||[``])[0]:``,r=`${n}:${t}`,i=$t.get(r);if(i)return i;let a=()=>({auth:rn(t,J),registry:t}),o;if(!e.startsWith(`@`))o=a();else{let e=nt(an(n,J));if(e!==t)try{let t=rn(e,J);o=t?.token?{auth:t,registry:e}:a()}catch{o=a()}else o=a()}return $t.set(r,o),o}function sn(e,t,n){J||=en();let r=nt((typeof n.registry==`string`?n.registry:!1)||t.registry||J.registry||Qt);return{...on(e,r),originalRegistry:r}}function cn(e,t,n){let r=`${e}/${t.replace(/\//g,`%2f`)}`;return n?`${r}/${n}`:r}const ln=new Map,un=new Map,dn=new Map;async function fn(e,t,n,r,i){let{auth:o,registry:s}=sn(e,n,r),c=cn(s,t===`resolutions`?a(e):e),l=ln.get(c);if(!l){let t=rt(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 Ze(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 Qe(c,t,e),JSON.parse(e)}Ot(a,c,e,s)})().catch(e=>{throw ln.delete(c),e}),ln.set(c,l)}return[await l,t,s,e]}async function pn(e,t,n,r,i){let{auth:a,registry:o}=sn(e,n,r),s=cn(o,e,t),c=un.get(s);if(c)return c;let l=(async()=>{try{let n=rt(a?.type,a?.token),r=await st(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=cn(o,e),a=dn.get(r);a||(a=i.doFetch(r,{...n,signal:AbortSignal.timeout(i.fetchTimeout)}).then(e=>e?.ok?e.json():null).catch(()=>(dn.delete(r),null)),dn.set(r,a)),l=(await a)?.time?.[t]||``}return{repository:c.repository,homepage:c.homepage,date:l}}catch{return{}}})();return un.set(s,l),l}function mn(e){return e.startsWith(`npm:@jsr/`)||e.startsWith(`jsr:`)}function hn(e){return e.startsWith(`link:`)||e.startsWith(`file:`)}function gn(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 _n(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 ot(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]}Ot(s.res,o,e,`JSR`)}function vn(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 yn(e,t,n){let r=e.replace(Zt,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 Y(e){let t=e.match(Xt);return t?.length===1?e.replace(Xt,K(t[0])):e}async function bn(e,t,n){let r=`${n.forgeApiUrl}/repos/${e}/${t}/commits`;try{let e=n.noCache?null:await Ze(r),t=await xt(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 Qe(r,a,i);let{sha:o,commit:s}=JSON.parse(i)[0];return{hash:o,commit:s}}catch{return{hash:``,commit:{}}}}async function xn(e,t,n){return(await Dt(n.forgeApiUrl,e,t,n)).map(e=>e.name)}async function Sn(e,t,n){let r=t.old.replace(Jt,``),[,i,a,o]=Yt.exec(r)||[];if(!i||!a||!o)return null;if(wt.test(o)){let{hash:r,commit:s}=await bn(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=St(await xn(i,a,n),o);if(t)return{key:e,newRange:t,user:i,repo:a,oldRef:o,newRef:t}}return null}async function Cn(e,t,n){let r=`${n.pypiApiUrl}/pypi/${e}/json`,i=await ot(r,n,{headers:{"accept-encoding":`gzip, deflate, br`}});if(`body`in i)return[JSON.parse(i.body),t,null,e];Ot(i.res,r,e,n.pypiApiUrl)}function wn(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(`("${U(a)}(?:\\[[^\\]]+\\])? *[<>=~]+ *)${U(o)}(")`,`g`),(n,r,i)=>`${r}${t[e].new}${i}`)}return n}let Tn;async function En(){let[{execFile:e},{promisify:t}]=await Promise.all([import(`node:child_process`),import(`node:util`)]);return t(e)}function Dn(){return Tn??=En()}function On(){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 nt(e)}return`https://proxy.golang.org`}function kn(){return(t.GONOPROXY||t.GOPRIVATE||``).split(`,`).map(e=>e.trim()).filter(Boolean)}function An(e,t){return t.some(t=>e===t||e.startsWith(`${t}/`))}function jn(e){return e.replace(/[A-Z]/g,e=>`!${e.toLowerCase()}`)}const Mn=/\/v(\d+)$/;function Nn(e){let t=Mn.exec(e);return t?Number.parseInt(t[1]):1}function Pn(e,t){let n=e.replace(Mn,``);return t<=1?n:`${n}/v${t}`}function Fn(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 In(e,t,n){return t===`indirect`||e.startsWith(`golang.org/x/`)||Ln(n)}function Ln(e){return/\d{14}-[0-9a-f]{12}$/.test(e)}function Rn(e,t,n){return[{name:e,old:t,new:t},n,null,e]}async function zn(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 Bn(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:G(o),Time:s,...c===e?{}:{newPath:c},sameMajorNew:G(i),sameMajorTime:a},t,null,e]}function Vn(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=Fn(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 Hn(e,n,r,i,a){let o=Nn(e),s=async(e,n)=>{try{let{stdout:r}=await(await Dn())(`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=In(e,n,r),[l,u]=await Promise.all([s(e,a.fetchTimeout),c?null:s(Pn(e,o+1),a.goProbeTimeout)]);return l?Bn(e,n,r,await zn(o,u,t=>s(Pn(e,t),a.goProbeTimeout)),l.Version,l.Time):Rn(e,r,n)}async function Un(e,t,n,r,i,a){if(An(e,a))return Hn(e,t,n,r,i);let o=jn(e),s=Nn(e),c=async t=>{let n=Pn(e,t);return i.doFetch(`${i.goProxyUrl}/${jn(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=In(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 Rn(e,n,t);let f,p;try{let e=await u.json();f=e.Version,p=e.Time}catch{return Rn(e,n,t)}return Bn(e,t,n,await zn(s,d,c),f,p)}function Wn(e,t){let n=U(t);return e=e.replace(RegExp(`^replace\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(RegExp(`^\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(/^replace\s*\(\s*\)\s*\n/gm,``),e}function Gn(e,t){let n=e,r={};for(let[e,{old:i,oldOrig:a}]of Object.entries(t)){let[o,s]=e.split(`\0`),c=a||i,l=t[e].new;if(o===`replace`){n=n.replace(RegExp(`(=>\\s+${U(s)}\\s+)v${U(c)}`,`g`),`$1v${l}`);continue}if(o===`indirect`){n=n.replace(RegExp(`(${U(s)}) +v${U(c)}`,`g`),`$1 v${l}`);continue}let u=Nn(s),d=Number.parseInt(l.split(`.`)[0]);if(u!==d&&d>1){let e=Pn(s,d);n=n.replace(RegExp(`${U(s)} +v${U(c)}`,`g`),`${e} v${l}`),o===`tool`&&(n=n.replace(RegExp(`(^\\s+|^tool\\s+)${U(s)}(/\\S+)?\\s*$`,`gm`),`$1${e}$2`)),r[s]=e}else n=n.replace(RegExp(`(${U(s)}) +v${U(c)}`,`g`),`$1 v${l}`);o!==`tool`&&(n=Wn(n,s))}return[n,r]}function Kn(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(U).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 qn(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=Fn(r,a);e&&(n[e.targetModule]=e.targetVersion);continue}}return{use:t,replace:n}}function Jn(e){let t=`https://${Yn(e)}`,n=new URL(t),r=n.pathname.split(`/`);if(r.length>3){let[,e,i,...a]=r;return n.pathname=`/${e}/${i}/${At(t)}/${a.join(`/`)}`,n.toString()}else return t}function Yn(e){return Mn.test(e)?o(e):e}function Xn(e){return e.replace(/(\d{7})\d{7}-[0-9a-f]{12}$/,`$1`)}const Zn=/^\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:wt.test(o)}}function $n(e,t){return e?e===`github.com`?`https://api.github.com`:`https://${e}/api/v1`:t}async function er(e,t,n,r,i){let a=`${e}/repos/${t}/${n}/git/commits/${r}`;if(!i.noCache){let e=await Ze(a);if(e)return e.body}try{let e=await xt(a,i);if(!e?.ok)return``;let t=await e.json(),n=t?.committer?.date||t?.author?.date||``;return n&&!i.noCache&&await Qe(a,`immutable`,n),n}catch{return``}}function tr(e,t){return kt(N(G(e))?.version??G(e),t)}function nr(e,t){let n=e;for(let{name:e,oldRef:r,newRef:i}of t){let t=RegExp(`(uses:\\s*['"]?)${U(e)}@${U(r)}(?![\\w.-])`,`g`);n=n.replace(t,`$1${e}@${i}`)}return n}const rr=[`.github`,`.gitea`,`.forgejo`],ir=RegExp(`(?:${rr.map(U).join(`|`)})\\/(?:workflows\\/[^/]+|(?:[^/]+\\/)*action)\\.ya?ml$`);function ar(e){return ir.test(e.replace(/\\/g,`/`))}function or(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 sr=/^(v?\d+(?:\.\d+){0,2})(-.+)?$/,cr=/^\s*FROM\s+(?:--platform=\S+\s+)?(\S+)/gm,lr=/^\s*image:\s*['"]?([^\s'"#]+)['"]?/gm,ur=/^\s*container:\s*['"]?([^\s'"#{}]+:[^\s'"#{}:]+)['"]?\s*$/gm,dr=/^\s*(?:-\s*)?uses:\s*['"]?docker:\/\/([^'"#\s]+)['"]?/gm;function fr(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 pr(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||!sr.test(r)))return null;let{registry:i,namespace:a,repo:o}=fr(n);return{registry:i,namespace:a,repo:o,tag:r,fullImage:n}}function mr(e){let t=sr.exec(e);return t?{version:t[1],suffix:t[2]||``}:null}function hr(e,t){let n=mr(t);return n?kt(e,n.version,n.suffix):t}function gr(e,t){let n=[];for(let r of e.matchAll(t)){let e=pr(r[1]);e&&n.push({ref:e,match:r[1]})}return n}async function _r(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 ot(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 vr(e,t,n){let{registry:r,namespace:i,repo:a}=fr(e);if(r)throw Error(`Non-Docker-Hub registries are not yet supported: ${r}`);return[{tags:await _r(i,a,n),name:e},t,null,e]}function yr(e,t,n,r,i,a){let o=mr(t);if(!o)return null;let s=P(G(o.version))?.version;if(!s)return null;let c=s,l=``,u=``;for(let[t,s]of Object.entries(e)){let e=mr(t);if(!e||e.suffix!==o.suffix)continue;let d=P(G(e.version))?.version;if(!d||a&&!V(d,a)||!W(s,r,i))continue;let f=F(c,d);!f||!n.has(f)||ge(d,c)&&(c=d,l=t,u=s)}if(!l||c===s)return null;let d=hr(c,t);return d===t?null:{newTag:d,date:u}}function br(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(U(t),U(a)),`$1${t}:${i.new}`)}return r}function xr(e,t){return br(e,t,[(e,t)=>RegExp(`(FROM\\s+(?:--platform=\\S+\\s+)?)${e}:${t}`,`g`)])}function Sr(e,t){return br(e,t,[(e,t)=>RegExp(`(image:\\s*['"]?)${e}:${t}`,`g`)])}function Cr(e,t){return br(e,t,[(e,t)=>RegExp(`((?:container|image):\\s*['"]?)${e}:${t}`,`g`),(e,t)=>RegExp(`(uses:\\s*['"]?docker://)${e}:${t}`,`g`)])}const wr=[`Dockerfile`,`docker-compose.yml`,`docker-compose.yaml`];function Tr(e){return/^docker-.+\.ya?ml$/.test(e)}function Er(e){return/^Dockerfile(\..+)?$/.test(e)}function Dr(e){return Er(e)||Tr(e)}function Or(e){return Er(e)?cr:lr}function kr(e){return e.registry?``:e.namespace===`library`?`https://hub.docker.com/_/${e.repo}`:`https://hub.docker.com/r/${e.namespace}/${e.repo}`}const Ar=new Map;async function jr(e,t,n){let r=`${nt(n.cratesIoUrl)}/api/v1/crates/${encodeURIComponent(e)}/versions?per_page=100`,i=n.noCache?void 0:Ar.get(r);return i||(i=ot(r,n,rt()).then(t=>{`body`in t||Ot(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 Ar.delete(r),e}),Ar.set(r,i)),[await i,t,null,e]}function Mr(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 Nr=/^\d/;function Pr(e,t){return Nr.test(e)?yn(Y(`^${e}`),t,`^${e}`).replace(/^\^/,``):yn(Y(e),t,e)}function Fr(e,t,n){let r=e.get(t);if(!r)return;let i=Nr.test(n)?`^${n}`:n,a;for(let e of r)V(e,i)&&(!a||he(e,a))&&(a=e);return a}const Ir=Le.map(U).join(`|`);function Lr(e,t){let n=e;for(let[e,r]of Object.entries(t)){let[,t]=e.split(`\0`),i=r.oldOrig||r.old,a=r.new,o=U(t),s=U(i);n=n.replace(RegExp(`^(\\s*${o}\\s*=\\s*["'])${s}(["'].*)$`,`gm`),`$1${a}$2`),n=n.replace(RegExp(`(\\s*${o}\\s*=\\s*\\{\\s*version\\s*=\\s*["'])${s}(["'])`,`g`),`$1${a}$2`),n=n.replace(RegExp(`(\\[(?:${Ir})\\.${o}\\][^\\[]*?version\\s*=\\s*["'])${s}(["'])`,`g`),`$1${a}$2`)}return n}function Rr(e){return e.split(`|`)[0]}function zr(e,t){let n=t===`.`?``:`|${t}`,r={};for(let[t,i]of Object.entries(e)){let[e,a]=t.split(`\0`),o=Rr(e);e===`${o}${n}`&&(r[`${o}${a}`]=i)}return r}const Br=/[*?{[]/;async function Vr(e,t,n,r=32){let i=new Set,a=[];for(let r of e){let e=Br.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 H(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 Hr(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 Ur={"pnpm-workspace.yaml":`npm`,"package.json":`npm`,"pyproject.toml":`pypi`,"go.work":`go`,"go.mod":`go`,"Cargo.toml":`cargo`},Wr=new Set([`npm`,`pypi`,`go`,`cargo`,`actions`,`docker`]),X=(e,t)=>typeof e==`string`?nt(e):typeof t==`function`?t():t;function Gr(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 Kr(e,t){let n=await H(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=Ae(t,{noAffix:!0}))}function qr(e){let t=0;for(let n of Object.keys(e))t+=Object.keys(e[n]).length;return t}function Jr(e){console.error(`${Ve()} ${e}`)}function Q(e,t,n,r,i){if(i===`engines`&&Pe.includes(e)||t===`pypi`&&e===`python`)return!1;if(!n.size&&!r.size)return!0;let a=t===`go`?Yn(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 Yr(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(Ur)){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()&&Dr(t.name)&&n.add(l(s(e,t.name)))}catch{}let t=l(e).replace(/\\/g,`/`),r=rr.some(e=>t.endsWith(`${e}/workflows`)),i=!r&&rr.some(e=>t.endsWith(e)),a;a=r?[o(t)]:i?[t]:rr.map(e=>s(t,e));for(let e of a)for(let t of or(e))n.add(t)}else throw Error(`${e} is neither a file nor directory`)}else{let t=new Set(rr),r=[...Object.keys(Ur),...wr,...rr];for(let[i,a]of Gr(r,e()))if(t.has(i))for(let e of or(a))n.add(e);else n.add(l(a));try{for(let t of h(e(),{withFileTypes:!0}))t.isFile()&&Dr(t.name)&&!wr.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 Xr(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`&&!mn(i.oldOrig)&&(i.old=n===`go`?Xn(i.oldOrig):i.oldOrig),n===`go`&&(i.new=Xn(i.new)),n===`actions`&&(i.old=G(i.old),i.new=G(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 Zr=!1;async function Qr(t={}){if(!Zr){let{enableDnsCache:e}=await import(`./dns.js`);e(),Zr=!0}let n={...t},c=n.sockets??25,u=n.timeout??0,d=X(t.forgeapi,`https://api.github.com`),f=X(t.pypiapi,`https://pypi.org`),p=X(t.jsrapi,`https://jsr.io`),m=X(t.goproxy,On),h=X(t.cargoapi,`https://crates.io`),g=X(t.dockerapi,`https://hub.docker.com`),_=kn(),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&&Jr(`${b(t?.method||`GET`)} ${e}`);let r=await it(e,t);return n.verbose&&Jr(`${r.ok?S(r.status):C(r.status)} ${e}`),r},noCache:!!n.noCache},T=zt(n.greatest),E=zt(n.prerelease),te=zt(n.release),ne=zt(n.patch),re=zt(n.minor),ie=zt(n.allowDowngrade),D=n.modes?.length?new Set(n.modes):Wr;D.has(`actions`)&&vt();function ae(e){return ne===!0||Re(e,ne)?new Set([`patch`]):re===!0||Re(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:Re(e,T),usePre:typeof E==`boolean`?E:Re(e,E),useRel:typeof te==`boolean`?te:Re(e,te),semvers:ae(e)},oe.set(e,t)),t}let ce=q(n.include??[]),le=q(n.exclude??[]),ue=n.pin??{},O={},k={},A={},j={},M=Date.now(),N=n.cooldown?We(String(n.cooldown)):0,fe=e(),pe=e=>e.replace(`${fe}/`,``).replace(`${fe}\\`,``),P=0,F=(e,t,n,r,i,a)=>{O[e][`${t}${n}${r}`]={old:i,oldOrig:a}},me=Yr(n.files?.length?new Set(n.files):!1),I=await Kr(Array.from(me).filter(e=>{if(ar(e))return D.has(`actions`)||D.has(`docker`);let t=a(e);if(Dr(t))return D.has(`docker`);let n=Ur[t];return!!n&&D.has(n)}),c),he={},ge={},_e=[],L=null,ve=[],ye=!1,R=[],be=!1,xe=[],Se=[],z={};async function B(e){let t=await Ht(e);return{modeConfig:t,modeInclude:t.include?.length?q([...n.include??[],...t.include]):ce,modeExclude:t.exclude?.length?q([...n.exclude??[],...t.exclude]):le,pin:{...t.pin,...ue}}}function Ce(e,t){return n.types?.length?n.types:t?.types?.length?t.types:e===`npm`?Ne:e===`pypi`?Fe:e===`go`?n.indirect?Ie:Ie.filter(e=>e!==`indirect`):e===`cargo`?Le:[]}function we(e,t,n,r){O.docker??={};for(let i of n)for(let{ref:n}of gr(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=mr(n.tag);i&&(O.docker[e]={old:i.version,oldOrig:n.tag},Se.push({key:e,fullImage:n.fullImage,ref:n,filePin:r.pin}))}}async function V(e){let t=await Ht(e);return{include:t.include?.length?q([...n.include??[],...t.include]):ce,exclude:t.exclude?.length?q([...n.exclude??[],...t.exclude]):le,pin:t.pin??{}}}for(let e of me){if(ar(e)){let t=D.has(`actions`),n=D.has(`docker`);if(!t&&!n)continue;let r=I.get(e),i=pe(e),a=await V(o(e));if(he[i]={absPath:e,content:r},t){O.actions??={};let e=Array.from(r.matchAll(Zn),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},xe.push({...t,key:e,apiUrl:$n(t.host,d),filePin:a.pin}))}}n&&(ge[i]={absPath:e,content:r,fileType:`workflow`},we(r,i,[lr,ur,dr],a));continue}let t=a(e);if(Dr(t)){if(!D.has(`docker`))continue;let n=I.get(e),r=pe(e),i=Er(t)?`dockerfile`:`compose`,a=await V(o(e));ge[r]={absPath:e,content:n,fileType:i},we(n,r,[Or(t)],a);continue}let n=Ur[t];if(!D.has(n))continue;if(t===`go.work`){O[n]??={};let t=o(l(e)),r=I.get(e);L={file:e,content:r};let i=qn(r),[a,u]=await Promise.all([B(t),H(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=Ce(n,d);j[n]=e,z[n]={modeConfig:d,projectDir:t,pin:m};for(let e of u){if(!e)continue;let{usePath:t,modPath:r,content:i}=e,a=Vn(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)&&F(n,e,c,r,Xn(i),G(i))}}for(let[e,t]of Object.entries(i.replace))Q(e,n,f,p,`replace`)&&F(n,`replace`,``,e,Xn(t),G(t));P+=Object.keys(O[n]).length;continue}if(t===`go.mod`&&L||t===`package.json`&&be)continue;if(t===`Cargo.toml`){O[n]??={};let t=I.get(e),r=ee(t),i=o(l(e));j[n]=e;let a=Gr([`Cargo.lock`],i).get(`Cargo.lock`),s=r.workspace?.members,u=Array.isArray(s)&&s.length,[d,f,p]=await Promise.all([B(i),a?x(a,`utf8`):Promise.resolve(null),u?Vr(s,i,`Cargo.toml`,c):Promise.resolve([])]),{modeConfig:m,modeInclude:h,modeExclude:g,pin:_}=d,v=Ce(n,m);z[n]={modeConfig:m,projectDir:i,pin:_};let y=f?Mr(f):new Map,b=(e,t)=>{for(let r of v){let i=ze(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);Te(i)&&F(n,r,t,e,Fr(y,e,i)??Y(i),i)}else typeof a==`string`&&Te(a)&&F(n,r,t,e,Fr(y,e,a)??Y(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(ee(e.content),`|${e.memberPath}`)}catch(t){throw Error(`Error parsing ${e.absPath}: ${t.message}`)}}}else A[n]=t,b(r,``);P+=Object.keys(O[n]).length;continue}if(t===`pnpm-workspace.yaml`){O[n]??={};let t=o(l(e)),r=I.get(e);be=!0;let i=Hr(r),a=s(t,`package.json`),[u,d,f]=await Promise.all([B(t),x(a,`utf8`).catch(()=>null),Vr(i,t,`package.json`,c)]),{modeConfig:p,modeInclude:m,modeExclude:h,pin:g}=u,_=Ce(n,p);j[n]=e,z[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)&&F(n,r,t,e,Y(a),a)}else if(typeof i==`object`&&!Array.isArray(i))for(let[e,a]of Object.entries(i))Q(e,n,m,h,r)&&(mn(a)?F(n,r,t,e,gn(a,e).version,a):Te(a)?F(n,r,t,e,Y(a),a):hn(a)?F(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}`)}R.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}`)}R.push(e),v(t,`|${e.memberPath}`)}P+=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 B(r),m=Ce(n,i),h={};A[n]=I.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=Vn(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]||{}:ze(h,e)||{},Array.isArray(t)&&n===`pypi`)for(let{name:r,version:i}of Me(t))Q(r,n,u,f,e)&&F(n,e,``,r,Y(i),i);else if(typeof t==`string`){let[r,i]=t.split(`@`);Q(r,n,u,f,e)&&F(n,e,``,r,Y(i),i)}else for(let[r,i]of Object.entries(t))Q(r,n,u,f,e)&&(n===`npm`&&mn(i)?F(n,e,``,r,gn(i,r).version,i):n!==`go`&&Te(i)?F(n,e,``,r,Y(i),i):n===`npm`&&hn(i)?F(n,e,``,r,`0.0.0`,i):n===`npm`?k[`${e}${r}`]={old:i}:n===`go`&&F(n,e,``,r,Xn(i),G(i)))}P+=Object.keys(O[n]).length+Object.keys(k).length,z[n]={modeConfig:i,projectDir:r,pin:p}}if(O.actions&&(P+=Object.keys(O.actions).length),O.docker&&(P+=Object.keys(O.docker).length),P===0)return{results:{},message:`No dependencies found, nothing to do.`};let Ee=[],De={registry:n.registry};for(let e of Object.keys(z)){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}=z[e],s=n.cooldown??i.cooldown,l=s?We(String(s)):0;Ee.push((async()=>{let t=new Map,n=e=>{if(l)for(let[t,{date:n}]of Object.entries(e))n&&!W(n,l,M)&&delete e[t]};if(await H(Object.keys(O[e]),async n=>{let[r,s]=n.split(`\0`),c=Rr(r),u=O[e][n],d=null;if(e===`npm`){let{oldOrig:t}=u;if(t&&mn(t))d=await _n(s,c,w);else if(t&&hn(t))try{d=await fn(s,c,i,De,w)}catch{delete O[e][n];return}else d=await fn(s,c,i,De,w)}else d=e===`go`?await Un(s,c,u.oldOrig||u.old,a,w,_):e===`cargo`?await jr(s,c,w):await Cn(s,c,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[s],S=mt(f,{usePre:h,useRel:g,useGreatest:m,semvers:v,range:y,mode:e,pinnedRange:x,cooldownDays:l||void 0,now:l?M:void 0},{allowDowngrade:ie,matchesAny:Re,isGoPseudoVersion:Ln}),C=``;if([`go`,`pypi`].includes(e)&&S)C=S;else if(e===`cargo`&&S&&b)C=Pr(b,S);else if(S)if(b&&hn(b))C=String(en()[`save-exact`])===`true`?S:`^${S}`;else if(b&&mn(b)){let e=/^(npm:@jsr\/[^@]+@|jsr:@[^@]+@)(.+)$/.exec(b);e?C=`${e[1]}${S}`:b.startsWith(`jsr:`)&&(C=`jsr:${S}`)}else C=yn(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&&mn(b)&&(u.newPrint=S),e===`npm`?t.set(n,{name:s,promise:pn(f.name,S,i,De,w)}):e===`pypi`?u.info=jt(f,p,f.info.name):e===`go`?u.info=Jn(f.newPath||s):e===`cargo`&&(u.info=`https://crates.io/crates/${s}`),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=jt({repository:i.repository,homepage:i.homepage},null,n),i.date&&Z(a,i.date))})),e===`npm`&&Object.keys(k).length){let t=(await H(Object.entries(k),([e,t])=>Sn(e,t,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:wt.test(o)?o.substring(0,7):o,newPrint:wt.test(s)?s.substring(0,7):s,info:`https://github.com/${i}/${a}`},c&&Z(O[e][t],c)}}n(O[e])})())}if(xe.length&&Ee.push((async()=>{let e=new Map;for(let t of xe){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 H(e.values(),async({apiUrl:e,owner:t,repo:n,infos:r})=>{let i=await Dt(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=G(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 er(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=pt({},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(!N)return{version:n,tag:r,commitSha:i,date:``};let c=i?await d(i):``;if(W(c,N,M))return{version:n,tag:r,commitSha:i,date:c};t.add(n)}return null}await H(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=K(G(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,_=tr(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})()),Se.length&&Ee.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 H(e.entries(),async([e,t])=>{let n;try{let[t]=await vr(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=yr(n.tags,r,i,N||void 0,N?M:void 0,a);if(!o){delete O.docker[e.key];continue}t.new=o.newTag,t.info=kr(e.ref),Z(t,o.date)}},{concurrency:c}),Object.keys(O.docker).length||delete O.docker})()),await Promise.all(Ee),!qr(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=zr(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}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}=he[e]||{};if(!t)continue;let i=nr(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`?xr:a===`compose`?Sr:Cr)(i,t))}continue}let i=A[r];if(r===`go`&&L){for(let e of _e){let t=zr(O[r],e.usePath);if(!Object.keys(t).length)continue;let[n,i]=Gn(e.content,t);n!==e.content&&$(e.absPath,n),Kn(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]=Gn(L.content,e);t!==L.content&&$(L.file,t)}}else if(r===`go`){let[e,t]=Gn(i,O[r]);$(j[r],e),Kn(o(l(j[r])),t,$)}else if(r===`cargo`&&ye)e(r,ve,Lr);else if(r===`cargo`)$(j[r],Lr(i,O[r]));else if(r===`npm`&&be)e(r,R,vn);else{let e=r===`npm`?vn:wn;$(j[r],e(i,O[r]))}}}return Xr(O)}function $r(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(...wr)&&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 ei(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{
|
|
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)&<(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)&<(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)&<(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&>.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.
|
|
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.
|
|
42
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
43
|
-
"@vitest/coverage-v8": "4.1.
|
|
44
|
-
"eslint": "10.
|
|
45
|
-
"eslint-config-silverwind": "133.0.
|
|
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.
|
|
54
|
-
"vitest": "4.1.
|
|
53
|
+
"versions": "15.0.4",
|
|
54
|
+
"vitest": "4.1.7",
|
|
55
55
|
"vitest-config-silverwind": "11.3.5"
|
|
56
56
|
}
|
|
57
57
|
}
|