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